[Asterisk-Users] PHP/AGI Problem
Benjamin West
bewest at gmail.com
Wed May 25 13:14:27 MST 2005
I should have mentioned in my example, it will still loop forever.
You'll have to insert a step before priority 2 (or in the script) that
tests if the line is still up
If it is, you skip over the agi call and proceed to hangup.
On 5/25/05, Benjamin West <bewest at gmail.com> wrote:
> First of all, I don't see where $y is initialised or used except in
> the test condition of the while loop. That's probably your problem.
>
> Why not move the logic of the top loop into the dialplan?
>
> exten => s, 1, Answer
> exten => s, 2, AGI(script)
> exten => s, 3, Hangup()
> exten => h, 4, DeadAGI(cleanup)
>
> then in your default case in your script send "SET PRIORITY 2" to *.
>
> On 5/25/05, Jon Farmer <viperdude_uk at yahoo.co.uk> wrote:
> > Moises Silva wrote:
> >
> > >could you post the script, the output of the script in the asterisk
> > >console and which asterisk version are you working with?
> > >
> > >
> > >
> > See below
> >
> > This is just a proof of concept script so its a bit basic...
> >
> >
> > #!/usr/bin/php -q
> > <?php
> > set_time_limit(30);
> > require "phpagi.php";
> > error_reporting(0);
> > $agi = new AGI();
> > $agi->agi_exec("ANSWER");
> > while($y != 1){
> > $response = "";
> > $agi->agi_exec("STREAM FILE
> > /usr/share/asterisk/sounds/adsl/enter_ref #");
> > $res = getDTMF("#",7);
> > $agi->agi_exec("STREAM FILE
> > /usr/share/asterisk/sounds/adsl/you_entered #");
> > $response .= trim($res);
> > sayNumber($response);
> > switch($response) {
> >
> > case "12345":
> > $agi->agi_exec("STREAM FILE
> > /usr/share/asterisk/sounds/adsl/adsl_username_is #");
> > $username = "JONFARMER";
> > $userarray = myStringSplit(strtolower($username),1);
> > $usercount = count($userarray);
> > for($i=0;$i<$usercount;$i++){
> > $agi->agi_exec("STREAM FILE
> > /usr/share/asterisk/sounds/letters/" . $userarray[$i] . " #");
> > }
> > $agi->agi_exec("STREAM FILE
> > /usr/share/asterisk/sounds/adsl/domain1t #");
> > break;
> >
> > case "67891":
> > $agi->agi_exec("STREAM FILE
> > /usr/share/asterisk/sounds/adsl/adsl_username_is #");
> > $username = "test_user";
> > $userarray = myStringSplit(strtolower($username),1);
> > $usercount = count($userarray);
> > for($i=0;$i<$usercount;$i++){
> > $agi->agi_exec("STREAM FILE
> > /usr/share/asterisk/sounds/letters/" . $userarray[$i] . " #");
> > }
> > $agi->agi_exec("STREAM FILE
> > /usr/share/asterisk/sounds/adsl/domain2 #");
> > break;
> >
> > case "00":
> > $agi->agi_exec("STREAM FILE thanks #");
> > exit();
> > break;
> >
> > default:
> > $agi->agi_exec("STREAM FILE
> > /usr/share/asterisk/sounds/adsl/account_not_found #");
> > break;
> >
> > }
> > }
> > $agi->agi_exec("STREAM FILE thanks #");
> > unlink("/tmp/*.wav");
> >
> >
> > function sayNumber($digit) {
> > global $agi;
> > $res = myStringSplit($digit,1);
> > $num = count($res);
> > for($x=0;$x<$num;$x++) {
> > $agi->agi_exec("STREAM FILE /usr/share/asterisk/sounds/digits/"
> > . $res[$x] ." #");
> > }
> > sleep(1);
> > }
> >
> > function myStringSplit($string, $long){
> >
> > $long--;
> > // Converting the string into an array
> > For( $i=0; isset($string{$i}); $i++){
> > $myarray[] = $string{$i};
> > }
> >
> > // Making arrays from the array
> > $a=0;
> > $end = $long;
> > $iend = count($myarray) / ( $long + 1 );
> > For( $i=0; $i<$iend; $i++){
> >
> > For( ; $a<=$end; $a++){
> >
> > $array[$i] = $array[$i].$myarray[$a];
> > }
> > $end = $end + $long + 1;
> > }
> >
> > return $array;
> > }
> >
> >
> > function getDTMF($term, $i) {
> > global $agi;
> > for($x=1;$x<$i;$x++) {
> > unset($res);
> > $res = $agi->agi_getdtmf(1,10000,$term,$prompt=FALSE);
> > $agi->conlog("Res: " . $res[0]);
> > if($res[0] == "") {
> > break;
> > }
> > if($res[0] != "") {
> > $result1 .= $res[0];
> > //$agi->conlog("Result var: " . $result1);
> > }
> > $agi->conlog("Result var: " . $result1);
> > $agi->conlog("Channel: " . $agi->request["agi_channel"]);
> > $status = $agi->agi_channel_status($agi->request["agi_channel"]);
> > $agi->conlog("Status code: " . $status["status"]);
> > $agi->conlog("Description: " . $status["description"]);
> > if($status["description"] != "Line is up") {
> > exit();
> > }
> > }
> > return $result1;
> > }
> > ?>
> >
> >
> > _______________________________________________
> > Asterisk-Users mailing list
> > Asterisk-Users at lists.digium.com
> > http://lists.digium.com/mailman/listinfo/asterisk-users
> > To UNSUBSCRIBE or update options visit:
> > http://lists.digium.com/mailman/listinfo/asterisk-users
> >
>
More information about the asterisk-users
mailing list