Звездочка: соедините один канал с другим с помощью AMI

В качестве промежуточного ПО у меня есть Asterisk 11.4.0, удаленный облачный сервер и сервер Node.js. Когда какая-либо учетная запись пытается позвонить, мне нужна информация с удаленного сервера, какую внешнюю линию использовать (или даже вообще не делать этот вызов!). Эти данные не могут быть рассчитаны непосредственно в Asterisk. Только после ответа облака звонок должен быть продолжен. Моя очередь действий выглядит так:

Захватите инициирование вызова от Asterisk с AMI на промежуточном сервере;

Отправить информацию в облако для анализа;

Продолжить вызов с использованием переданной в ответ внешней линии с использованием AMI (или вообще не продолжать);

Проблема в том, что я не знаю, как это сделать. Я думаю, что когда кто-то пытается позвонить, я могу использовать WaitExten в опции dialplan и перехватывать событие Newchannel с промежуточного сервера, отправляя всю информацию в облако. Когда он отвечает, я могу инициировать вызов, используя существующую линию ожидания.

Можете ли вы сказать мне, как я могу присоединить канал к операции Originate, когда я передаю его как параметр "channel", Asterisk не соединяет эту линию с вызываемым расширением.

1 ответ

Решение

Вам нужно использовать FastAGI или AGI(быстрые, но более сложные), чтобы контролировать поток вызовов вашего канала.

http://www.voip-info.org/wiki/view/Asterisk+FastAGI

В AGI вы можете получить информацию о вызове, решить, где ее разместить, после этого сделать вызов с помощью команды Dial. Звонки будут соединены автоматически.

http://www.voip-info.org/wiki/view/Asterisk+cmd+Dial

Также вы можете использовать действие Bridge ami для соединения 2 каналов, но это не так, как он был создан. Правильный путь - через Dial.

http://www.voip-info.org/wiki/view/Asterisk+cmd+Bridge

Также вы можете использовать функцию CURL в dialplan для запроса помощи через http по внешнему API. Это будет стоить столько же, сколько fastagi, но может быть проще для вас, так как вам нравится node.js

Если вы используете команду Originate ami, вы можете добавить к ней любые переменные через

 "Set" =>  "variablename=somethign"

PS на самом деле почти все может быть рассчитано внутри звездочки, если вы знаете об этом. У Asterisk полный язык (значит, вы можете описать любой алгоритм в плане набора), есть функция для запроса информации о БД и т. Д.

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я рекомендую читать звездочку, например, "Звездочка будущее телефонии", ПРЕЖДЕ ЧЕМ создавать любой дизайн приложения с использованием asterisk pbx. Если вы проигнорируете это предупреждение, ваше приложение может работать нестабильно и потребовать полного переписывания после его запуска в производство.

Другие вопросы по тегам