freeswitch针对不同的返回状态播放提示音
freeswitch呼叫未接通返回状态播放提示音
需求
部分线路没有返回正确的提示音或没有,但是又需要根据状态码播放一个提示音
准备提示音
将提示音上传到服务器,freeswitch默认要求是wav格式,8khz
修改拨号计划
<?xml version="1.0" encoding="utf-8"?>
<!-- http://wiki.freeswitch.org/wiki/Dialplan_XML -->
<include>
<context name="inter1">
<!--未接一声提示-->
<extension name="gejin">
<condition field="destination_number" expression="^(\d{8})$"/>
<condition field="caller_id_number" expression="^1\d{2}$">
<action application="set" data="continue_on_fail=true"/>
<action application="set" data="effective_caller_id_name=${caller_id_name}"/>
<action application="set" data="effective_caller_id_number=${caller_id_name}${caller_id_number}"/>
<action application="bridge" data="{absolute_codec_string='PCMA'}sofia/xxx/${destination_number}@ip:port"/>
<action application="transfer" data="play-cause-${bridge_hangup_cause}"/>
<action application="hangup"/>
</condition>
</extension>
<!--提示音-->
<extension name="Local_Extension_play-cause">
<!--condition field="destination_number" expression="^play-cause(.*)$"-->
<condition field="destination_number" expression="^play-cause-RECOVERY_ON_TIMER_EXPIRE">
<action application="playback" data="/du.wav"/>
</condition>
</extension>
</context>
</include>
其中bridge_hangup_cause是捕获到的落地返回的结束原因,设置后f6,呼叫测试可在控制查看到具体的值。
然后将该值例如RECOVERY_ON_TIMER_EXPIRE,写入提示音。
捕获到RECOVERY_ON_TIMER_EXPIRE状态,freeswitch将会返回/du.wav给主叫。
测试
测试正常的话,将会在RECOVERY_ON_TIMER_EXPIRE状态后播放/du.wav提示音。
其他方案
<!未接一声提示-->
<extension name="gejin">
<condition field="caller_id_name" expression="123"/>
<condition field="caller_id_number" expression="^1\d{10}$">
<action application="set" data="hangup_after_bridge=true"/>
<action application="set" data="continue_on_fail=RECOVERY_ON_TIMER_EXPIRE"/>
<action application="bridge" data="{absolute_codec_string='PCMA'}sofia/xxx/${destination_number}@ip:port"/>
<action application="playback" data="/opt/freeswitch/etc/freeswitch/du.wav"/>
<action application="hangup"/>
</condition>
</extension>
其中RECOVERY_ON_TIMER_EXPIRE也是根据实际呼叫测试找到落地返回的状态