Asterisk
Asterisk 現在寫 cdr
我正在使用 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