DP: 客製內建的 on demand recording (*1)

    版本為 05:27, 27 Dec 2024

    到這個版本。

    返回到 版本存檔.

    查閱目前版本

    Asterisk 內建一個 *1 的 feature: on demand recording,通話中,按下*1 可以開始進行錄音,不過如果要客製錄音檔名或儲存目錄,就必須停用內建的 feature,然後用 Macro 重寫一個錄音功能。

    停用內建的 on demand recording

    如果有使用 FreePBX,停用此功能必須使用 Web UI 操作
    FreePBX Admin > Feature Codes

    In-Call Asterisk Toggle Call Recording: Disabled

    沒有安裝 FreePBX 時
    編輯/etc/asterisk/features.conf

    ...
    [featuremap]
    ;automon=*1 ;將這行註解
    

    確定 Dial Command 沒有 wW 參數
    FreePBX Admin > General Settings > Dialing Options

    Asterisk Dial command options:
    Asterisk Outbound Dial command options:

    檢查設定

    #asterisk -rx "features show"
    
    Builtin Feature           Default Current
    ---------------           ------- -------
    Pickup                    *8      *8
    Blind Transfer            #       ##
    Attended Transfer                 *2
    One Touch Monitor       <這裡必須是空白>
    Disconnect Call           *       **
    Park Call
    One Touch MixMonitor   <這裡必須是空白> 
    

    新增一個 Macro 來啟動/關閉錄音

    以系統有安裝 FreePBX 為例
    編輯 /etc/asterisk/extensions_custom.conf

    ...
    ...
    ; Recording a call manually while on the call
    [macro-switch-callmonitor]
    exten => s,1,set(rfile=${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S)}-${CALLERID(num))
    exten => s,n,Set(record=$["${record}"=""|"${record}"="0"]) ; toggle the record flag
    exten => s,n,Gotoif(${record}?101)
    exten => s,n,StopMixMonitor()
    exten => s,101,MixMonitor(${rfile}.wav,,) 
    

    編輯 /etc/asterisk/features_applicationmap_custom.conf

    callmonitor => *1,caller,Macro,switch-callmonitor
    或者
    callmonitor => *1,self/both,Macro,switch-callmonitor 
    

    編輯 /etc/asterisk/globals_custom.conf

    DYNAMIC_FEATURES=callmonitor
    

    TIPs:

    修改 globals_custom 可以讓內外線都能啟用這功能。

    要限制外線或內線,才能啟用此功能時,必須在 outbound 或 inbound 的 context 內加上
    Set(DYNAMIC_FEATURES=callmonitor)

    補強一:從資料庫 CDR 取出 from & to 作為錄音檔的命名規則

    macro-switch-callmonitor:

    [macro-switch-callmonitor]
    exten => s,1,Set(DYNAMIC_FEATURES=myautomon)
    exten => s,n,Set(MONITOR_FILENAME=${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S)}-${CALLERID(num))
    exten => s,n,Wait(1)
    exten => s,n,MixMonitor(${MONITOR_FILENAME}.wav,b,mv  /var/spool/asterisk/monitor/^{MONITOR_FILENAME}.wav /var/spool/asterisk/monitor/`/usr/bin/mysql -u root -p<db_pass> -N -B -D <db_name> -e "SELECT calldate,'From:',src,'To:',dst,'' FROM cdr WHERE uniqueid = ^{UNIQUEID}"|sed -s s'/\s/_/ g'`.wav
    

    錄音檔輸出格式為:

    -rw------- 1 asterisk asterisk  161644 May 17 17:54 2012-05-17_17:53:57_From:_101_To:_011800677522_.wav
    -rw------- 1 asterisk asterisk  118764 May 17 17:51 2012-05-17_17:51:16_From:_101_To:_011800677522_.wav
    
    Powered by MindTouch Core