【问题标题】:Asterisk: forwarding a call without answering immediately星号:转接电话而不立即接听
【发布时间】: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))时,它会执行以下操作:

  1. 来电者:响了
  2. SIP 电话(或软件)响铃
  3. SIP 电话接听电话
  4. SIP 电话:没有声音。
  5. 来电者:它停止响铃,没有声音

当我在 Dial(...) 命令之前添加命令 Playback(invalid) 时,它完全不同:

  1. 来电者:响了
  2. 来电者:已接听电话并读取“无效”消息。
  3. 来电者:响铃(但来电已接听且来电者支付此响铃时间)
  4. SIP 电话(或软件)响铃
  5. SIP 电话接听电话
  6. 呼叫已成功连接

似乎当且仅当在 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


【解决方案1】:

我无法创建有效的零长度声音,但以下解决方案对我来说似乎已经足够了:

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))

现在,它可以工作了:

  1. 来电者拨打电话。
  2. 创建了对 address@somewhere.com 的调用。
  3. 呼叫 address@somewhere.com 由用户接听。
  4. 向地址@somewhere.com 播放短声(即哔哔声)
  5. 原始呼叫得到应答和桥接。

在这种情况下,呼叫者听不到蜂鸣声。仅向 address@somewhere.com 播放声音。这会在通过 address@somewhere.com 接听电话和接听原始电话之间产生短暂的停顿。暂停时会播放beeperr。

也许 directmedia=no 是解决方案的一部分,但我不确定。

【讨论】:

    【解决方案2】:

    是的,正确的方法是拨号。

    如果您没有收到任何响铃,您可以使用星号和 gsm 网关的响铃/早期媒体参数。

    但是,如果您使用廉价的 gsm 网关,您将无法向提供商方发送任何内容(gsm 提供商不允许这样做)。要通过 gsm 网络发送早期媒体,您必须通过 e1 线路等数字设备连接到 gsm 提供商。

    作为选项,您可以尝试使用带 r 选项的拨号命令或在拨号前使用振铃命令,但这很大程度上取决于 gsm 网关设置。

    【讨论】:

    • 它没有帮助。当我在拨号命令之前将“r”标志添加到拨号命令或 Ringing() 时,没有任何改变。请注意,在 SIP SW 应答呼叫之前,我会一直响铃。接听电话后,主叫方和被叫方都听不到任何声音。但是在拨号命令之前添加一个播放命令就可以了。可能是因为拨号时已接听电话。顺便说一句:GSM 网关只是一个通过 chan_dongle 连接的 USB 加密狗。
    • 尝试添加到中继设置directmedia=no。
    • 我在 sip.conf 中添加了 directmedia=no。当我接听电话时,主叫方听到噪音,而被叫方(pbxes.org 上的 SIP)什么也没听到。请注意,在相同设备之间通过 SIP 直接呼叫是有效的。顺便说一句:CPU 负载(通过 htop 测量)并不高,调用时约为 20 %。
    • 我认为 chan_dongle 只是不支持发送铃声或您的设备不支持或类似的东西。很抱歉,chan_dongle 非常具有实验性,需要专家进行正确设置/调试。
    • 响铃总是正确的。接听电话时的声音不正确。你会推荐除了 chan_dongle 以外的任何东西吗?
    【解决方案3】:

    我的建议是这样的:

    1. 打开您的第一个呼叫,将他们引导到动态会议中,播放铃声。将会议号设置为唯一的 8 位数字。
    2. 打开您的第二个通话,并将上述会议号码存储为频道变量。
    3. 如果第二个呼叫应答,则读取通道变量,然后将该呼叫挂断到相应的会议中。
    4. 如果第二个电话没有接听,则挂断第一个电话。您可以通过轮询 AMI 来确定只有一名参与者的所有会议,检查其频道的“摘机”时间,如果时间过长,则意味着无应答/无加入。

    我在一个类似的客户项目中使用过这种方法,它很容易作为 Asterisk Dial Plan 和 AGI 的组合来实施。 我使用假脱机呼叫文件作为使用适当的通道变量等运行拨号的一种方式。它简单、快速、干净。

    【讨论】:

    • 我可以在第二个电话被接听之前不接听原始电话吗?请参阅添加的注释“似乎当且仅当呼叫没有明确应答时才会出现问题......”。
    【解决方案4】:

    嗯,

    在我看来,您的主要问题不是直接与拨号方案相关,而是与网络相关。听不到任何声音的情况通常是由于您的 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 消息,并且“R”参数应生成本地铃声,以防远端不这样做。

    如果这不能解决问题,我建议您将 sip.conf 配置传递给 http://www.pastebin.ca,并与我们分享链接,以便我们查看。

    尼尔斯

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多