先看一段简单的dialplan:
<action application="set" data="continue_on_fail=true"/>
<action application="bridge" data="user/1001"/>
<action application="log" data="ERR run here"/>
<action application="bridge" data="user/1002"/>
设置continue_on_fail为true之后,如果呼叫用户1001失败,fs会继续执行,也就是先打印日志,再呼叫用户1002
反之,如果continue_on_fail不为true(默认值),log和bridge这二个app就没有执行的机会了
continue_on_fail这个名字起的不错
当然也可以指定hangup cause的列表:
<action application="set" data="continue_on_fail=NORMAL_TEMPORARY_FAILURE,USER_BUSY,NO_ANSWER,TIMEOUT,NO_ROUTE_DESTINATION"/>
<action application="bridge" data="user/1001"/>
<action application="log" data="ERR hcause = ${originate_disposition}"/><action application="log" data="ERR sip status code = ${sip_invite_failure_status}"/>
<action application="bridge" data="user/1002"/>
留意originate_disposition和sip_invite_failure_status这二个通道变量
顺便普及下fs常识
fs是b2bua server,这意味着uac(主叫)跟fs协商,比如编码是PCMA, uas(被叫)跟fs协商,比如编码是PCMU,主叫和被叫的编码可以不同,可以这样实现:
<action application="set" data="absolute_codec_string=PCMA"/>
<action application="bridge" data="[absolute_codec_string=PCMU]user/1001"/>
如果dialplan是这样配置:
<action application="bridge" data="user/1001"/>
现在jssip透过fs呼叫microsip
jssip默认编码可能是opus+pcma+pcmu等等
fs如果是默认配置,那么fs自动跟jssip协商成opus编码,然后用这个编码(单个编码)跟microsip去协商,但如果已经配置了通道变量呼入呼出混合编码(media_mix_inbound_outbound_codecs为true),那么fs会offer多个编码跟microsip协商