Простой пример agi

Краеугольным камнем Asterisk является понятие диалплана (dialplan). Диалплан по сути набор инструкций для управления коммутацией соединения. Помимо того, что сам набор команд диалплана довольно разнообразен, Asterisk предоставляет уникальную возможность управлять всеми своими функциями любой программой. Программные интерфейсы Asterisk AGI,AMI,ARI достаточно просты в использовании и именно поэтому появилось много реализаций этих интерфейсов в разных языках программирования: Java, Perl, PHP, C, C#, Python, Ruby.

Возьмем например предприятие где существует проблема частых звонков клиентов беспокоящихся о своем заказе. Предположим, что существует табличка (телефонный номер клиента, статус заказа). С помощью Asterisk можно решить данную проблему в несколько строк. Звонок от клиента попадает в диалплан Asterisk в контекст clients:

[clients]

;Вызваем php скрипт check_status.php  с аргументом номер клиента.
exten => s,n,AGI(check_status.php, ${CALLERID(number)})
 
<?php
//check_status.php скрипт для автоматического ответа по статусу заказа
//Подключаемся к базе данных (причем, можно отметить, что php имеет в своем наборе интерфейсы
//практически  ко всем типам баз данных которые только существуют)
$conn = mysql_connect("localhost", "mysql_user", "mysql_password");
mysql_select_db("clients");
 
//Делаем выборку по номеру клиента
$sql = "SELECT status
        FROM   clients
        WHERE  client_number = ".$argv[1];
$result = mysql_query($sql);
$row = mysql_fetch_assoc($result);
 
// Получили статус предположим что они бывают Ready и Please_Wait
$status=$row["status"];
mysql_free_result($result);
 
//Подключаем класс для работы с Asterisk
require('phpagi.php');
$agi = new AGI();
 
//Отвечаем на вызов клиента
$agi->answer();
 
// Проигрываем заранее заготовленные файлы Ready или Please_Wait /var/lib/asterisk/sounds
$agi->stream_file($status);
$agi->hangup();
?> 

Достаточно просто не правда ли? Конечно, пример лишь демонстрация того как просто и логично можно решить типовую задачу предприятия и не претендует на рабочий инструмент (не обрабатывает ошибки и пр.), однако, вполне жизнеспособен.