php agi asterisk примеры

ИТ База знаний

Полезно

— Онлайн генератор устойчивых паролей

— Онлайн калькулятор подсетей

— Руководство администратора FreePBX на русском языке

— Руководство администратора Cisco UCM/CME на русском языке

— Руководство администратора по Linux/Unix

Навигация

Серверные решения

Телефония

FreePBX и Asterisk

Настройка программных телефонов

Корпоративные сети

Протоколы и стандарты

🔥 Популярное

Мониторинг пиров и транков на Asterisk

Установка и настройка FOP2 в Asterisk

FreePBX 15 – будьте первым

Кракозябры: Кодировка в CDR FreePBX 14

👌 Похожее

Включаем русский язык в FreePBX 13

Инструменты для администрирования Asterisk

Проблемы со слышимостью в Asterisk

Автоматический запуск Asterisk

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

Расширяем возможности своего Asterisk

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

Продвинутый курс по Asterisk

Концентрат редких знаний, для внедрения Asterisk в крупных предприятиях. Все это мы собрали в одном курсе для тебя.

php agi asterisk примеры. Смотреть фото php agi asterisk примеры. Смотреть картинку php agi asterisk примеры. Картинка про php agi asterisk примеры. Фото php agi asterisk примеры php agi asterisk примеры. Смотреть фото php agi asterisk примеры. Смотреть картинку php agi asterisk примеры. Картинка про php agi asterisk примеры. Фото php agi asterisk примеры

Как это работает?

ПеременнаяОписаниеПример
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 в диалплане?

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

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

php agi asterisk примеры. Смотреть фото php agi asterisk примеры. Смотреть картинку php agi asterisk примеры. Картинка про php agi asterisk примеры. Фото php agi asterisk примеры

А как же написать скрипт?

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

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

Базовый курс по Asterisk

Мы собрали концентрат всех must have знаний в одном месте, которые позволят тебе сделать шаг вперед на пути к экспертному владению Asterisk

Источник

Использование AGI скриптов в диалплане Астериск.

Asterisk Gateway Protocol (AGI) — модуль, который позволяет выполнять внешние скрипты, расширяя возможности диалплана Астериск. С помощью AGI можно: Получить данные от пользователя через DTMF Передать из диалплана в AGI скрипт параметры Связать Астериск с базой данных Получить данные от AGI скрипта в диалплан.(В отличие от приложения System(), которое предполагает одностороннюю передачу параметров) Воспроизвести голосовое […]

php agi asterisk примеры. Смотреть фото php agi asterisk примеры. Смотреть картинку php agi asterisk примеры. Картинка про php agi asterisk примеры. Фото php agi asterisk примеры

Asterisk Gateway Protocol (AGI) — модуль, который позволяет выполнять внешние скрипты, расширяя возможности диалплана Астериск.

С помощью AGI можно:

AGI может управлять абонентской группой, вызывается в extensions.conf.
Async AGI представлен начиная с Asterisk 1.6, позволяет выполнять асинхронные сценарии AGI.
EAGI дает приложению возможность доступа и управления звуковым каналом в дополнение к взаимодействию с диалпланом.
FastAGI может использоваться для обработки на удаленном компьютере через сетевое соединение.
DeadAGI дает доступ к мертвому каналу после зависания. Устаревший с Asterisk 1.6

Как запустить AGI скрипт

Для запуска agi скрипта необходимо использовать приложение AGI()

Также создаем php скрипт.

Директория по умолчанию для AGI скриптов /var/lib/asterisk/agi-bin/

Скрипт должен быть исполняемым (в системах Linux это означает, что на этот файл должен быть установлен исполняемый бит). Вы можете сделать это с помощью команды Linux chmod + x, чтобы изменить права на выполнение.

Каждый скрипт AGI на основе PHP имеет следующую форму:

Отладка AGI в Asterisk CLI:

Для включения отладки необходимо в CLI выполнить команду

