首先看看有哪幾個timeout?
call_timeout
bridge_answer_timeout
originate_continue_on_timeout
originate_timeout
leg_progress_timeout
leg_timeout
作用則分別是:
1. call_timeout 在進行bridge等時,b leg響鈴時長,但在具體應用中,對於內線還可以用,而外線,由於國內運營商的原因,會有掛斷語音,所以使用它會存在一些問題,同時它是設置在a leg之上的。
如果您沒有使用 {ignore_early_media=true},則一旦收到早期媒體信號, call_timeout 就不再適用。
2. bridge_answer_timeout 可以容忍處於早期媒體中的bridge沒有被應答(可以在任何一條腿上設置)時間。
3. originate_continue_on_timeout 控制bridge是否在超時后繼續運行。 此變量在每個 | 之后重置超時。可以用於順震。 默認為 false:第一次超時就掛斷。
4. originate_timeout 用於定義originate/bridge過程中的呼叫時長,定義了這個時長如果沒有answer就會timeout了。
5. leg_progress_timeout 指定在獲得媒體之前等待的最長時間(無論是早期媒體、振鈴還是應答),從而避免轉到特定線路的語音郵件。
6. leg_timeout 它類同於originate_timeout,但是它的可自定義面應算是更廣,比如順振時
<
action
application
=
"bridge"
data
=
"[leg_timeout=15]user/hastoanswerquickly/some.domain.com,[leg_timeout=60]user/hasaminutetoanswer@some.domain.com"
/>
一般來說,如果是一個主動外呼動作,要定義超時,那么應是:
originate {originate_time=30}sofia/gateway/xx/018621575908 &echo
如果是呼入時轉到其它外線上,在dialplan中配為 :
<action application="bridge" data="[originate_timeout=20]sofia/gateway/xx/018621575908"/>
但是如果有早期媒體(鈴聲),就會失效,需要加參數 ignore_early_media=true :
<action application="bridge" data="[originate_timeout=20,ignore_early_media=true]sofia/gateway/xx/018621575908"/>
除了以上三個呼叫時的timeout還有個限定最長通話時長的需求,對吧!
execute_on_answer='sched_hangup +300'
以秒計
直接 originate 實際測試: (fs v1.6.20)
---- 無效
originate [call_timeout=10,origination_caller_id_number=66666666]sofia/external/sip:18000000000@123.123.123.123 &echo
originate [leg_timeout=10,origination_caller_id_number=66666666]sofia/external/sip:18000000000@123.123.123.123 &echo
originate {leg_timeout=10,origination_caller_id_number=66666666}sofia/external/sip:18000000000@123.123.123.123 &echo
originate [originate_timeout=10,ignore_early_media=true,origination_caller_id_number=66666666]sofia/external/sip:18000000000@123.123.123.123 &echo
originate {originate_timeout=10,origination_caller_id_number=66666666}sofia/external/sip:18000000000@123.123.123.123 &echo
originate {call_timeout=10,ignore_early_media=true,origination_caller_id_number=66666666}sofia/external/sip:18000000000@123.123.123.123 &echo
----- 有效
originate {leg_timeout=10,ignore_early_media=true,origination_caller_id_number=66666666}sofia/external/sip:18000000000@123.123.123.123 &echo
originate {originate_timeout=10,ignore_early_media=true,origination_caller_id_number=66666666}sofia/external/sip:18000000000@123.123.123.123 &echo
上面是直接測試 originate ,沒有測試 bridge 情況。
參考:
https://freeswitch.org/confluence/display/FREESWITCH/Variables+Master+List
https://freeswitch.org/confluence/display/FREESWITCH/call_timeout