Пожалуйста, войдите здесь. Часто задаваемые вопросы О нас
Задайте Ваш вопрос

ami узнать судьбу звонка

0

Добрый день. хочу через ami-asterisk сделать звонок, проиграть файл и узнать был ли ответ. пробую сделать через библиотеку asterisk-java

в extentions.conf прописал контекст

[from-ami]
exten => s,1,Answer 
exten => s,n,Wait(1) 
exten => s,n,Playback(hello-world,skip) 
exten => s,n,Hangup

в java

 originateAction = new OriginateAction();
        originateAction.setChannel("SIP/zadarma/number");
        originateAction.setContext("from-ami");
        originateAction.setExten("s");
        originateAction.setPriority(1);
        originateAction.setAsync(true);

звонит и файл проигрывает, но вот ответ в originateResponse ответ всегда одинаковый():

Response getResponse:  Success
Response Message:   Originate successfully queued
Response getServer: null
Response getActionId: null
Response getEventList: null
Response getDateReceived: Wed Aug 26 15:05:53 EEST 2015
Response getAttributes: {actionid=1121647253_6#, message=Originate successfully queued, response=Success}

как узнать, прошел звонок или нет, а также был ли прослушан файл?

удалить закрыть спам изменить тег редактировать

спросил 2015-08-26 16:35:32 +0400

ipvinner Gravatar ipvinner
54 42 5 28

обновил 2015-08-26 20:10:36 +0400

meral Gravatar meral flag of Ukraine
23347 24 20 177
http://pro-sip.net/

Comments

у вас setAsync(true); . звонок всегда будет успешный.

zzuz ( 2015-08-26 17:56:11 +0400 )редактировать

да, если включить asynс(false) - то можно хотя бы отловить, если звонок был сброшен, но в response: Originate failed error - т.е. не очень информативно(хотелось бы вытащить busy или no-answer, not-available или что там реально произошло). я так понял совершается вызов по каналу, указанному в параметре Channel, т.е. теоретически я могу отслеживать здесь неответ , если не ответили(по умолчанию 30000 - timeout) - то ловить исключение - но на исключении логику строить как-то неверно

ipvinner ( 2015-08-26 18:52:51 +0400 )редактировать
1

Обрабатывайте звонок в [from-ami] , вписав UserEvent .

zzuz ( 2015-08-26 19:09:50 +0400 )редактировать

о, спасибо!

ipvinner ( 2015-08-26 19:57:34 +0400 )редактировать

2 Ответа

1

В Asetrisk 13 добавили параметр otherChannelId, по которому можно сопоставлять события.

https://wiki.asterisk.org/wiki/display/AST/Asterisk+13+ManagerAction_Originate

Поглядите, если в вашей библиотеке поддержка этого параметра. Проблема возникает только в случае неответа, но при использовании otherChannelId в Hangup AMI событии он будет в поле uniquid https://wiki.asterisk.org/wiki/display/AST/Asterisk+13+ManagerEvent_Hangup, и проблема решается. Просто сохраняйте у себя otherChannelId и ждите по нему события.

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

ссылка удалить спам редактировать

ответил 2015-08-26 17:13:06 +0400

litnimax Gravatar litnimax
1453 11 8 29
http://www.pbxware.ru/

Comments

не возникает проблемы в случае неответа. во всех комерческих системах звонок уходит наружу через Local и неответ без вопросов отслеживается.

meral ( 2015-08-26 17:26:23 +0400 )редактировать
  1. Прям таки во всех?

  2. А если в контексте куда делается originate нет такого паттерна? Такой Originate на Local канет в лету тихо и незаметно.

litnimax ( 2015-08-26 18:12:03 +0400 )редактировать

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

meral ( 2015-08-26 20:08:02 +0400 )редактировать

Знаешь, однажды очень долго искали почему не работает обзвонка. Оригинейт уходит в никуда, хотя до этого все отлавливалось. Оказывается, админ неправильно добавил exten в контексте, где делался Local dial out.

litnimax ( 2015-08-26 21:48:43 +0400 )редактировать

вот поэтому не надо делать с минимальными знаними ядра обзвона. там еще куча глюков МОЖЕТ быть. есть полно йже написанных.

meral ( 2015-08-27 00:35:58 +0400 )редактировать

Скор ты однако на суждения... "Во всех системах", "минимальными знаниями". Это делал я, когда еще не было otherChannelId, и единственный способ отслеживания несостоявшихся вызовов Originate было использование Local канала. Изменили маршрутизацию в этом контексте, и перестали видеть неудавшиеся звонки. Долго искали, потому что искали косяк в софте и настройках в нем, а не в Asterisk'e.

litnimax ( 2015-08-27 11:57:04 +0400 )редактировать

ну вот. теперь ты тоже в курсе. почему не посмотрел в vicidial я даже не спрашиваю. последний раз я такое исправлял на прошлой неделе. вообще гдето раз в три месяца спрашивают с кустомными диллерами с такими симптомами. тоесть это не уникальный опыт у тебя. чтоб маршрутизацию не меняли, надо под диаллер отдельный контекст писать и в нем делать i екстеншен с предупреждениями большими буквами(что я и делаю).

meral ( 2015-08-27 15:48:24 +0400 )редактировать
1

Написать в ами

Carma: want to know

а если серйозно, то надо слушать все сообщения и сравнивать с Originate. можно например Async отключить .

поиск по теме

ссылка удалить спам редактировать

ответил 2015-08-26 17:07:39 +0400

meral Gravatar meral flag of Ukraine
23347 24 20 177
http://pro-sip.net/

обновил 2015-08-26 20:11:29 +0400

Comments

Не совсем понимаю, что значит слушать все сообщения? да, я пробовал выключить async, но и тогда в response не более информативно, допустим если сбросить звонок, то выдает: Originate failed error а хотелось бы знать, что там произошло, ответил или не ответил, сколько времени прослушал итд.

ipvinner ( 2015-08-26 17:13:56 +0400 )редактировать
1

AMI интерфейс выдает events. гуглите. в них будет вся инфа. если сложно, можете еще UserEvent выстреливать из диалплана. извините, задача явно коммерческая. поэтому сильно распинаться неохота.

meral ( 2015-08-26 17:25:20 +0400 )редактировать

Чувак, на то и есть Вопросы и Ответы, чтобы спрашивать тут, а не в гугле. А если неохота распинаться, тогда может лучше молчать в тряпочку?

litnimax ( 2015-08-26 18:13:57 +0400 )редактировать

литни, этот вопрос отвечен 10 раз. и стабильно раз в месяц очередной человек решивший заработать на создании обзвона вместо поиска или использования уже написаного спрашивает одно и то же. я выдал ключевые слова по которым можно это поискать.

meral ( 2015-08-26 20:06:56 +0400 )редактировать

Ваш ответ

Please start posting your answer anonymously - your answer will be saved within the current session and published after you log in or create a new account. Please try to give a substantial answer, for discussions, please use comments and please do remember to vote (after you log in)!
[скрыть предварительный просмотр]

Закладки и информация

Добавить закладку

подписаться на rss ленту новостей

Статистика

Задан: 2015-08-26 16:35:32 +0400

Просмотрен: 1,156 раз

Обновлен: Aug 26 '15

Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией GNU GPL.