分類

Slideshow

Get the Flash Player to see the slideshow.

彙整

近期迴響

Asterisk 或 PBX 相關

Communication Softwares

Hi-Fi 天地

HTML 資訊

Learning

Linux

Project Management

Who am I

健康百科

技術相關

時人時事

經常收看

誠意推介

金錢世界

雜七雜八

Site search

 

十二月 2008
« 十一月   一月 »
 123456
78910111213
14151617181920
21222324252627
28293031  

標籤

近期文章

需要輸入密碼的 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,不知道我有否看錯?!)

需要的工具:

  1. Outgoing call file
  2. 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,hangup

exten=>_X.,200,MeetMeAdmin(${confID}|K)
exten=>_X.,201,Hangup

exten=>h,1,MeetMeAdmin(${confID2}|K)
exten=>h,2,hangup()

因為這需要額外的系統資源,所以這未必是最好的方法。可能還有更好的方法也不出奇。

Comments

Comment from hellobest
Time 2008 年 12 月 05 日 at 16:21:09

感謝大大的提供~~這有些背景知識有些不太瞭解,因此想請教您一下:
1. call bridging是指什麼樣的功能。
2. Dialplan的功能不太瞭解,只瞭解好像是規定一些功能的設定。

感謝您喔!真的謝謝!

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

大大
關於之前提到的一些功能,可能還得麻煩您指導一下
因為目前這按密碼的功能好像跟我之前提的有一些不太一樣的地方,因此我在敘述一下我的功能:希望每一個使用者要打電話的時候,在對方接通之前都必須要按一個語音提示所希望按的數字,之後才可以接通給受話方。這樣的一個功能我該如何去把他實做出來呢?又得麻煩您指導了~~感謝!

Write a comment