Asterisk выполнит Async AGI


Я пишу простое всплывающее приложение, интегрированное с сервером Asterisk. Наша тестовая среда основана на FreePBX, где мы настроили несколько магистралей SIP. Тест проводится между двумя расширениями 3000 и 3001.

3000, 3001 и другие добавочные номера контролируются SIP-клиентом (микросипом) для тестирования, позже они могут стать другими sip-клиентами или программными телефонами.

Что мне нужно, так это когда кто-то звонит на добавочный номер 3000, оператор может ответить на вызов с помощью обычного SIP-клиента, а мое приложение отображает некоторую информацию о вызове. Я смог добиться этого с помощью AMI. Теперь я хочу, чтобы в моем приложении была кнопка, позволяющая перевести вызов в режим удержания. Я знаю, что AMI не предоставляет такую ​​возможность, поэтому я пытаюсь использовать Async AGI. (кстати я использую asternet для связи со звездочкой)

AgiAction agi = new AgiAction(channel, "MusicOnHold");
ManagerResponse resp = manager.SendAction(agi);

Как только я это сделал, я получил ответ

Failed to add AGI command to channel SIP/3000-00000003 queue

Интересно, что это значит?

Также я пытался запустить команду "MusicOnHold" через CLI, и я получил ответ

Channel XXXXX is not controlled by AGI"

Я попытался добавить что-то подобное в диалплан (extensions.conf):

[default]
exten => 3000,1,NoOp(Async AGI)
same => n,AGI(agi:async)

это устранит ошибку "Канал XXXXX не контролируется AGI", но все равно оставит ошибку "Не удалось добавить команду AGI в очередь SIP/3000-00000003 очередь". И что самое худшее, когда у меня появилась такая схема набора номеров, мой sip-клиент прекратил принимать звонки, хотя AMI все еще был в состоянии перехватить это.

Интересно, как правильно добиться того, чего я хочу? Я совершенно новичок в звездочке, и, возможно, мне не хватает основных понятий, поэтому я был бы очень признателен за хороший пример. Спасибо.

1 ответ

Async Agi - это способ управления каналом через запросы AMI, а не AGI.

Я не уверен, что вы отправляете как интернет-код, обратитесь к документации по Интернету.

Также обратите внимание, что вы не можете удерживать вызов, который уже находится в asyncagi(уже включен!!!), если только вы не прекратили удерживать какое-либо другое действие.

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