FreeSWITCH小結:呼叫的發起與跟蹤


需求描述##

雖然現有的FreeSWITCH功能已經很強大,但是很多情況下,為了配合業務上的功能,還需要做一些定制開發。
有一個基本需求是:如何控制fs外呼,並跟蹤外呼后的一系列狀態。

解決方案##

下面我就把自己現有的解決方案跟大家分享下,以便拋磚引玉,引出大家更好的方案。
我的方案也簡單,在呼叫之前,指定呼叫的uuid,然后根據該uuid跟蹤呼叫到完整狀態。

1.獲取可用的通道UUID

所以說freeswitch考慮比較周到,連獲取uuid的方法都提供了!
當然,你也可以使用自己到方式來生成uuid。不過,一旦uuid出現重復,可是會出現比較麻煩的問題,所以還是使用freeswitch的官方提供的方法比較靠譜。
命令如下:

create_uuid 

該命令會返回一個可用的uuid。

2.發起呼叫###

無需多說,此處originate命令登場,不過和平時使用區別的地方是需要指定呼叫的uuid。
下面是兩種指定方法,可選擇性試用:
方案一:在呼叫時,指定A腿uuid

originate {origination_uuid=xxxxx}user/60401 60402

方案二:在呼叫時,同時指定A腿和B腿的UUID

originate {origination_uuid=xxxxx}user/60401 &bridge({origination_uuid=yyyyy}user/60402)

在使用該命令后,通過命令show channels就可看到兩個新創建的通道和指定的通道uuid,xxxxx和yyyyy。
此處留給大家自己去驗證了!
同時也感謝杜老大的書,這條命令是從他的書上學來的。

3.跟蹤呼叫###

跟蹤呼叫,說白了,其實很簡單,只是有的人可能沒留意到而已,就是利用FreeSWITCH的事件機制進行跟蹤。關於事件如何訂閱,不是這里的重點,略去不說。
下面先說說一些基本常識:
1、跟呼叫相關的通道事件有如下幾個:

Channel_Create:通道創建事件
Channel_Progress:通道振鈴事件
Channel_Answer:通道應答事件
Channel_Bridge:通道橋接事件
Channel_Hangup:通道掛斷事件

2、通道事件的Unique_ID字段與我們呼叫前指定的UUID相同,這個也是我們能跟蹤的前提。

有了上面兩個條件之后,跟蹤就變得簡單和美妙起來!在呼叫開始前,將呼叫對象與uuid的對應關系存到數據庫中,在收到不同的事件后,根據事件的Unique_ID找到對應的呼叫對象,然后更新它的呼叫狀態即可。

4.注意事項###

1)Channel_Create事件比較特殊,含有的內容比較少,所以處理起來要特別注意。
該事件是在呼叫開始Routing之前就被拋出來,換句話說,你在dialplan中定義的任何變量都不會被讀取到。如果這點沒注意到的話,會導致判斷邏輯出現問題。
2)Channel_Bridge事件中同時含有A腿和B腿的UUID,具體字段我是不打了,感興趣的可以自己看看


免責聲明!

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



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