Разбираясь с AGI для Asterisk
AGI — это встроенный в Asterisk метод выполнения внешних скриптов (по аналогии с CGI для http серверов), который может расширить функциональность asterisk при помощи других языков программирования. Таких, как: Perl, PHP, C, Pascal, Bourne Shell — все зависит от Вашего желания и умения.
Разбирался на днях с PHP — AGI забавная скажу вам штукенция.
сама библиотека phpagi тут(в исправленном мною варианте), в чем состоит само исправление, напишу ниже.
Первое что пришло на ум это рулетка. Тоесть поступает звонок и система отправляет его на произвольный телефон из списка.
Реальзовалось очень просто:
set_time_limit(0); require('phpagi.php'); # специальная библиотека для удобства работы с AGI $numbers = array(103, 109, 106, 111, 108, 102, 103); # массив с номерами shuffle($numbers); # тщательно перемешиваем $agi = new AGI(); $number=$numbers[1]; $cid = $agi->request['agi_callerid']; for ($i=0;$i<=1;$i++) { $rand_keys = array_rand($numbers); $num=$numbers[$rand_keys]; # ну и для пущщей уверенности достаем произвольный элемент нашего перемешанного массива. //----------------------------------------------------- $date_today = date("m.d.y"); //присвоено 03.12.01 $today = date("H:i:s"); //присвоит элементу 17:16:17 $fp = fopen("/var/lib/asterisk/agi-bin/counter.txt", "a"); // Открываем файл в режиме записи $mytext = $date_today.";".$today.";".$cid.";".$num."rn"; // Исходная строка fwrite($fp, $mytext); // Запись в файл fclose($fp); //Закрытие файла //----------------------------------------------------- $agi->exec_dial("SIP","$num","5,Tt"); # ну и собственно звонок произвольному манагеру }
в файлик counter.txt пишется на какой номер откуда и во сколько скрипт перебросил клиента.
Следующий пример который хотелось бы привести, это научить астериску разговаривать. Для этого есть функция text2wave. PHP-AGI умеет работать с Festival(система перевода текста в речь). Но в PHP-AGI реализована возможность только английской речи. поэтому пришлось вызов фестиваля переписать с английской речи на русскую. Для того чтобы заставить сам фестиваль разговаривать по русски, есть в Debian пакетик festvox-ru.
Ну и сам пример реализации такой функции, с распознаванием звонящего.
#!/usr/bin/php -q set_time_limit(0); require('phpagi.php'); $agi = new AGI(); $cid = $agi->request['agi_callerid']; if ($cid==8312332369) { $agi->text2wav("Привет, Егор."); $agi->hangup(); }