Задача по обработке пропущенных — различия между версиями
Строка 71: | Строка 71: | ||
*Компонент "'''flag=1'''". Переменной '''flag''' присваивается значение "'''1'''", если соединение прошло удачно. | *Компонент "'''flag=1'''". Переменной '''flag''' присваивается значение "'''1'''", если соединение прошло удачно. | ||
− | *Компонент "update missed" - помечает в таблице missed, что клиент перезвонил и успешно соединился. Если такой строки не было у клиента, то ничего не произойдет. | + | *Компонент "'''update missed'''" - помечает в таблице '''missed''', что клиент перезвонил и успешно соединился. Если такой строки не было у клиента, то ничего не произойдет. |
update missed | update missed | ||
Строка 77: | Строка 77: | ||
where phone=@phone and recalldate is null | where phone=@phone and recalldate is null | ||
− | *Компонент "update missed2" - SQL-запрос аналогичен для таблицы missed2 | + | *Компонент "'''update missed2'''" - SQL-запрос аналогичен для таблицы '''missed2''' |
update missed | update missed |
Версия 11:46, 12 февраля 2014
Содержание
Задача: Создать задачу по автоматическому перезвону клиентам, от которых был пропущенный звонок.
Задача становится актуальной при большом потоке клиентов. В компании получается следующая ситуация: часть клиентов не хочет дожидаться ответа оператора и вешает трубку спустя минуту ожидания на линии. Как правило, это происходит в, так называемый, "час пик". Однако, терять клиентов из-за недостатка операторов многим не хочется. Возникает проблема - как перезвонить клиентам, от которых был пропущенный звонок.
Oktell позволяет решить эту задачу. Если клиент не дожидается ответа или переходит по веткам "занято", "нет ответа", система фиксирует это в базе данных. Затем, при освобождении оператора система резервирует его и дозванивается до клиента, от которого был пропущенный звонок. Оператор перед своими глазами видит всю информацию по предыдущему звонку от клиента: сколько времени тот ждал на линии, почему соединение прервалось и любые другие параметры.
Рассмотрим процедуру создания такой задачи.
Таблица абонентов
В модуле Таблицы абонентов создаем таблицу "missed" со следующими полями:
- Id - номер абонента в списке. Тип Int, создается автоматически.
- phone - телефон клиента. Тип Nvarchar (auto)
- calldate - время звонка. Тип Datetime
- calledid - набранный номер. Тип Nvarchar (auto)
- timewait - время ожидания в секундах. Тип Nvarchar (auto)
- reason - причина потери соединения. Тип Nvarchar (auto)
- operator - номер, на который происходило соединение. Тип Nvarchar (auto)
- recalldate - дата перезвона. Тип Datetime
- recalloperator - причина перезвона. Тип Nvarchar (auto)
Также создадим таблицу "missed2". Данная таблица нужна для работы задачи, так как в ней на одной строке содержится вся информация по клиенту, а не на нескольких строках, как у missed. С помощью такого хода, задача не будет несколько раз звонить одному клиенту. Таблица идентична предыдущей, в ней добавлено поле count, которое будет подсчитывать сколько раз клиент пытался дозвониться до компании:
Таблица "missed2" имеет следующие поля:
- Id - номер абонента в списке. Тип Int, создается автоматически.
- phone - телефон клиента. Тип Nvarchar (auto)
- calldate - время звонка. Тип Datetime
- calledid - набранный номер. Тип Nvarchar (auto)
- timewait - время ожидания в секундах. Тип Nvarchar (auto)
- reason - причина потери соединения. Тип Nvarchar (auto)
- operator - номер, на который происходило соединение. Тип Nvarchar (auto)
- recalldate - дата перезвона. Тип Datetime
- recalloperator - причина перезвона. Тип Nvarchar (auto)
- count - количество неудачных звонков. Тип Nvarchar (auto)
Главный сценарий
Ниже приведенный сценарий является упрощенным примером. В сценарии показываются основные моменты, на которые стоит обратить внимание при составлении задачи по перезвону.
Все основные переменные в этом сценарии требуется сделать сессионными для передачи в сценарий обработки контента, в котором они будут добавлены в базу данных.
Вид сценария приведен на рисунке:
- Компонент "Основные параметры" - в компоненте присваиваются
- сессионная переменная calldate (дата/время) = функция "Текущие дата и время"
- сессионная переменная calledid (строковая) = функция "Внешний номер (CalledId)"
- сессионная переменная callerid (строковая) = функция "Номер абонента (CallerId)"
- сессионная переменная reason (строковая) = строка "Клиент сбросил"
- Переменная reason - это причина, по которой появился пропущенный. По умолчанию, задается значение "Клиент сбросил".
- Компонент "flag=0" - сессионной переменной flag (строковая) присваивается строка "0". Эта переменная будет индикатором является ли звонок пропущенным. По умолчанию, считается пропущенным (значение 0).
- Это нужно сделать, так как IVR-сценарий прекращается как только клиент кладет трубку, поэтому нужно заранее установить значения по умолчанию.
- Компонент "operator" - сессионной переменной operator (строковая) присваивается строка "400". Переменная обозначает номер оператора или групповой номер, на который клиент не дозвонился.
- Компонент "Переключение 1" - происходит переключение на обозначенный номер 400.
- Компонент "flag=1". Переменной flag присваивается значение "1", если соединение прошло удачно.
- Компонент "update missed" - помечает в таблице missed, что клиент перезвонил и успешно соединился. Если такой строки не было у клиента, то ничего не произойдет.
update missed set recalldate = @recalldate, recalloperator='Перезвонил' where phone=@phone and recalldate is null
- Компонент "update missed2" - SQL-запрос аналогичен для таблицы missed2
update missed set recalldate = @recalldate, recalloperator='Перезвонил' where phone=@phone and recalldate is null
- В вашем сценарии входящей маршрутизации может быть довольно сложная система переключений. В этом случае перед каждым переключением нужно установить переменную operator с номером, а после удачного соединения переменной flag присвоить значение "1".
- Если соединение неудачно, то в каждой ветке переменной reason переприсваивается соответствующая причина пропущенного звонка. Например, по ветке "Занято" (если все операторы заняты в разговоре, а очередь ожидания не установлена), переменной reason будет присвоено значение "Заня
Сценарий обработки контента
В сценарии обработки контента записывается информация о пропущенном звонке в таблицу missed. Вид сценария приведен на рисунке:
- Компонент "flag=0?" - определяет равна ли переменная flag значению "0", т.е. является ли звонок пропущенным. Если нет, то сценарий завершается (или переходит к дальнейшей обработке в вашем случае).
- Компонент "timewait" - если звонок определен как пропущенный, то происходит присвоение переменной timewait (строковая) времени ожидания клиента с помощью следующего выражения:
DateDiff( ss , [calldate] , now )
- Выражение определяет разницу в секундах между временем начала звонка и текущим временем. Вы можете вычислять это выражение в минутах или в другой величине, изменив первый параметр "ss", например на "mi". Подробнее в статье Выражения.
- Компонент "Запись в missed" - записывает в таблицу missed детализированную информацию о пропущенном. Текст SQL запроса:
insert into missed (phone, calldate, calledid, timewait, reason, operator) values (@phone, @calldate, @calledid, @timewait, @reason, @operator)
- где
- @phone - переменная callerid,
- @calldate - переменная calldate,
- @calledid - переменная calledid,
- @timewait - переменная timewait,
- @reason - переменная reason,
- @operator - переменная operator
- Компонент "Запись в missed2" - записывает в таблицу missed2 информацию о первом пропущенном, а также подсчитывает количество пропущенных от конкретного номера. Если это первая запись, то добавляет ее полностью. Текст SQL запроса:
update missed2 set [count] = cast([count] as int)+1, calldate = @calldate, calledid = @calledid, timewait = @timewait, reason = @reason, operator = @operator where phone=@phone and recalldate is null if (@@rowcount = 0) insert into missed2 (phone, calldate, calledid, timewait, reason, operator, [count]) values (@phone, @calldate, @calledid, @timewait, @reason, @operator, '0')
После создания сценария не забудьте назначить его в Администрирование.Общие настройки.Сценарии АТС в качестве служебного сценария обработки контента.
Диалоговый сценарий обработки пропущенных
Диалоговый сценарий обработки пропущенных нужен для вывода информации оператору по предыдущему звонку от клиента. Вид сценария (в примере называется "missed dialog") показан на рисунке:
Чтобы получить информацию, а также записать данные по перезвону (какой оператор и когда перезвонил) нужно ввести все переменные таблицы в сценарий (имя такое же как у столбца, тип поле таблицы). Данный сценарий будет работать фактически с таблицей missed2 (конкретнее по тем полям, которые не были обзвонены).
- Компонент "Форма оператора" - настройте вид формы удобным образом, чтобы оператор получил всю необходимую информацию. В примере создана следующая диалоговая форма:
- Компонент "Запись в Missed2". Компонент записывает в таблицу Missed2 информацию о перезвоне.
- Переменной recalldate (поле таблицы) присваивается значение функции "Текущие дата и время"
- Переменной recalloperator (поле таблицы) присваивается значение функции "Имя оператора".
- Компонент "UPDATE MISSED" - заносит информацию в детализированную таблицу missed. Проставляется отметка всем пропущенным от клиента, которые были не обработаны.
update missed set recalloperator=@recalloperator, recalldate=@recalldate where phone=@phone and recalldate is null
Сценарий обработки звонка/попытки
Сценарий нужен для обработки случаев, когда в течении определенного количества звонков, мы не дозвонились до клиента. Например, задача пыталась 5 раз дозвониться до клиента, но на той стороне не брали трубку. В итоге, нужно пометить информацию о перезвоне, что мы не дозвонились до клиента.
Сценарий обработки звонка/попытки (в примере называется "missed обработка") выглядит следующим образом:
Компонент "Параметры абонента" - происходит присвоение:
- переменной idabon(строковая) значения функции "Id абонента в списке"
- переменной taskid (строковая) значения функции "Id задачи"
Компонент "Количество попыток" - с помощью SQL-запроса определяем количество неуспешных дозвонов ("Занято" + "Не отвечает") до абонента.
select @count = countbusy+countnotrespond from A_TaskManager_SubTaskNumber where idinlist=@idabon and TaskId = @taskid
где
- @count - переменная count (строковая)
- @idabon - переменная idabon
- @taskid - переменная taskid
Компонент "Ув1" - отладочное уведомление, показывает количество неуспешных попыток у абонента
'У абонента '+[idabon]+endline+ 'попыток '+[count]
Компонент "Count<=4" - сравнение количества попыток с максимальным числом (в примере, 4)
- аргумент 1 - выражение num([count]) , преобразованная к числу строка count.
- аргумент 2 - число 4
- тип сравнения - <=
Компонент "Ув2" - отладочное уведомление-индикатор того, что попытки дозвона до клиента закончились.
'Не дозвонились до клиента '+[idabon]+endline
Компонент "Missed2" - присвоение
- переменной recalloperator (поле таблицы) значения строки "Не дозвонились"
- переменной recalldate (поле таблицы) значения функции "Текущие дата и время"
Присвоение переменным типа поле таблицы возможно так как мы указали прикрепленную таблицу missed2, когда создавали внешнюю таблицу missed3.
Компонент "Missed1" - SQL-запрос, который обновляет таблицу missed в соответствии с тем, что мы не дозвонились до клиента.
update missed set recalloperator=@recalloperator, recalldate=@recalldate where phone=@phone and recalldate is null
где
- @phone - переменная phone (поле таблицы)
- @recalldate - переменная recalldate (поле таблицы)
- @recalloperator - переменная recalloperator (поле таблицы)
Компонент "Статус звонка =1" - после проделанных обновлений с таблицами абонентов, необходимо пометить данного абонента как завершенного, чтобы менеджер задач oktell не звонил больше этому клиенту в рамках данного перезвона. Выполняется SQL-запрос:
update A_TaskManager_SubTasks set nresult=1 where idinlist = @idabon and taskid = @taskid
где
- @idabon - переменная idabon
- @taskid - переменная taskid
Компонент "Обновление" - для применения изменения статуса абонента необходимо синхронизировать задачу с таблицей с помощью компонента "Статус объекта"
- Действие: Установить
- Тип объекта: Задача
- Задача: missed (которую мы создаем).
- В качестве альтернативы, можно использовать ключ задачи с переменной taskid.
- Свойство/действие: Синхронизировать таблицу абонентов с БД.
Создание таблицы абонентов для задачи
В созданных таблицы missed и missed2 будет храниться информация по всем звонкам как обзвоненным, так и нет. В рамках задачи требуется звонить только тем, кому еще не перезвонили. Для этого из таблицы missed2 необходимо выбрать только те строки, по которым не было звонка.
Для этого создается внешняя таблица абонентов missed3
- Прикрепленная таблица БД - missed2. Опция нужна для работы переменных типа "поле таблицы".
- SQL-запрос для выборки данных:
select * from missed2 where recalldate is null
Далее необходимо отметить назначения у столбцов
- Id - идентификатор
- phone - телефон
Создание исходящей задачи
Исходящая задача будет работать по созданной таблице и обзванивать только тех, кому еще не перезвонили. Ниже перечислены рекомендованные параметры:
- Параметры:
- Тип: Исходящая, с запросом у оператора (или с уведомлением оператора)
- Сценарий диалога - выберите созданный сценарий
- Расписание задачи - установите время действия задачи
- Остановить задачу - Никогда не останавливать задачу
- Ресурсы:
- Выберите операторов, супервизоров и внешние линии
![Задач пропущенные 006.png](/images/thumb/5/57/%D0%97%D0%B0%D0%B4%D0%B0%D1%87_%D0%BF%D1%80%D0%BE%D0%BF%D1%83%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5_006.png/1000px-%D0%97%D0%B0%D0%B4%D0%B0%D1%87_%D0%BF%D1%80%D0%BE%D0%BF%D1%83%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5_006.png)
- Абоненты:
- Таблица абонентов - missed3
- Дополнительно:
- Поведение сценария диалога после разрыва коммутации - Довести сценарий до конца
- Момент запуска сценария диалога - (рекомендуется) Сразу после поступления вызова
- Служебный сценарий обработки звонка/попытки - "missed обработка"
Сохраните задачу и запустите ее.
![Задач пропущенные 008.png](/images/thumb/1/19/%D0%97%D0%B0%D0%B4%D0%B0%D1%87_%D0%BF%D1%80%D0%BE%D0%BF%D1%83%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5_008.png/1000px-%D0%97%D0%B0%D0%B4%D0%B0%D1%87_%D0%BF%D1%80%D0%BE%D0%BF%D1%83%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5_008.png)