Дмитрий Рашевский
20.02.2019
13227

Asterisk realtime queue_log

Описание архитектуры Asterisk Realtime Asterisk Realtime – это механизм конфигурации asterisk, который использует внешние хранилища данных. Существует два типа: статический и динамический. Статический — хранит настройки в базе данных. Также обновляет данных при перезагрузке модулей Динамичесикй — создает и обновляет объекты в режиме реального времени. В данной архитектуре могут использоваться разные типы хранилищ: ODBC Mysql […]

Asterisk Realtime

Описание архитектуры Asterisk Realtime

Asterisk Realtime – это механизм конфигурации asterisk, который использует внешние хранилища данных. Существует два типа: статический и динамический.

  • Статический — хранит настройки в базе данных. Также обновляет данных при перезагрузке модулей
  • Динамичесикй — создает и обновляет объекты в режиме реального времени.
Эти режимы могут использоваться, как по отдельности, так и совместно.

В данной архитектуре могут использоваться разные типы хранилищ:

  • ODBC
  • Mysql
  • PostgrageSQL
  • SQLite
  • LDAP
  • cURL

В данной статье будет использоваться статический метод, для сохранения событий очереди.

Все настройки проводятся в системе FreePBX 13.0.192.19, Asterisk 13.21.0 Centos 6.9

Конфигурация Realtime Queue_log

Рассмотрим конфигурирование Queue_log Realtime.

Для начала в файл logger_general_custom.conf добавляем параметры

queue_adaptive_realtime=yes 
queue_log_to_file=yes
Если параметр queue_adaptive_realtime выставлен в значение yes, то данные могут записываться в колонку data с pipe (знак «|») в качестве разделителя. Если установлено значение no, то всегда значения будут распределяться по столбцам data1 — data5.
Time Callid Queuename Agent Event Data Data1 Data2 Data3 Data4 Data5
2019-01-29 09:26:07 1548743166.48 200 NONE ENTERQUEUE |102|1|          

Необходимо создать файл /etc/asterisk/extconfig.conf и добавить несколько параметров

Создадим файл

   vim /etc/asterisk/extconfig.conf   

Внесем изменения, предварительно нажав клавишу «i»

   [settings]   queue_log => odbc,asteriskcdrdb   
Чтобы выйти из режима редактирования в редакторе vim используется клавиша «Esc» Сохраним конфигурацию и закроем файл комбинацией Shift+ZZ или :wq+Enter

Чтобы выйти из режима редактирования в редакторе vim используется клавиша «Esc» Сохраним конфигурацию и закроем файл комбинацией Shift+ZZ или :wq+Enter

Рассмотрим подробнее данные значения

queue_log — имя таблицы куда будут заноситься данные

odbc — коннектор, через который астериск будет связан БД

asteriskcdrdb — db конфиг в /etc/asterisk/res_odbc_additional.conf

