我需要在Asterisk上实现的这个操作类似于呼叫转移,但有一些不同。这是对该系统的简化解释
有三个扩展:100、200和300。100到200之间的电话很便宜,从任何分机到300的电话都很贵。扩展300在远程设备上编程为仅接收和接受来自扩展200的呼叫。
扩展200编程为扩展300的"呼叫转发"(它添加到数据库中)
当分机100呼叫分机200时,分机200应该呼叫分机300并将呼叫转移到分机100。
我发现的呼叫转移示例建议使用来自分机100的Dial()
。
[context]
exten => s,1,Set(CFIM=${DB(CFIM/${ARG1})})
exten => s,n,GotoIf($["${CFIM}"!=""]?s-CFIM,1:s-NoCFIM,1)
exten => s,n,Hangup
exten => s-CFIM,1,Dial(Local/${CFIM},30,Ttr)
exten => s-CFIM,n,Hangup
exten => s-NoCFIM,1,Dial(${ARG1},30,Ttr)
exten => s-NoCFIM,n,Hangup
这种方法的问题在于,对300的呼叫实际上是由分机100(当前信道)进行的。这将为100产生昂贵的计费,并且分机300将接收来自100的呼叫,它将放弃该呼叫
我需要做的是代表分机200创建一个新频道,拨到300,然后将该呼叫转移到当前频道,这样分机300就可以接收来自200的呼叫,并生成两个计费:一个从100到200,另一个从200到300。
我试过使用Originate()
应用程序,但这对我来说不起作用,因为它会在200接通之前阻止(它不会这样做)
我能做些什么来解决这个问题吗?
为此使用本地通道。
请参阅freepbx.org系统followme模块,了解如何使用本地频道实现followme。
https://www.voip-info.org/wiki/view/Asterisk+本地+通道