php agi asterisk примеры. Смотреть фото php agi asterisk примеры. Смотреть картинку php agi asterisk примеры. Картинка про php agi asterisk примеры. Фото php agi asterisk примеры

Чтобы отключить отладку AGI, просто введите agi no debug в консоли Asterisk.

Каждая строка начинается с идентификатора канала вызова.

После идентификатора канала вы увидите AGI, а затем Tx или Rx. Tx (передача) — означает, что Asterisk передает следующую информацию в буфер STDIN для использования AGI-скриптом. Строки, начинающиеся с Rx (получение), отображают информацию, которую AGI-скрипт отправляет в Asterisk в буфер STDOUT.

После запуска AGI скрипта Астериск передает в него переменные вызова.

agi_request Имя файла исполняемого скрипта
agi_channel Канал, инициирующий звонок
agi_language Языковой код
agi_type Тип канала, инициирующий вызов
agi_uniqueid Уникальный идентификатор звонка
agi_version Версия Asterisk
agi_callerid Номер вызывающего абонента
agi_calleridname Имя вызывающего абонента
agi_dnid Набранный номер
agi_context Контекст обработки вызова

Для примера напишем скрипт на языке php, который по звонку на определенный номер будет выполнять системные команды Linux.

Для этого создадим в диалплане экстеншен, при звонке на который Астериск будет ожидать от пользователя ввода PIN через DTMF.

В файле extensions.conf:

В процессе выполнения скрипта воспроизводим предварительно записанные вспомогательные голосовые сообщения, которые должны иметь формат wav с частотой 8000гц и располагаться по адресу /var/lib/asterisk/sounds/ru.

В случае, если PIN введен верно, вызовем из скрипта выполнение команды reboot и отправляем письмо на e-mail.

Добавим в /etc/sudoers возможность запуска команд из php скрипта от пользователя root:

Источник

База знаний

Как установить PHP для работы с Asterisk Gateway Interface (AGI)

Первое правило бизнеса – быть осведомленным о среде PHP. Я НЕ говорю, что вы должны изменить нечто, но вы должны быть осведомленными о ней, возможно некоторое отчаяние, особенно когда вы в гуще вещей. На Debian вам сразу возможно надо получить “php4-cli”, так как типичная усиановка PHP4 предназначается только для сети.

Я наконец-то ухитрился найти проблему с моим PHP AGI скриптом! Вероятно, на моей машине было 2 версии установленных PHP. Одна для CGI и другая для CLI. Не зная, как провести тестирование моего скрипта, я вызsвал версию CLI (/usr/local/bin/php), несмотря на то, что PHP вызывал версию CLI (/usr/local/bin/php). Это повернулось так, что мой скрипт не будет запускаться на CLI версии PHP… Интересно, не так ли?

Да, будьте осведомлены, что завися от ваших настроек, Apache может как читать php.ini, так и заместить ваш сетевой php.ini.
Еще: Используя неправильную версию PHP, может вызвать проблемы при попытки чтения канальных/диалплановских переменных в вашем PHP скрипте, также проверка, если вам надо, например, “#!/usr/bin/php-cgi –q” или “#!/usr/bin/php –q” в первой строке.

Посмотрите на ваш php конфиг файл (в /etc/php.ini или /usr/local/etc/php.ini) для следующего:

ob_implicit_flush(false);
set_time_limit(5);
; error_log = filename
error_reporting(0); //добавлено пользователем: демокрит

Первая строка, ob_implicit_flush-, показывает, должен ли php буферизовать выходные данные; в случае Asterisk agi, если вы буфферизуете выходные данные, Астериск АТС не получит ваши команды долгое время, до тех пор пока вы не очистите ваш буфер вручную (смотри ниже)

Второй элемент, set_time_limit, это максимально возможное время для выполнения вашего php скрипта. Большинство Asterisk agi скриптов будут запускаться без разумного времени, но если у вас есть очень длинный скрипт, который производит необычные ошибки, возможно, что ваш скрипт был завершен преждевременно.

