簡體   English   中英

星號服務器的phpagi腳本中的遞歸

[英]Recursion in phpagi script of asterisk server

我在執行我的phpagi腳本的擴展文件中使用它:

exten => s,n,Read(NUMBER,,4)
exten => s,n,agi(a.php,${CALLERID(num)},${NUMBER})

而這在我的phpagi腳本中:

#!/usr/bin/php -q 
<?php
require('phpagi.php');
$agi = new AGI();
$NUMBER = $argv[1];
$SSnNUMBER = $argv[2];
 ------Some Processing----------
$ttresult = $agi->get_data("beep",30000,4); 
$ttssn = $ttresult['result']; 
$agi->say_digits($ttssn); 
$agi->exec("AGI","a.php",$agi->request['agi_callerid'],"$ttssn");
?>

您可以看到我在phpagi腳本中使用遞歸,但是每次都失敗。 CLI腳本中有錯誤:-

AGI腳本a.php已完成,返回4

您無法在AGI中啟動AGI。

原因:AGI是簡單的stdin / stdout接口(閱讀文檔)

因此,首先將AGI連接到星號,從STDIN讀取信息,然后發送到STDOUT。

您如何期望其中的啟動腳本?

您可以只使用php exec系統調用,但是您需要注意AGI的初始化(已被腳本消耗)和將stdin / stdout發送到該進程(使用管道或其他方式)。

您還可以使用GOTO並為新腳本設置變量。

exten => s,n(repeat),agi(a.php,${CALLERID(num)},${NUMBER})
exten => s,n,GotoIF($[ "${REPEAT}" == "YES" ]?repeat)

將腳本更改為

#!/usr/bin/php -q 
<?php
require('phpagi.php');
$agi = new AGI();
$NUMBER = $argv[1];
$SSnNUMBER = $argv[2];
 ------Some Processing----------
$ttresult = $agi->get_data("beep",30000,4); 
$ttssn = $ttresult['result']; 
$agi->say_digits($ttssn); 
$agi->set_variable("NUMBER","$ttssn");
$agi->set_variable("REPEAT","YES");
?>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM