Хочу понять, как можно расширить функционал Asterisk
подключив к нему PHP
скрипты.
Функционал Asterisk 16 расширяется при использовании интерфейса AGI (Asterisk Gateway Interface)
, но сперва нужно подключить класс phpagi
. По документации на официальном сайте проекта — это PHP
класс используемый разработчиками для приложений использующих интерфейс AGI. AGI
— это промежуточное звено между скриптом и диалпланом (extensions.conf
) в Asterisk
. В скрипт можно передавать различные переменные, а можем получать какие — то значения из скрипта. Когда Asterisk
инициирует запуск скрипта через AGI
, он передает в него набор переменных. Все переменные обладают префиксом agi_
: Из проделанного ниже я вспомнил, что оказывается уже делал такое когда в одной конторе настраивал связку FreePBX + AmoCRM
. Сейчас же вспоминаю по шагам.
Шаг №1: Приводим настройки конфигурационного файла manager.conf
к виду:
ekzorchik@srv-asterisk:~$ sudo cp /etc/asterisk/manager.conf /etc/asterisk/manager.conf.backup ekzorchik@srv-asterisk:~$ sudo nano /etc/asterisk/manager.conf [general] enabled = yes webenabled = no port = 5038 bindaddr = 0.0.0.0 [astphp] secret = Aa1234567 deny = 0.0.0.0/0.0.0.0 permit = 0.0.0.0/0.0.0.0 displayconnects = yes read = system,call,log,verbose,command,agent,user,originate write = system,call,log,verbose,command,agent,user,originate
Шаг №2: Скачиваем самую актуальную версию на момент чтения заметки
ekzorchik@srv-asterisk:~$ svn checkout https://svn.code.sf.net/p/phpagi/svn/trunk phpagi-svn Checked out revision 19. ekzorchik@srv-asterisk:~$
Содержимое каталога с актуальной версией:
phpagi.php - The main phpagi class.
phpagi-asmanager.php - The Asterisk Manager class.
phpagi-fastagi.php - FastAGI class.
phpagi_1.php - Compatability class for 1.12 release
phpagi.conf - An example configuration file for phpagi.
fastagi.xinetd - xinetd.conf sample configuration for fastagi
Шаг №3: Выполняем копирование файлов phpagi
в директорию Asterisk 16
ekzorchik@srv-asterisk:~$ sudo cp phpagi-svn/docs/phpagi.example.conf /etc/asterisk/phpagi.conf ekzorchik@srv-asterisk:~$ sudo cp phpagi-svn/phpagi-asmanager.php /var/lib/asterisk/agi-bin/phpagi-asmanager.php ekzorchik@srv-asterisk:~$ sudo cp phpagi-svn/phpagi-fastagi.php /var/lib/asterisk/agi-bin/phpagi-fastagi.php ekzorchik@srv-asterisk:~$ sudo cp phpagi-svn/phpagi.php /var/lib/asterisk/agi-bin/phpagi.php ekzorchik@srv-asterisk:~$ sudo chown -R asterisk:asterisk /var/lib/asterisk/agi-bin/ ekzorchik@srv-asterisk:~$ ls -l /var/lib/asterisk/agi-bin/ total 100 -rw-r--r-- 1 asterisk asterisk 25079 Dec 3 20:53 phpagi-asmanager.php -rwxr-xr-x 1 asterisk asterisk 2322 Dec 3 20:54 phpagi-fastagi.php -rw-r--r-- 1 asterisk asterisk 67615 Dec 3 20:55 phpagi.php
Шаг №4: Редактируем phpagi.conf
с целью настройки соединения с Asterisk
(ом):
ekzorchik@srv-asterisk:~$ sudo nano /etc/asterisk/phpagi.conf [asmanager] server=localhost ; server to connect to port=5038 ; default manager port username=astphp ; username for login secret=Aa1234567 ; password for login
После не забываем сохранить внесенные изменения. Где логин atsphp
— это наименование секции в конфигурационном файле manager.conf.
Шаг №5: Таким образом связь между классом phpagi
и Asterisk 16
настроена, но нужно проверить так ли это на самом деле:
ekzorchik@srv-asterisk:~$ sudo asterisk -rx "module reload manager" Module 'manager' reloaded successfully. ekzorchik@srv-asterisk:~$ sudo netstat -tulpn | grep 5038 tcp 0 0 0.0.0.0:5038 0.0.0.0:* LISTEN 809/asterisk ekzorchik@srv-asterisk:~$ telnet 127.0.0.1 5038 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. Asterisk Call Manager/5.0.1 Action: Login Username: astphp Secret: Aa1234567 <пустая строка, нажимаем клавишу <ENTER> Response: Success Message: Authentication accepted Event: FullyBooted Privilege: system,all Uptime: 38639 LastReload: 129 Status: Fully Booted ^] telnet> quit Connection closed. ekzorchik@srv-asterisk:~$
Итого связь класса phpagi & Asterisk 16
действительно настроена.
Дабы не нагромождать заметку эту завершу. На этом у меня всё, с уважением автор блога Олло Александр aka ekzorchik.