我想转发一个电话。我可以定义扩展,接听电话并使用拨号命令。但是,这不是我想要的。我不想立即接听电话。我宁愿等第二个电话接听。
怎么做?当我只使用Dial(Sip / ...)而不回答时,双方都会完全沉默。
我已阅读(请参阅http://fonality.com/trixbox/forums/trixbox-forums/open-discussion/call-forward-without-answer-dialplan)可通过停用传真解决此问题。我卸载了传真模块,但没有解决问题。在同一页面上,我读过我可以尝试像http://www.voip-info.org/wiki/view/Asterisk%20auto-dial%20out那样的东西,但这看起来太先进了。
我有另一个想法。使用拨号(Sip / ...,60,M(a-macro))。但我不知道如何在宏中加入这两个调用。
有什么想法吗?
编辑:说清楚。当我只使用拨号(例如拨号(SIP / uri)或拨号(SIP / uri,60,r))时,它会执行以下操作:
当我在拨号(...)命令之前添加命令Playback(无效)时,它完全不同:
当且仅当在拨号(...)命令之前未明确应答呼叫时(例如通过播放(...)或应答()),似乎出现问题。所以,像下面这样的东西可能会有所帮助(类似JQuery的伪代码):
call_1.Dial(...).onAnswer(function(call_2){
call_1.Answer();
});
Asterisk尝试类似的东西,但Asterisk的方式是错误的。
当然,在拨号(...)之前添加Answer()有效,但我不希望在重定向呼叫被应答之前接听电话
我几乎用Dial(SIP / ...,超时,A(无效))解决了这个问题。现在,我要使用另一种(零长度或几乎零长度)的声音。
答案 0 :(得分:3)
我无法创建有效的零长度声音,但以下解决方案对我来说似乎已经足够好了:
exten => s,1,<log it>
exten => s,n,Dial(SIP/address@somewhere.com, 600, A(beeperr))
exten => s,n,GotoIf($["${DIALSTATUS}" = "ANSWER"]?:callfail)
exten => s,n(callfail),<report call fail>
代码中最重要的部分是Dial(SIP/address@somewhere.com, 600, A(beeperr))
。
现在,它有效:
在这种情况下,来电者听不到蜂鸣声。声音仅播放到address@somewhere.com。这会在通过address@somewhere.com接听电话和接听原始电话之间短暂停顿。在暂停时,会播放beeperr。
也许directmedia = no是解决方案的一部分,但我不确定。
答案 1 :(得分:2)
是的,正确的方法就是拨打。
如果您没有响铃,您可以使用星号和gsm网关的铃声/早期媒体参数。
但是如果您使用便宜的gsm网关,则无法向提供商端发送任何内容(gsm提供商不允许这样做)。要通过gsm网络发送早期媒体,您已通过e1 line等数字设备连接到gsm提供商。 / p>
作为选项,您可以尝试使用r选项拨打命令或在拨号前使用振铃命令,但这非常依赖于gsm网关设置。
答案 2 :(得分:0)
我建议的是:
我已经将这种方法用于类似的客户端项目,并且很容易实现Asterisk Dial Plan和AGI的组合。 我使用假脱机调用文件作为使用适当的通道变量等运行拨号的方法。它简单,快速,干净。
答案 3 :(得分:0)
那么,
听起来我的主要问题不是直接与拨号方案相关,而是与网络相关。没有听到任何声音的情况通常是由位于一个位置的Asterisk服务器以及位于NAT防火墙后面的客户端和终端引起的。或者,另一种可能性是,您的Asterisk服务器位于防火墙后面,也是其中一方。在其中任何一个中,如果您的sip.conf配置配置不正确,它将无法正常工作。
现在,如果您想尝试一些时髦的东西,请执行以下操作:
exten => _XXXX,1,Noop(*** Here we Go ***)
exten => _XXXX,n,Playback(SomeShortFile,noanswer)
exten => _XXXX.n,Dial(Your SIP destination,60,R)
第二行应该将SIP 180消息更改为SIP 183消息和&#34; R&#34;在远程端没有的情况下,参数应该产生本地铃声。
如果这不能解决问题,我建议您将您的sip.conf配置转到http://www.pastebin.ca,并与我们分享链接,以便我们查看。
Nir S