通过星号管理器发起对 sip 中继的呼叫 api java

Originate call to sip trunk via asterisk manager api java

所以我在 asterisk 和一般管理呼叫线路方面是一个新手,但我设法安装了 Asterisk Now 13 发行版,我已经用 pjsip 连接了 2 个 sip 电话并配置了一个 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,我尝试以各种方式使用它,但在 asterisk cli 和应用程序中都没有成功。

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

编辑: 我使用一个号码发起了一个去电呼叫,该号码完成了中继去电路由要求和 "from-internal"像这样的上下文:

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

我仍然不明白为什么这样做,以及它是否是我问题的正确答案。

所以答案在问题的编辑中。我能找到的生成呼出电话的唯一方法是发起该呼叫 "internaly"(上下文 "from-internal" 恰好与发起内部呼叫时使用的上下文相同)引入目标号码完成 sip 中继的路由模式要求的值。

示例: 我为 sip trunk( trunk1 ) 配置了一条路由,其模式 (RegEx): [0]{1}/number/ 这意味着在任何数字的前面加上 0是该路由的有效值,它将尝试使用 trunk1 进行呼叫。

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

结论是:

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

这将使分机 201 首先振铃,当被接听时,它将尝试使用 sip 中继拨打 [numberToCall],因为带有 0 的路由是 "called"。

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

 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.