Asterisk 现在写入 cdr

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()

但这不会在数据库中创建新记录。

答案1

我没有使用 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  

答案2

您可以使用 forkCDR 应用程序在启动时删除另一个 cdr

相关内容