Позволю себе вписать сюда определение AGI, взятого с voip.rus.net.
AGI — это встроенный в Asterisk метод выполнения внешних скриптов (по аналогии с CGI для http серверов), который может расширить функциональность asterisk при помощи других языков программирования. Таких, как: Perl, PHP, C, Pascal, Bourne Shell — все зависит от Вашего желания и умения.
Разбирался на днях с PHP — AGI, для себя понял что это очень мощный инструмент.
сама библиотека phpagi тут(в исправленном мною варианте), в чем состоит само исправление, напишу ниже.
Первое что пришло на ум это рулетка. Тоесть поступает звонок и система отправляет его на произвольный телефон из списка.
Реальзовалось очень просто:
в файлик counter.txt пишется на какой номер откуда и во сколько скрипт перебросил клиента(попросили сами менеджеры собирать для них данный файлик).
Следующий пример который хотелось бы привести, это научить астериску разговаривать. Для этого есть функция text2wave. PHP-AGI умеет работать с Festival(система перевода текста в речь). Но в PHP-AGI реализована возможность только английской речи. поэтому пришлось вызов фестиваля переписать с английской речи на русскую. Переписыванию подверглась 1351 строка, а конкретно
shell_exec("{$this->config['festival']['text2wave']} -eval '(voice_msu_ru_nsh_clunits)' -F $frequency -o $fname.wav $fname.txt ");
Для того чтобы заставить сам фестиваль разговаривать по русски, есть в Debian пакетик festvox-ru. Установку festival приводить не буду.
Ну и сам пример реализации такой функции, с распознаванием звонящего.
Ну и самое главное, сами скриптики складываются в папочку(на примере Debian) /var/lib/asterisk/agi-bin
Вызов происходит следующим образом:
exten => t,n,AGI(ruletka.php);
AGI — это встроенный в Asterisk метод выполнения внешних скриптов (по аналогии с CGI для http серверов), который может расширить функциональность asterisk при помощи других языков программирования. Таких, как: Perl, PHP, C, Pascal, Bourne Shell — все зависит от Вашего желания и умения.
Разбирался на днях с PHP — AGI, для себя понял что это очень мощный инструмент.
сама библиотека phpagi тут(в исправленном мною варианте), в чем состоит само исправление, напишу ниже.
Первое что пришло на ум это рулетка. Тоесть поступает звонок и система отправляет его на произвольный телефон из списка.
Реальзовалось очень просто:
#!/usr/bin/php -q <?php 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++) // цикл позволяет сыграть с рулетку 2 раза или сколь угодно много если трубку не берут. { $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 реализована возможность только английской речи. поэтому пришлось вызов фестиваля переписать с английской речи на русскую. Переписыванию подверглась 1351 строка, а конкретно
shell_exec("{$this->config['festival']['text2wave']} -eval '(voice_msu_ru_nsh_clunits)' -F $frequency -o $fname.wav $fname.txt ");
Для того чтобы заставить сам фестиваль разговаривать по русски, есть в Debian пакетик festvox-ru. Установку festival приводить не буду.
Ну и сам пример реализации такой функции, с распознаванием звонящего.
#!/usr/bin/php -q <?php set_time_limit(0); require('phpagi.php'); $agi = new AGI(); $cid = $agi->request['agi_callerid']; // записываем в переменную номер звонящего if ($cid==8312222222) { $agi->text2wav("Привет, кто-нибудь."); $agi->hangup(); } ?>
Ну и самое главное, сами скриптики складываются в папочку(на примере Debian) /var/lib/asterisk/agi-bin
Вызов происходит следующим образом:
exten => t,n,AGI(ruletka.php);