Недавно я обновил нашу АТС до 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
? Любая помощь/указатели приветствуются.