План оператора в модуле Мое рабочее место — различия между версиями

Материал из Oktell
Перейти к: навигация, поиск
(Новая страница: «Наверх Задача: вывести план оператора по перезвону в модуле "Мое рабочее место...»)
 
м (Хранимая процедура)
 
(не показано 10 промежуточных версии этого же участника)
Строка 1: Строка 1:
 
[[Практики|Наверх]]
 
[[Практики|Наверх]]
  
Задача: вывести план оператора по перезвону в модуле "Мое рабочее место".
+
__TOC__
  
Данная практика создана в продолжение статьи об  [[Автоматический перезвон клиентам|автоматическом перезвоне клиентам]]. Постановка задачи следующая.
+
'''Задача:''' вывести план оператора по перезвону в модуле "'''Мое рабочее место'''".
 +
 
 +
Данная практика создана в продолжение статьи об  [[Автоматический перезвон клиентам|автоматическом перезвоне клиентам]].  
 +
 
 +
===Введение===
 +
 
 +
Пусть есть исходящая операторская задача по некоторой таблице абонентов. При разговоре оператора с клиентом, последний изъявляет желание пообщаться немного позднее и оператор помечает перезвон в диалоговой форме. Затем задача автоматически перезвонит данному клиенту в назначенное время с прикреплением того же оператора, который общался с этим клиентом ранее. Однако, оператор может не ждать и самостоятельно перезвонить клиенту ранее назначенного срока.
 +
 
 +
Чтобы дать оператору такую возможность, необходимо где-либо выводить информацию о всех предстоящих перезвонах. Варианты вывода следующие:
 +
* '''Через отчет.'''
 +
:*Создается отчет, в котором показывается список всех перезвонов.
 +
:*Достоинством является встроенный фильтр в отчетах (можно выбрать дату, оператора и так далее).
 +
:*Неудобство появляется, если вы не хотите давать оператором доступ к модулю "'''Статистика'''" (или чтобы операторы могли просматривать отчеты). В этом случае можно ограничить доступ к каждому отчету с помощью вкладки "'''Доступ'''", однако настройка каждого отчета может быть не удобна.
 +
 
 +
* '''Через внешние модули.'''
 +
:*Возникает потребность в написании модуля. Достоинства и недостатки, по сути, те же, что и у отчета.
 +
 
 +
*''' Через модуль "'''Мое рабочее место'''".'''
 +
:*Достоинством метода является быстрый доступ к информации. Модуль "'''Мое рабочее место'''" всегда перед глазами оператора, и вся информация показывается прямо в этом модуле. Недостатком является отсутствие поиска, фильтрации данных.
 +
 
 +
*''' Вывод в другие системы.'''
 +
:*Так как вся информация хранится в БД Oktell, можно получить доступ к данным из других систем и выводить в вашу '''CRM-систему'''. Вопросы интеграции рассмотрены в статье [[Общее руководство по Web-интеграции]]
 +
 
 +
В этой статье рассматривается вывод информации через модуль "'''Мое рабочее место оператора'''".
 +
 
 +
 
 +
===Хранимая процедура===
 +
 
 +
Чтобы вывести информацию в модуль, необходимо изменить хранимую процедуру '''[dbo].[A_CallCenter_Info_GetOperatorIndexes_Custom]''' в базе данных '''Oktell'''. Воспользуйтесь '''SQL Server Management Studio''' (SSMS).
 +
 
 +
Упрощенный вид процедуры (чтобы использовать - вставьте в '''SQL Server Management Studio''' и нажмите '''F5'''):
 +
 
 +
USE [oktell]
 +
GO
 +
/****** Object:  StoredProcedure [dbo].[A_CallCenter_Info_GetOperatorIndexes_Custom] ******/
 +
SET ANSI_NULLS ON
 +
GO
 +
SET QUOTED_IDENTIFIER OFF
 +
GO
 +
 +
ALTER procedure [dbo].[A_CallCenter_Info_GetOperatorIndexes_Custom]
 +
@iduser uniqueidentifier,
 +
@dtnow datetime = null
 +
as
 +
begin
 +
if ( @dtnow is null )
 +
set @dtnow = GetDate ( )
 +
 +
declare @dtday datetime
 +
set @dtday = Cast ( Floor ( Cast ( @dtnow as float ) ) as datetime )
 +
 +
if ( @iduser = '00000000-0000-0000-0000-000000000000' )
 +
begin
 +
 +
--Вставьте сюда нужный запрос
 +
Select Id, 'Описание 1:', 'значение 1' from a_users
 +
 +
end
 +
end
 +
 
 +
 
 +
[[Файл:ПланОператора-001.png | center | 800px]]
 +
 
 +
 
 +
Работает процедура следующим образом: из запроса, который вы вставляете выбираются только те строки, у которых '''Id''' равен '''Id текущего пользователя''' (первый столбец обязательно '''Id''' с типом uniqueidentifier ). Запрос, который вы вставляете должен выдавать три столбца:
 +
* '''первый столбец''' - Id пользователя
 +
* '''второй столбец''' - описание параметра
 +
* '''третий столбец''' - значение параметра
 +
 
 +
 
 +
Рассмотрим запрос в примере:
 +
Select Id, 'Описание 1:', 'значение 1' from a_users
 +
 
 +
Запрос возвращает каждому '''Id''' пользователя два константных столбца. При открытии модуля "'''Мое рабочее место'''" выполняется данная процедура и на экран выводятся все строки с '''Id = Id пользователя'''.
 +
 
 +
 
 +
[[Файл:ПланОператора-002.png | center | 1000px]]
 +
 
 +
 
 +
Если вы хотите выводить строки по нескольким запросам пользуйтесь операцией объединения '''union'''.
 +
 
 +
Select Id, 'Описание 1:', 'значение 1' from a_users
 +
union
 +
Select Id, 'Количество букв в имени:', cast ( Len ( Name ) as nvarchar ( 50 ) )
 +
From A_Users
 +
union
 +
Select Id, 'Логин:', Login
 +
From A_Users
 +
 
 +
 
 +
[[Файл:ПланОператора-004.png | center | 700px]]
 +
 
 +
 
 +
 
 +
Перейдем к поставленной задаче. Вся информация об абонентах хранится в таблице '''TableMain'''. В этой таблице используются следующие столбцы:
 +
 
 +
:* '''Id''' - номер абонента в списке.
 +
:* '''phone''' - телефон абонента.
 +
:* '''calldate''' - время звонка.
 +
:* '''param1''' - информационное поле.
 +
:* '''param2''' - информационное поле.
 +
:* '''param3''' - информационное поле.
 +
:* '''operator''' - имя обслуживающего оператора.
 +
:* '''operatorid''' - id обслуживающего оператора.
 +
:* '''recalldate''' - дата перезвона.
 +
:* '''recallreason''' - причина перезвона.
 +
:* '''recallphone''' - причина перезвона.
 +
:* '''status''' - статус звонка (1- перезвон, 2 -успешный).
 +
 
 +
Следовательно, первый столбец будет '''operatorid''', второй столбец номер абонента в списке, третий - вся необходимая информация, в том порядке в котором требуется. Строки желательно упорядочить по дате (чем ближе дата перезвона, тем выше в таблице). Выдаются только те строки, у которых '''status=1'''. '''SQL-запрос''' следующий:
 +
 
 +
Select cast(operatorid as uniqueidentifier), 'Абонент '+cast(id as nvarchar(100)),
 +
cast(cast(recalldate as datetime) as nvarchar(100))+' | '+ recallphone+' | '+ operator +' | '+ recallreason
 +
From TableMain
 +
where
 +
cast(floor(cast(cast(recalldate as datetime) as float)) as datetime) <= cast(floor(cast(getdate() as float)) as datetime)
 +
and status=1
 +
order by cast(recalldate as datetime)
 +
 
 +
 
 +
[[Файл:ПланОператора-005.png | center | 700px]]
 +
 
 +
 
 +
'''Техническая документация:''' [[Мое рабочее место]]
 +
 
 +
'''Скачать полный текст запроса:''' [[Media:Мое_рабочее_место.zip|Мое рабочее место.zip]]

Текущая версия на 10:35, 31 марта 2023

Наверх

Задача: вывести план оператора по перезвону в модуле "Мое рабочее место".

Данная практика создана в продолжение статьи об автоматическом перезвоне клиентам.

Введение

Пусть есть исходящая операторская задача по некоторой таблице абонентов. При разговоре оператора с клиентом, последний изъявляет желание пообщаться немного позднее и оператор помечает перезвон в диалоговой форме. Затем задача автоматически перезвонит данному клиенту в назначенное время с прикреплением того же оператора, который общался с этим клиентом ранее. Однако, оператор может не ждать и самостоятельно перезвонить клиенту ранее назначенного срока.

Чтобы дать оператору такую возможность, необходимо где-либо выводить информацию о всех предстоящих перезвонах. Варианты вывода следующие:

  • Через отчет.
  • Создается отчет, в котором показывается список всех перезвонов.
  • Достоинством является встроенный фильтр в отчетах (можно выбрать дату, оператора и так далее).
  • Неудобство появляется, если вы не хотите давать оператором доступ к модулю "Статистика" (или чтобы операторы могли просматривать отчеты). В этом случае можно ограничить доступ к каждому отчету с помощью вкладки "Доступ", однако настройка каждого отчета может быть не удобна.
  • Через внешние модули.
  • Возникает потребность в написании модуля. Достоинства и недостатки, по сути, те же, что и у отчета.
  • Через модуль "Мое рабочее место".
  • Достоинством метода является быстрый доступ к информации. Модуль "Мое рабочее место" всегда перед глазами оператора, и вся информация показывается прямо в этом модуле. Недостатком является отсутствие поиска, фильтрации данных.
  • Вывод в другие системы.
  • Так как вся информация хранится в БД Oktell, можно получить доступ к данным из других систем и выводить в вашу CRM-систему. Вопросы интеграции рассмотрены в статье Общее руководство по Web-интеграции

В этой статье рассматривается вывод информации через модуль "Мое рабочее место оператора".


Хранимая процедура

Чтобы вывести информацию в модуль, необходимо изменить хранимую процедуру [dbo].[A_CallCenter_Info_GetOperatorIndexes_Custom] в базе данных Oktell. Воспользуйтесь SQL Server Management Studio (SSMS).

Упрощенный вид процедуры (чтобы использовать - вставьте в SQL Server Management Studio и нажмите F5):

USE [oktell]
GO
/****** Object:  StoredProcedure [dbo].[A_CallCenter_Info_GetOperatorIndexes_Custom] ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO

ALTER procedure [dbo].[A_CallCenter_Info_GetOperatorIndexes_Custom]
@iduser uniqueidentifier,
@dtnow datetime = null
as
begin
if ( @dtnow is null )
set @dtnow = GetDate ( )

declare @dtday datetime
set @dtday = Cast ( Floor ( Cast ( @dtnow as float ) ) as datetime )

if ( @iduser = '00000000-0000-0000-0000-000000000000' )
begin

--Вставьте сюда нужный запрос
Select Id, 'Описание 1:', 'значение 1' from a_users

end
end


ПланОператора-001.png


Работает процедура следующим образом: из запроса, который вы вставляете выбираются только те строки, у которых Id равен Id текущего пользователя (первый столбец обязательно Id с типом uniqueidentifier ). Запрос, который вы вставляете должен выдавать три столбца:

  • первый столбец - Id пользователя
  • второй столбец - описание параметра
  • третий столбец - значение параметра


Рассмотрим запрос в примере:

Select Id, 'Описание 1:', 'значение 1' from a_users

Запрос возвращает каждому Id пользователя два константных столбца. При открытии модуля "Мое рабочее место" выполняется данная процедура и на экран выводятся все строки с Id = Id пользователя.


ПланОператора-002.png


Если вы хотите выводить строки по нескольким запросам пользуйтесь операцией объединения union.

Select Id, 'Описание 1:', 'значение 1' from a_users
union
Select Id, 'Количество букв в имени:', cast ( Len ( Name ) as nvarchar ( 50 ) )
From A_Users 
union
Select Id, 'Логин:', Login
From A_Users


ПланОператора-004.png


Перейдем к поставленной задаче. Вся информация об абонентах хранится в таблице TableMain. В этой таблице используются следующие столбцы:

  • Id - номер абонента в списке.
  • phone - телефон абонента.
  • calldate - время звонка.
  • param1 - информационное поле.
  • param2 - информационное поле.
  • param3 - информационное поле.
  • operator - имя обслуживающего оператора.
  • operatorid - id обслуживающего оператора.
  • recalldate - дата перезвона.
  • recallreason - причина перезвона.
  • recallphone - причина перезвона.
  • status - статус звонка (1- перезвон, 2 -успешный).

Следовательно, первый столбец будет operatorid, второй столбец номер абонента в списке, третий - вся необходимая информация, в том порядке в котором требуется. Строки желательно упорядочить по дате (чем ближе дата перезвона, тем выше в таблице). Выдаются только те строки, у которых status=1. SQL-запрос следующий:

Select cast(operatorid as uniqueidentifier), 'Абонент '+cast(id as nvarchar(100)), 
cast(cast(recalldate as datetime) as nvarchar(100))+' | '+ recallphone+' | '+ operator +' | '+ recallreason 
From TableMain 
where 
cast(floor(cast(cast(recalldate as datetime) as float)) as datetime) <= cast(floor(cast(getdate() as float)) as datetime)
and status=1
order by cast(recalldate as datetime) 


ПланОператора-005.png


Техническая документация: Мое рабочее место

Скачать полный текст запроса: Мое рабочее место.zip