所以我总是在星号和管理电话线的新手,但我设法安装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-ptsn
和channel originate local/201@from-local extension number@trunkName
。
PJSIP主干的上下文来自-pstn,我尝试以各种方式使用它,但在星号cli和应用程序中都没有运气。
如何在发起呼叫时拨打PJSIP中继并拨打办公室电话?
编辑: 我使用一个号码来发起一个拨出呼叫,该号码完成了中继出局路由必需品和"来自内部"像这样的上下文:
channel originate Local/201@from-internal extension (prefix)numberToCall@from-internal
我仍然不明白为什么会这样,如果这是我问题的正确答案。
答案 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.