Использование WebSockets для мониторинга звонков на Asterisk 13

Недавно я обновил нашу АТС до Asterisk 13 в надежде, что новый REST API и поддержка WebSockets решат некоторые проблемы с отслеживанием звонков через AMI.

Мы создаем приложение C#, которое будет находиться на панели инструментов Windows и отображать информацию на основе идентификатора вызывающего абонента, запрашивая нашу CRM всякий раз, когда пользователь делает или получает вызов.

Может ли кто-нибудь уточнить, возможно ли через WS подписаться на канал WS, который сообщает обо всех (или даже только о конкретных расширениях) событиях, происходящих на АТС?

Что касается прогресса, достигнутого на данный момент, я использовал Swagger для изучения ARI, и информация о канале, возвращаемая через конечную точку канала (например, http://10.0.0.1:8088/ari/channels?api_key=admin:secret), выглядит идеально:

[
  {
    "id": "1466860766.240522",
    "name": "PJSIP/905-00000c74",
    "state": "Ring",
    "caller": {
      "name": "",
      "number": "020xxx"
    },
    "connected": {
      "name": "CID:020xxx",
      "number": "07xxx"
    },
    "accountcode": "",
    "dialplan": {
      "context": "macro-dialout-trunk",
      "exten": "s",
      "priority": 22
    },
    "creationtime": "2016-06-25T14:19:26.040+0100",
    "language": "en"
  },
  {
    "id": "1466860766.240524",
    "name": "SIP/siptrunk-000003fc",
    "state": "Down",
    "caller": {
      "name": "CID:02033554047",
      "number": "07xxx"
    },
    "connected": {
      "name": "",
      "number": "020xxx"
    },
    "accountcode": "",
    "dialplan": {
      "context": "ext-did",
      "exten": "07xxx",
      "priority": 1
    },
    "creationtime": "2016-06-25T14:19:26.264+0100",
    "language": "en"
  }
]

Эта информация о канале дает нам все, что нам нужно, в сжатом, легко усваиваемом формате — канал PJSIP (т. е. расширение), состояние, CID исходящей магистрали и набираемый исходящий номер.

Тем не менее, конечная точка /events, насколько я понимаю, зависит от того, создадите ли вы «приложение» в Asterisk (из чего я могу собрать, например, конференцию или что-то в этом роде?) — и, несмотря на два дня попыток различных вещей с использованием wscat и чтения документации, я могу не вижу способа, с помощью которого вы можете подписаться на канал WS, который вернет вам все события, аналогичные приведенному выше JSON.

Я неправильно понимаю намерения поддержки WS с Asterisk 13? Разве это не предназначено для этой цели? Есть ли лучший способ достичь моей цели без опроса /channels? Любая помощь/указатели приветствуются.


person iam    schedule 25.06.2016    source источник


Ответы (1)


Я думаю, что поддержка Asterisk WebSockets предназначена для взаимодействия между браузером WebRTC и Asterisk. Обычно WebSockets используются для передачи SIP-сообщений из веб-браузера (см. SIPml и JSSip). Так что это не замена ami.

Обновление: кажется, что теперь Asterisk также использует веб-сокеты для ARI, поэтому мое первоначальное предложение неверно, извините. Итак, согласно еще один вопрос о переполнении стека вы должны использовать «приложение».

person user1802474    schedule 29.06.2016
comment
Спасибо за ответ - я видел эту ссылку, но, насколько я понимаю, она не очень помогает - она ​​зависит от того, действительно ли вы настраиваете приложение диалплана? Глядя на приведенный пример: POST localhost:8080/ari/applications /my_app/ Это предполагает, что мне нужно иметь приложение (my_app) в диалплане, например, конференцию? - person iam; 29.06.2016