Как стать автором
Обновить

Разбираясь с AGI для Asterisk

Позволю себе вписать сюда определение AGI, взятого с voip.rus.net.

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);
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.