Я использую это в файле расширения, который выполняет мой скрипт 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");
?>
Других решений пока нет …