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