Обратный звонок с мобильного в ответ на пропущенный от Oktell
Задача: Клиенты крупных компаний часто могут обнаружить пропущенный звонок с городского номера и при попытке перезвонить попадают на голосовое меню. Становится совершенно непонятно, кто звонил и какой выбрать пункт меню. Предлагается ввести следующий пункт в меню "Если вы получили пропущенный, нажмите 5" и при выборе - клиент соединяется с оператором, который совершал ему звонок.
Решение задачи состоит из следующих этапов:
- При звонке клиента, находится и анализируется информация по его последней коммутации.
- Если обнаруживается, что это был неудачный исходящий звонок, клиенту предлагается соединиться с оператором, который совершал звонок.
ВНИМАНИЕ: Если вы не используете сценарий автодозвона, вы можете пропустить следующие три пункта и переходить к модифицированию главного сценария. Это связано с тем, что в базе данных Oktell не хранится информация по неудачным исходящим звонкам с использованием сервиса автодозвона, поэтому надо самостоятельно заносить данные в отдельную таблицу.
Содержание
Создание таблицы учета неудачных исходящих по автодозвону
В базе данных oktell для решения задачи используются следующие таблицы:
- таблица [oktell].[dbo].[A_Stat_Connections_1x1]. В ней можно найти все удачные исходящие звонки.
- таблица [oktell].[dbo].[A_Stat_FailedCalls]. В ней можно найти все неудачные исходящие звонки, набранные в ручном режиме.
Этих данных недостаточно для определения последнего звонка к клиенту, так как операторы могут использовать сервис автодозвона на своем рабочем месте. В этом случае надо отдельно записывать все неудачные соединения по автодозвону в отдельную таблицу.
Для хранения информации по всем неудачным исходящих автодозвонам создана таблица "FailedCalls_ACM" со следующими полями:
- Id - номер записи в списке. Тип Int, создается автоматически.
- number -набираемый телефон клиента. Тип Nvarchar (auto).
- calldate - дата звонка. Тип Datetime.
- operator - внутренний номер пользователя внутри АТС. Тип Nvarchar (auto).
Модификация сценария автодозвона
В сценарий автодозвона необходимо добавить SQL-запрос с добавлением записи о исходящем звонке в таблицу FailedCalls_ACM. По умолчанию, каждый звонок считается неудачным, проверка происходит в сценарии обработки контента по ID цепочки коммутаций. Если определяется, что это был успешный звонок, то строка удаляется из таблицы.
Компонент "Старт 1" - в качестве параметра запуска переменная Номер (строковая). Переменная содержит набираемый номер.
Компонент "idchain_ACM, operator" - присваивает
- сессионной переменной idchain_ACM (строковая) значение функции "Id сессии сценария". Это нужно для того, чтобы определить в сценарии контента были ли коммутации по данной цепочке.
- переменной operator (строковая) значение функции Инициатор дозвона.Внутренний номер(пользователь).
Компонент "Дозвон" - производит дозвон на указанный номер. В компоненте установлены свойства:
- Номер/команда - переменная Номер
- Среда - Внешняя сеть
- Обслуживание - Управляющий модуль
- Направления - выберите направления
ВНИМАНИЕ: Успешный переход не обозначает, что оператор дозвонился до абонента. Абонент может не взять трубку, однако сценарий автодозвона будет завершен, требуется дальнейший анализ в сценарии обработки контента.
Компонент SQL-запроса "INSERT FailedCalls_ACM" ставится по всем неудачным веткам от компонента "Дозвон" и использует следующий текст запроса:
update FailedCalls_ACM set calldate=getdate(), operator=@operator, idchain=@idchain where number=@number if @@rowcount=0 begin insert into FailedCalls_ACM (number,calldate, operator, idchain) values (@number, getdate(), @operator, @idchain) end
где
- @idchain - переменная idchain_ACM (строковая).
- @number - переменная Номер (строковая).
- @operator - переменная operator (строковая).
Запрос позволяет использовать одну строку для одного абонента.
Если у вас более сложный сценарий, SQL-запрос добавления данных в таблицу надо поставить по неудачным веткам после каждого компонента "Дозвон"
Компонент "Отладочное уведомление" - оповещает администратора о добавленных значениях в таблицу FailedCalls_ACM. Текст уведомления - выражение:
'добавил в базу '+endline+ '[operator] '+[operator]+endline+ '[Номер] '+[Номер]+endline+ '[idchain] '+[idchain_ACM]
Служебный сценарий обработки контента
В сценарии обработки контента необходимо определить были ли коммутации по автодозвону. Если коммутации были, необходимо удалить запись о неуспешном дозвоне из таблицы FailedCalls_ACM. Сценарий выглядит следующим образом:
Компонент "Старт 1" - в качестве параметра запуска переменная content (строковая). Переменная содержит контент цепочки коммутаций.
Компонент "id chain" - сравнивает сессионную переменную idchain_ACM с пустой строкой. Если переменная не пустая, значит это анализ ситуации, связанной с автодозвоном.
- Аргумент 1 - переменная idchain_ACM
- Аргумент 2 - пустая строка
- Тип сравнения - "="
Компонент "Количество коммутаций" - парсер определяет количество коммутаций по контенту.
- Документ - переменная content
- Алгоритм - язык OQuery для HTML
- Поисковый запрос - строка
commutation:has([name=abonent])>[key=idconnection]
- Функция - количество элементов
- Результат в переменную - переменная comcount(строковая)
Переход к следующему компоненту происходит по основной ветке и по ветке "Ошибка".
Компонент "Есть коммутации?" - определяет были ли коммутации по автодозвону. Сравнивает переменную comcount и 0.
- Аргумент 1 - переменная comcount
- Аргумент 2 - строка "0"
- Тип сравнения - ">"
По ветке Ложь, сценарий заканчивается. Это обозначает, что если коммутаций не было, их не надо удалять из таблицы. По ветке Правда, необходимо удалить записи из таблицы FailedCalls_ACM.
Для этого используется компонент "delete failedcalls_acm". Выполняется следующий SQL-запрос.
delete from failedcalls_acm where idchain=@idchain
где
- @idchain - сессионная переменная idchain_ACM.
Компонент "Отладочное уведомление" сообщает администратору об удалении записи из таблицы.
Модификация главного сценария
В начало главного сценария добавляется проверка, был ли неудачный исходящий звонок на номер абонента. Если действительно был, абоненту предлагается нажать "1" для соединения с тем сотрудником, который ему звонил.
Ниже представлена только процедура проверки был ли неудачный исходящий звонок и
Компонент "callerid" - присваивает переменной callerid значение функции Номер абонента (CallerId).
Компонент "Поиск внутреннего номера" - определяет был ли неудачный звонок абоненту. Выполняется следующий SQL-запрос:
declare @dt1 datetime declare @dt2 datetime declare @dt3 datetime declare @u1 nvarchar(100) declare @u3 nvarchar(100) set @dt1=cast ('1900-01-01' as datetime) set @dt2=cast ('1900-01-01' as datetime) set @dt3=cast ('1900-01-01' as datetime) SELECT TOP 1 @dt1=[TimeStart], @u1=[AOutNumber] FROM [oktell].[dbo].[A_Stat_FailedCalls] where ANumberdialed='{'+@tel+'}' order by TimeStart desc SELECT TOP 1 @dt2=[TimeStart] FROM [oktell].[dbo].[A_Stat_Connections_1x1] where (bstr=@tel and astr!='IVR') or (Astr=@tel and bstr!='IVR') order by TimeStart desc SELECT TOP 1 @dt3=[calldate], @u3=[operator] FROM [oktell].[dbo].[FailedCalls_ACM] where number=@tel order by calldate desc IF @dt1>@dt2 and @dt1>@dt3 begin set @u=@u1 return end IF @dt2>@dt1 and @dt2>@dt3 begin set @u='-1' return end IF @dt3>@dt1 and @dt3>@dt1 begin set @u=@u3 return end
где
- @tel - переменная callerid
- @u - переменная number (строковая)
Компонент "Номер не нашелся?" - определяет, нашелся или нет внутренний номер. Сравнивает переменную number и строку -1.
- Аргумент 1 - переменная number
- Аргумент 2 - строка "-1"
- Тип сравнения - "="
Если номер не найден, то произойдет переход по ветке Правда далее на главный сценарий.
Если номер найден, то абоненту предлагается ввести 1, чтобы соединиться с тем оператором, кто ему звонил.
Используется компонент преднабора "Введите 1". Компонент имеет следующие свойства:
- Файл - выберите звуковой файл, который будет проигрываться клиенту.
- Символы прерывания - "1"
- Макс время, с - максимальное время, в течении которого необходимо ввести число. В примере, 5 секунд.
Если клиент не хочет соединиться с оператором, то через 5 секунд, произойдет переход по ветке "Таймаут".
Если клиент нажал 1, то произойдет переключение на оператора с номером number.
Для этого служит компонент "Переключение на оператора"
- Назначение - Внутрь
- Номер - переменная number
Дополнение
При желании учитывать неудачные исходящие вызовы по задачам, необходимо использовать таблицу [oktell_cc_temp].[dbo].[A_Cube_CC_EffortConnections] по полю AbonentNumber. К сожалению, информацию по оператору вы не получите, но сможете перевести на группу ответственных менеджеров, которые объяснят почему они звонили данному абоненту.
В этом случае необходимо изменить SQL-запрос "Номер не нашелся?".
Если вы не используете автодозвон, ситуация облегчается. В этом случае необходимо только модифицировать главный сценарий.
Запрос для создания таблицы FailedCalls_ACM:
USE [oktell] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[FailedCalls_ACM]( [Id] [int] IDENTITY(1,1) NOT NULL, [number] [nvarchar](2000) NULL, [calldate] [datetime] NULL, [operator] [nvarchar](2000) NULL, [idchain] [nvarchar](2000) NULL, PRIMARY KEY CLUSTERED ( [Id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO