Hi! I'm new user to freeswitch.I write a c program to dial and play a wav file. I want to know hangup-cause.But it does not work.The Event-Name i got is "SOCKET_DATA" not "CHANNEL_HANGUP". Can you help me to fix it and get hangup-cause?
Then i will dial lot of number but only on work time (9:00-11:00,14:00-17:00).So I want to use crontab to send custom event to crotrol dial start or stop.So how to send and receive custom event ?
Beside the crotab and custom event,any other better idea to control when to start or stop ?
Thanks!
#include <stdio.h>
#include <stdlib.h>
#include <esl.h>
int main(void)
{
esl_handle_t handle = {{0}};
esl_status_t status1,status2,status3;
int done = 0;
esl_status_t status;
time_t exp = 0;
//esl_global_set_default_logger(7);
status1 = esl_connect(&handle, "localhost", 8021, NULL, "ClueCon");
esl_events(&handle, ESL_EVENT_TYPE_PLAIN, "CHANNEL_ANSWER CHANNEL_ORIGINATE CHANNEL_HANGUP");
status2 = esl_send_recv(&handle, "api originate user/1001 &playback(/tmp/a.wav)\n\n");
if (handle.last_sr_event && handle.last_sr_event->body) {
printf("Sucess --- %s\n", handle.last_sr_event->body);
} else {
// this is unlikely to happen with api or bgapi (which is hardcoded above) but prefix but may be true for other commands
printf("Fail --- %s\n", handle.last_sr_reply);
}
while((status = esl_recv_event(&handle, 1,NULL)) != ESL_FAIL)
{
if (status == ESL_SUCCESS)
{
char *type = esl_event_get_header(handle.last_event, "content-type");
printf("--- %s\n", type);
printf("--- %s\n",esl_event_get_header(handle.last_event, "Event-Name"));
//next to get Hangup-Cause from Event-Name:CHANNEL_HANGUP
}
}
esl_disconnect(&handle);
return 0;
}
[freeswitch@fs ~]$ ./test
Sucess --- +OK 3fe60603-0ed4-4a6d-9322-dd906433b3cc
--- text/event-plain
--- SOCKET_DATA
--- text/event-plain
--- SOCKET_DATA
--- text/event-plain
--- SOCKET_DATA
--- text/event-plain
--- SOCKET_DATA