通过星号管理器api java

时间:2017-09-22 09:37:37

标签: java asterisk freepbx

所以我总是在星号和管理电话线的新手,但我设法安装Asterisk Now 13发行版,我已经连接了2个sip电话与pjsip并配置了一个sip中继,当我拨打外部号码时相应的前缀。现在我必须以编程方式发起呼叫,并将它们连接到本地扩展,我不知道如何实现,我似乎无法在数小时的搜索后在互联网上找到有关它的信息。

我设法通过以下方式将2个本地sip电话与星号管理器api和OriginateAction连接:

    originateAction = new OriginateAction();
            originateAction.setChannel(ConnectionType+"/"+extCaller);
            originateAction.setContext(context);
            originateAction.setCallerId(idCaller);
            originateAction.setExten(tDestination);
            originateAction.setPriority(priority);
            originateAction.setTimeout(timeoutCall);
 managerConnection.login();

        originateResponse = managerConnection.sendAction(originateAction, timeoutRequest);

我还尝试过此channel originate pjsip/201 extension number@from-ptsnchannel originate local/201@from-local extension number@trunkName

PJSIP主干的上下文来自-pstn,我尝试以各种方式使用它,但在星号cli和应用程序中都没有运气。

如何在发起呼叫时拨打PJSIP中继并拨打办公室电话?

编辑: 我使用一个号码来发起一个拨出呼叫,该号码完成了中继出局路由必需品和"来自内部"像这样的上下文:

channel originate Local/201@from-internal extension (prefix)numberToCall@from-internal

我仍然不明白为什么会这样,如果这是我问题的正确答案。

1 个答案:

答案 0 :(得分:1)

所以答案是在编辑问题时。生成我可以找到的传出调用的唯一方法是发起该调用“internaly”(使用上下文“from-internal”,恰好是在发起内部调用时使用的相同上下文)引入目标数值完成sip trunk的路由模式要求。

示例:  我有一个为sip trunk(trunk1)配置了一个带有模式(RegEx)的路由:[0] {1} / number /这意味着任何nubmer前面的0都是有效的该路由的值,它将尝试使用trunk1调用。

在AsteriskNow CentOS安装的情况下,它恰好与上下文“from-internal”有关。由于星号配置文件归FreePBX所有,因此建议使用FreePBX GUI而不是配置asterisk manualy的.conf文件。

结论是:

channel originate Local/201@from-internal extension (0)[numberToCall]@from-internal

这将使分机201首先响铃并且当它被拿起时将尝试使用sip中继拨打[numberToCall],因为带有0的路由被“呼叫”。

为了使用asterisk-java将该命令发送到星号,我编写了以下代码:

 ManagerConnectionFactory factory = new 
 ManagerConnectionFactory("serverIp", "username",
                    "passwd");
 ManagerConnection managerConnection=factory.createManagerConnection()
    OriginateAction originateAction=new OriginateAction();

     final String randomUUID=java.util.UUID.randomUUID().toString();

            System.out.println("ID random:_"+randomUUID);

            originateAction.setChannel([connectionType]+"/"+[callerExtension]);<-- SIP or PJSIP / 201(the phone that will ring first)
            originateAction.setContext("from-internal"); <-- Default FreePBX context
            originateAction.setCallerId([callerId]); // what will be showed on the phone screen (in most cases your phone)
            originateAction.setExten([targetExten]); //where to call.. the target extension... internal extension or the outgoing number.. the 0[nomberToCall] 
            originateAction.setPriority([priority]);// priority of the call
            originateAction.setTimeout(timeoutCall); // the time that a pickup event will be waited for
            originateAction.setVariable("UUID", randomUUID); // asigning a unique ID in order to be able to hangup the call.