Третий элемент – error_log; важен для отладки, но убийца для промышленных систем. Он может быть выключен по умолчанию или вы можете намеренно выключить его и не забыть.

Четвертый элемент, error_repоrting(0), говорит PHP не сообщать об ошибках в течении времени выполнения скрипта. Это важно, потому что любые ошибки (и некоторые предупреждения), которые создал ваш скрипт, будут посланы к STDOUT, тому же самому буферу, к которому посылаются все AGI команды. Поэтому, любые ошибки в вашем скрипте будут посланы к AGI и астреиск будет пытаться прочесть их как AGI команды. В моем эксперименте, это поведение будет выполнять все последующие команды, после того, как ошибка скрипта (неизвестная для вас) вернет “510 invalid command”…
after a script error (unknown to you), return ‘510 invalid command’, although commands like ‘EXEC Playback’ will actually still play back a sound file. For important AGI commands like ‘GET DATA my_file’ and ‘GET DIGIT my_file’, the Asterisk CLI will report «Playing File my_file» but the sound file will not be heard on the channel and no DTMF input can be received by the caller. There is also no way for the script to tell what DTMF keys were pressed since the command returns a «510 invalid’ string. An alternative to using error_reporting(0) at the beginning of your script to help you debug would be to prepend your suspected error-generating commands in your script with @, such as

$rst = @mysql_query($strSQL);
—OR—
$fp = @fopen(«some non-existant file», «r»);

The @ will suppress any errors or warning generated by the statement.
Edit

Поместите ваши скрипты в диреторию /var/lib/asterisk/agi-bin/ и получите их работу сперва перед тем, как вы что-нибудь вообразите.

3.Выполнение разрешения на файлов скрипта

Помните к chmod ВСЕ ваши скрипты к 733 как ниже показано:

4. Интерфейс для команды shell

2 первые строки в вашем скрипте должны быть следующие (при условии что ваша php bindery находится в /usr/bin; дважды проверьте это):

Далее, вы должны использовать fopen() для создания всех необходимых дескрипторов. Я знаю, что много версий php имеют измененные признаки для того, чтобы обращаться с потоками stdio, но fopen() будет работать с большинством новых и старых версий, делающими ваши скрипты более портативными, и файл php.ini не доставляет вам неприятности. Кроме того, fopen() не представляет неудобства для использования с * agi, поэтому используйте его.

