Я пишу 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 при запуске