Автоматический перезвон клиентам
Содержание
Поставленные задачи:
1) обеспечить автоматический перезвон клиентам в задаче.
2) обеспечить закрепление оператора за клиентом
В данной статье рассматривается исходящая задача с запросом у оператора. Однако это не исключает возможность использовать приведенные алгоритмы для входящих задач любого типа.
Во время работы исходящей задачи нередко возникает потребность перезвонить клиенту в определенное время. Подразумевается, что оператор должен ввести время и причину перезвона, а также при необходимости номер, на который будет совершен перезвон. При наступлении срока повторного звонка клиенту, система должна напомнить оператору причину перезвона, время на которое был запланирован перезвон, а также другие дополнительные показатели. При этом резервирование происходит только того оператора, который последний раз разговаривал с данным клиентом.
Основные моменты
Чтобы перезвон работал необходимо установить:
- переменная (сл) Статус звонка = число 0
- переменная (сл) Статус абонента = число 2
- переменная (сл) Дата следующего звонка = переменная recalldate
- переменная (сл) Номер для перезвона = переменная recallphone
- В компоненте "Стоп" - В компоненте важно поставить свойство "Отображать стоп-карточку" в значение "Да". Это необходимо для записи служебных переменных.
Шаг. Создание проекта.
- В разделе "Call-центр" модуль "Проекты" нажмите Добавить.
- Введите название проекта. В примере, проект называется "Перезвон". Нажмите Сохранить.


Шаг. Создание таблицы абонентов.
- Перейдите в модуль "Таблицы абонентов".
- Нажмите Добавить. Введите название списка и название таблицы (только на латинице). В примере, список называется Таблица Обзвона, таблица называется TableMain.
- Перейдите на вкладку Данные. Добавьте стобцы, необходимые для вашей задачи, а также служебные столбцы для работы перезвона. В качестве примера, разберем столбцы созданной таблицы:
- Id - номер абонента в списке. Тип Int, назначение Идентификатор создается автоматически.
- phone - телефон абонента. Тип Nvarchar (auto), назначение Телефон, необходим для задачи.
- calldate - время звонка. Тип Datetime, необходим для задачи.
- param1 - информационное поле. Тип Nvarchar (auto), необходим для задачи.
- param2 - информационное поле. Тип Nvarchar (auto), необходим для задачи.
- param3 - информационное поле. Тип Nvarchar (auto), необходим для задачи.
- operator - имя обслуживающего оператора. Тип Nvarchar (auto), необходим для задачи.
- operatorid - id обслуживающего оператора. Тип Uniqueidentifier, необходим для перезвона.
- recalldate - дата перезвона. Тип Datetime, назначение Информационное поле, необходим для перезвона.
- recallreason - причина перезвона. Тип Nvarchar (auto), назначение Информационное поле, необходим для перезвона.
- recallphone - причина перезвона. Тип Nvarchar (auto), назначение Информационное поле, необходим для перезвона.
- status - статус звонка (1- перезвон, 2 -успешный). Тип Nvarchar (auto), необходим для перезвона.
Импортируйте или введите вручную номера для обзвона.


Шаг. Создание сценария.
Общий вид сценария:

Компонент "Присвоение данных" - в компоненте присваиваются
- переменная operator (поле таблицы) = функция "Имя оператора"
- переменная calldate (поле таблицы) = функция "Текущие даты и время"
- переменная temp (строковая) = переменная recallphone (поле таблицы). Переменная temp хранит в себе текущее значение телефона, на который позвонила задача. Телефон, как мы знаем, может измениться от первоначального, если клиент захочет, чтобы ему перезвонили на другой номер.
- переменная operatorid (поле таблицы) = функция "Id оператора"