$stdin = fopen(‘php://stdin’, ‘r’);
$stdout = fopen(‘php://stdout’, ‘w’);
$stdlog = fopen(‘my_agi.log’, ‘w’);

Замечание: STDOUT уже открыт внутри php 4.3.0 и выше, поэтому можно делать fwrite(STDOUT,»blah»);

6. Handle ввод среды Астериска

Asterisk всегда отсылает пучок в каждый момент времени к agi, вызываемый как показано ниже:

agi_request: test.php
agi_channel: Zap/1-1
agi_language: en
agi_type: Zap
agi_callerid:
agi_dnid:
agi_context: default
agi_extension: 1000
agi_priority: 1

Сохраните инфу с этой функцией (или пример ниже):

Другие AGI заголовки, прермещенные Астериском (входы среды)

Замечание: если id номер вызывающего не установлен в sip.conf, agi_callerid будет иметь то же значение, что и agi_calleridname.

7. Начало использования AGI канала

Это точка, где вы можете начать разговор с астериском. Используйте fputs для того, чтобы отправить * agi команды. Вы можете также использовать echo команду.

fputs($stdout,»SAY NUMBER 1234567 ’79#’ \n»);
fflush($stdout);

Источник

Siarhei Dudko iT blog

Здесь я буду писать всякие интересные штуки из моей жизни и работы

Голосовое оповещение с помощью Asterisk AGI.

Для упрощения присвоим номер телефона переменной

тогда состав файла должен быть:

мы можем передать какой-нибудь параметр, а позже вытащить его в диалплане переменной

, например передадим с помощью нее id сообщения;

— имя вызывающего абонента, будет указан внутри asterisk(во внешних сетях по умолчанию не работает);
[crayon ]callerid_num[/crayon] — номер вызывающего абонента, будет указан внутри asterisk(во внешних сетях по умолчанию не работает);

— контекст, используемый при вызове.

Далее необходимо добавить соответствующий контекст(для нашего примера mymessage) в диалплан(extension_custom.conf):

(наш текст сообщения).
Скрипты AGI должны находится в /var/lib/asterisk/agi-bin/. Соответственно, для исполнении скрипта на php должен быть установлен интерпретатор php.
Язык вы выбираете сами. На примере с php разберем работу скрипта:

Данные получаются с помощью

Соответственно последним пунктом(

) и есть переданное сообщение.

Вывод сообщения(воспроизведение) осуществляется по средствам

Для обеспечения работы скрипта, необходимо установить wget, lame:

Sox входит в стандартный дистрибутив elastix 4, его устанавливать не нужно.

При тестировании проверено, что воспроизводятся также и исходные mp3 файлы, однако качество речи значительно хуже.
Пример команды lame:

Пример команды sox:

Не забываем выставить права записи на папку(и создать ее при отсутствии) /var/lib/asterisk/festivalcache/.

Свежие записи

Архивы

Privacy Overview

Necessary cookies are absolutely essential for the website to function properly. This category only includes cookies that ensures basic functionalities and security features of the website. These cookies do not store any personal information.

Any cookies that may not be particularly necessary for the website to function and is used specifically to collect user personal data via analytics, ads, other embedded contents are termed as non-necessary cookies. It is mandatory to procure user consent prior to running these cookies on your website.

Источник

Расширяем возможности Asterisk, используя PHP

Все слышали про мини-АТС нового поколения имя которой Asterisk. Так уж случилось что я заинтересовался этой системой и даже успел сделать пару коммерческих проектов.

В этой статье я хочу немного расказать об интеграции звездочки с языком программирования php. При этом мы будем использовать класс phpagi.

Под катом я приведу примеры использования нескольких методов этого класса которые помогли мне.

Первым делом качаем последнюю версию phpagi и подключаем его в наш проект, а так же правим файл /etc/asterisk/manager.conf

В архиве с phpagi есть файл phpagi.conf, его нужно скопировать в /etc/asterisk и естественно исправить логин и пароль.
Теперь мы можем смело подключатся к AMI из php скрипта, например так:

Первым делом я хотел бы расказать о написании простейшего монитора событий asterisk на php.
Как мне кажется это самая полезная функция класса phpagi.

Вот такой у меня вышел монитор событий:

Используя этот хендлер можно выполнять какие нибудь действия в зависимости от полученного эвента, например проверять баланс на sim-карте вставленной в модем huawei и подключенной через chan_dongle.
Приведу пример своей реализации используя метод Command:
Первый скрипт ловит событие newussd

Этот скрипт получает событие donglenewussd в котором нам приходит ответ от оператора на основе которого мы заносим в базу информацию о состоянии баланса.
Следующий скрипт будет по крону скажем раз в час отправлять ussd запрос на проверку баланса.

Как вы могли заметить я испоьзую yii framework для своих проектов, у меня есть модель в которой хранятся настройки модема (системное имя, оператор, баланс, состояние и т.д.)

Данный пример работает с Украинскими операторами (МТС, Киевстар и Life)

И на десерт я хочу Вам расказать про метод Originate. Вы еще используете call файлы? тогда мы идем к Вам.

Очень полезная функция которая инициирует звонок используя AMI, а не старый дедовский способ путем копирования call файла в директорию /var/spool/asterisk/outgoing

Все параметры передаваемые в функцию почти такие же как и параметры call файла:

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

Надеюсь моя статья окажется кому нибудь полезной, так как я не нашел упоминание phpagi на хабре, да и вообще с трудом нашел хоть какие нибудь примеры использования кроме тех что идут в архиве с библиотекой.

Если у кого то есть другие методы работы с этой библиотекой очень буду рад почитать о них в коментариях.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *