Подключение класса phpagi к AGI интерфейсу Asterisk


Тот, кто хоть каким-то образом касался темы IP-телефонии — явно слышал об Asterisk. Asterisk — это гибкая софтварная PBX (АТС), способная делать с телефонией если не все, то очень и очень многое. Astersisk уже давно набирает обороты, однако до недавнего времени был популярен только в кругах «знающих». Подавляющее же большинство так и сидело на классических мини-АТС, расширение которых требует наличия специально обученных людей и немалой суммы денег.

Конечно, Asterisk — не для школьников. Но затраты при его использовании на порядки ниже, а в качестве телефонных аппаратов не обязательно использовать SIP-телефоны. Можно и различный софт применять. А если воспользоваться многочисленными sip-провадерами, то вы легко получите свой собственный номер в другой стране — удобно.

Сегодня речь пойдет о интерфейсе AGI, который позволяет Asterisk’у «общаться» с приложениями, написанными практически на любом ЯП. И о классе phpagi, который позволяет использовать этот интерфейс для применения всех плюшек астериска в вашем php-приложении. По классу имеется не плохая документация, однако на русском языке мало чего можно найти внятного. Думаю, информация, которую я тут приведу будет полезна тем, кто хочет «пристегнуть» к своей, например, CRM телефонию. Хотя, конечно, есть и готовые CRM с уже реализованной синхронизацией (например, Vtiger или SugarCRM).

Подготовка Asterisk

Итак, первое, что необходимо сделать — это подготовить сам Asterisk. А именно — подредактировать файл конфигурации. По дефолту для работы используется порт 5038 и настроен он на локалхост, что делает вам +1 к безопасности. Расшаривать на всеобщее обозрение я бы не рекомендовал, посему, если приложение работает на другом сервере — лучше всего пробросить порт на сервер телефонии через ssh.

Смотрим файл:

Ничего сложного, как видим.

Настройка класса phpagi

После настройки asterisk’а мы качаем класс и распаковываем. Обратить внимание надо на два файла. Первый — это phpagi.conf. Собственно, там прописываем явки и пароли, которые мы указали в manager.conf. Ну и включаем нужные функции, как debug или error_handler.

Второй файл — это phpagi.php (т.е. сам класс). Тут нас интересуют первые строчки, в которых мы прописываем директории конфига, темпа ну и указываем путь для spool (в эту директорию ранее кидали call-файлы, к примеру). Смотрим:

Директория spool особо будет не нужна, но если понадобится — то задумайтесь о том, как синхронизировать эту директорию с такой же на сервере телефонии. Вариантов достаточно, rsynch, например.

Включение класса в приложении

После всей этой магии нам осталось только включить класс в приложении. Инклюдим как обычно. А далее нам надо:

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