2015-12-19 9 views
1

Я новичок в Asterisk. Мое требование - когда я получаю звонок, мне нужно идентифицировать идентификатор вызывающего абонента и вызывать этот идентификатор при ответе на вызов. У меня есть некоторые знания в AMI и AGI. Я хочу знать, как это сделать, используя php-скрипт.Asterisk AMI AGI Уведомление PHP Script

Любой пример или что-то, что я мог бы использовать для этого, пожалуйста, приложите сюда.

ответ

0

Если вы новичок в звездочке, вы можете использовать уже разработанные мягкие, как asternic fop/fop2. Это позволяет делать всплеск с callerid при входящем звонке, и я уверен, что будет проще получить эту работу.

Если вы все еще хотите сделать это с помощью звездочки, вы должны следить за событием «ссылка». Однако в этом случае не будет звонящего, так что вы также ищите события «NewChannel» и для «установленных» расширений с CALLERID (num) = что-то, что изменит callerid.

Вы можете подключать события, используя уникальный канал.

Эта задача не является тривиальной и требует эксперта по php.

Также вы можете изменить диалплан звездочки, чтобы инициировать действие UserEvent с информацией, необходимой для ответа на вызов, после чего просто собирайте UserEvents. Для этого требуется высокий уровень знаний в диалплане звездочки и низкий уровень php.

+0

Я encoradge использовать уже разработанные мягкой, если я не вижу никакого понимания звездочки в вопросе. – arheops

3

Это зависит от версии Asterisk, которую вы используете. Я бы рекомендовал использовать Asterisk 13, так как это как LTS, так и более приятные события AMI, чем другие версии.

Существует два подхода, которые вы можете предпринять здесь. Первое - использовать AMI, который будет проливать события на вас через TCP-сокет. Второй - использовать AGI, в частности FastAGI, который даст вашему удаленному управлению приложениями канал. В этом приложении вы можете самостоятельно извлечь Caller ID.

Если вы решили использовать AMI, вы должны в основном прослушивать два события: Newchannel - который поднимается при создании канала - и Newcallerid - который поднимается, когда изменяется идентификация стороны канала. Это должно охватывать большую часть времени, когда меняется идентификация участника, и должен предоставить вам как идентификатор вызывающего абонента канала, так и информацию о подключенной линии, которая является идентификатором стороны стороны, с которой разговаривает канал.

Вы не должны нуждаться в подсобытий Link в Bridge случае (который не существует в 13, и заменяется BridgeEnter/BridgeLeave событий) - что то, что я думаю, что Arheops имел в виду. Ссылка возникает только тогда, когда канал «связан» с другим каналом в мосту и не имеет отношения к идентификатору вызывающего абонента. Идентификация партии может измениться в этой ситуации, но это будет передано в событии NewcallerId, поэтому ее бессмысленно слушать.

В качестве альтернативы вы можете использовать FastAGI. Если вы идете по этому пути, вы хотите, чтобы в вашем диалплане то, что вызывает ваш FastAGI сервер:

exten => _X.,1,NoOp() 
same => n,AGI(agi://127.0.0.1) 
same => n,... 

В вашем сценарии - которые могут быть записаны в большом разнообразии языков, учитывая количество AGI libraries доступны - вы можете извлечь CallerID с помощью команды get variable и функции CALLERID. Ниже приведен пример в Node.js:

return agi.getFullVariable('${CALLERID(NUMBER)}').then(function (number) { 
    callerId.number = number; 

    return agi.getFullVariable('${CALLERID(NAME)}'); 
}).then(function (name) { 
    callerId.name = name; 

как в сторону, ничего из этого не является «экспертом» уровень Звездочки манипуляции.Это просто требует некоторого программирования и базового понимания API Asterisk. Удачи!

+0

Да, но это требует изменения диалплана, для которого требуется понимание того, как работает dialplan. Также его вопрос был не callerid, а всплывающее окно, которое требует макроса вызова или события AMI на мосту, извините. – arheops

0

Если всплывающее окно в браузере подходит для вас, я предлагаю использовать websocket для уведомления веб-страницы о новом вызове (со всеми параметрами). Вы можете сделать это, прослушивая события AMI и отправляя данные в браузеры с помощью nodejs, при этом вы можете избежать опроса на сервере Asterisk, чтобы проверить, отвечает ли вызов.

Посмотрите на этот код: https://www.backloop.biz/en/products/asterisk-call-notifier-en

 Смежные вопросы

  • Нет связанных вопросов^_^