Читаем Asterisk™: будущее телефонии Второе издание полностью

Чтобы сценарий AGI работал правильно, он должен быть исполняемым файлом. Для использования сценария AGI в диалплане просто вызывается приложение AGI с указанием имени сценария AGI в качестве аргумента:

exten => 123,1,Answer exten => 123,2,AGI(agi-test.agi)

Сценарии AGI часто располагаются в папке AGI (которая обычно находится в папке /var/lib/asterisk/agi-bin), но можно указать и полный путь к сценарию AGI.

В этой главе сначала мы рассмотрим сценарий agi-test.agi, поставляемый с Asterisk (который написан на Perl), затем напишем AGI-про- грамму на PHP для получения сводки погоды и напоследок создадим математическую игру в виде AGI-программы на Python.

AGI, EAGI, DeadAGI и FastAGI

Кроме приложения AGI, существует еще несколько AGI-при- ложений, подходящих для разных ситуаций. Хотя они не будут рассмотрены в данной главе, поняв азы работы со сценариями AGI, разобраться с ними будет довольно просто.

Приложение EAGI (улучшенный AGI) ведет себя так же, как и AGI, но обеспечивает возможность сценарию AGI читать входящий аудиопоток в описатель файла номер три.

Приложение DeadAGI также очень похоже на AGI, но выполняется корректно для «мертвого» канала (то есть канала, который был отключен). Отсюда следует, что обычное приложение AGI не работает для отключенных каналов.

Приложение FastAGI позволяет вызывать сценарий AGI по сети, таким образом, множество серверов Asterisk могут использовать сценарии AGI, хранящиеся централизованно.

Написание сценариев AGI на Perl

Asterisk поставляется с образцом сценария AGI под названием agi-test. agi. На примере этого файла рассмотрим основные концепции программирования AGI. Этот конкретный сценарий написан на Perl, но AGI- программы могут быть реализованы практически на любом языке программирования. Чтобы доказать это, в данной главе будут представлены AGI-программы на нескольких других языках программирования. Итак, приступим! Будем рассматривать каждый раздел кода по очереди и описывать, что он делает: #!/usr/bin/perl

Эта строка сообщает системе, что данный сценарий написан на Perl, таким образом, для его выполнения должен использоваться интерпретатор Perl. Опытным создателям сценариев для Linux или UNIX эта строка должна быть хорошо знакома. Конечно, здесь предполагается, что исполняемый файл Perl располагается в папке /usr/bin/. Если необходимо, измените строку соответственно местоположению своего интерпретатора Perl. use strict;

Строка use strict указывает Perl строго придерживаться правил программирования и не допускать возможных ошибок при написании программы, таких как, например, необъявленные переменные. Хотя она не является обязательной, но активация этой функциональности поможет избежать обычных ошибок при программировании. $|=1;

Данная строка указывает интерпретатору Perl не буферизировать вывод. Иначе говоря, любые данные должны записываться немедленно, а не накапливаться и выводиться блоками. К этому вопросу мы будем многократно возвращаться по ходу главы.

# Задаем некоторые переменные

my %AGI; my $tests = 0; my $fail = 0; my $pass = 0;

При написании сценариев AGI должен использоваться только небуферизированный вывод. В противном случае AGI может работать не так, как от него требуется. Например, Asterisk может ожидать вывода программы, тогда как программа полагает, что уже отправила вывод в Asterisk, и ожидает ответа.

Здесь задаются четыре переменные. Первая - это хеш AGI, который используется для хранения переменных, передаваемых Asterisk в наш сценарий в начале сеанса AGI. Следующие три - это скалярные значения, используемые для подсчета общего количества тестов, количества непройденных тестов и количества пройденных тестов соответственно:

