Asterisk ARI - перед звонком передайте канал в Стазис - PullRequest
0 голосов
/ 12 июня 2018

Моя цель

Передайте входящий вызов непосредственно в Stasis и позвольте приложению решить, воспроизводить ли звонящий сигнал или сигнал занятости для вызывающего абонента.

Проблема

С моим приложением ARI, если я опускаю строку same => n,Ringing в моем плане набора номеров, приложение Stasis возвращает ошибку, если вызывающий абонент зависает.Я могу прервать вызов без какого-либо раннего носителя, пока не передам команду channel.play() через ARI.

У этого решения есть 2 проблемы:

  1. Приложение Stasis получаетвторой StasisStart, когда вызывающий абонент вешает трубку, возвращая ошибку Channel not found.
  2. Нет команды для 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"
}

1 Ответ

0 голосов
/ 11 июля 2018

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


extensions.conf

[public]
exten => _.,1,NoOp()
same  =>    n,Stasis(myStasisApp)
same  =>    n,Hangup()

Когда Asterisk получит вызов, он запустит приложение стазис.

  1. Создайте мост.
  2. Добавьте входящий channel A в этот мост.
  3. Создайте новый исходящий channel B из своего приложения ari с помощью POST /channels/create.
  4. Добавьте исходящий channel B в этот мост.
  5. Наберите channel B номер получателягде оба канала находятся в одном и том же мосте с POST /channels/{channelId}/dial

Теперь вы сможете увидеть новые события набора номера ARI с вызовом и ответом.

ДляЗависание, вы получите события завершения каналов с кодом причины зависания, а не текстом, похожим на 17 для занятых

Отображения причины зависания звездочки

Происхождение канала проще (версия Asterisk13) вместо создания и набора (Asterisk версии 14), но у вас не будетedia или полный контроль над этим каналом, потому что он создан Asterisk, а не приложением ARI, поэтому этот канал начнет отправку события обратно в ARI, когда вызов начнется, а не раньше.

Asterisk 14 ARI: Создать, Bridge, Dial.

ARI и каналы: управление состоянием канала

Этот поток нам очень помог:

Re: ARI: добавить канал к мосту сразу же после начала действия

.

.

.

Веселитесь!и надеюсь, что это поможет.
/ ohammami

...