Asterisk: queue_log в MySQL через unixODBC

Realtime лог очереди в нативную базу данных Asterisk.

SQL таблица лога очереди

Создадим таблицу в БД asterisk.

CREATE TABLE IF NOT EXISTS `queue_log` (
`time` varchar(32) DEFAULT NULL,
`callid` char(64) DEFAULT NULL,
`queuename` char(64) DEFAULT NULL,
`agent` char(64) DEFAULT NULL,
`event` char(32) DEFAULT NULL,
`data` char(64) DEFAULT NULL,
`data1` char(64) DEFAULT NULL,
`data2` char(64) DEFAULT NULL,
`data3` char(64) DEFAULT NULL,
`data4` char(64) DEFAULT NULL,
`data5` char(64) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Выключение текстового лога

Если имя таблицы не задано в extconfig.conf - queue_log ⇒ odbc,asterisk
Asterisk сам создаст таблицу с именем - queue_log, по умолчанию
при перезагрузке модуля logger:

*CLI> module reload logger
Module 'logger' reloaded successfully.
 Asterisk Queue Logger restarted

в файле /etc/asterisk/logger.conf выключите лог в файл:

 queue_log_to_file = no

в файле /etc/asterisk/asterisk.conf*

 [options]
 queue_adaptive_realtime = no

Если queue_adaptive_realtime = yes, то данные могут записываться в колонку data, с pipe в качестве разделителя, как в примере ниже. Если no, то всегда распределяться по колонкам data1 - data5.

timecallidqueuenameagenteventdatadata1data2data3data4data5
2017-02-27 11:38:18.212707 1488184697.2048062 2 NONE ENTERQUEUE |9981138|1|

Конфигурация realtime family

в файле /etc/asterisk/extconfig.conf

 queue_log => odbc,asterisk,queue_log

где 'asterisk' ваш db конфиг в /etc/asterisk/res_odbc.conf:

[asterisk]
enabled => yes
dsn => asterisk
username => dbuser
password => dbpass
pre-connect => yes

Расшифровка значений событий очереди - queue_log events

eventdata1data2data3data4data5
ABANDONexitpositionenterpositionwaittime
AGENTDUMP
AGENTLOGINchannel
AGENTCALLBACKLOGINexten@context
AGENTLOGOFFchannellogintime
AGENTCALLBACKLOGOFFexten@contextlogintimereason
COMPLETEAGENTholdtimecalltimeorigposition
COMPLETECALLERholdtimecalltimeorigposition
CONFIGRELOAD
CONNECTholdtimeuniqueid
DIDdid number
ENTERQUEUEurlcalleridenterposition
RINGNOANSWERAgent Timeout
EXITWITHKEYkeyposition
EXITWITHTIMEOUTexitpositionenterpositiontimeout
QUEUESTART
SYSCOMPAT
ATTENDEDTRANSFERApplicationuuid holdtime calltimeretry?
BLINDTRANSFER number context holdtime calltime retry
PAUSE Reason
UNPAUSE Reason

Пример принятого вызова в таблице MySQL с кастомизированным событием DID:

timecallidqueuenameagenteventdata1data2data3
2017-02-17 19:58:25.661590 1487339905.409426 991 NONE DID 3216111
2017-02-17 19:58:25.671737 1487339905.409426 991 NONE ENTERQUEUE 9981138 1
2017-02-17 19:58:27.540265 1487339905.409426 991 Tanya CONNECT 2 1487339905.409427 1
2017-02-17 19:59:32.108944 1487339905.409426 991 Tanya COMPLETECALLER 2 65 1

В 19:58:25.66 вызов поступил на номер 3216111 с номера 9981138
В 19:58:25.67 попал в очередь 991 сразу на первую позицию и был отвечен агентом Tanya в 19:58:27.54, когда находился на первой же позиции в очереди. Время ожидания составило 2 секунды, а время разговора 65 секунд.

События DID не существует по умолчанию, но оно создается в диалплане FreePBX при помощи команды QueueLog.

[ext-queues]
...
exten => queueName1,n,QueueLog(queueName1,${UNIQUEID},NONE,DID,${FROM_DID})
...

Таким же образом вы можете создать и сохранить в лог очереди другие пользовательские события и передать в них требуемые данные из канала.
Например, создадим в логе очереди событие IVR, с которым соотнесем время нахождения абонента в голосовом меню, перед тем как он попадет, непосредственно, в очередь вызовов:

exten => card,1,noop(card)
   same => n,queuelog(card,${UNIQUEID},NONE,DID,${FROM_DID})
   same => n,queuelog(card,${UNIQUEID},NONE,IVR,${CDR(billsec)})
   same => n,queue(card)
   same => n,hangup

В самом же голосовом меню создадим событие лога очереди IVR_ABANDON, чтобы учесть пользователей, покинувших ivr до попадания в очередь:

exten => h,1,queuelog(NONE,${UNIQUEID},NONE,IVR_ABANDON,${CALLERID(num)}|${FROM_DID}|${CDR(billsec)})
exten => h,n,hangup

Пример принятого вызова с последующим сопровождаемым переводом:

timecallidqueuenameagenteventdata1data2data3data4data5
2017-01-07 13:22:08.418825 1483773699.76487 999 NONE DID 3216111
2017-01-07 13:22:08.445013 1483773699.76487 999 NONE ENTERQUEUE 4226789 1
2017-01-07 13:22:22.203683 1483773699.76487 999 Christa Paffgen CONNECT NULL 14 1483773740.76488 1
2017-01-07 13:23:35.928089 1483773699.76487 999 Christa Paffgen ATTENDEDTRANSFER BRIDGE 3fd42053-51ec-4b7a-9174-e6d096a827ce 14 73 1

Обратите внимание, что в данном случае используются колонки data4 и data5.

Пример пропущенного вызова (ожидающий абонент повесил трубку)

timecallidqueuenameagenteventdatadata1data2data3
2017-01-02 12:27:39.6532421483338440.1685998NONEDIDNULL318
2017-01-02 12:27:39.6837651483338440.1685998NONEENTERQUEUENULL82702131
2017-01-02 12:27:54.7009611483338440.1685998JarboeRINGNOANSWERNULL15000
2017-01-02 12:28:14.7270201483338440.1685998JarboeRINGNOANSWERNULL15000
2017-01-02 12:28:21.7995131483338440.1685998NONEABANDONNULL1142

Пауза агента в обслуживании очереди с указанием причины (lunch break):

time callid queuename agent event data data1 data2 data3 data4 data5
2017-03-23 16:30:34.232289 NONE 77777 77778 PAUSE NULL lunch break
2017-03-23 16:45:36.639872 NONE 77777 77778 UNPAUSE NULL Back from lunch

Добавление и удаление динамического интерфейса в очередь:

time callid queuename agent event data data1 data2 data3 data4 data5
2017-03-23 13:54:32.450580 MANAGER 77777 Local/77779@from-queue/n ADDMEMBER NULL
2017-03-23 17:55:09.392784 MANAGER 77777 Local/77779@from-queue/n REMOVEMEMBER NULL
Другие страницы с тегом 'queue':
Только авторизованные участники могут оставлять комментарии.

Войти через: Google Facebook