Asterisk ARI - перед звонком передайте канал в Стазис
Моя цель
Передайте входящий вызов непосредственно в Stasis и позвольте приложению решить, воспроизводить ли ему звонок вызова или сигнал "занято".
Эта проблема
С моим приложением ARI, если я опущу same => n,Ringing
В строке моего плана набора приложение Stasis возвращает ошибку, если вызывающий абонент зависает. Я могу повесить звонок без каких-либо ранних СМИ, пока я не передам channel.play()
Команда, через ARI.
Это решение имеет 2 проблемы:
- Приложение Stasis получает второй StasisStart, когда вызывающий абонент кладет трубку, возвращая
Channel not found
ошибка. - Там нет команды для
channel.busy
У кого-нибудь есть предложения?
Моя единственная возможность, которую я сейчас вижу, - убедиться, что у всех пользователей есть голосовая почта, и никогда не воспроизводится сигнал занятости. Не всем нужна / нравится голосовая почта, и неэтично отвечать на вызов и воспроизводить сигнал "занято", если вызывающий абонент не знает, что его вызов подключен.
Обновить
Используя следующую схему набора номеров, я могу заставить ее работать желаемым образом (если пользователь недоступен, он проигрывается), но с ошибкой:
extensions.conf
[public]
exten => _.,1,NoOp()
same => n,Stasis(myStasisApp, ${SIP_HEADER(to)})
same => n,Busy(10)
same => n,Hangup()
myApp.js
// The user is available
channel.ring();
// The user is busy
channel.continueInDialplan();
ошибка
Другой StasisStart отправляется, когда вызывающий абонент кладет трубку, после чего:
Unhandled rejection Error: {
"message": "Channel not found"
}
2 ответа
Мы столкнулись с той же проблемой и потеряли драгоценное время, чтобы выяснить причину, поэтому я поделюсь здесь решением и, возможно, оно поможет.
extensions.conf
[public]
exten => _.,1,NoOp()
same => n,Stasis(myStasisApp)
same => n,Hangup()
Когда Asterisk получит звонок, он запустит приложение стазис.
- Создать мост.
- Добавьте входящий
channel A
в этом мосту. - Создать новый исходящий
channel B
из вашего приложения ари сPOST /channels/create
, - Добавить исходящий
channel B
в этом мосту. - Набрать из
channel B
пункт назначения, где оба канала находятся в одном мосту сPOST /channels/{channelId}/dial
Теперь вы сможете увидеть новые события набора номера ARI с звонками и ответами.
В случае зависания вы будете получать события завершения канала с кодом причины зависания, а не с текстом "17 для занятых".
Asterisk Hangup Причина отображения
Проще создать канал (Asterisk версии 13) вместо create and dial (Asterisk версии 14), но у вас не будет раннего носителя или полного контроля на этом канале, потому что он создан Asterisk, а не приложением ARI, поэтому этот канал будет начать отправку события обратно в ARI, когда начнется вызов, а не раньше.
Звездочка 14 ARI: Создать, Мост, Набрать.
ARI и каналы: управление состоянием канала
Эта ветка нам очень помогла:
Re: ARI: добавить канал для моста сразу после возникновения действия
,
,
,
Повеселись! и надеюсь, что это поможет.
/ ohammami
У меня тоже вроде похожая проблема, я создаю две исходящие ноги из системы. Как только ответят на A-ногу, я создаю B-ветку. Я хочу передать исходный носитель (Звонок) B-Leg в A-Leg. Итак, если клиент B-ветви ожидает, то, послушав тональный сигнал, клиент A-ветки узнает об этом.
- Создан канал для этапа A
- нога-ответ на звонок
- Создайте мост и добавьте ветку A
- Создан канал для участка B
- добавить ножку B
- Ответьте на звонок по ноге B.
Любая помощь будет действительно оценена.