Компонент "Ув1" - уведомление для контроля работы. Текст уведомления - выражение:
[operator]+' позвонил абоненту '+ [id]
Компонент "Проверка" - проверяет систему на предмет перезвона. Если переменная status (поле таблицы) равна 1, то это перезвон.
Компонент "temp" - Если система звонит клиенту первый раз, перезаписывает переменную temp значением phone (поле таблицы). Таким образом в переменной temp будет храниться актуальный телефон.
Компонент "Ув2" - Если система перезванивает клиенту, показывает уведомление супервизору о том, что оператор перезвонил клиенту. Текст уведомления - выражения:
[operator] +' перезвонил клиенту '+[id]
Компонент "Перезвон" - Диалоговая форма для уведомления оператора о причинах перезвона. По этой форме оператор напоминает клиенту, что он просил перезвонить ему.

Компонент "Основная форма" - Диалоговая форма для составления заявки. В вашей задаче форма может отличаться - быть более сложной, иметь больше параметров.

Компонент "Ув3" - Отладочное уведомление для проверки значений. Текст уведомления - выражение:
[operator]+ ' ввел:'+endline+ '[param1] '+[param1]+endline+ '[param2] '+[param2]+endline+ '[param3] '+[param3]+endline+ '[recallflag] '+[recallflag]
Компонент "Перезвон?" - проверяет установил ли оператор флажок на перезвон. Если recallflag (строковая) равен 1, то переходим на заполнение формы перезвона.
Компонент "Ув 5" - Если перезвон не понадобился, уведомление оповещает супервизора, что оператор обзвонил клиента. Текст уведомления - выражение:
[operator]+' обзвонил абонента '+[id]
Компонент "Status=2" - присваивает переменной status (поле таблицы) значение 2.
Компонент "Статус звонка=1" - присваивает служебной переменной (сл) Статус звонка значение 1. После этого задача перестает обзванивать данного абонента и считает его завершенным.

Компонент "Стоп 1" - В компоненте важно поставить свойство "Отображать стоп-карточку" в значение "Да". Это необходимо для записи служебных переменных.
Компонент "Форма перезвона" - Если перезвон понадобился, открывается форма перезвона. В этой форме оператор заполняет дату и время для перезвона, номер на который надо звонить и причину для более детального описания ситуации.

Компонент "Дата для перезвона" - склеивает дату и время в одну переменную с помощью SQL-запроса. Входные переменные @recalldata(дата/время) и @recalltime(дата/время), выходная переменная tempdata(дата/время).
ВНИМАНИЕ: Необходимость введения дополнительной переменной tempdata обуславливается тем, что в SQL-запросе нельзя в выходную переменную сразу определить поле таблицы.
ВНИМАНИЕ: Рекомендуется использовать SQL-запрос для склеивания даты и времени. Строковые операции (substr) использовать не рекомендуется, так как на компьютере могут быть американские региональные стандарты (панель управления Windows) и строка с датой может выглядеть по другому.
Например, на одном компьютере дата выглядит как 27.01.2014 14:57:43 (русский), а на другом 27\1\2014 02:57:43 PM (американский). Работать со строками во втором случае не получится.
select @recalldate = cast(floor(cast(@recalldata as float)) as datetime) + (@recalltime - cast(floor(cast(@recalltime as float)) as datetime))

Компонент "Присвоение даты и статуса" - присваивает
- переменной recalldate(поле таблицы) присваивается переменная tempdata(дата/время)
- переменной status (поле таблицы) присваивается значение 1
Компонент "Ув4" - отладочное уведомление для проверки значений. Текст уведомления - выражение:
[operator]+' поставил на перезвон абонента '+[id]+endline+ '[recallphone] '+[recallphone]+endline+ '[recallreason] '+[recallreason]+endline+ '[recalldate] '+[recalldate]
Компонент "Статус звонка=0" - В компоненте устанавливаются служебные переменные необходимые для перезвона:
- переменная (сл) Статус звонка = число 0
- переменная (сл) Статус абонента = число 2
- переменная (сл) Дата следующего звонка = переменная recalldate
- переменная (сл) Номер для перезвона = переменная recallphone

