Задать вопрос
@nicolaa

Как получить информацию о входящем звонке Asterisk ARI?

Подключимся к Asterisk при помощи websocket

var connection = new WebSocket("ws://ip:port/ari/events?app=qwer&subscribeAll=true&api_key=user:password")


Получаю все события

connection.onmessage = function(evt) {
          var msg = JSON.parse(evt.data);
          console.log(msg);
    }


И результат разбираю в JSON

У меня не получается разобраться в документации к ARI
Что такое канал и мост?

Как отловить событие входящего вызова и поднятии трубки оператора(для получения добавочного номера оператора)?

Прочитал много информации по AIR, но сделать выводы не удалось

Например есть статья, но по всей видимости, она устарела

В статье при получении новых сообщений, ищет `event` со значением `incoming`

switch (msg.event) {
                    case 'incoming':


Когда я получаю новые сообщения, в них нет `event`

Пример, какие приходят сообщения

{
      "type": "ChannelCreated",
      "timestamp": "2020-09-30T09:13:28.451+0500",
      "channel": {
        "id": "id",
        "name": "SIP/",
        "state": "Down",
        "caller": {
          "name": "",
          "number": ""
        },
        "connected": {
          "name": "",
          "number": ""
        },
        "accountcode": "",
        "dialplan": {
          "context": "incoming",
          "exten": "s",
          "priority": 1
        },
        "creationtime": "2020-09-30T09:13:28.451+0500",
        "language": "en"
      },
      "application": "qwer"
    }
    {
      "variable": "QUEUENAME",
      "value": "operators",
      "type": "ChannelVarset",
      "timestamp": "2020-09-30T09:14:01.628+0500",
      "channel": {
        "id": "id",
        "name": "SIP/",
        "state": "Up",
        "caller": {
          "name": "78008888888",
          "number": "+79099999999"
        },
        "connected": {
          "name": "",
          "number": ""
        },
        "accountcode": "",
        "dialplan": {
          "context": "incoming",
          "exten": "incom",
          "priority": 15
        },
        "creationtime": "2020-09-30T09:12:38.097+0500",
        "language": "ru"
      },
      "application": "qwer"
    }
    {
      "variable": "QUEUESRVLEVELPERF",
      "value": "0.0",
      "type": "ChannelVarset",
      "timestamp": "2020-09-30T09:14:01.629+0500",
      "channel": {
        "id": "id",
        "name": "SIP/",
        "state": "Up",
        "caller": {
          "name": "78008888888",
          "number": "+79099999999"
        },
        "connected": {
          "name": "",
          "number": ""
        },
        "accountcode": "",
        "dialplan": {
          "context": "incoming",
          "exten": "incom",
          "priority": 15
        },
        "creationtime": "2020-09-30T09:12:38.097+0500",
        "language": "ru"
      },
      "application": "qwer"
    }
  • Вопрос задан
  • 445 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Что такое канал и мост?
Канал - это соединение между Asterisk и конечной точкой (телефоном). Мост - внутреннее соединение между несколькими каналами в Asterisk.
Например есть статья, но по всей видимости, она устарела
В этой статье используют AMI, а не ARI.

По ARI простейший разговор выглядит так:
spoiler
ChannelCreated - создан канал с вызывающим абонентом
DeviceStateChanged, INUSE - вызывающее устройство сменило статус
ChannelVarset, SIPURI - установка значения переменной
ChannelVarset, SIPDOMAIN
ChannelVarset, SIPCALLID
ChannelStateChange, Ring - изменение статуса канала
ChannelDialplan, Dial - сработала команда Dial в диалплане
ChannelVarset, DIALSTATUS
ChannelVarset, DIALEDPEERNUMBER
ChannelVarset, DIALEDPEERNAME
ChannelVarset, ANSWEREDTIME
ChannelVarset, DIALEDTIME
DeviceStateChanged, RINGING - звонок у вызываемого абонента
ChannelCreated - создан канал до вызываемого абонента
ChannelVarset, SIPCALLID
ChannelVarset, DIALEDPEERNUMBER
ChannelDialplan, AppDial - команда Dial в канале вызываемого абонента
ChannelConnectedLine - изменилась информация о каналах
Dial - производится вызов абонента
ChannelConnectedLine
ChannelStateChange, Ringing - изменение статуса канала
Dial, RINGING - звонок на вызываемой линии
DeviceStateChanged, BUSY - поднята трубка у вызываемого абонента
ChannelStateChange, Up - изменение статуса канала вызываемого абонента
ChannelVarset, DIALSTATUS
ChannelVarset, DIALEDPEERNAME
ChannelVarset, DIALEDPEERNUMBER
Dial, ANSWER - ответ на вызываемой линии
ChannelStateChange, Up - изменение статуса канала вызывающего абонента
BridgeCreated - создан мост
ChannelDialplan, AppDial - команда Dial в канале вызываемого абонента
DeviceStateChanged, INUSE - у вызывающего абонента
ChannelEnteredBridge - вызываемый канал подключился к мосту
ChannelEnteredBridge - вызывающий канал подключился к мосту
ChannelVarset, BRIDGEPEER
ChannelVarset, BRIDGEPVTCALLID
ChannelVarset, BRIDGEPEER
ChannelVarset, BRIDGEPVTCALLID
ChannelVarset, RTPAUDIOQOS
ChannelVarset, RTPAUDIOQOSBRIDGED
ChannelVarset, RTPAUDIOQOSJITTER
ChannelVarset, RTPAUDIOQOSJITTERBRIDGED
ChannelVarset, RTPAUDIOQOSLOSS
ChannelVarset, RTPAUDIOQOSLOSSBRIDGED
ChannelVarset, RTPAUDIOQOSRTT
ChannelVarset, RTPAUDIOQOSRTTBRIDGED
ChannelVarset, RTPAUDIOQOSBRIDGED
ChannelVarset, RTPAUDIOQOS
ChannelVarset, RTPAUDIOQOSBRIDGED
ChannelVarset, RTPAUDIOQOSJITTER
ChannelVarset, RTPAUDIOQOSJITTERBRIDGED
ChannelVarset, RTPAUDIOQOSLOSS
ChannelVarset, RTPAUDIOQOSLOSSBRIDGED
ChannelVarset, RTPAUDIOQOSRTT
ChannelVarset, RTPAUDIOQOSRTTBRIDGED
ChannelVarset, RTPTEXTQOS
DeviceStateChanged, NOT_INUSE - вызываемый абонент положил трубку
ChannelHangupRequest - завершение канала вызывающего абонента
ChannelVarset, BRIDGEPEER
ChannelVarset, BRIDGEPVTCALLID
ChannelVarset, BRIDGEPEER
ChannelVarset, BRIDGEPVTCALLID
ChannelLeftBridge - вызывающий канал вышел из моста
ChannelLeftBridge - вызываемый канал вышел из моста
ChannelVarset, ANSWEREDTIME
ChannelVarset, DIALEDTIME
ChannelVarset, DIALSTATUS
ChannelHangupRequest - завершение канала вызывающего абонента
ChannelVarset, RTPAUDIOQOS
ChannelVarset, RTPAUDIOQOSJITTER
ChannelVarset, RTPAUDIOQOSLOSS
ChannelVarset, RTPAUDIOQOSRTT
ChannelDestroyed - вызывающий канал уничтожен
ChannelDestroyed - вызываемый канал уничтожен
DeviceStateChanged, NOT_INUSE - вызывающий абонент положил трубку
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы