Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Общие характеристики процедур



Каждая процедура принимает на вход 3 аргумента:

· $1 timestamp without time zone - начало периода выборки данных

· $2 timestamp without time zone - окончание периода выборки данных

· $3 integer - длительность интервала агрегации в минутах (в некоторых процедурах не используется, но для унификации запроса оставили)

Каждая процедура возвращает таблицу данных. Значения в таблице не могут быть пустыми (null), если в описании обратное не указано явно. Каждый столбец, обозначающий длительность, возвращает длительность в виде целого числа (количество секунд), если в описании обратное не указано явно. Значение каждого столбца, обозначающего длительность, не должно превышать количество секунд в интервале агрегации (например, в интервал с 10:00 до 10:15 оператор не может быть в состоянии "недоступен" более 900 секунд).

Порядок столбцов таблицы фиксированный.

Для процедур tffe* и tffc* определены 5 дополнительных столбцов (optional_column_[1-5]). По спецификации Teleopti, в них могут быть добавлены опциональные данные по согласованию с заказчиком. На текущий момент таких данных нет, все подобные столбцы возвращают null.

tffv_agent_statistics

Процедура возвращает статистику по состояниям операторов и количеству голосовых вызовов операторов.

Выходные данные

Имя столбца Тип данных Описание Описание из спецификации Teleopti
interval_ integer Длительность интервала агрегации в минутах (просто выводится значение аргумента $3). Integer for aggregation depth (in minutes), should be the same for all the rows in the file. Preferable 15 minutes.
date_from char(8) Дата YYYYMMDD. Logging date
time_ char(5) Время HH24:MI. Начало интервала агрегации. Start time for the logging interval
agent_id text Логин оператора (mv_employee.login). Unique agent identifier in CTI
agent_name text ФИО оператора (mv_employee.title). Agent name in CTI
avail_dur integer Суммарная длительность пребывания в состоянии available. Total available time (if not defined in the CTI platform, then tot_work_dur - pause_dur) (in seconds)
tot_work_dur integer Суммарная длительность пребывания оператора в состояниях available и notavailable. Total time logged in during an interval (in seconds)
pause_dur integer Суммарная длительность пребывания оператора в pause mode. На данный момент не существует конкретного определения pause mode. В это понятие мы включили состояния away, accident, dnd, custom[1-3], standoff, *#email, *sms, *#xmpp. То есть, все состояния, в которых оператор явно не обрабатывает голосовые вызовы. Total time in pause mode (in seconds) exclusive wrap_up_dur
wait_dur integer Суммарная длительность пребывания оператора в состоянии normal. Total wait time for an agent waiting for calls (in seconds)
admin_dur integer Со стороны Teleopti даны устные комментарии касательно "administrative" time. Это длительность интервала, когда оператор был занят рабочими процессами, но не занимался обработкой голосовых вызовов. В спцеификациях нет конкретного определения. В "administrative" time мы включили состояния accident, custom[1-3], standoff, *#email, *sms, *#xmpp. Total “administrative“ time during the interval (in seconds). Time when the agent is not working with (or not available for) queue calls, i.e. part of the pause duration.
direct_out_call_cnt integer Количество вызовов, инициированных оператором вне каких-либо проектов. Number of outbound calls that are NOT queue calls
direct_out_call_dur integer Суммарная длительность разговора по вызовам, инициированнным оператором вне проектов. Total talking time for outbound calls (inclusive parking time) for non queue calls
direct_in_call_cnt integer Количество вызовов, поступивших оператору вне каких-либо проектов. Direct inbound calls for each agent that are not queue calls
direct_in_call_dur integer Суммарная длительность разговора по вызовам, инициированнным оператором вне проектов. Total talking time for direct inbound calls (for non queue calls)

tffv_queue_statistics

Процедура возвращает статистику по очередям голосовых вызовов (входящих и автоматических исходящих). Обзвоны preview не включены в выборку.

Выходные данные

Имя столбца Тип данных Описание Описание по спецификации Teleopti
interval_ integer Длительность интервала агрегации в минутах (просто выводится значение аргумента $3). Integer for aggregation depth (in minutes), should be the same for all the rows in the file. Preferable 15 minutes.
date_from char(8) Дата YYYYMMDD. Logging date
time_ char(5) Время начала интервала агрегации HH24:MI. Start time for the logging interval
queue text dnis/aon/uuid проекта. The queue’s unique numeric identifier
queue_name text Название (title) проекта. Original queue name or definition in the CTI platform
offd_direct_call_cnt integer Количество входящих вызовов. В спецификации Teleopti указано, что в данном столбце должны быть учтены вызовы, изначально адресованные в целевую очередь. Тем не менее, специфика СТД "Петрович" такова, что вызовы часто перенаправляются с одной очереди на другую. Клиент, видя в отчётах 0 прямых входящих вызовов, потребовал изменить выборку. Так что в данном столбце считаются все вызовы, поступившие на целевую очередь: как прямые, так и перенаправленные. Inbound calls to this ACD queue, this queue being the original receiver
overflow_in_call_cnt integer Количество вызовов, перенаправленных из других очередей в целевую. Number of calls to this ACD queue with another queue as orignial receiver (overflow in)
aband_call_cnt integer Количество потерянных вызовов. Number of lost/abandoned calls
overflow_out_call_cnt integer Количество вызовов, перенаправленных в другую очередь из целевой (с IVR). CHANGECALLPROJECT не учитывается, только TRANSFER. Number of calls tranfered to another queue (overflow out)
answ_call_cnt integer Количество вызовов, соединённых с оператором. Number of answered calls on queue
queued_and_answ_call_dur integer Суммарная длительность ожидания в очереди для вызовов, соединённых с оператором. Total queue time for all queued calls that were answered (in seconds)
queued_and_aband_call_dur integer Суммарная длительность ожидания в очереди для потерянных вызовов. Total queue time for all queued calls that were abandoned (in seconds)
talking_call_dur integer Суммарная длительность разговора по всем соединённым с операторами вызовам. Total talking time for all answered calls (in seconds)
wrap_up_dur integer Суммарная длительность постобработки. Total wrap-up time/after call work, associated with queue calls, within the interval
queued_answ_longest_que_dur integer Максимальная длительность ожидания в очереди из всех соединённых с операторами вызовов. Longest queue time for answered calls within the interval (in seconds)
queued_aband_longest_que_dur integer Максимальная длительность ожидания в очереди из всех потерянных вызовов. Longest queue time for abandoned (or lost) calls within the interval (in seconds)
avg_avail_member_cnt integer Магическое число. Не спрашивайте. Average number of agents that were available during the interval ((logged in time minus pause)/interval length)
ans_servicelevel_cnt integer Количество вызовов, у которых соединение с оператором не превысило значение параметра уровня сервиса для проекта. Number of calls answered within servicelevel
wait_dur integer Суммарная длительность пребывания в состоянии normal для всех операторов проекта. Total waiting time for agents ready and waiting on calls (in seconds)
aband_short_call_cnt integer Количество вызовов, которые были потеряны и ждали в очереди не более 5 секунд. Number of abandoned short calls, e.g. calls with a queue time less than 5 seconds.
aband_within_sl_cnt integer Количество вызовов, которые были потеряны и длительность ожидания в очереди у которых не превысила значение параметра уровня сервиса для проекта. Number of abandoned calls within service level. Any abandoned calls reported in Field20 should not be included.

tffv_agent_queue_statistics

Процедура возвращает статистику в разрезе голосовых проектов (входящих и автоматических исходящих, preview не учитываются) и операторов одновременно.

Выходные данные

Имя столбца Тип данных Описание Описание по спецификации Teleopti
interval_ integer Длительность интервала агрегации в минутах (просто выводится значение аргумента $3). Integer for aggregation depth (in minutes), should be the same for all the rows in the file. Preferable 15 minutes.
date_from char(8) Дата YYYYMMDD Logging date
time_ char(5) Время начала интервала агрегации HH24:MI. Start time for the logging interval
agent_id text Логин оператора Unique agent identifier in CTI
agent_name text ФИО оператора Agent name in CTI
queue text dnis/aon/uuid проекта The queue’s unique numeric identifier
queue_name text Название проекта Original queue name or definition in the CTI platform
talking_call_dur integer Суммарная длительность разговора оператора по вызовам проекта. Total talking time (in seconds) on ACD calls
wrap_up_dur integer Суммарная длительность постобработки оператора по вызовам проекта. Total wrap-up time/after call work (in seconds), associated with queue calls answered by the agent
answ_call_cnt integer Количество принятых оператором вызовов по проекту. Number of answered calls (only calls through an ACD queue)
transfer_out_call_cnt integer Количество вызовов, которые были приняты оператором, а затем перенаправлены на другой dnis. Calls answered and thereafter transferred to queue or extension

tffe_agent_statistics

Процедура возвращает статистику по состояниям операторов.

Выходные данные

Название столбца Тип данных Описание Описание по спецификации Teleopti
aggregation_length_in_m integer Длительность интервала агрегации в минутах (просто выводится значение аргумента $3). The aggregation depth in minutes (for informational use). Should be the same for all the rows. Preferable 15 minutes.
date_and_start_time timestamp without time zone Время начала интервала агрегации. Date and start time for the interval, e.g. “2015-01-01 16:15:00” (for 16:15 to 16:30 if aggregation length is 15 minutes).
agent_id integer Уникальный идентификатор пользователя. В Teleopti должно передаваться целочисленное значение, а в NCC логины и uuid строковые. Поэтому в БД создана процедура integerhash, которая получает целое число из uuid. Unique agent identifier.
agent_name varchar(50) ФИО оператора. Agent name in the e-mail system.
logged_in_time_in_s integer Суммарная длительность пребывания оператора в состояниях available и notavailable. Total time logged on during this interval (in seconds)
not_ready_time_in_s integer Суммарная длительность пребывания оператора в состояниях away, accident, dnd, custom*, standoff. Total time in pause mode (in seconds) excluding any ACW time related to e-mails/errands.
ready_time_in_s integer logged_in_time_in_s - not_ready_time_in_s Total ready/available time in seconds for this interval (if not defined in the CTI platform, then logged_in_time_in_sec - not_ready_time_in_sec). This is time available out of an e-mail perspective, i.e. ready time waiting for an e-mail/errand, handling time and any related after call work duration. This condition should be true: tot_work_dur = avail_dur + pause_dur
idle_time_in_s integer Суммарная длительность пребывания в состоянии normal. Total wait time for an agent waiting to handle an email (in seconds). Time when the agent is logged in and the agent is not in pause or handling an email. This duration is also included in “ready_time_in_sec”.