Компонент "Стоп 2" - В компоненте важно поставить свойство "Отображать стоп-карточку" в значение "Да". Это необходимо для записи служебных переменных.
Шаг. Создание задачи
- Перейдите на вкладку "Задачи". Нажмите "Добавить" и выберите "Исходящее голосовое оповещение".
- На вкладке "Параметры" основные характеристики:
- Тип - С запросом у оператора
- Сценарий диалога - выберите созданный сценарий диалога "СценарийГлавный"

- На вкладке "Ресурсы" выберите операторов, супервизоров по задаче и внешние линии.
- В поле "Вариант обхода операторов" выберите "Пользовательская процедура" для закрепления клиентов за оператором. Для работы этого варианта обхода необходимо дополнить хранимую процедуру [dbo].[A_TaskManager_OperatorsAll_Get_Custom] в базе данных Oktell, подробнее в следующем разделе.

- На вкладке "Абоненты" выберите таблицу абонентов
- ВНИМАНИЕ: Рекомендуется отключить "Использовать алгоритм перезвона абонентам строго в назначенное время". Этот алгоритм использует кэш абонентов и использует постоянный мониторинг этого кэша на предмет необходимости звонка. Тесты показывают, что он может не подхватывать других абонентов из основной таблицы абонентов, пока не произойдет обзвон кэша.

- На вкладке "Дополнительно" выберите параметры дозвона до абонентов
- В поле "Поведение сценария диалога после разрыва коммутации" поставьте "Довести сценарий до конца"
- В поле "При нажатии на СТОП в диалоговой форме" поставьте "Разрывать коммутацию".
- ВНИМАНИЕ: Если вы используете в вашей системе сценарий "Вместо отбоя внешней линии" выберите параметр "Поведение при переключении абонента на сценарий IVR" - "Осуществлять выход из задачи (с возможностью входа в другую задачу)".


Шаг. Пользовательская процедура
В созданной таблице абонентов TableMain есть поле operatorid. Если это поле обозначено, задача должна закреплять клиентов за данными операторами.
Для того, чтобы задача работала необходимо добавить в хранимую процедуру [dbo].[A_TaskManager_OperatorsAll_Get_Custom] следующий запрос. В запросе используется id задачи B8A22910-BFA4-480D-BFB1-151D0C06F93B, замените его на id вашей задачи (найти id можно в таблице A_TaskManager_Tasks)
if (@idtask = 'B8A22910-BFA4-480D-BFB1-151D0C06F93B') begin declare @Id uniqueidentifier select @Id = operatorid from TableMain where Id = @idabonent if (@Id is null) begin select u.Id from A_Users u inner join A_UserParams up on u.Id = up.Iduser where IsOperator = 1 order by NEWID() end else begin select @Id Id end return end
Запрос определяет есть ли у заданного абонента @idabonent закрепленный за ним оператор и возвращает его id. Если за клиентом никто не закреплен, запрос возвращает список операторов в случайном порядке.
На рисунке показана последовательность действий. Выберите хранимую процедуру в базе данных Oktell, добавьте запрос и нажмите F5.
Использование сценария
При первом звонке оператор заполняет карточку. В случае необходимости выбирает "Перезвонить клиенту".



При перезвоне первая диалоговая форма напоминает оператору информацию о клиенте и почему был установлен перезвон. При этом в основной форме все поля заполнены.



Благодаря всплывающим уведомлениям супервизор всегда в курсе работы системы. В сценарии вы можете поставить свойство уведомления "Сохранить в БД". Тогда оператор сможет просматривать уведомления в разделе "Офис" - модуль "Кабинет" - вкладка "Уведомления".

Супервизор может наблюдать за работой задачи также по таблице абонентов (столбец Status). Также можно настроить отчеты по данной таблице абонентов.
Скачать файл сценария и текст запроса: Перезвон.zip