Asterisk ARI - перед звонком передайте канал в Стазис

Моя цель

Передайте входящий вызов непосредственно в 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"
}

2 ответа

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


extensions.conf

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

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

  1. Создать мост.
  2. Добавьте входящий channel A в этом мосту.
  3. Создать новый исходящий channel B из вашего приложения ари с POST /channels/create,
  4. Добавить исходящий channel B в этом мосту.
  5. Набрать из 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-ветки узнает об этом.

  1. Создан канал для этапа A
  2. нога-ответ на звонок
  3. Создайте мост и добавьте ветку A
  4. Создан канал для участка B
  5. добавить ножку B
  6. Ответьте на звонок по ноге B.

Любая помощь будет действительно оценена.

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