План оператора в модуле Мое рабочее место — различия между версиями
(Новая страница: «Наверх Задача: вывести план оператора по перезвону в модуле "Мое рабочее место...») |
м (→Хранимая процедура) |
||
(не показано 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
Работает процедура следующим образом: из запроса, который вы вставляете выбираются только те строки, у которых Id равен Id текущего пользователя (первый столбец обязательно Id с типом uniqueidentifier ). Запрос, который вы вставляете должен выдавать три столбца:
- первый столбец - Id пользователя
- второй столбец - описание параметра
- третий столбец - значение параметра
Рассмотрим запрос в примере:
Select Id, 'Описание 1:', 'значение 1' from a_users
Запрос возвращает каждому Id пользователя два константных столбца. При открытии модуля "Мое рабочее место" выполняется данная процедура и на экран выводятся все строки с Id = Id пользователя.
Если вы хотите выводить строки по нескольким запросам пользуйтесь операцией объединения 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
Перейдем к поставленной задаче. Вся информация об абонентах хранится в таблице 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)
Техническая документация: Мое рабочее место
Скачать полный текст запроса: Мое рабочее место.zip