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;

postgres

postgres

CREATE TABLE queue_log (
time VARCHAR(32),
callid CHAR(64),
queuename CHAR(64),
agent CHAR(64),
event CHAR(32),
data1 CHAR(64),
data2 CHAR(64),
data3 CHAR(64),
data4 CHAR(64),
data5 CHAR(64)
);

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

Если имя таблицы не задано в 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
ADDMEMBER
REMOVEMEMBER
COMPLETEAGENTholdtimecalltimeorigposition
COMPLETECALLERholdtimecalltimeorigposition
CONFIGRELOAD
CONNECTholdtimeuniqueid
DID(freepbx custom)did number
ENTERQUEUEurlcalleridenterposition
RINGCANCELED?
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':

Asterisk app AddQueueMember

Asterisk: PauseQueueMember

Команда Asterisk: Queue

Asterisk app: QueueLog

Asterisk: RemoveQueueMember

Asterisk: UnpauseQueueMember

Asterisk: agents.conf

Asterisk queuerules.conf

Asterisk настройка очереди - queues.conf

Asterisk function 'CURL'

function 'QUEUE_EXISTS'

function 'QUEUE_MEMBER'

function 'QUEUE_MEMBER_LIST'

Функция диалплана Asterisk: QUEUE_VARIABLES

function 'QUEUE_WAITING_COUNT'

Handlebars Helper LastCall Queue Agent

FreePBX Очереди - Queue

Freeswitch: mod_callcenter

Asterisk Call Center Stats - статистика колл-центра

Asterisk Колл Центр

  • asterisk/logger_queue.txt
  • Последние изменения: 2020/10/28