基於Asterisk開發CTI

教科書一般的內容博客裏面就不介紹了,大家去找asterisk的文檔看吧——《Asterisk The Future of Telephony》,已經出第二個版本了。這些文檔是比較無聊,需要反覆看才能明白,這是沒有辦法的事。如果精通一個專業跟玩個CF,lol一樣簡單而且有意思的話,那麼世間的精英就不會像現在這麼值錢了;精英嘛,一方面要自己吃點苦,百鍊才能成精,另一方面也是需要大量的二貨去襯托的。正好騰訊正用它的遊戲在製造大量新鮮的二貨,而精英就靠我們自己練就了。

首先我們得說一下什麼是CTI。
CTI是指計算機和電話的整合,說直白一點,就是用電腦來控制電話。我們把電話看成是基本的通話服務,如接聽、語音溝通、掛機。用電腦來控制它以實現更多更復雜的功能,如轉接、排隊、按鍵路由、三方等。

拿諮詢轉接來說,每個一個通話由兩個通道構成:主叫和被叫,通話時這兩個通道是連接的,用來交互語音;當要諮詢時,先將兩個通道拆開,讓客戶方的通道連接到一個等待音樂的服務中,這樣客戶就在聽音樂了;然後將諮詢方的電話去撥打被諮詢的號碼,接通之後諮詢方和被諮詢方就可以語音通話了;諮詢結束之後,再掐斷諮詢方的通道(諮詢放電話就掛機了),然後將客戶方的通道從等待音樂的服務中拿出來,跟被諮詢方的通道連在一起,他們兩就開始通話了。這樣的一個控制過程實現了A和B通話,然後在不掛斷電話的情況下A去諮詢C,然後將B轉接給C,最後B和C通話。

基於Asterisk來開發CTI,就是將Asterisk作爲一個基本的話務處理服務,自己來開發邏輯層應用,並將應用封裝對外提供服務器。
143729596.jpg

關於底層Asterisk的封裝,主要集中在三方面:AMI、AGI和Dialplan設計:

AMI:Asterisk的管理接口。通過這個接口,我們可以獲取Asterisk中所有對象的狀態,比如各種終端電話的狀態、通話channel的狀態、技能組狀態;以及實時的狀態數據推送,任何對象發生變化時,都能從這個接口獲取到狀態事件,將這些事件解析並維護起來就,然後結合自己的業務,就變成了CTI裏面的狀態。
AGI:Asterisk在通話過程中的交互接口。比如電話呼入時,如果腳本里面有AGI()函數的調用,那麼就會訪問這個接口,可以通過這個接口來爲通話做實時交互。一般語音自助,智能語音交互都需要用到這個接口。
Dialplan:其實就是extensions.ael文件及其擴展,這是一個腳本文件,跟我們寫的java、c、javascript類似。是個寫代碼的都能看懂,很簡單。Asterisk在處理通話的時候,就是按這個腳本里面寫的內容去處理的。比如按鍵菜單:用戶電話呼入以後按1如何處理,按2如何處理。


我們創業做的平臺是一個話務平臺,底層使用的是Asterisk,其核心就是對它的封裝。所以接下來幾章會比較無趣,都是技術方面的介紹。





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章