Asterisk. Интерфейс AGI. Функция GotoIf.
Asterisk Gateway Interface или сокращенно AGI – интерфейс взаимодействия с внешними скриптами. С помощью AGI можно получить информацию, которая не доступна напрямую из астериска. Вообще скрипты из Asterisk можно выполнять из функций System и через AGI. System выполняет скрипты без обратной связи, через AGI можно устанавливать переменные используемые далее в extensions.conf.
К примеру можно воспользоватся вызовом скрипта для определения типа дня недели. Подобная информация может понадлбится если вам нужно проигрывать один вид меню, а в выходные дни другой. Для определения дня недели воспользуемся таким скриптом:
#!/usr/bin/perl -w use Date::Calc qw(Day_of_Week Now Today); ($year,$month,$day) = Today(); $dow = Day_of_Week($year,$month,$day); if($dow eq 6 or $dow eq 7) { print "SET VARIABLE DOW WEEKEND\n"; } else { print "SET VARIABLE DOW WORKDAY\n"; }
Для работы скрипта понадобится Date::Calc – модуль перла для работы с датой и временем. Установить его можно из портов:
cd /usr/ports/devel/p5-Date-Calc make install clean
Теперь можно доработать меню, так что бы в будний день проигрывалась начитка welcome.wav, а в субботу и воскресенье была начитка weekend.wav.
Диалплан теперь будет выглядеть так:
[sip-dialout] exten => 444,1,Goto(menu,s,1) [menu] exten => s,1,Set(home="/home/menu") exten => s,2,AGI(${home}/bin/date.pl) exten => s,3,NoOp(" day ${DOW} ") exten => s,4,GotoIf( $["${DOW}" = "WEEKEND"]?8) exten => s,5,Playback(${home}/welcome) exten => s,6,NoOp(WEEKEND) exten => s,7,Goto(s,10) exten => s,8,Playback(${home}/weekend) exten => s,9,NoOp( WEEKEND ) exten => s,10,WaitExten() exten => 1,1,Playback(${home}/tariff) exten => 1,2,Goto(s,1) exten => 2,1,Dial(SIP/operator) exten => t,1,Playback(make_choice) exten => t,2,Goto(s,1) exten => i,1,Playback(wrong_choice) exten => i,2,Goto(s,1)
В нашем примере появилась новая функция GotoIf, функция условного перехода. Мы проверяем какой тип дня недели и в случае выходного дня, осуществляется переход на соответсвующую метку меню. Таким образом в случае выходного дня, мы переходим на начитку weekend.wav и пропускаем welcome.wav.
Функцию GotoIf можно применять не только с AGI, но и для переходов по проверке любых переменных установленных в extensions.