Теперь создадим таблицу queue_log в базе данных asteriskcdrdb

   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,
   `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;    

Рассмотрим каждое поле:

time – время и дата звонка на очередь.

сallid —  имеет значения «MANAGER», «NONE» и значение uniqueid

Иногда встречается запись «MANAGER»

queuename – имя очереди для которой записано событие

agent – имя агент очереди, для которого было данное событие

event – Событие в очереди

data1 – data5 – данные связанные с указанным в поле event

События очереди

В этом разделе рассмотрим события очереди. Формат записа будет следующим

EVENT (data1|data2|data3|data4|data5)
  • ADDMEMBER — Подключение оператора к очереди.
В Freepbx стандартный сервисный код *45<номер очереди>
Time Callid Queuename Agent Event Data Data1 Data2 Data3 Data4 Data5
2019-01-29 08:29:13 1548739752.8 200 Local/102@from-queue/n ADDMEMBER            
2019-01-29 08:29:13 MANAGER 200 102              
  • REMOVEMEMBER — Выход агента из очереди.
Time Callid Queuename Agent Event Data1 Data2 Data3 Data4 Data5
 2019-01-29 08:33:55 1548740034.9 200 Local/102@from-queue/n REMOVEMEMBER          
 2019-01-29 08:33:55 MANAGER 200 102            
  • RINGNOANSWER (Agent Timeout) — оператор не ответил на звонок при поступившем вызове.
    • Agent Timeout — время ожидания на линии.
Agent Timeout указывается в миллисекундах
Time Callid Queuename Agent Event Data1 Data2 Data3 Data4 Data5
 2019-01-29 08:33:55 1548740554.10 200 103 RINGNOANSWER Agent Timeout (2000)        
  • EXITEMPTY (position|origposition|waittime)  — Звонящий покинул очередь, т. к. в очереди не было доступных операторов.
Будет отображаться если опция leavewhenempty указана в конфигурации очереди.
  • Position – указывается, с какой позиции вышел звонящий
    • Origposition – указывается позиция, которая была изначальная при вступлении в очередь
    • Waittime – сколько звонящий прождал, пока уме не ответили.
Time Callid Queuename Agent Event Data1 Data2 Data3 Data4 Data5
2019-01-29 10:59:18 1548748758.66 200 NONE EXITEMPTY 1 (Position) 1 (Origposition) 0 (Waittime)    
  • ATTENDEDTRANSFER (method|uuid|holdtime|calltime|origposition) — вызов был переведен с оповещением.
    • Method – указывается метод соединения
      • BRIDGE
      • APP
      • LINK
    • Method-uuid – уникальный идентификатор метода канала
    • Holdtime – время ожидания в очереди
    • Calltime – время звонка
    • Origposition – начальная позиция в очереди
Time Callid Queuename Agent Event Data1 Data2 Data3 Data4 Data5
2019-01-29 10:54:37 1548740554.19 200 103 ATTENDEDTRANSFER BRIDGE   (method) 3bc25658-13ed-3a2c-3612-d1a043b332ab (Method-uuid) 154 (Holdtime) 32 (Calltime) 2 (Origposition)
  • BLINDTRANSFER (extension|context|holdtime|calltime|origposition)  — вызов был переведен без оповещения на другой экстеншн.
    • Extension – внутренний номер, на который произошел перевод
    • Context – контекст переводящего экстеншена
    • Holdtime – время ожидания в очереди
    • Calltime – время звонка
    • Origposition – начальная позиция в очереди
Time Callid Queuename Agent Event Data1 Data2 Data3 Data4 Data5
 2019-01-29 10:56:03 1548740554.10 200 103 BLINDTRANSFER 105 from-internal 9 3 1
  • AGENTDUMP  — оператор отклонил входящий вызов
  • ABANDON (position|origposition|waittime) — звонящий положил трубку, т. к. не дождался ответа
    • Position — финальная позиция в очереди
    • Origposition — первоначальная позиция в очереди
    • Waittime — время ожидания на линии
Time Callid Queuename Agent Event Data1 Data2 Data3 Data4 Data5
 2019-01-30 11:42:11 1548740556.10 200 103 ABANDON 1 1 12    
  • SYSCOMPAT  — оператор ответил на звонок, но соединение было разорвано из-за несовместимости каналов.
  • CONNECT (holdtime|bridgedchanneluniqueid|ringtime) —оператор ответил на звонок и разговаривает с абонентом
    • holdtime – время ожидания абонента
    • bridgedchanneluniqueid — содержит uniqueid канала оператора, который ответил на звонок
    • ringtime – время поднятия трубки оператором
Time Callid Queuename Agent Event Data1 Data2 Data3 Data4 Data5
 2019-01-30 11:42:11 1548740556.10 200 103 CONNECT 9 1548742691.38 3    
  • COMPLETECALLER (holdtime|calltime|origposition) —вызов был отвечен. Абонент первым завершил звонок.
    • Holdtime – время ожидания в очереди
    • Calltime – указывает время разговора
    • Origposition – первоначальная позиция при попадании в очереди
Time Callid Queuename Agent Event Data1 Data2 Data3 Data4 Data5
 2019-01-29 09:22:27 1548742921.41 200 103 COMPLETECALLER 2 24 1    
  • COMPLETEAGENT (holdtime|calltime|origposition) — вызов был отвечен. Оператор первым положил трубку.
    • holdtime – время ожидания абонента
    • calltime — указывает время разговора
    • ringtime – время поднятия трубки агентом
Time Callid Queuename Agent Event Data1 Data2 Data3 Data4 Data5
2019-01-29 10:01:11 1548745267.59 200 103 COMPLETEAGENT 2 2 1    
  • PAUSE — указывается пауза в очереди
Time Callid Queuename Agent Event Data1 Data2 Data3 Data4 Data5
2019-01-29 10:01:11 NONE 200 103 PAUSE          
  • UNPAUSE — снятие с паузы оператором
Time Callid Queuename Agent Event Data1 Data2 Data3 Data4 Data5
2019-01-29 09:18:04 NONE 200 103 UNPAUSE          
  • ENTERQUEUE (url|callerid) —вызов поступил в очередь.
    • Url
    • Callerid – указывается имя абонента.
    • Enterposition — позиция абонента на момент входа в очередь
Параметр url может быть пустым. Зависит от того, указывается ли он в диалплане или нет
exten => s,n,QueueLog(200,${UNIQUEID},${AGENT},ENTERQUEUE,,${CALLERID(name)})
Time Callid Queuename Agent Event Data1 Data2 Data3 Data4 Data5
2019-01-30 14:37:49 1548848268.0 200 103 ENTERQUEUE 84959898533 1    
  • EXITWITHTIMEOUT (position|origposition|waittime)  — вызов покинул очередь по истечению времени
    • Position — финальная позиция в очереди
    • Origposition — первоначальная позиция в очереди
    • Waittime — время ожидания на линии
Time Callid Queuename Agent Event Data1 Data2 Data3 Data4 Data5
2019-01-29 09:07:43 1548742057.30 200 NONE EXITWITHTIMEOUT 1 1 5    
  • EXITWITHKEY (key|position|origposition|waittime)- была нажата кнопка для выхода из очереди
    • Key – кнопка, которую нажал звонящий
    • Position — финальная позиция в очереди
    • Origposition — первоначальная позиция в очереди
    • Waittime — время ожидания на линии
Time Callid Queuename Agent Event Data1 Data2 Data3 Data4 Data5
2019-01-29 09:06:36 1548741984.29 200 NONE EXITWITHKEY 3 1 1 12  
  • CONFIGRELOAD — применение настроек очереди. (asterisk -rx ‘queue reload’)
Time Callid Queuename Agent Event Data1 Data2 Data3 Data4 Data5
 2019-01-29 09:02:47 NONE NONE NONE CONFIGRELOAD          
  • DID (did number) – номер на который пришел вызов
Time Callid Queuename Agent Event Data1 Data2 Data3 Data4 Data5
 2019-01-29 11:01:14 1548748874.0 200 NONE DID 74959898533        
Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

Остались вопросы?

Я - Виталий Шелест, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.

VoIP оборудование


ближайшие курсы

10 доводов в пользу Asterisk

Распространяется бесплатно.

Asterisk – программное обеспечение с открытым исходным кодом, распространяется по лицензии GPL. Следовательно, установив один раз Asterisk вам не придется дополнительно платить за новых абонентов, подключение новых транков, расширение функционала и прочие лицензии. Это приближает стоимость владения станцией к нулю.

Безопасен в использовании.

Любое программное обеспечение может стать объектом интереса злоумышленников, в том числе телефонная станция. Однако, сам Asterisk, а также операционная система, на которой он работает, дают множество инструментов защиты от любых атак. При грамотной настройке безопасности у злоумышленников нет никаких шансов попасть на станцию.

Надежен в эксплуатации.

Время работы серверов некоторых наших клиентов исчисляется годами. Это значит, что Asterisk работает несколько лет, ему не требуются никакие перезагрузки или принудительные отключения. А еще это говорит о том, что в районе отличная ситуация с электроэнергией, но это уже не заслуга Asterisk.

Гибкий в настройке.

Зачастую возможности Asterisk ограничивает только фантазия пользователя. Ни один конструктор шаблонов не сравнится с Asterisk по гибкости настройки. Это позволяет решать с помощью Asterisk любые бизнес задачи, даже те, в которых выбор в его пользу не кажется изначально очевидным.

Имеет огромный функционал.

Во многом именно Asterisk показал какой должна быть современная телефонная станция. За многие годы развития функциональность Asterisk расширилась, а все основные возможности по-прежнему доступны бесплатно сразу после установки.

Интегрируется с любыми системами.

То, что Asterisk не умеет сам, он позволяет реализовать за счет интеграции. Это могут быть интеграции с коммерческими телефонными станциями, CRM, ERP системами, биллингом, сервисами колл-трекинга, колл-бэка и модулями статистики и аналитики.

Позволяет телефонизировать офис за считанные часы.

В нашей практике были проекты, реализованные за один рабочий день. Это значит, что утром к нам обращался клиент, а уже через несколько часов он пользовался новой IP-АТС. Безусловно, такая скорость редкость, ведь АТС – инструмент зарабатывания денег для многих компаний и спешка во внедрении не уместна. Но в случае острой необходимости Asterisk готов к быстрому старту.

Отличная масштабируемость.

Очень утомительно постоянно возвращаться к одному и тому же вопросу. Такое часто бывает в случае некачественного исполнения работ или выбора заведомо неподходящего бизнес-решения. С Asterisk точно не будет такой проблемы! Телефонная станция, построенная на Asterisk может быть масштабируема до немыслимых размеров. Главное – правильно подобрать оборудование.

Повышает управляемость бизнеса.

Asterisk дает не просто набор полезных функций, он повышает управляемость организации, качества и комфортности управления, а также увеличивает прозрачность бизнеса для руководства. Достичь этого можно, например, за счет автоматизации отчетов, подключения бота в Telegram, санкционированного доступа к станции из любой точки мира.

Снижает расходы на связь.

Связь между внутренними абонентами IP-АТС бесплатна всегда, независимо от их географического расположения. Также к Asterisk можно подключить любых операторов телефонии, в том числе GSM сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.