【问题标题】:How can I originate a call and read DTMF value using asterisk-java?如何使用 asterisk-java 发起呼叫并读取 DTMF 值?
【发布时间】:2014-05-11 07:46:29
【问题描述】:

我正在开发一个 java 应用程序,它应该能够使用Java-Asterisk 调用另一方并从用户那里获得一个 DTMF 值。我正在使用 AMI 的originate 命令,但我被卡住了。我可以打电话给对方,但接听后立即结束通话并返回success
如何发起呼叫并读取 DTMF 值?

【问题讨论】:

  • 这个问题和你两天前问的一模一样。 stackoverflow.com/questions/23472983/… 。很抱歉,您已经阅读了一些书籍来理解答案。
  • 我相信我可以使用 AMI 的发起功能将用户连接到应用程序,但不知道如何。文档非常薄弱。知道我正在使用呼叫文件,但我不喜欢它!
  • 我读过这本书:“Asterisk Cookbook - O´Reilly - Chapter 2 - Call Control”。我必须能够使用发起功能
  • 对不起,您已经阅读了整本书以了解拨号方案。

标签: java asterisk dtmf


【解决方案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);

AMI 中的 Originate 操作允许您通过 TCP 连接发送请求,以便 Asterisk 进行呼叫。这是从自定义应用程序发起呼叫的最流行的方法。解决方案中提供的示例首先让 Asterisk 对SIP/1001 进行新的调用。如果电话在 30 秒内没有接听,通话将被中止。如果呼叫被应答,它将连接到拨号方案中from-internal 上下文中的分机 1002。 调用 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();
}

}

click here to see the original HelloAgiScript.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多