while() { chomp;

last unless length($_);

if (/~agi_(\w+)\:\s+(.*)$/) {

$AGI{$1} = $2;

}

i

Как говорилось ранее, Asterisk передает группу переменных в программу AGI при запуске. Этот цикл просто принимает все эти переменные и сохраняет их в хеше AGI. Позже они могут использоваться в программе или просто игнорироваться, но они обязательно должны быть прочитаны из STDIN, прежде чем будет продолжено выполнение логики программы.

print STDERR "AGI Environment Dump:\n";

foreach my $i (sort keys %AGI) {

print STDERR " -- $i = $AGI{$i}\n";

}

Данный цикл просто записывает каждое из значений, сохраненных в хеше AGI, в STDERR. Это полезно для отладки сценария AGI, поскольку STDERR выводится в консоли Asterisk[100].

sub checkresult { my ($res) = my $retval;

$tests++;

chomp $res;

if ($res =~ /"200/) {

$res =~ /result=(-?\d+)/; if (!length($1)) {

print STDERR "FAIL ($res)\n"; $fail++; } else {

print STDERR "PASS ($1)\n"; $pass++;

}

} else {

print STDERR "FAIL (unexpected result '$res')\n"; $fail++;

}

Эта подпрограмма считывает результат выполнения команды AGI из Asterisk и декодирует его, чтобы выяснить, была ли команда выполнена успешно или дала сбой.

Теперь, когда подготовительные этапы пройдены, можно перейти к основной логике сценария AGI:

Перейти на страницу:

Похожие книги

Основы программирования в Linux
Основы программирования в Linux

В четвертом издании популярного руководства даны основы программирования в операционной системе Linux. Рассмотрены: использование библиотек C/C++ и стан­дартных средств разработки, организация системных вызовов, файловый ввод/вывод, взаимодействие процессов, программирование средствами командной оболочки, создание графических пользовательских интерфейсов с помощью инструментальных средств GTK+ или Qt, применение сокетов и др. Описана компиляция программ, их компоновка c библиотеками и работа с терминальным вводом/выводом. Даны приемы написания приложений в средах GNOME® и KDE®, хранения данных с использованием СУБД MySQL® и отладки программ. Книга хорошо структурирована, что делает обучение легким и быстрым. Для начинающих Linux-программистов

Нейл Мэтью , Ричард Стоунс , Татьяна Коротяева

ОС и Сети / Программирование / Книги по IT
1001 совет по обустройству компьютера
1001 совет по обустройству компьютера

В книге собраны и обобщены советы по решению различных проблем, которые рано или поздно возникают при эксплуатации как экономичных нетбуков, так и современных настольных моделей. Все приведенные рецепты опробованы на практике и разбиты по темам: аппаратные средства персональных компьютеров, компьютерные сети и подключение к Интернету, установка, настройка и ремонт ОС Windows, работа в Интернете, защита от вирусов. Рассмотрены не только готовые решения внезапно возникающих проблем, но и ответы на многие вопросы, которые возникают еще до покупки компьютера. Приведен необходимый минимум технических сведений, позволяющий принять осознанное решение.Компакт-диск прилагается только к печатному изданию книги.

Юрий Всеволодович Ревич

Программирование, программы, базы данных / Интернет / Компьютерное «железо» / ОС и Сети / Программное обеспечение / Книги по IT
Access 2002: Самоучитель
Access 2002: Самоучитель

В книге рассматривается широкий круг вопросов, связанных с использованием программной среды Access 2002, которая является составной частью пакета Office 2002 и предназначена для создания банка данных в самых различных предметных областях.Подробно описывается методика проектирования объектов базы данных (таблицы, формы, отчеты, страницы доступа к данным, запросы, модули).Детально обсуждаются вопросы создания интегрированной базы данных в единой среде Access 2002: формирование БД с нуля, конвертирование в программную среду баз данных, созданных в ином программном окружении – Clarion, FoxPro.Особое внимание уделяется формированию разнообразных запросов к интегрированной базе данных Access 2002 с использованием языков программирования SQL, VBA и макросов.Приводятся общие сведения о возможностях языка обмена данными между различными компьютерами и приложениями (XML). Описываются возможности использования гиперссылок, связывающих базу данных с другими программными продуктами. Объясняется, как можно работать с базой данных Access 2002 без установки ее на компьютер, используя технологию ODBC (Open Data Base Connectivity). В приложениях приводятся количественные параметры Access 2002 и связанная с этой СУБД терминология.Предлагаемая книга будет полезна специалистам, занимающимся практической разработкой банков данных и приложений на их основе, а также студентам вузов, изучающим информатику.

Павел Юрьевич Дубнов

Программирование, программы, базы данных / ОС и Сети / Книги по IT