img

Рассказываем про 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 Уникальный идентификатор звонка 1497364935.15
agi_version Версия Asterisk 13.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)})
Asterisk Gateway Interface (AGI)
А как же написать скрипт?

Теперь к самому скрипту – напишем его на 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); //отправляем в письме

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

Ссылка
скопирована
img
Базы данных
Скидка 10%
Базы данных с нуля
Узнайте все о работе с реляционными и нереляционными базами данных. Вместе пройдем все этапы – от проектирования до масштабирования баз данных с помощью PostgreSQL, MS SQL и MySQL. Научитесь работать с NoSQL базами данных, создавать архитектуру хранения данных и автоматизировать рутинные процессы.
Онлайн
2 месяца
Навсегда
Еще по теме:
img
Вам, как сетевому инженеру, крайне важно разбираться в том, каким образом вызовы VoIP влияют на пропускную способность канала в
img
В этой статье расскажем как отправлять различные СМС сообщения пользователям, позвонившим в контакт-центр Октелл и запросившим т
img
Всем современным кампаниям, производящим товары и оказывающим услуги, необходимо иметь специалистов, работающих с потенциальными
img
Привет друг! Ты наверняка слышал что-то про взлом IP-АТС, когда злоумышленники звонят в другие страны по международной связи, а
img
OpenSIPS - это SIP-прокси-сервер с открытым исходным кодом операторского уровня, используемый для сигнализации SIP, и может обра
img
Инструменты анализа речи (speech analytics) разрушают единственную защиту от роботов, захватывающих мир: представление о том, чт
Комментарии
Осенние скидки
40%
50%
60%
До конца акции: 30 дней 24 : 59 : 59