Обнаружить входящий звонок с помощью Asterisk и узнать, кому этот звонок - PullRequest
4 голосов
/ 04 марта 2010

В настоящее время я пишу службу Windows, которая использует Asterisk AMI, чтобы определить, когда поступает вызов, а затем выполнить веб-запрос, основываясь на том, от кого поступил вызов и на кого он направляется. Кто-нибудь знает о событии в Asterisk, которое я мог бы прослушать, чтобы включить обе эти детали? Мне нужен номер абонента вне системы, который звонит, но все, что я мог бы использовать для определения внутреннего вызываемого номера телефона, подойдет, если его можно использовать за пределами звездочки.

Я смотрел на события, и у них всех есть номер внешнего вызывающего абонента, однако ни один из них не связывается с внутренним вызывающим абонентом, кроме как с uniqueid, который, если я не создам их словарь в службе, я не буду быть в состоянии использовать.

Ответы [ 2 ]

6 голосов
/ 10 марта 2010

Итак, в конце концов мне удалось сделать это, используя только AMI и прослушивая события вызова. С тем, к чему мы хотели получить доступ, я прослушал события Newchannel, события Dial и события Hangup, хотя если все, что вам нужно, это количество звонящих и количество звонящих, я вполне уверен, что вы могли бы уйти с мониторинга только события Dial.

Каждый раз, когда получалось событие Newchannel, я создавал объект Channel и добавлял его в список каналов, которые в настоящее время находятся на сервере Asterisk. Затем, прослушивая события Dial с помощью Subevent of Begin, я смог извлечь уникальные идентификаторы каналов обеих сторон, участвующих в вызове, а затем получить соответствующие номера. Когда событие Hangup было получено, я удалил разрушаемый канал. Похоже, сейчас это работает отлично, хотя у нас не было достаточно времени, чтобы протестировать его, так что, надеюсь, это правильно.

0 голосов
/ 04 марта 2010

У меня есть идея, но вам, вероятно, не понравится ответ:)

Мы пытались это сделать, но потерпели неудачу, поэтому сделали что-то злое:)

То, что мы сделали, - это написали сценарии agi, и они вызывали их с помощью интерфейса диспетчера, а затем очищали командную строку.

Такие вещи, как основные каналы шоу, краткие и т. Д., Это икки, но это работает .. мы использовали regex для анализа вывода строки, а затем получили информацию оттуда, единственная проблема с такими вещами заключается в том, что вы должны смотреть каждый раз вы исправляете, поскольку выходные данные из командной строки имеют тенденцию менять исправление на исправление.

Если вы обнаружите способ сделать это, используя c # api и не используя agi, я был бы очень заинтересован, но мы просто не могли бы делать то, что мы хотели с api, не прибегая в конце концов к сценариям agi.

...