FreeSWITCH 實現 雙線路呼叫(主備線路)


一、 今有業務需求如下

主線路未通,則使用備用線路
1. 直接撥打
2. 轉接
3. 三方通話

未通情況(主線路呼叫失敗): 
網絡或線路異常->呼叫超時 
線路或運營商異常->被叫非正常掛斷 

如果接收到線路上的回鈴和接通,則正常接入到主線; 
除此之外所有的異常未接通全部轉到備用線路上

考慮如何做的時候,先問問萬能的 www

於是得到了幾個通道變量:

continue_on_fail       bleg撥號失敗后是否繼續執行,不繼續就直接掛斷aleg
hangup_after_bridge    bleg掛斷后是否掛斷aleg
ransfer_after_bridge bleg掛斷后,aleg transfer目的的
park_after_bridge bleg掛斷后,aleg是否park,esl開發接口非常有用
exec_after_bridge_app bleg掛斷后后,aleg執行一個APP
api_after_bridge bleg掛斷后后,aleg執行一個API

此時是不是有些靈感了咧:)

二、 知識准備

1. continue_on_fail

控制無法接通被叫方(忙/離線)時發生的情況。如果true撥號計划繼續被處理。如果false撥號計划將停止處理。可以包含將繼續失敗的返回消息。

<action application="set" data="continue_on_fail=true"/>
<action application="set" data="continue_on_fail=NORMAL_TEMPORARY_FAILURE,USER_BUSY,NO_ANSWER,NO_ROUTE_DESTINATION"/>
<action application="bridge" data="{transfer_after_bridge=你的流程}sofai/external/$1@gateway" />

或者使用Q.850原因代碼:

<action application="set" data="continue_on_fail=3,17,18,27"/>

 

2. hangup_after_bridge

 控制處於橋接狀態且被叫方(B)掛斷時主叫方(A)發生的情況。如果true撥號計划將停止處理,並且A分支將在B分支終止時終止。如果false(默認)B腿終止后,撥號計划將繼續處理。

park_after_bridgetransfer_after_bridge之后進行檢查

<action application="set" data="hangup_after_bridge=true"/>

 

3. transfer_after_bridge

 此變量可以控制呼叫掛斷時發生的情況。 可以將其與mod_fifo結合使用以控制“代理”,有可能將其發送回代理隊列。 在park_after_bridge之后和hangup_after_bridge之前檢查。

在橋接完成並將leg轉移到指定的撥號計划后,將清除變量。

<action application="set" data="transfer_after_bridge=1000"/>
<action application="set" data="transfer_after_bridge=1000:XML:default"/>

 

4. park_after_bridge

 如果設置為true,它將在橋接返回后駐留呼叫。 在transfer_after_bridge和hangup_after_bridge之前進行檢查。

<action application="set" data="park_after_bridge=true"/>
<action application="bridge" data="sofia/gateway/myprovider/5551231234"/>

 

5. exec_after_bridge_app

 橋接終止后,執行應用程序命令。 與exec_after_bridge_arg一起使用。 相反,要在建立橋接時執行,請使用execute_on_answer。

<action application="set" data="exec_after_bridge_app=transfer"/>
<action application="set" data="exec_after_bridge_arg=2102"/>

 

6. api_after_bridge

 橋接后執行API命令

<action application="set" data="api_after_bridge=luarun post-chime.lua"/>

 

7. bridge

bridge的參數可以寫多個 target, 用逗號(,)或者豎線(|)分割開, 從第二個 target 開始不可以使用花括號({})來設置參數,要用中括號([])

bgapi originate user/8001 &bridge({continue_on_false=true,origination_caller_id_number=31580608}user/8003,[RECORD_STEREO=false,origination_caller_id_number=6898061]user/8002)

bgapi originate user/8001 &bridge([continue_on_false=true,origination_caller_id_number=31580608]user/8003|[RECORD_STEREO=false,origination_caller_id_number=6898061]user/8002)

 逗號分割的同時撥打;  豎線分割的逐個撥打,撥打成功后面的就不撥打了!

之前測試老是不成功,問大老說是要自己手動實現~~

不甘心,xml都能配置,esl怎么就不行啊!?

然后一邊找官方文檔,一邊測試測試再測試,,花了不少時間,一點點測試出來的~!!!

三、 實踐出真知(干貨)

1. xml 配置

<condition field="${sip_from_user}" expression="8001|8002|8003|8004|8005|8006|8007|8008|8009|8010">
    <action application="set" data="continue_on_fail=true"/>
    <action application="set" data="effective_caller_id_number=90643"/>
    <action application="set" data="effective_caller_id_name=90643"/>
    <action application="bridge" data="sofia/external/sip:${destination_number}@1.2.6.4"/>
    <action application="set" data="effective_caller_id_number=90618"/>
    <action application="set" data="effective_caller_id_name=90618"/>
    <action application="bridge" data="sofia/external/sip:${destination_number}@8.2.6.5"/>
</condition>

 

或者這樣配置

<condition field="${sip_from_user}" expression="8001|8002|8003|8004|8005|8006|8007|8008|8009|8010">
    <action application="bridge" data="[RECORD_STEREO=false,origination_caller_id_number=80608,sipname=waihu,cti_dial=1]sofia/external/sip:${destination_number}@8.2.6.5|[RECORD_STEREO=false,origination_caller_id_number=80618,sipname=gw2,cti_dial=1]sofia/external/sip:${destination_number}@1.5.2.6:6060"/>
</condition>

 

2. esl 命令

bgapi originate user/8001 &bridge([RECORD_STEREO=false,origination_caller_id_number=80608,sipname=waihu,cti_dial=1]sofia/external/sip:xxxxxx@8.2.6.5|[RECORD_STEREO=false,origination_caller_id_number=80618,sipname=gw2,cti_dial=1]sofia/external/sip:xxxxxx@1.5.2.6:6060)

其他的 uuid_transfe , 等一樣

三方通話 一樣使用

 

---the End---


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM