需要輸入密碼的 Call Bridging
Asterisk 可以很簡單實作一個 call bridging。
[callin]
exten => _X.,1,Answer()
exten => _X.,n,Dial(SIP/9911)
exten => _X.,n,Hangup()
當 SIP/9911 拿起電話Answer後,Call Bridging 便完成。
但是,有時候在 Call Bidging 時想要對方輸入一些東西(比方說,如上方的例子,SIP/911需要輸入密碼,密碼正確才能夠跟對方通話)。Asterisk 是可以做到,但需要的方法有點兒繁複。
(按:據 Asterisk Insider (Russel Bryant) 所說,Asterisk 1.6 的 Manager API 可以支援 native bridging。即是我可以在任何時候也可以任意做 Bridging,不知道我有否看錯?!)
需要的工具:
- Outgoing call file
- MeetMe API
我會首先 Asterisk 接到一個電話時會用 outgoing call file 引發一個 outgoing call。然後通話者會建立一個私人MeetMe然後等待對方(被通話者)進來。同時,outgoing call 會等待被通話者的密碼輸入。如果密碼正確對方的通話會進入通話者所預先設定的 MeetMe 中。
這方法是用 MeetMe() 來代替 Dial()。使到Dialplan可以在駁通通話者前控制被通話者的通信。
為了方便和因為我比較懶惰,這個示範有很多地方是 hardcode 的。
我的outging file檔名是out.call,而檔案內容如下:
Channel: SIP/9911
MaxRetries: 0
RetryTime: 60
Context: denniswuworks
Extension: 1234
Priority: 1
Set: meetmeid=12345|password=54321
通話者的電話打進Asterisk後會開始跑demotest,demotest內會復製out.call 去 /var/spool/asterisk/outgoing 中然後引發一個 outbound call。同時通話者開始建立一個私人MeetMe然後等待對方(被通話者)進來。
[demotest]
exten=>_X.,1,Wait(2)
exten=>_X.,n,system(/bin/cp /root/out.call /tmp/out.call)
exten=>_X.,n,system(/bin/mv /tmp/out.call /var/spool/asterisk/outgoing/out.call)
exten=>_X.,n,MeetMe(12345|1dp)
exten=>_X.,n,hangup
Asterisk 的 outgoing call 會引領被通話者跑 denniswuworks 的 context。這 extension 會請求輸入密碼。如果密碼正確,被通話者會進入通話者預設的特定 MeetMe conference 裏。否則便用 MeetMeAdmin 刪除 conference 然後掛斷電話。
[denniswuworks]
exten=>_X.,1,Wait(3)
exten=>_X.,n,Set(confID=${meetmeid})
exten=>_X.,n,Read(KEYPRESS|pleaseinputpassword|8||3)
exten=>_X.,n,GotoIf($["${KEYPRESS}" = "${password}"]?10:200)
exten=>_X.,10,MeetMe(${confID}|1dp)
exten=>_X.,11,hangupexten=>_X.,200,MeetMeAdmin(${confID}|K)
exten=>_X.,201,Hangupexten=>h,1,MeetMeAdmin(${confID2}|K)
exten=>h,2,hangup()
因為這需要額外的系統資源,所以這未必是最好的方法。可能還有更好的方法也不出奇。
Posted: 十二月 1st, 2008 under 開發.
Tags: Asterisk
Comments
Comment from wudennis
Time 2008 年 12 月 06 日 at 11:53:08
Call Bridging 是指兩個線路在 PABX裏直接連繫一起作對話。Asterisk 裏可用 Dial()實現。
Dialplan 裏的內容不難理解,你嘗試研究研究吧。
Comment from hellobest
Time 2008 年 12 月 09 日 at 16:33:14
大大
關於之前提到的一些功能,可能還得麻煩您指導一下
因為目前這按密碼的功能好像跟我之前提的有一些不太一樣的地方,因此我在敘述一下我的功能:希望每一個使用者要打電話的時候,在對方接通之前都必須要按一個語音提示所希望按的數字,之後才可以接通給受話方。這樣的一個功能我該如何去把他實做出來呢?又得麻煩您指導了~~感謝!
Comment from hellobest
Time 2008 年 12 月 05 日 at 16:21:09
感謝大大的提供~~這有些背景知識有些不太瞭解,因此想請教您一下:
1. call bridging是指什麼樣的功能。
2. Dialplan的功能不太瞭解,只瞭解好像是規定一些功能的設定。
感謝您喔!真的謝謝!