Добавить в корзинуПозвонить
Найти в Дзене
Merion Academy

Рассказываем про Asterisk Gateway Interface (AGI)

Дорогой читатель! В поисках полезной автоматизации и кастомизации своего Asterisk продвинутые администраторы прибегают к использованию различных скриптов. Это может быть PHP, Perl C, Pascal или Shell. Для использования скриптов, написанных на одном из перечисленных языков программирования в диалплане Asterisk используется AGI (Asterisk Gateway Interface) – о нем и поговорим. КАК ЭТО РАБОТАЕТ? AGI - это прослойка между скриптом и диалпланом (планом набора) в Asterisk. В скрипт мы можем передавать различные переменные, а можем получать какие - то значения из скрипта. Когда Asterisk инициирует запуск скрипта через AGI, он передает в него набор переменных. Все переменные обладают префиксом agi_: agi_request - Имя файла исполняемого скрипта - trunk.php agi_channel - Канал, инициирующий звонок - Local/89123456789@from-internal-00000002;2 agi_language - Языковой код - например, en agi_type - Тип канала, инициирующий вызов - например, Local agi_uniqueid - Уникальный идентификатор звонка -
Оглавление

Дорогой читатель! В поисках полезной автоматизации и кастомизации своего Asterisk продвинутые администраторы прибегают к использованию различных скриптов. Это может быть PHP, Perl C, Pascal или Shell. Для использования скриптов, написанных на одном из перечисленных языков программирования в диалплане Asterisk используется AGI (Asterisk Gateway Interface) – о нем и поговорим.

КАК ЭТО РАБОТАЕТ?

AGI - это прослойка между скриптом и диалпланом (планом набора) в Asterisk. В скрипт мы можем передавать различные переменные, а можем получать какие - то значения из скрипта. Когда Asterisk инициирует запуск скрипта через AGI, он передает в него набор переменных. Все переменные обладают префиксом agi_:

agi_request - Имя файла исполняемого скрипта - trunk.php

agi_channel - Канал, инициирующий звонок - Local/89123456789@from-internal-00000002;2

agi_language - Языковой код - например, en

agi_type - Тип канала, инициирующий вызов - например, Local

agi_uniqueid - Уникальный идентификатор звонка - например, 1497364935.15

agi_version - Версия - например, Asterisk13.10.0

agi_callerid - Номер звонящего (CID Number) - например, 89123456789

agi_calleridname - Имя звонящего (CID Name) - например, 89123456789

agi_dnid - Набранный номер - например, unknown

agi_context - Контекст обработки вызова - например, macro-dialout-trunk

КАК ВЫЗВАТЬ AGI В ДИАЛПЛАНЕ?

Вызвать AGI скрипт очень просто: предварительно, загрузите скрипт в директорию /var/lib/asterisk/agi-bin/. После этого, скрипту необходимо дать права и собственника. Предположим, наш скрипт называется trunk.php:

chmod 755 /var/lib/asterisk/agi-bin/trunk.php
chown asterisk:asterisk /var/lib/asterisk/agi-bin/trunk.php

Теперь, чтобы скрипт был вызван в диалплане, просто добавьте следующую конструкцию:

exten => 1333,n,AGI(trunk.php)

Просто, не правда ли? А если мы хотим передать переменную в скрипт? Просто добавьте ее после запятой:

exten => 1333,n,AGI(trunk.php, ${CALLERID(number)})

А КАК ЖЕ НАПИСАТЬ СКРИПТ?

Теперь к самому скрипту – напишем его на PHP. Пусть нам нужно отправлять письмо с номером звонящего. Выглядеть скрипт будет так:

#!/usr/bin/php -q
<?php
require('phpagi.php');
$agi = new AGI(); //подключаем файл phpagi.php – 1 и 2 строки обязательны в любом скрипте
$cid = $agi->request['agi_callerid']; // берем из AGI номер звонящего
mail("info@merionet.ru", 'Привет!', 'Вот и номер звонящего:', $cid); //отправляем в письме
?>

Вот и все. Нам будет приходить на почту письмо с номером звонящего – прокачав данный функционал можно отслеживать пропущенные вызовы, например.