Авг 23 2009

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.

Добавить в закладки:

google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru

Украинская Баннерная Сеть