tffe_queue_statistics

Процедура возвращает детальную (неагрегированную) статистику по обработке e-mail.

Выходные данные

Название столбца Тип данных Описание Описание по спецификации Teleopti
queue_id integer Уникальный идентификатор очереди. В Teleopti должно передаваться целочисленное значение, а в NCC uuid строковые. Поэтому в БД создана процедура integerhash, которая получает целое число из uuid. The queue’s or errand type’s unique numeric identifier
queue_name char(50) Название проекта. Original queue/errand name or definition in the e-mail system.
task_id char(50) Идентификатор сессии message box. В Teleopti передаваемый идентификатор должен быть уникален. Поэтому к каждому идентификатору добавляется порядковый номер (например, '37221#1', '37221#2'). The identifier of this single e-mail or errand.
offered_date_and_time timestamp without time zone Время поступления письма в очередь. Date and time when the e-mail/errand entered the queue/skill. The e-mail/errand is reported based on this date and time in Teleopti forecasts.
first_handled_date_and_time timestamp without time zone Время поступления письма оператору. Date and time when the e-mail was first handled by an agent. If it has been agreed to export e-mails or errands which are not completed yet, this shall be set to the offered_date_and_time if it has not yet been handled.
completed_date_and_time timestamp without time zone Время завершения обработки письма. Date and time when the e-mail was fully completed. If it has been agreed to export e-mails or errands which are not completed yet, this shall be set to the first_handled_date_and_time or offered_date_and_time if it has not yet been completed.
task_work_time_in_s integer Длительность обработки обращения (от момента поступления оператору до момента завершения). Total time the e-mail was handled by agents in this queue (in seconds). If this do not reflect the time the agent actively handled the email, i.e. if the agent can work with other tasks while time is being accounted for this email, then Teleopti shall be informed. The users of Teleopti WFM can then choose to work with average handling times instead, but this needs to be communicated.
after_task_work_time_in_s integer Длительность постобработки обращения (от момента ответа оператора на письмо до момента завершения). If applicable, the wrap-up/ACW time for this task in this queue (in seconds).
queuing_time_in_s integer Длительность ожидания в очереди (от момента поступления письма в очередь до момента поступления письма оператору). Нарушает спецификацию Teleopti по согласованию с заказчиком. Queue time for a queued and handled e-mail (in seconds). Should reflect the total time from an email entering the queue to being answered, i.e. including handling time and parked time. For errands consisting of several sub- activities, this should be the time until the first answer. If this is not provided, Teleopti will default the queing time to be the difference between offered_date_and_time and first_handled_date_and_time.
is_handled_within_service_level integer Индикатор превышения целевого времени ожидания (значение параметра "Уровень сервиса" для проекта"). Reported as 1 if the email was handled within the service level for this queue. Reported as 0 if not.
task_status_description char(50) 'Offered' если письмо не было отвечено, в противном случае 'Completed'. For informational use or as agreed upon. Could be any text or one of the below: “Completed” “Transferred” “Offered” (not completed yet)

tffe_agent_queue_statistics

Процедура возвращает детальную (неагрегированную) статистику по письмам с указанием оператора, обработавшего письмо.

Выходные данные

Название столбца Тип данных Описание Описание по спецификации Teleopti
agent_id integer Уникальный идентификатор пользователя. В Teleopti должно передаваться целочисленное значение, а в NCC логины и uuid строковые. Поэтому в БД создана процедура integerhash, которая получает целое число из uuid. Unique agent identifier.
agent_name char(50) ФИО оператора. Agent name in the e-mail system.
queue_id integer Уникальный идентификатор очереди. В Teleopti должно передаваться целочисленное значение, а в NCC uuid строковые. Поэтому в БД создана процедура integerhash, которая получает целое число из uuid. The queue’s or errand type’s unique numeric identifier.
queue_name char(50) Название проекта. Original queue/errand name or definition in the e-mail system.
task_id char(50) Идентификатор сессии message box. В Teleopti передаваемый идентификатор должен быть уникален. Поэтому к каждому идентификатору добавляется порядковый номер (например, '37221#1', '37221#2'). The identifier of this single e-mail or errand.
first_handled_date_and_time timestamp without time zone Время поступления письма оператору. Date and time when the e-mail wasfirst handled by the agent.
completed_date_and_time timestamp without time zone Время завершения обработки письма. Date and time when the e-mail was fully completed.
task_work_time_in_s integer Длительность обработки обращения (от момента поступления оператору до момента завершения). Total time the e-mail was handled by the agent (in seconds).
after_task_work_time_in_s integer Длительность постобработки обращения (от момента ответа оператора на письмо до момента завершения). If applicable, the wrap-up/ACW time for this task in this queue (in seconds).

tffc_agent_statistics

Процедура должна возвращать данные по статистике операторов в разрезе чатов. Её описание полностью повторяет описание процедуры tffe_agent_statistics. Поэтому внутри делается селект из tffe_agent_statistics.

tffc_queue_statistics

Процедура возвращает детальную (неагрегированную) статистику по сессиям чатов и SMS.

Выходные данные

Название столбца Тип данных Описание Описание по спецификации Teleopti
queue_id integer Уникальный идентификатор очереди. В Teleopti должно передаваться целочисленное значение, а в NCC uuid строковые. Поэтому в БД создана процедура integerhash, которая получает целое число из uuid. The queue’s unique numeric identifier
queue_name char(50) Название проекта Original queue name or definition in the chat system.
task_id char(50) Идентификатор сессии message box. В Teleopti передаваемый идентификатор должен быть уникален. Поэтому к каждому идентификатору добавляется порядковый номер (например, '37221#1', '37221#2'). The identifier of this single chat.
is_answered integer Индикатор наличия ответа оператора в сессии чата. Reported as 1 if the chat was answered/handled. Reported as 0 if it was abandoned.
offered_date_and_time timestamp without time zone Время поступления первого сообщения чат-сессии в очередь. Date and time when the chat entered the queue/skill. The chat is reported based on this date and time in Teleopti forecasts.
first_handled_date_and_time timestamp without time zone Время поступления первого сообщения чат-сессии на оператора. Date and time when the chat was first handled by an agent.
completed_date_and_time timestamp without time zone Время завершения обработки чат-сессии оператором. Date and time when the chat was completed or abandoned.
task_work_time_in_s integer Длительность обработки чат-сессии (от момента поступления первого сообщения до момента завершения) Total chat time for this task in this queue (in seconds). If this do not reflect the time the agent actively handled the chat, i.e. if the agent can work with other tasks while time is being accounted for this chat, then Teleopti shall be informed. The users of Teleopti WFM can then choose to work with average handling times instead, but this needs to be communicated.
after_task_work_time_in_s integer Длительность постобработки част-сессии. В Naumen Contact Center понятие постобработки для чата отсутствует, поэтому всегда возвращаем 0. If applicable, the wrap-up/ACW time for this task in this queue (in seconds).
queuing_time_for_answerd_chats_in_s integer Длительность ожидания в очереди (от момента поступления в очередь до момента поступления оператору). Если is_answered = 0, то значение этого столбца 0. Total queue time for a queued and handled chat (in seconds). If this is not provided, Teleopti will default the queing time to be the difference between offered_date_and_time and first_handled_date_and_time (if provided).
queuing_time_for_abandoned_chats_in_s integer Длительность ожидания в очереди (от момента поступления в очередь до момента поступления оператору). Если is_answered = 1, то значение этого столбца 0. Total queue time for a queued and abandoned chat (in seconds). If this is not provided, Teleopti will default the queing time to be the difference between offered_date_and_time and completed_date_and_time.
is_handled_within_service_level integer Флаг превышения целевого времени ожидания (значения параметра "Уровень сервиса" для проекта) для отвеченных чат-сессий. Reported as 1 if the chat was handled within the service level for this queue. Reported as 0 if not.
is_abandoned_within_se rvice_level integer Флаг превышения целевого времени ожидания (значения параметра "Уровень сервиса" для проекта) для неотвеченных чат-сессий. Reported as 1 if the chat was abandoned within the service level for this queue. Reported as 0 if not.
task_status_description char(50) Всегда 'Completed'. For informational use or as agreed upon. Could be any text or one of the below: “Completed” “Transferred”

tffc_agent_queue_statistics

Процедура выводит детальные (неагрегированные) данные по чат-сессиям, обработанным операторами.

Выходные данные

Название столбца Тип данных Описание Описание по спецификации Teleopti
agent_id integer Уникальный идентификатор пользователя. В Teleopti должно передаваться целочисленное значение, а в NCC логины и uuid строковые. Поэтому в БД создана процедура integerhash, которая получает целое число из uuid. Unique agent identifier.
agent_name char(50) ФИО оператора. Agent name in the chat system.
queue_id integer Уникальный идентификатор очереди. В Teleopti должно передаваться целочисленное значение, а в NCC uuid строковые. Поэтому в БД создана процедура integerhash, которая получает целое число из uuid. The queue’s unique numeric identifier.
queue_name char(50) Название проекта. Original queu name or definition in the chat system.
task_id char(50) Идентификатор сессии message box. В Teleopti передаваемый идентификатор должен быть уникален. Поэтому к каждому идентификатору добавляется порядковый номер (например, '37221#1', '37221#2'). The identifier of this single chat.
is_answered integer Флаг наличия ответа. Спецификация Teleopti нарушена по согласованию с заказчиком. Always reported as 1. Only answered/handled chats are to be reported.
first_handled_date_and_time timestamp without time zone Время поступления чат-сессии оператору. Date and time when the chat was first handled by the agent.
completed_date_and_time timestamp without time zone Время завершения обработки сессии оператором. Date and time when the chat was completed.
task_work_time_in_s integer Длительность обработки сессии оператором. Total time the chat was handled by the agent (in seconds).
after_task_work_time_in_s integer Постобработка для чата. Всегда 0. If applicable, the wrap-up/ACW time for this task in this queue (in seconds).

 

 

Приложение 1. Полное описание файла petrovich.js

 Файл petrovich.js содержит описание синглтона petrovich, синглтон используется в качестве пространства имен.

Зависимости

  • jQuery
  • jquery-observe
  • RequireJS
  • ion.sound
  • nauphone.js

Как внедрить на форму

Скрипт необходимо разместить в каталоге /opt/naucrm/server/webapps/fx/UserFiles/js на сервере PMS

При редактировании представления формы нажать изменить скрипт, в конец тега <fields-table /> добавить:

<fields-holder align="top" autoFitcols="100"   height="1px;display:block;overflow:hidden;visibility:hidden" order="custom" rows="1" splitWidth="30%">   <frame-view height="1" uri="javascript:window.parent.jQuery.data(window.parent.document.body,'agent.login','{agent}');window.parent.jQuery.getScript('/fx/UserFiles/js/petrovich.js')">     <item type="expr" value="agent">${user.login}</item>   </frame-view> </fields-holder>

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

Файл petrovich_conf.js добавлен в .gitignore, подгружается при выполнении petrovich.main, ожидается, что в этом файле описан объект, оформленный в виде RequireJS модуля. Атрибуты этого объекта переопределяют атрибуты petrovich.

Например:

define({ eds: { url: 'http://172.16.90.26:8008' }});

petrovich

petrovich.eds

Интеграция с Enquiry Data Store

petrovich.eds.url

Корневой URL сервиса

petrovich.eds.post_enquiry_handling(agent, client)

jQuery.ajax POST /enquiry_handling

petrovich.eds.delete_enquiry_handling(agent)

jQuery.ajax DELETE /enquiry_handling

Выполняется синхронно, т.к. предназначено для использования на кнопке "Завершить" (см. petrovich.action_finish)

petrovich.ws

Интеграция с WS API SoftPhone. Инициализируется в petrovich.main.

petrovich.ws.nauphone

Объект класса NauPhone. см. petrovich.main

petrovich.ws.getcall

Текущий вызов. см. petrovich.main

petrovich.ws.setCallParam(key, value)

Метод для установки параметра вызова с помощью WS API SoftPhone

petrovich.init()

Метод для инициализации плагина, вызывается по событию jQuery(document).ready

Подгружает библиотеку /fx/UserFiles/js/3rdparty/require.js, с помощью нее подгружает остальные необходимые библиотеки

После загрузки библиотек выполняет petrovich.main

petrovich.main(RequireJS modules ...)

Подгружает petrovich_conf.js

Сохраняет логин оператора в petrovich.agent (важно правильно внедрить на форму, см. Как внедрить на форму)

Подключается к WS API SoftPhone:

Создает объект класса NauPhone, присваивает атрибуту petrovich.ws.nauphone

После успешного подключения присваивает Promise NauPhone.getCall атрибуту petrovich.ws.getcall

Устанавливает обработчик на событие jQuery('#acf_cp1').parent().observe('childlist subtree'), при изменении расширения Информация о клиенте обработчик вызывает

petrovich.ui_fix_cp

petrovich.action_cp

Вызывает petrovich.ui_fix

Вызывает petrovich.action_cp

Устанавливает обработчик на событие jQuery('#finish').click, при нажатии на кнопку Завершить (до отправки формы) будет вызван petrovich.action_finish, petrovich.action_finish может препятствовать завершению формы.

Проигрывает звук для текстовых обращений

Если тип обращения xmpp, добавляет callback для atmosphere, чтобы звук проигрывался на каждое новое сообщение. (Потенциально может привести к проблемам с чатами, но маловероятно.)

petrovich.agent

Атрибут хранит логин оператора.

petrovich.debug_refresh()

Переход по адресу /fx/npi/callmanager?session_id=fake&caller=89001234567&called=0000&direction=in&seance_id=seanceId&project_id=<uuid проекта>&case_uuid=&service_mode=&citycall=MSK.
Для удобства отладки в браузере.

petrovich.ui_fix()

Прячет последний <fields-holder />, который используется для внедрния скрипта на анкету (см. Как внедрить на форму)

Вызывает petrovich.ui_fix_cp

petrovich.ui_fix_cp()

Прячет табы (нам не нужны Юридические лица)

Прячет поле Идентификатор (оператор не должен его видеть и изменять)

petrovich.action_cp()

Вызывается при каждом изменении в расширении Информация о клиенте (см. petrovich.init)

Копирует Мобильный телефон в Идентификатор

Если обрабатывается почта, вызывает petrovich.eds.post_enquiry_handling(petrovich.agent, <uuid выбранного клиента>)

Если выбран пункт Новый клиент для голосовых вызовов копирует phoneControllerService.caller в Мобильный телефон, для почты - в Email

petrovich.action_finish()

Вызывается при нажатии Завершить (см. petrovich.init)
Важно все дополнительные действия выполнять синхронно

Если обрабатывается почта, вызывает petrovich.eds.delete_enquiry_handling(petrovich.agent)

Если в Информации о клиенте выбран пункт Новый клиент, препятствует закрытию анкеты

petrovich.action_citycall()

deprecated

petrovich.action_open1c(useraction = 'openNewOrderForm')

С помощтю WS API устанавливает параметры вызова citycall (из флекса citycall) и customerID (из Отображения списков с идентификатором rest1c_customers).

Устанавливает параметр вызова useraction.

После успешнго установления параметра useraction сбасывает его значение на 'none', что позволяет нажимать кнопку несколько раз.



Приложение 2. Описание интеграционного шлюза Enquiry Data Store

HTTP-сервис, разработан для проекта СТД Петрович.

Назначение

Временное хранение данных, связанных с обращением

Интеграционный шлюз

Окружение (необходимо для работы)

Redis (собственный)

Отчетная база PMS (PostgreSQL)

REST API PMS

Настройки

Конфигурационные файлы: conf/config.ini, conf/acl.ini, conf/passwd.ini.
Приложение поддерживает перечитывание конфига при получении сигнала SIGHUP.

config.ini

[pg] требует перезапуска

conString URL отчетной базы PMS формат

[pg.options] Опции подключения к PostgreSQL

[redis] требует перезапуска

conString URL Redis формат

[redis.options] Опции подключения к Redis

[app]

port требует перезапуска TCP-порт, который будет слушать приложение

unix_sock требует перезапуска Unix domain socket, потенциально можно увеличить производительность при обращении из IVR

mask_status_code_for[] Список логинов, для которых вместо реального кода ответа нужно отправлять 200 (при этом аутентификация может не требоваться)

[app.pms_api] PMS RESTful API

url

username

password

timeout

[app.minify_flex_attributes] Описание того, какие поля mv_flex_attribute необходимо возвращать в зависимости от typecode при получении клиента из БД
Примеры:

FlexType.Something = stringcontent - строковое значение

FlexType.Something[] = stringcontent - список строк

FlexType.Something = [ "stringcontent" ] - список строк

FlexType.Something = {"value": "stringcontent", "somethingelse": "stringcontent2"} - сложные типы

FlexType.Something[] = {"value": "stringcontent", "somethingelse": "stringcontent2"}

FlexType.Something = [ {"value": "stringcontent", "somethingelse": "stringcontent2"} ]

[app.client_catalog]

catalog_uuid Клиент-каталог, в котором будет производиться поиск клиентов

partner_uuid Идентификатор партнера, в котором создан клиент-каталог

[app.outsource_comment]

expire Время жизни комментария, установленного с помощью POST /outsource_comment

[app.smart_routing]

catalog_uuid UUID каталога, который устанавливает связь кода категории обращения (код элемента) и UUID проекта (название элемента)

flex Флекс-атрибут формы, хранящий категорию обращения

X Количество последних обращений клиента, которые нужно учесть при интеллектуальной маршрутизации

Y Минимальное количество одинаковых категорий обращения среди последних X для принятия решения по интеллектуальной маршрутизации

[app.rest1c_gethistory] 1С RESTful API

url

timeout

acl.ini

Содержит описание прав доступа.

Формат

[<method> <path>]

ip[] = <CIDR net>

user[] = <login>

Например:

[GET /something]

ip[] = 10.0.0.0/8

ip[] = 172.16.0.0/12

ip[] = 192.168.0.0/16

 

[POST /something]

user[] = user1

 

[* /something]

ip[] = 127.0.0.0/8

 

[GET *]

user[] = user1

 

[* *]

user[] = superuser

Типы правил

[<method> <path>]

[* <path>]

[<method> *]

[* *]

Логика работы правил

Если запрос не попадает ни под одно правило, он будет отклонен.

Если запрос осуществляется из подсети, указанной в списке ip, он разрешается, успешная аутентификация при этом не требуется.

Если запрос осуществляется не из подсети, указанной в списке ip, пользователь обязан успешно пройти аутентификацию (Basic Auth) (см. passwd.ini).

passwd.ini

Формат

[<login>]

md5 = <хеш пароля>

Логирование

В файле conf/logger.js можно описать особый модуль логирования.
Если файл отсутствует, используется console.

Установка и запуск

git clone https://callcenter.naumen.ru/gerrit/petrovich/enquiry_datastore

cd ./enquiry_datastore

make redis # если еще нет подготовленного Redis




Make install

service eds start

HTTP запросы

Ответ на HTTP-запросы возвращается в формате JSON.
Атрибут status дублирует код ответа HTTP для возможности использования компонентом Индикатор на форме (например: {status:404}). Для возможности использования кодов ответа в компоненте Индикатор реальный код ответа HTTP необходимо маскировать (см. config[app].mask_status_code_for).

POST-запросы в качестве тела принимают параметры формы (application/x-www-form-urlencoded, multipart/form-data).

Для удобства использования в контроллере Внешний сервис запрос возможно указывать в GET- или POST-параметре query вместо пути.
Для удобства использования в контроллере Внешний сервис при использовании метода POST возможно переопределить метод в параметом method.

GET /?query=make_something&param1=somedata --> GET /make_something?param1=somedata

POST /?query=make_something {param1: somedata} --> POST /make_something {param1: somedata}

Также при использовании метода GET возможно переопределить метод указанием параметра method.

GET /make_something?param1=somedata&method=DELETE --> DELETE /make_something?param1=somedata

Поддерживается CORS, сервер отправляет заголоки:

Access-Control-Allow-Origin: *

Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept

Access-Control-Allow-Methods: PUT, GET, POST, DELETE, OPTIONS

Access-Control-Max-Age: 86400



Коды ответа

Код Описание
404 Неизвестный запрос, см. список допустимых запросов ниже
400 Отсутствуют обязательные параметры запроса
500 Ошибка
200 Запрос выполнен успешно
201 Запрос на запись выполнен успешно

enquiry_handling

Назначение

Обеспечить возможность докинуть звонок оператору, который сейчас обрабатывает письмо этого же клиента.

POST /enquiry_handling {agent: ..., client: ...}

POST /enquiry_handling/:agent {client: ...}

Назначение

Сохранить связь логина оператора (agent) и UUID клиента (client).
При этом удаляются или перезаписываются старые связи данного оператора и старые связи данного клиента.


Формат ответа

{status:201, data:['MULTI', <ответы Redis>]}

{status:500, err:<ошибка>}

Где используется

На анкете обработки текстовых обращений (по ТЗ - писем) в момент выбора клиента в расширении Информация о клиенте.

см. GET /magic_routing

Как работает

Redis:

get eh:agent:<agent> --> <старый UUID клиента>

get eh:client:<client> --> <старый логин оператора>

del eh:agent:<старый логин оператора>

del eh:client:<старый UUID клиента>

set eh:agent:<agent> <client>

set eh:client:<client> <agent>

DELETE /enquiry_handling?agent=...

DELETE /enquiry_handling/:agent

Назначение

Удалить связь логина оператора (agent) и UUID клиента.

Формат ответа

{status:200, data:['MULTI', <ответы Redis>]}

{status:500, err:<ошибка>}

Где используется

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

Как работает

Redis:

get eh:agent:<agent> --> <UUID клиента>

del eh:agent:<agent>

del eh:client:<UUID клиента>

GET /enquiry_handlings

Назначение

Получить все ключи Redis eh:*.

Формат ответа

{status:200, data:['KEYS', <ответы Redis>]}

{status:500, err:<ошибка>}

Где используется

Тесты, ручная отладка.

Как работает

Redis:

keys eh:*

DELETE /enquiry_handlings

Назначение

Удалить все свзяи (ключи eh:*).

Формат ответа

{status:200, data:['DEL', <ответы Redis>]}
{status:500, err:<ошибка>}


Где используется

Тесты, ручная отладка.

Как работает

Redis:

del eh:*

outsource_comment

Назначение

Передать комментарий оператора АКЦ на анкету оператора "домашнего" КЦ.

Текущими средствами NCC невозможно связать звонок АКЦ со звонком "домашнего" КЦ (если не обращаться к CallsList'ам).
Поэтому комментарий идентифицируется номером телефона абонента.
У каждого комментария есть время жизни, см. конфигурационный параметр [app.outsource_comment].expire.

POST /outsource_comment {caller: ..., comment: ...}

POST /outsource_comment/:caller {comment: ...}



Назначение

Сохранить комментарий (comment) для данного CallerID (caller).

Формат ответа

{status:201, data:['SET', <ответы Redis>]}

{status:500, err:<ошибка>}

Где используется

Анкета АКЦ (Внешний сервис) до совершения трансфера.

Как работает

Redis:

set outc:<caller> <comment> ex <config[app.outsource_comment].expire>

GET /outsource_comment?caller=...

GET /outsource_comment/:caller

Назначение

Получить комментарий для данного CallerID (caller).

Формат ответа

{status:200, data:['GET', <ответы Redis>]}

{status:500, err:<ошибка>}

Где используется

Анкета "домашнего" КЦ (Внешний сервис).

Как работает

Redis:

get outc:<caller>

GET /outsource_comments

Назначение

Получить все ключи Redis outc:*.

Формат ответа

{status:200, data:['KEYS', <ответы Redis>]}

{status:500, err:<ошибка>}

Где используется

Тесты, ручная отладка.

Как работает

Redis:

keys outc:*

DELETE /outsource_comments

Назначение

Удалить все свзяи (ключи outc:*).

Формат ответа

{status:200, data:['DEL', <ответы Redis>]}

{status:500, err:<ошибка>}

Где используется

Тесты, ручная отладка.

Как работает

Redis:

del outc:*

search_client_by_phone

GET /search_client_by_phone?phone=...[&count=...]

GET /search_client_by_phone/:phone[?count=...]

Назначение

Получить UUID и title клиента (Физическое лицо) по номеру телефона (phone).
Клиент ищется в клиент-каталоге, указанном в config[app.client_catalog].
Если задан параметр count, и количество найденных результатов не равно параметру, будет возвращен пустой результат.



Формат ответа

{status:200, data:<строки результата SQL запроса>}

{status:200, data:[{client:{uuid:<UUID клиента>, title:<Название клиента>, ...}, flex_attributes:{...}}]

{status:500, err:<ошибка>}

Где используется

Поглощено magic_routing.
Тесты, ручная отладка.


Как работает

см. sql/search_client_by_phone.sql

GET /outsource_client_by_phone?phone=...

GET /outsource_client_by_phone/:phone

Нет автотестов

Аналогично GET /search_client_by_phone, зафиксирован параметр count=1, не возвращает флекс-атрибуты.

Формат ответа

{status:200, data:{client:{uuid:<UUID клиента>, title:<Название клиента>, ...}}]

{status:500, err:<ошибка>}

Где используется

Анкета АКЦ (Внешний сервис)

Как работает

см. GET /search_client_by_phone

smart_routing

Нет автотестов

GET /smart_routing?clientid=...[&citycall=...]

GET /smart_routing/:clientid[?citycall=...]

Назначение

Проанализировать последние config[app.smart_routing].X обращений клиента (по UUID (clientid)) на предмет наличия минимум config[app.smart_routing].Y одинаковых категорий обращения.
Если среди последних X обращений одна категория встречается чаще других, при этом указана >=Y раз, запрос вернет Назваие элемента справочника config[app.smart_routing].catalog_uuid, Код которого формируется как код категории:citycall или код категории, если подходящих элементов с :citycall нет.


Формат ответа

{status:200, data:null}

{status:200, data:{category:<код категории>, projectid:<UUID проекта>, count:<количество одинаковых категорий>}

{status:500, err:<ошибка>}

Где используется

Поглощено magic_routing.

Как работает

см. sql/smart_routing.sql

magic_routing

Нет автотестов

GET /magic_routing?phone=...[&citycall=...]

GET /magic_routing/:phone[&citycall=...]

Назначение

Попытка собрать всю магию IVR в один запрос.

Формат ответа

{status:200, data:null}

{status:200, data:{client:{uuid:<UUID клиента>, title:<Название клиента>, ...}, flex_attributes:{...}, eh_agent:['GET', <ответы Redis>], smart_routing:{category:<код категории>, projectid:<UUID проекта или DNIS>, count:<количество одинаковых категорий>}, phone_category:{vip:0, blacklist:1,...}}

{status:500, err:<ошибка>}

Где используется

IVR

Как работает

search_client_by_phone + Redis get eh:client:<client> + smart_routing + sql/phone_categorization.sql
При категоризации номера используются все клиент-каталоги партнера [app.client_catalog].partner_uuid кроме [app.client_catalog].catalog_uuid.

rest1c_gethistory


Нет автотестов

GET /rest1c_gethistory?clientextid=...

GET /rest1c_gethistory?clientid=...

GET /rest1c_gethistory/:clientextid

Назначение

Получение истории заказов. Интеграционная прослойка между PMS и 1С.

Формат ответа

{status:200_<статус получения данных клиента>_<статус обращения к 1C>, data:<тело ответа от 1С>}

{status:500, err:<ошибка>}

Примеры статусов:

200_200_200 - OK

200_200_500 - ошибка обращения к 1С (1С вернула что-то отличное от 200)

200_200_504 - не удалось подключиться к 1С

200_504_undefined - не удалось подключиться к REST API PMS

Где используется

Анкета "домашнего" КЦ (Внешний сервис).

Как работает

Если определен параметр clientextid, получаем по этому идентификатору клиента через REST API PMS.

Если определен параметр clientid, получаем данные клиента из БД (sql/get_client_by_uuid.sql).

По просьбе Виктора Вересоа [email protected] удаляем из JSON атрибут @type.

Данные клиента в виде JSON отправляем сервису 1С POST-запросом.

 


Поделиться:



Последнее изменение этой страницы: 2019-04-10; Просмотров: 106; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.453 с.)
Главная | Случайная страница | Обратная связь