Как я могу инициировать вызов и прочитать значение DTMF, используя asterisk-java?

Я разрабатываю Java-приложение, которое должно иметь возможность вызывать другую сторону с помощью Java-Asterisk и получать DTMF значение от пользователя. Я использую команду originate AMI, и я застрял. Я могу позвонить другой стороне, но вызов завершается сразу после ответа и возвращает success.
Как я могу инициировать вызов и прочитать значение DTMF?


person hkazemi    schedule 11.05.2014    source источник
comment
Этот вопрос точно такой же, как вы задали 2 дня назад. stackoverflow.com/questions/23472983/ . Извините, вы прочитали несколько книг, чтобы понять ответы.   -  person arheops    schedule 11.05.2014
comment
Я считаю, что могу использовать исходную функцию AMI для подключения пользователя к приложению, но не могу понять, как это сделать. документация очень слабая. я знаю, что использую файлы вызовов, но мне это не нравится!   -  person hkazemi    schedule 11.05.2014
comment
Я прочитал эту книгу: Поваренная книга Asterisk - O'Reilly - Глава 2 - Управление вызовами. Я должен иметь возможность использовать исходную функцию   -  person hkazemi    schedule 11.05.2014
comment
Извините, вы прочитали ПОЛНУЮ книгу, чтобы понять диалплан.   -  person arheops    schedule 11.05.2014


Ответы (1)


OriginateAction originateAction = new OriginateAction();
   originateAction.setChannel("SIP/1001");
   originateAction.setContext("from-internal");
   originateAction.setExten("1002");
   originateAction.setCallerId("Server");
   originateAction.setPriority(1);
   originateAction.setTimeout(30000);

   // connect to Asterisk and log in
   managerConnection.login();
   //send the originate action and wait for a maximum of 30 seconds for Asterisk
   // to send a reply
   ManagerResponse response= managerConnection.sendAction(originateAction, 30000);

Действие Originate в AMI позволяет вам отправить запрос по TCP-соединению для Asterisk для совершения вызова. Это наиболее популярный метод инициирования вызовов из пользовательских приложений. Пример, представленный в решении, начинается с того, что Asterisk делает новый вызов SIP/1001. Если телефон не отвечает в течение 30 секунд, вызов прерывается. Если на вызов ответили, он подключается к добавочному номеру 1002 в контексте from-internal в диалплане. После вызова расширения 1002 все, что мне нужно для чтения DTMF, это:

public class HelloAgiScript extends BaseAgiScript {
public void service(AgiRequest request, AgiChannel channel) throws AgiException
{

    // Answer the channel...
    answer();

    // ...say hello and get DTMF data...
    String data = getData("welcome");

    // ...and hangup.
    hangup();
}

}

нажмите здесь, чтобы увидеть оригинальный HelloAgiScript.

person hkazemi    schedule 12.05.2014