Asterisk

Asterisk 現在寫 cdr

  • September 6, 2015

我正在使用 cdr_adaptive_odbc 將 CDR 寫入 mssql 表。從某種意義上說,這很好,因為記錄是在呼叫之後寫入的。

但是我想在來電時寫一個 cdr_record ,然後再接聽/中止。

原因:我想在我們的 CRM 系統中添加一個功能:點擊此按鈕並查看來電的電話號碼,其中 CDR 記錄正在“響鈴”或其他東西。然後將電話號碼與客戶記錄匹配,並在螢幕上顯示來電者資訊。

(我不想把數字推送到 CRM,它必須是拉動)

我試過這個:

exten => 13,1,noop()
same => n,forkcdr()
same => n,Wait(2)
same => n,dial(SIP/L13)
same => n,hangup()

但這不會在數據庫中創建新記錄。

我沒有使用 CDR,而是將 CEL 記錄到表中。然後我可以看到啟動的呼叫(事件類型 1,CHANNEL_START),並查看linkedid 是否有對應的事件類型為 4 ANSWER 的事件和事件類型為 2 CHANNEL_END 的事件

然後,我找到具有該電話號碼的最新客戶 ID(客戶可能使用同一個號碼多次註冊),並顯示相應的名稱。

我終於(只是為了好玩)展示了 CDR 記錄中的通話時間和性格。

SELECT TOP 10 a.cid_num, 
         a.eventtime 'begin', 
         b.eventtime 'answer', 
         c.eventtime 'end', 
         mk.maxid, 
         navn, 
         cdr.duration, 
         cdr.billsec, 
         cdr.disposition 
FROM   asteriskcel a 
  LEFT JOIN asteriskcel b 
         ON b.eventtype = 4 -- ANSWER
            AND b.linkedid = b.uniqueid 
            AND b.linkedid = a.linkedid 
  LEFT JOIN asteriskcel c 
         ON c.eventtype = 2 -- CHANNEL_END
            AND c.linkedid = c.uniqueid 
            AND c.linkedid = a.linkedid 
  LEFT JOIN (SELECT RIGHT(telefon, 8) tlf, 
                    Max(id)           maxid 
             FROM   t_kunder 
             GROUP  BY RIGHT(telefon, 8)) mk 
         ON RIGHT(a.cid_num, 8) = mk.tlf 
  LEFT JOIN t_kunder k 
         ON mk.maxid = k.id 
  LEFT JOIN bit_cdr cdr 
         ON cdr.linkedid = a.linkedid 
WHERE  a.eventtype = 1 -- CHANNEL_START
  AND a.linkedid = a.uniqueid 
  AND a.context = 'default' 
ORDER  BY a.eventtime DESC  

引用自:https://serverfault.com/questions/717098