根据挂机原因播放ivr

时间:2017-07-26 11:41:07

标签: freeswitch

有没有根据Hangupcause播放ivr?

现在我尝试了下面的拨号方案,但似乎无法正常工作。 所以请建议我是否有其他方法可以实现它。

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="freeswitch/xml">
<section name="dialplan" description="Custom_dialplan">
<context name="default">
<extension name="123456">
<condition field="destination_number" expression="123456">
<action application="set" data="effective_destination_number=123456"/>
<action application="set" data="transfer_on_fail=RECOVERY_ON_TIMER_EXPIRE auto_cause xml error"/>
<action application="bridge" data="sofia/gateway/Dummy_Gateway/123456"/>
<action application="log" data="AFTER BRIDGE"/>
</condition>
</extension>
</context>
<context name=error">
<action application="log" data="AFTER BRIDGE2"/>
<extension name="RECOVERY_ON_TIMER_EXPIRE" continue="true">
<action application="log" data="AFTER BRIDGE3"/>
<condition field="${originate_disposition}" expression="RECOVERY_ON_TIMER_EXPIRE"  continue="false" break="on-true">
<action application="log" data="AFTER BRIDGE4"/>
<action application="playback" data="/usr/local/freeswitch/sounds/en/us/callie/notinservice.wav"/>
</condition>
</extension>
</context>
</section>
</document>

1 个答案:

答案 0 :(得分:1)

当然,你的拨号方案中有很多错误,但重要的是:

  1. 在使用transfer_on_fail之前,您应该设置另一个强制性选项:

    <action application="set" data="continue_on_fail=true"/>
    <action application="set" data="failure_causes=RECOVERY_ON_TIMER_EXPIRE"/>
    
  2. 要删除该记录选项BRIDGE,因为它没用,而且永远无法处理。

  3. 我想提醒您注意拨号方案具有严格的结构,因此您无法在任何地方插入选项/操作。首先,您应该从上下文ERROR

  4. 中删除所有日志记录

    - 序列将是:context - &gt;扩展名 - &gt;条件 - &gt;行动。因此,您已通过动作播放公告设置了条件。

    - ! - 您已经掌握了电话处理,因此请管理此过程。在你的平台玩到A之后,你必须指示FreeSWITCH终止呼叫(它必须遵循&#34;播放&#34;):

        <action application="hangup" data="NORMAL_CLEARING"/>
    

    但是,我认为您的拨号方案无法正常工作,因为RECOVERY_ON_TIMER_EXPIRE是Freeswitch状态机的状态,它出现在SIP 408时。您应该在拨号方案中使用Q.850挂机原因,因此请尝试将其替换为NO_USER_RESPONSE。 您可能会发现Q.850挂断原因表here