Обратный звонок с мобильного в ответ на пропущенный от Oktell

Материал из 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 цепочки коммутаций. Если определяется, что это был успешный звонок, то строка удаляется из таблицы.


ОбратныйЗвонок-001.png


Компонент "Старт 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. Сценарий выглядит следующим образом:


ОбратныйЗвонок-002.png


Компонент "Старт 1" - в качестве параметра запуска переменная content (строковая). Переменная содержит контент цепочки коммутаций.


Компонент "id chain" - сравнивает сессионную переменную idchain_ACM с пустой строкой. Если переменная не пустая, значит это анализ ситуации, связанной с автодозвоном.

  • Аргумент 1 - переменная idchain_ACM
  • Аргумент 2 - пустая строка
  • Тип сравнения - "="

Компонент "Количество коммутаций" - парсер определяет количество коммутаций по контенту.

  • Документ - переменная content
  • Алгоритм - язык OQuery для HTML
  • Поисковый запрос - строка
commutation:has([name=abonent])>[key=idconnection]
  • Функция - количество элементов
  • Результат в переменную - переменная comcount(строковая)


ОбратныйЗвонок-003.png


Переход к следующему компоненту происходит по основной ветке и по ветке "Ошибка".

Компонент "Есть коммутации?" - определяет были ли коммутации по автодозвону. Сравнивает переменную comcount и 0.

  • Аргумент 1 - переменная comcount
  • Аргумент 2 - строка "0"
  • Тип сравнения - ">"

По ветке Ложь, сценарий заканчивается. Это обозначает, что если коммутаций не было, их не надо удалять из таблицы. По ветке Правда, необходимо удалить записи из таблицы FailedCalls_ACM.

Для этого используется компонент "delete failedcalls_acm". Выполняется следующий SQL-запрос.

delete from failedcalls_acm where idchain=@idchain

где

  • @idchain - сессионная переменная idchain_ACM.

Компонент "Отладочное уведомление" сообщает администратору об удалении записи из таблицы.


Модификация главного сценария

В начало главного сценария добавляется проверка, был ли неудачный исходящий звонок на номер абонента. Если действительно был, абоненту предлагается нажать "1" для соединения с тем сотрудником, который ему звонил.

Ниже представлена только процедура проверки. Сценарий выглядит следующим образом:


ОбратныйЗвонок-004.png


Компонент "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-запрос "Номер не нашелся?".

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

Скачать файлы сценариев: Обратный звонок.zip

Запрос для создания таблицы 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