Shahzad, I think you may have taken an unnecessarily complicated approach to this. If I were you I would simply use the play_and_get_digits application which does all the work for you. I would also handle that in the XML dialplan and then use the api_hangup_hook to call your script to process the result. (I.e. did the user press 1 or 2 or something else...) I recommend you start with something simple like a basic originate command that calls the user and then drops that call to a dialplan extension: originate user/1500 meeting_request_1500 Then create that extension: <extension name="meeting request"> <condition field="destination_number" expression="^meeting_request_( \d+)$"> <action application="set" data="target_user=$1"/> <action application="set" data="text=cepstral|callie|Hi, we have a meeting on Monday at 9, are you joining us, if yes then press, 1. and if not press, 2."/> <action application="answer"/> <action application="sleep" data="1000"/> <action application="play_and_get_digits" data="1 1 3 5000 # speak:${text} ivr/ivr-that_was_an_invalid_entry.wav answer \d"/> <action application="set" data="api_hangup_hook=system handler.php ${target_user} ${answer}"/> <action application="log" data="INFO User ${target_user} responded with ${answer}"/> <action application="playback" data="ivr/ivr-Thank_you.wav"/> <action application="hangup"/> </condition> </extension> Then you just need to write your handler.php script (or whatever you want to call it) and have it parse the command line args - the first one is the user and the second one is the digit pressed. PHP scripts will work for hangup hooks but they aren't the best choice since there isn't a "mod_php" like there is a mod_lua or mod_perl. Those modules let you do cool things like "session_in_hangup_hook." However, what you're doing doesn't look like it's very difficult so the example I've given should get you going. Please note that I just did this off the top of my head w/o testing it so be sure double-check everything if you run into any unusual or unexpected behavior. Keep in mind that in this example you will need two different PHP scripts - one that actually initiates the ESL connection and does the originate and one that handles the call results. Instead of one semi-complicated script you will have two very easy scripts. Hope this helps... -MC On Fri, Mar 2, 2012 at 4:14 AM, Shahzad Bhatti <shahzad.bhatti@g-r-v.com>wrote:
Hi,
i park the call and then execute the speak command as but execute is not working any idea ?
$cmd = "api originate {origination_uuid=$uuid}user/$user &park()"; $text = "Hi, we have a meeting on Monday at 9, are you joining us, if yes then press, 1. and if not press, 2.";
$e = $esl->sendRecv($cmd); $esl->execute('speak',"(cepstral|callie|$text)",$uuid);
my complete code is
<?php
require_once('ESL.php');
$host_name = 'localhost'; $port = '8021'; $password = 'ClueCon';
$esl = new ESLconnection($host_name,$port,$password);
$e = $esl->sendRecv("api create_uuid"); $uuid = $e->getBody(); $user = '1500';
$cmd = "bgapi originate {origination_uuid=$uuid}user/$user &park()"; $text = "Hi, we have a meeting on Monday at 9, are you joining us, if yes then press, 1. and if not press, 2.";
$e = $esl->sendRecv($cmd); $esl->execute('speak',"(cepstral|callie|$text)",$uuid);
$e = $esl->sendRecv("events plain all"); $e = $esl->filter("Unique-ID",$uuid);
while ($esl->connected()) { $e = $esl->recvEvent(); $result = $e->getType(); if($result=='CHANNEL_EXECUTE_COMPLETE') { // what i do here...! $esl->execute("&sleep",10000); } $digit = $e->getHeader("DTMF-Digit"); $state_no = $e->getHeader("Channel-State-Number"); $curr_uuid = $e->getHeader("Channel-Call-UUID");
/* $ans_state = $e->getHeader("Answer-State"); $state_no = $e->getHeader("Channel-State-Number"); $core_id = $e->getHeader("Core-UUID"); */ if($curr_uuid==$uuid && $digit!=NULL) { print "input number is " . $digit . "\n"; } $state = $e->getHeader("Channel-Call-State"); if ($state == 'HANGUP') { print "\n\nHangup Cause Number: " . $state_no; $esl->disconnect(); } }
?>
Regards
Shahzad Bhatti
---------- Forwarded message ---------- From: Peter Olsson <peter.olsson@visionutveckling.se> To: FreeSWITCH Users Help <freeswitch-users@lists.freeswitch.org> Cc: Date: Fri, 2 Mar 2012 05:31:35 +0000 Subject: Re: [Freeswitch-users] Use of ESL and PHP for Call You should pass the originate command to &park() instead.
Right now you originate the call and then execute the application speak. After this (when speak is finished) FS has no more instructions so it will hangup the call.
If you execute &park() instead, the call will be "parked" and wait for furter instructions. Then you will also need to execute the speak from ESL instead - and afther that you continue to do whatever you want to do with the call.
/Peter
_________________________________________________________________________ Professional FreeSWITCH Consulting Services: consulting@freeswitch.org http://www.freeswitchsolutions.com
FreeSWITCH-powered IP PBX: The CudaTel Communication Server http://www.cudatel.com
Official FreeSWITCH Sites http://www.freeswitch.org http://wiki.freeswitch.org http://www.cluecon.com
FreeSWITCH-users mailing list FreeSWITCH-users@lists.freeswitch.org http://lists.freeswitch.org/mailman/listinfo/freeswitch-users UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users http://www.freeswitch.org