首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过asterisk-java传出IVR

通过asterisk-java传出IVR
EN

Stack Overflow用户
提问于 2014-04-23 14:42:33
回答 1查看 570关注 0票数 0

我正在使用Asterisk和asterisk-java构建简单的外发IVR。我在同一网络中的两台不同的计算机(A和B)上安装了Xlite软件电话,并将它们设置在asterisk上,我可以成功地呼叫它们。这是我的asterisk-java代码

代码语言:javascript
复制
public class PhoneUtility {

    private static ManagerConnection instanceManagerConnection;

    private static ManagerConnection getManagerConnectionInstance() {
        if (instanceManagerConnection == null) {
            ManagerConnectionFactory factory = new
                    ManagerConnectionFactory("192.132.0.01", "admin", "amp111");
            instanceManagerConnection = factory.createManagerConnection();
        }
        return instanceManagerConnection;
    }

    public static boolean phoneCall() {
        try {
            ManagerConnection managerConnection = getManagerConnectionInstance();
            OriginateAction originateAction;
            ManagerResponse originateResponse;

            originateAction = new OriginateAction();
            originateAction.setChannel("SIP/ivan");
            originateAction.setCallerId("1234");
            originateAction.setContext("ivr-ext");
            originateAction.setExten("1235");
            originateAction.setPriority(new Integer(1));
            originateAction.setActionId("2");
            originateAction.setTimeout(300000l);
            originateAction.setAsync(new Boolean(false));

            // connect to Asterisk and log in
            managerConnection.login();

            AsteriskServerImpl asteriskServer = new AsteriskServerImpl(managerConnection);
            AsteriskChannel asteriskChannel = asteriskServer.originate(originateAction);

            // Play a prompt by text to speach 


            Character dtmf = asteriskChannel.getDtmfSent();
            if (dtmf.equals("1")) {
                managerConnection.logoff();
                return true;
            } else {
                managerConnection.logoff();
                return false;
            }

        } catch (Exception e) {
            System.out.println(e);
            return false;
        }
    }
}

我在计算机A中执行代码(调用phoneCall() )来调用计算机B,当代码在计算机A中执行时,我的软电话首先在计算机A中振铃,我必须在计算机A上应答,然后计算机B软电话振铃,我如何通过编码自动为计算机A打开通道(我根本不想在计算机A中有软电话)

EN

回答 1

Stack Overflow用户

发布于 2014-04-24 08:12:39

您可以先使电话B振铃,如果应答,则电话A振铃( IVR -分机将由IVR应用程序取代,它将自动应答)为:

交换扩展名为CallerID,如下所示:

代码语言:javascript
复制
        originateAction = new OriginateAction();
        originateAction.setChannel("SIP/1235");
        originateAction.setCallerId("1235");//put the target extension here
        originateAction.setContext("ivr-ext");
        originateAction.setExten("1234"); //put IVR-extension  here
        originateAction.setPriority(new Integer(1));
        originateAction.setActionId("2");
        originateAction.setTimeout(300000l);
        originateAction.setAsync(new Boolean(false));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23236760

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档