Назад | Перейти на главную страницу

Asterisk напишите CDR сейчас

Я пишу CDR в таблицу mssql с помощью cdr_adaptive_odbc. Это прекрасно работает в том смысле, что запись записывается после звонка.

Но я бы хотел записать 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) и посмотреть, есть ли у связанного идентификатора соответствующие события с типом события 4 ANSWER и события с типом события 2 CHANNEL_END

Затем я нахожу последний идентификатор клиента с этим номером телефона (клиент может регистрироваться несколько раз с одним и тем же номером) и показываю соответствующее имя.

Напоследок (на всякий случай) показываю время разговора и диспозицию из 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  

Вы можете использовать приложение CDR, чтобы сбросить еще один cdr при запуске