[Freeswitch-users] Dialplan/PHP esl variable problem.

Alex Crow acrow at integrafin.co.uk
Sun Apr 1 20:29:51 MSD 2012


On 01/04/12 11:26, Peter Olsson wrote:
> In your sample you're actually queuing "sleep(1000)" to the channel. So first it will queue play_and_get_digits, inside that loop it will find more commands in the queue, and exeute them, so in the end it will only execute a bunch of "sleep(1000)".
>
> You're better of using a sleep in your module directly (not tell FS to sleep). Also you will need to poll the events in the loop somehow., checkout the perl sample here: http://wiki.freeswitch.org/wiki/Esl#Simple_Perl_Example

Peter,

I've changed to the below (adapted that Perl example) and I only hear 
the prompt for digits when the webserver times out after 60 seconds. Any 
time I make any call to ESL after the execute, I don't hear the prompt 
in a timely fashion. This is so complicated as I'm not really that good 
at software development, I'm more a systems/networks guy. I feel like a 
total thickie here, but the docs don't seem to explain in which order I 
should call things and expect to get replies, etc.

$esl = new ESLconnection('localhost','8021','ClueCon');

$event = $esl->events('plain', 'ALL');
//$event = $esl->filter("Unique-ID",$uuid);

sleep (1);

$res = $esl->execute("play_and_get_digits","4 11 1 5000 # 
ivr/ivr-please_enter_the_phone_number.wav 
ivr/ivr-that_was_an_invalid_entry.wav target_num \d+", "$uuid");

$job_uuid = $res->getHeader("Job-UUID");
$status = $res->getHeader("Reply-Text");



//$foo = $uuid . ' target_num';

echo $status;

$stay_connected = 1;
while ( $stay_connected ) {
     $e = $esl->recvEventTimed(0);
     if ( $e ) {
         $ev_name = $e->getHeader("Event-Name");
         # Should we check for the $job_uuid to match the background job ?
         //if ( $ev_name == 'BACKGROUND_JOB' ) {
         //    if ( $e->getHeader("Job-UUID") == $uuid ) {
         //        $call_result = $e->getBody();
         //        echo "Result of call to $target was $call_result\n\n";
         //    }
         //} else
         echo $ev_name;
         if ( $ev_name == 'EXECUTE_COMPLETE' ) {
             //my $digit = $e->getHeader("DTMF-Digit");
            // print "Received DTMF digit: $digit\n";
             //if ( $digit =~ m/\D/ ) {a
              //   print "Exiting...\n";
                 //if ( $e->getHeader("Job-UUID") == $job_uuid ) {
                 $stay_connected = 0;
                 //}
             //}
         } else {
       # Some other event
         }
     } else {
     # do other things while waiting for events
         //sleep (1);
     }
}

$event=$esl->sendRecv("api uuid_getvar $uuid target_num");


$ret = $event->getBody();

$esl->disconnect();

Apologies for my newbishness and many thanks for your help so far.

Hoping for an epiphany when I sudddenly understand what I am doing!

Alex



Join us at ClueCon 2011 Aug 9-11, 2011
More information about the FreeSWITCH-users mailing list