【发布时间】:2018-06-18 19:42:04
【问题描述】:
我想转接一个电话。我可以定义分机、接听电话和使用拨号命令。但 t 不是我想要的。我不想立即接听电话。我宁愿等待第二个电话被接听。
怎么做?当我只使用 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))。但我不知道如何在宏中加入这两个调用。
有什么想法吗?
编辑:说清楚。当我只使用 Dial(例如 Dial(SIP/uri) 或 Dial(SIP/uri, 60, r))时,它会执行以下操作:
- 来电者:响了
- SIP 电话(或软件)响铃
- SIP 电话接听电话
- SIP 电话:没有声音。
- 来电者:它停止响铃,没有声音
当我在 Dial(...) 命令之前添加命令 Playback(invalid) 时,它完全不同:
- 来电者:响了
- 来电者:已接听电话并读取“无效”消息。
- 来电者:响铃(但来电已接听且来电者支付此响铃时间)
- SIP 电话(或软件)响铃
- SIP 电话接听电话
- 呼叫已成功连接
似乎当且仅当在 Dial(...) 命令之前没有明确应答呼叫(例如通过 Playback(...) 或 Answer())时才会出现问题。因此,以下内容可能会有所帮助(类似 JQuery 的伪代码):
call_1.Dial(...).onAnswer(function(call_2){
call_1.Answer();
});
Asterisk 尝试了类似的方法,但 Asterisk 的方式有问题。
当然,在 Dial(...) 之前添加 Answer() 有效,但我不想在重定向的呼叫被应答之前接听电话
我几乎已经通过使用 Dial(SIP/..., timeout, A(invalid)) 解决了这个问题。现在,我必须使用另一种(零长度或几乎为零长度)声音。
【问题讨论】:
-
这是一个“温暖”或“有人参与”的前锋,还是“盲人”?
-
这是从GSM到SIP的无条件呼叫转移。
-
您能检查一下您的 sip 客户端是否可以使用 gsm 编解码器吗?对我来说听起来像是编解码器转码问题。如果 Asterisk 明确接听电话,那么它可能会自动为您转码,但如果它只是来回转发呼叫元数据,它可能不会意识到这两个电话使用不兼容的编解码器...
-
我的客户端 (SIPDroid) 肯定支持 GSM 编解码器并且编解码器已启用。但是,原来的 GSM 编解码器用的不多。在这两种情况下,它都使用 PCMA (aLaw) 编解码器。
-
我做了一些额外的研究,发现 Dial(SIP/..., timeout, A(invalid)) 可以解决问题。现在,我只需要制作一个空的声音文件并使用它来代替 invalid.gsm。
标签: asterisk phone-call forwarding