Asterisk命令MeetMe詳解
      
       2010/02/02
      
      MeetMe 
        
        概要
        
          MeetMe 會議橋
        
        描述 
        
          語法:MeetMe([confno][,[options][,pin]])
        
          用途: 讓用戶進入一個指定的MeetMe會議。如果省略了會議編號,系統(tǒng)會提示用戶選擇一個。(注意:MeetMe會議需要一個Zaptel時鐘才能工作,你可以不裝任何板卡,但是你需要安裝Zaptel)
        
          參數(shù):options可以為空,也可以設(shè)置一個或者多個參數(shù),參數(shù)有如下一些:
        
      
      
        - '1' — 當(dāng)會議室的第一個成員進入會議時,不向用戶提示"you are currently the only person in 
          this conference您是當(dāng)前會議室唯一的成員" (Asterisk 1.2.11以上版本才支持)
 
        
        - 'a' — 設(shè)為管理員
 
        
        - 'A' — 設(shè)為標(biāo)記成員
 
        
        - 'b' — 運行在${MEETME_AGI_BACKGROUND}指定的AGI腳本
 
        
          - 缺省: conf-background.agi (注意:需要會議室內(nèi)有ZAP通道才能運行)
  
        
        - 'c' — 加入會議時提示會議成員數(shù)量
 
        
        - 'd' — 動態(tài)加入會議
 
        
        - 'D' — 動態(tài)加入會議,提示要求輸入密碼
 
        
        - 'e' — 選擇一個空會議。
 
        
        - 'E' — 選擇一個沒密碼的空會議。
 
        
        - 'F' — 在會議中透傳DTMF按鍵,所有成員都能收到DTMF。
 
        
        - 'i' —提示有成員加入/離開會議with review— 需要chan_zap.so (Asterisk 1.2以上版本才支持)
 
        
        - 'I' --提示有成員加入/離開會議 without review
 
        
        - 'M' —當(dāng)會議室只有一個人的時候放等待音樂
 
        
        - 'm' —旁聽狀態(tài)(只能聽,不能說)
 
        
        - 'p' —允許用戶按井退出會議室
 
        
        - 'P' — 無論用戶是否指定,總是提示用戶輸入會議密碼
 
        
        - 'q' — 安靜模式 (有成員加入/離開會議不做任何提示)
 
        
        - 'r' — 會議錄音 (錄音文件名${MEETME_RECORDINGFILE},格式 ${MEETME_RECORDINGFORMAT})。缺省文件名是:meetme-conf-rec-${CONFNO}-${UNIQUEID} 
          ,缺省格式是wav。 — 這個參數(shù)同樣需要chan_zap.so。
 
        
        - 's' —收到*鍵的時候播放菜單,普通成員是普通菜單,管理員是管理員菜單('send' to menu)
 
        
        - 't' — 設(shè)為只說模式 (只說,不聽)
 
        
        - 'T' — 設(shè)置說話人檢測 (在manager interface 和 meetme list可以看到)
 
        
        - 'v' — 視頻模式 (目前還不支持)
 
        
        - 'w' — 等待標(biāo)記成員進入會議。
 
        
          - 在標(biāo)記成員進入會議之前,所有成員只能聽音樂。
  
        
        - • 'X' — 允許用戶輸入${MEETME_EXIT_CONTEXT}里面的一個有效的單個數(shù)字來退出會議。如果${MEETME_EXIT_CONTEXT}沒有定義,則從當(dāng)前的內(nèi)容里找有效數(shù)字。allow 
          user to exit the conference by entering a valid single digit extension 
          of the context specified in or the current context if that variable 
          is not defined. (此參數(shù)不支持Asterisk v1.2.0版本)
 
        
        - 'x' — 當(dāng)最后一個標(biāo)記用戶退出會議室的時候,關(guān)閉會議。
 
      
      
      參數(shù)詳解
      
        參數(shù) 's' 
      
        's' 和 'p' 參數(shù)不能跟 'X' 參數(shù)共同使用。 
      
      
        - 普通成員: 按鍵*將聽到語音菜單"Please press 1 to mute or unmute yourself"; Asterisk 
          v1.2 版本現(xiàn)在支持對單獨會議的單獨成員進行音量調(diào)整。
 
        
        - 管理員(在加入會議的時候使用了 'a' 參數(shù)): 按鍵*將聽到語音菜單"Press 1 to mute/unmute yourself, 
          2 to lock/unlock this conference"
          
         
      
        參數(shù) 'q' 
      
        最好在 Asterisk v1.2以上版本用,早期版本的SIP通道會有延遲。
      
        參數(shù) 'r' 
      
        在開始MeetMe()錄音之前,要指定Set ${MEETME_RECORDINGFILE}的值。
      
        否則,錄音文件將存放在/var/lib/asterisk/sounds目錄下,該目錄是存放系統(tǒng)提示音的,不適合存放錄音文件。
      
        例如:
      
        exten => s,1,SetVar(MEETME_RECORDINGFILE=/var/conf_recording-${EPOCH}-${USER})
        exten => s,2,MeetMe(,rD) ;開設(shè)一個新會議,對會議錄音,
      
        例子 
      
        在meetme.conf 中設(shè)定一個會議室號為101,密碼為123456的會議。
        exten => 500,1,MeetMe(101||123456) 
      
        授權(quán)的會議
      
        exten => 18,1,Answer 
        exten => 18,2,Wait(1) 
        exten => 18,3,Authenticate(5678) 
        exten => 18,4,MeetMe(18|p) 
        exten => 18,5,Playback(vm-goodbye) 
        exten => 18,6,Hangup 
      
        動態(tài)會議室,用戶需要按鍵輸入要創(chuàng)建的會議室號
      
        exten => 9999,1,Wait(1) 
        exten => 9999,2,MeetMe(|Md) 
      
        注意:如果你加入?yún)?shù)'e', 按*將選擇#會議室
        如果你需要為會議室設(shè)定一個密碼,,請將 'd' 參數(shù)改為 'D' 。
      
        動態(tài)會議室123設(shè)為安靜模式。如果用戶foo 撥打分機號10,他將成為一個標(biāo)記用戶(’A’),foo離開會議后,會議室將被關(guān)閉,其他的撥打11的用戶也將被迫離開會議室。
      
        exten => 10,1,MeetMe(123|Aqd) 
        exten => 11,1,MeetMe(123|xqd) 
      
        OEJ發(fā)表的回顧 (May 23, 2004) 
      
        你發(fā)現(xiàn)這個簡單得不能再簡單的(not-so-simple-anymore)簡單MeetMe會議橋了嗎?這可是Asterisk的一個殺手級應(yīng)用哦。它帶來豐富的功能應(yīng)用:
      
      
        - 多種渠道,包括VoIP 和 PSTN,都能參加的多方會議
 
        
        - 宣講模式:一個說話人,眾多的旁聽者。
 
        
        - 管理功能:踢用戶,讓會議靜音,鎖定會議
 
        
        - 等待其他成員的時候可以收聽等待音樂
 
        
        - 可以預(yù)設(shè)會議
 
        
        - 也可以動態(tài)創(chuàng)建會議(第一個成員將被告知會議號碼)
 
      
      
        更多豐富命令包括:
      
      
        - MeetMe – 加入會議 (有時候也用于創(chuàng)建新會議)
 
        
        - MeetMeAdmin – 踢人、鎖定會議、讓會議靜音
 
        
        - MeetMeCount – 統(tǒng)計會議室內(nèi)的成員名單
 
      
      
        在CLI 下面也可以管理MeetMe:
      
      
        - Meetme List all conferences 
 
        
        - MeetMe kick   踢一個人
 
        
        - MeetMe kick  踢所有人
 
        
        - MeetMe list  列出會議室內(nèi)的所有成員
 
        
        - MeetMe lock  鎖定會議室,不再加人
 
        
        - MeetMe unlock  解鎖會議室
 
        
        - MeetMe mute   禁止某個人發(fā)言
 
        
        - MeetMe unmute   允許某個人發(fā)言 
 
      
      
        OEJ附加說明
      
      
        - 會議橋默認語音編碼格式是ulaw。 如果采用其他編碼,將額外占用CPU資源。
 
        
        - MEETMESECS參數(shù)包含了用戶參加會議中的時長(以秒為單位)。
 
        
        - 改動meetme.conf無需重新加載,系統(tǒng)會自動讀取
 
        
        - 在dial plan中,您可以通過meetmecount()和參數(shù)來限制參加會議的人數(shù)
 
        
        - MeetMe依賴Zaptel時鐘,您需要安裝Zaptel驅(qū)動,最好有一片Asterisk兼容的語音卡。
 
        
        - 潛規(guī)則
 
        
        - MeetMe應(yīng)用需要一個時鐘才能工作。 有幾種方法可以獲得時鐘,其中Zaptel卡提供的工作時鐘是一個不錯的選擇,如果你沒有Zaptel卡,也可以使用ztdummy 
          時鐘。
 
        
        - 動態(tài)會議 的工作方式可能跟你想得不太一樣。很明顯,動態(tài)會議的意思就是創(chuàng)建一個并未存在的會議。所以當(dāng)用戶A創(chuàng)建了一個會議號為200的會議之后,如果用戶也來創(chuàng)建一個會議號為200的會議,那么用戶B將被直接加入用戶A的會議,而不會對用戶B提示說已經(jīng)會議號200已經(jīng)被人用了。另外,如果用戶A創(chuàng)建的這個#200會議有密碼,那么用戶B將聽到密碼無效的聲音,然后系統(tǒng)會提示用戶B重新輸入一個要創(chuàng)建的會議號碼。要想解決這個問題,我們能做的就是通過參數(shù) 
          'e' 來讓系統(tǒng)自動分配會議號碼。
 
      
      
      性能方面的考慮
      
        在ISDN PRI環(huán)境下開超過10個人的MeetMe會議 
      
        我曾經(jīng)發(fā)現(xiàn)在ISDN PRI環(huán)境下超過10個人的會議回發(fā)生嘯叫。人們認為電信運營商已經(jīng)對ISDN-PRI這樣的純數(shù)字化環(huán)境做過回聲消除了,所以不需要再設(shè)置回聲消除。然而事實并非如此。我在配置文件 
      /etc/asterisk/zapata.conf下面增加了下列的參數(shù)項,從而解決了這個問題:
      
        echocancel=yes 
        echocancelwhenbridged=yes 
        echotraining=yes 
      
      架構(gòu)和局限
      
        在Asterisk 1.2版本中,同時開很多個會議的時候可能會有些局限。目前大部分版本已經(jīng)升到1.4及以上,也就不存在這些問題了,不再鏊述。
      
        關(guān)于參數(shù)'b' (AGI_BACKGROUND) 
      
        網(wǎng)友疑問: 
      
        我看了論壇上一些老的帖子,但是還是有個疑問,是關(guān)于AGI_BACKGROUND的。如果我的機器上安裝了Asterisk兼容板卡但是會議里沒有加入Zap通道,只有SIP通道,那么SIP通道上的MEETME_AGI_BACKGROUND腳本能正常工作嗎?
      
        回答:
      
        不能正常工作。下面我們分析一下工作原理:
      
        合并輸入的語音包,輸出合并后的語音包,這些工作是在Zaptel驅(qū)動里面做的。對于真實的Zap通道,這個工作是在驅(qū)動層就請全部完成的。而對于非Zap通道,系統(tǒng)會創(chuàng)建一個Zap虛擬通道,然后在非Zap通道和Zap虛擬通道之間雙向拷貝語音數(shù)據(jù)。
      
        看一下這部分源代碼(在conf_run()中),我們會發(fā)現(xiàn),conf_run() 函數(shù)要么執(zhí)行AGI腳本,要么執(zhí)行虛擬通道拷貝循環(huán),不能同時執(zhí)行兩個。所以當(dāng)你使用AGI腳本的時候,在非Zap 
      通道和Zap虛擬通道之間就沒有任何連接了。
      
        擁有一塊Asterisk卡或者dummy時鐘驅(qū)動 (比如: ztdummy 或者 zaprtc) 都能使用MeetMe功能,但是這并不意味著你可以在參加會議的SIP通道上使用AGI:他們沒有執(zhí)行任何AGI的能力。你可以試下看,但是最終的結(jié)果一定是什么聲音也得不到。 
      
      
        還要注意的是,使用AGI將會使其他的一些內(nèi)置功能,比如說靜音、踢人和音樂等待等功能不能使用。
      
        AGI_BACKGROUND Pros/Cons 
      
        使用AGI將會使其他的一些內(nèi)置功能,比如說不用通過命令行實現(xiàn)靜音、踢人和音樂等待等功能。 
      
        參數(shù) 'p' (按#退出) 也不能用。錄音功能也不能用。 
      
        如果你需要把會議中的某個成員踢出去,首先需要停止該成員的AGI_BACKGROUND 任務(wù)。
      
        一旦AGI_BACKGROUND腳本停止,該成員就自動退出會議室了。
      
        所有的DTMF按鍵事件都被送到AGI_BACKGROUND 進程/腳本。所以你可以讓你的.agi腳本不停地循環(huán),捕獲按鍵音,來決定怎樣處理一個特定的按鍵。
      
        AGI_BACKGROUND 也開放了很多開發(fā)的編程機會。你可以使用進程間通訊(sockets, signals等等)來遠程控制會議室(即: 
      基于外部時間或用戶輸入來給會議室放音)。
      
        從普通通話發(fā)起多方通話(邀請用戶參加會議) 
      
        下面我講一下怎樣從一個普通通話(兩方通話)發(fā)起多方通話。主要是通過MeetMe和ChannelRedirect來實現(xiàn)。
      
        疑問: 在 Asterisk 1.4 版本中,我們是否需要用'ManagerRedirect'來替換 'ChannelRedirect'?
      
        下面是dialplan 例子: 
      
        [default] 
        exten => _XXX,1,Set(DYNAMIC_FEATURES=nway-start) 
        exten => _XXX,n,Dial(SIP/${EXTEN}) 
      
        [dynamic-nway] 
        exten => _XXX,1,Answer 
        exten => _XXX,n,Set(CONFNO=${EXTEN}) 
        exten => _XXX,n,Set(MEETME_EXIT_CONTEXT=dynamic-nway-invite) 
        exten => _XXX,n,Set(DYNAMIC_FEATURES=) 
        exten => _XXX,n,MeetMe(${CONFNO},pdMX) 
        exten => _XXX,n,Hangup 
      
        [dynamic-nway-invite] 
        exten => 0,1,Read(DEST,dial,,i) 
        exten => 0,n,Set(DYNAMIC_FEATURES=nway-inv#nway-noinv) 
        exten => 0,n,Dial(Local/${DEST}@dynamic-nway-dest,,g) 
        exten => 0,n,Set(DYNAMIC_FEATURES=) 
        exten => 0,n,Goto(dynamic-nway,${CONFNO},1) 
        exten => i,1,Goto(dynamic-nway,${CONFNO},1) 
      
        [dynamic-nway-dest] 
        exten => _XXX,1,Dial(SIP/${EXTEN}) 
      
        [macro-nway-start] 
        exten => s,1,Set(CONFNO=${FindFreeConf()}) 
        exten => s,n,ChannelRedirect(${BRIDGEPEER},dynamic-nway,${CONFNO},1) 
        exten => s,n,Read(DEST,dial,,i) 
        exten => s,n,Set(DYNAMIC_FEATURES=nway-inv#nway-noinv) 
        exten => s,n,Dial(Local/${DEST}@dynamic-nway-dest,,g) 
        exten => s,n,Set(DYNAMIC_FEATURES=) 
        exten => s,n,Goto(dynamic-nway,${CONFNO},1) 
      
        [macro-nway-ok] 
        exten => s,1,ChannelRedirect(${BRIDGEPEER},dynamic-nway,${CONFNO},1) 
      
        [macro-nway-notok] 
        exten => s,1,SoftHangup(${BRIDGEPEER}) 
      
        注意:你需要用 FindFreeConf() 函數(shù) (或者其他方式) 來獲得空閑的會議室號碼。
      
        此外,還需要修改 features.conf,增加下面的內(nèi)容:
      
        [applicationmap] 
        nway-start => *0,caller,Macro,nway-start 
        nway-inv => **,caller,Macro,nway-ok 
        nway-noinv => *#,caller,Macro,nway-notok 
      
      (譯注:事實上,F(xiàn)indFreeConf()這個函數(shù)好像需要Trunk版本支持,需要修改一下這個例子的部分內(nèi)容才能運行。另外,實際測試中我們也發(fā)現(xiàn),兩個按鍵*0之間的間隔時間不能太長,最好是連續(xù)按鍵。)
      
        工作原理: 
      
        普通通話情況下:
      
        當(dāng)你和別人通話的時候,按*0 (執(zhí)行宏 nway-start)。 被叫馬上被傳遞到一個空閑的會議室,而你將聽到撥號音,等待你輸入你要邀請的電話號碼。當(dāng)被邀請方接通后,你在和這個第三方通話的過程中,可以按 
      ** (在features.conf可以定義)加入會議,按 *# 掛掉他然后返回會議。
      
        會議室情況下:
      
        在會議室里面,任何用戶可以按0邀請其他用戶加入會議,其他的步驟同上。
      
        合并會議 
      
        這些可以使用使用 Asterisk local channels 和 Asterisk manager API來實現(xiàn)(一般使用AGI 或者Call 
      Files) 。
      
        下面是一個合并會議123和會議124的OriginateAction例子:
      
        在dialplan (context = default): 
        exten => 7799,1,Meetme(123|qd) 
        exten => 7798,1,Meetme(124|qd) 
      
        在Manager API: 
        Action: Originate 
        ActionID: 12345678 
        Channel: local/7798 
        Context: default 
        Exten: 7799 
        Priority: 1 
      
        與某個成員悄悄話
      
        在Meetme中,還有一個類似ChanSpy的悄悄話功能(密談)。會議成員可以與其他成員通過'whisper'功能來密談。 
      
        我還增加了一個 'z' 標(biāo)志: 
      
        'z' — 所有的DTMF按鍵事件將被送到manager 
      
        用戶可以通過對MeetMe系統(tǒng)中的按鍵進行偵測,然后在決定在manager命令中如何處理。
      除了標(biāo)準(zhǔn)MeetMe之外的其他選擇 
      
        MeetMe2 
      
        MeetMe2是在MeetMe基礎(chǔ)上增加了Web控制界面的一個變體。
      
        "目的是控制會議室里面的聲音和成員。這個功能可以為你提供一個通過網(wǎng)絡(luò)來控制會議和直觀查看會議的方法。app_meetme已經(jīng)做了大量改動,將一些會議信息寫入DB,并檢查會議屬性是否已經(jīng)改變。" 
      
      
        Q: 我看到會議中的成員,但是我不能把他們踢出去,也不能將他們的模式從說變成可聽可說。沒有顯示任何錯誤。
        A: 在php中打開register_globals。
        你也可以在php文件的頂部加入"extract($_GET);" 
      (也有網(wǎng)友建議使用MeetMe-Web-Control來替代MeetMe2) 
      
        app_conference
      
        另外一個變種 app_conference,針對大容量的會議。 
        http://sourceforge.net/projects/appconference/ 
        有些人認為它比MeetMe更為強大,但是目前還沒有人提供詳細的比較測試數(shù)據(jù)。
      
        遠程會議主機 
      
        通過第三方會議提供商: http://www.junctionnetworks.com,IAX和SIP通道可以加入遠程會議。在dialplan里面可以這樣寫:
        exten => 7000,1,Dial(IAX2/conference@iax.jnctn.net)
        exten => 7000,1,Dial(SIP/conference@sip.jnctn.net) 
      
        通過撥打7000,您就可以參加他們的會議。
        他們提供很多種參加會議的方法,可以通過Web網(wǎng)頁來訂制,方便了會議管理和統(tǒng)計。 
      CTI論壇編輯
       
      
      
相關(guān)閱讀:  
                  
资兴市|
吉首市|
浠水县|
冷水江市|
广昌县|
尚义县|
鹤岗市|
屯门区|
噶尔县|
湟源县|
高青县|
鄂伦春自治旗|
柞水县|
洪湖市|
板桥市|
玉田县|
阿图什市|
广州市|
五家渠市|
缙云县|
镶黄旗|
鸡东县|
平谷区|
威信县|
宁乡县|
玉田县|
家居|
崇文区|
苍南县|
台北市|
确山县|
亚东县|
新竹市|
大埔区|
亚东县|
西充县|
来宾市|
浠水县|
平顶山市|
庆元县|
上林县|