mmmaaak
@mmmaaak

Как узнать результат Originate Action по AMI?

Господа, вопрос следующий. Пишу утилиту, которая будет по AMI посылать Originate запрос Астериску, чтоб тот звонил на мобилку. Дали мне значит данные для подключения к Астериску по AMI. Я намутил в интернете библиотечку Asterisk-Java. Делаю запрос таким образом:
final ManagerConnection managerConnection;

LogManager.getLogManager().reset();
Logger globalLogger = Logger.getLogger(java.util.logging.Logger.GLOBAL_LOGGER_NAME);
globalLogger.setLevel(java.util.logging.Level.OFF);

ManagerConnectionFactory managerConnectionFactory = new ManagerConnectionFactory("XXXXX", XXXXX, "XXXXX", "XXXXX");
managerConnection = managerConnectionFactory.createManagerConnection();
OriginateAction originateAction;
ManagerResponse originateResponse;

originateAction = new OriginateAction();
originateAction.setChannel("XXXXX");
originateAction.setContext("XXXXX");
originateAction.setExten("XXXXX");
originateAction.setPriority(1);
originateAction.setAsync(false);
originateAction.setVariable("customernum", "XXXXX");
originateAction.setTimeout(new Long(30000));

try {
	managerConnection.login();
        originateResponse = managerConnection.sendAction(originateAction);
        System.out.println("ORIGINATE RESPONSE: " + originateResponse.getResponse());
        System.out.println("ORIGINATE MESSAGE: " + originateResponse.getMessage());
	System.out.println("ACTION ID: " + originateAction.getActionId());
} catch (IOException e) {
        e.printStackTrace();
} catch (AuthenticationFailedException e) {
        e.printStackTrace();
} catch (TimeoutException e) {
        e.printStackTrace();
} finally {
        managerConnection.logoff();
}


В итоге все звонится, настройки все верные. Но ORIGINATE RESPONSE всегда SUCCESS, а ORIGINATE MESSAGE всегда Originate successfully queued.
Но проблема в том, что мне нужно знать, как пользователь отреагировал на звонок (был доступен или нет, поднял трубку или нет и тд...). Как можно изменить способ отправки сообщения (может что посоветовать поправить в настройках астериска, я в его конфиге не бум-бум, но к админам доступ есть), чтоб получать какой-то фитбек при той или иной ситуации? Хелп ми плиз, проект горит )
  • Вопрос задан
  • 4325 просмотров
Решения вопроса 1
Нужно отправлять запрос асинхронно (async=true) и ловить OriginateResponse, в котором переменная Reason содержит код результата звонка. Значения кодов можно глянуть тут: www.voip-info.org/wiki/view/Asterisk+Manager+API+A... Если планируется отправлять запросы параллельно, то в запрос нужно добавить переменную actionid и ловить originateresponse с нужным actionid.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
путем изменения запроса этого не добиться

нужно слушать event-ы и разбирать их
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы