Pull to refresh

Разбираясь с 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);
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.