План оператора в модуле Мое рабочее место — различия между версиями
м (→Хранимая процедура) |
|||
Строка 128: | Строка 128: | ||
'''Техническая документация:''' [[Мое рабочее место]] | '''Техническая документация:''' [[Мое рабочее место]] | ||
− | '''Скачать полный текст запроса:''' [ | + | '''Скачать полный текст запроса:''' [[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