Спасибо! Теперь все ясно :), решение проблемы запостил в основную тему
boffart ( 2012-09-18 15:54:05 +0400 )редактироватьДоброго дня Прошу помочь разобраться с принципами работы AGI:
Тестовый стенд: Asterisk 1.8.4.4 built (Askozia) PHP 4.4.9
Логика приложения: Вызываем команду AMI Originate, задаем переменные канала v1,v2,v3,v4 (через соответствующий параметр команды)
Диалплан, вызывающий скрипт
exten => 1,Answer()
exten => n,NoCDR()
exten => n,AGI(DIALPLAN-APPLICATION-851764435505755eb65e5d.php})
exten => n,Hangup()
Необходимо получить переменные канала в скрипте.
Как я понимаю есть возможность передать переменные при вызове самого скрипта
exten => 00555,n,AGI(test.php,${v1},${v2},${v3},${v4})
и далее с ними работать следующим образом
$chan = $argv[1];
$date1 = $argv[2];
$date2 = $argv[3];
$numbers = explode("-",$argv[4]);
но этот вариант не подходит для askozia при добавлении приложения она автоматически формирует диалплан и параметры для скрипта передать не пытается.
согласно документации по AGI (PHP) пытался использовать команду get_variable
<?php
$agi = new AGI();
$v1 = $agi->get_variable("v1");
?>
но в переменную $v1 возвращается массив, что мне и не понятно.
Вопрос: как получить значение переменной канала из agi скрипта, возможно ли? нет желания лепить костыли, писать свой диалплан, хочется использовать типовые механизмы.
Решение: Спасибо за совет посмотреть доку :)
теперь все ясно :) в дистрибутиве askozia старая версия PHP AGI
phpagi.php,v 2.14 2005/05/25 20:30:46
это и было основной моей ошибкой, я смотрел доку по
phpagi.php,v 2.20 2010/09/30 02:21:00
метод get_variable в старой версии не имеет второго параметра и всегда возвращает массив
в итоге для моего случая скрипт должен выглядеть следующим образом
<?php
require('phpagi.php');
$agi = new AGI();
$v1= $agi->get_variable('v1');
if(!$v1['result'] == 0)
$agi->verbose('v1 --->'.$v1['data'], 10);
else{
$agi->verbose('v1 not set', 10);
}
?>
прочитать доку на phpagi
и включить 'agi set debug on' чтоб посмотреть что в скрипт отдают то что должны.
Спасибо! Теперь все ясно :), решение проблемы запостил в основную тему
boffart ( 2012-09-18 15:54:05 +0400 )редактироватьЗадан: 2012-09-18 10:22:28 +0400
Просмотрен: 2,793 раз
Обновлен: Sep 18 '12
Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании
Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией
GNU GPL.