Хочу понять, как можно расширить функционал 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.