freeswitch知識點:
播放錄音命令:originate user/1000 &playback(/tmp/123.wav)
查看當前注冊用戶命令:sofia status profile internal reg
查看freeswitch監聽的ip和port:sofia status
action有兩個參數,一個是application,一個是data。其中
application是指一個注冊的應用程序。data是給這個應用程序傳遞的參數。
在anti-action里不能使用$1這樣的變量,原因是expression沒有匹配成功,所以$1沒有值。
內聯action:
先說說hunting和executing,hunting就是freeswitch掃描符合條件action放到一個隊列里,executing就是執行隊列里的action。
所以,在通常情況下freeswitch中的hunting和executing是分兩步執行的。這說意味着在executing時設置的變量,在hunting時
是不可用的。也就是說,即使我們能用可以顯示變量的值,但是在我們的xml文件中的condition中可能是不可用的。
要解決這個問題就要用到inline參數。
inline="true" application="set" data="some_var=some_val"/>
action的參數inline設置為"true"時,action會在hunting時執行。這樣,后面的condition就可以使用這個${some_var}變量了。
另外,用inline方式執行的application不能顯示在cdr里,原因是它們在hunting時就已經執行了。
通話時,FreeSWITCH 的作用是將兩個 Channel(a-leg 和 b-leg,通常先創建的或占主動的叫 a-leg)橋接(bridge)到一起,使雙方可以通話。
在 dialplan 中,有兩個程序可以給 Variable 賦值:
<action application="set" data="my_var=my_value"/>
<action application="export" data="my_var=my_value"/>
以上兩條命令都可以設置 my_var 變量的值為 my_value。不同的是 -- set 程序僅會作用於“當前”的 Channel (a-leg),
而 export 程序則會將變量設置到兩個 Channel (a-leg 和 b-leg)上,如果當時 b-leg 還沒有創建,則會在創建時設置。
另外,export 還可以只將變量設置到 b-leg 上:
截取 Variable 的一部分
可以使用特殊的語法取一個 Variable 的子串,格式是“${var:位置:長度}”。其中 “位置” 從 0 開始計烽,若為負數則從
字符串尾部開始計數;如果“長度”為 0 或小於 0,則會從當前“位置”一直取到字符串結尾(或開頭,若“位置”為負的話)。
例如 var 的值為 1234567890,那么:
${var} = 1234567890
${var:0:1} = 1
${var:1} = 234567890
${var:-4} = 7890
${var:-4:2} = 78
${var:4:2} = 56
<action application="export" value="nolocal:sip_invite_domain=192.168.7.2"/>
nolocal的作用:告訴export只將該變量設置到b-leg上,而不要設置到a-leg上。
domain 和 domain_name 都是預設的變量,默認就是服務器的 IP 地址。
user 是一個特殊的 endpoint,它指本地用戶。所以,呼叫字符串翻譯出來就是(假設 IP 是 192.168.7.2);
已經建立了 1000 到 1001 之間的呼叫,就等 1001 接電話了。接下來會有幾種情況:
• 被叫應答
• 被叫忙
• 被叫無應答
• 被叫拒絕
• 其它情況