Обращения

Легкий

Обращение — любой инцидент, жалоба, пожелание или запрос на обслуживание, которые поступают в контакт-центр или службу поддержки. В Creatio обращения могут регистрироваться автоматически или вручную.

Действия, которые выполняются в процессе обработки обращения:

  • Изменяется состояние обращения.
  • Вносится информация о решении обращения.
  • Обращение связывается с другими записями приложения.
  • Фиксируются данные об обратной связи от пользователей.

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

Реализовать пользовательское правило расчета сроков в обращении 

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

Чтобы реализовать пользовательское правило расчета сроков:

  1. Создайте схему объекта сервиса, в которую добавьте необходимые колонки. Для этого воспользуйтесь инструкцией, которая приведена в статье Объект.

    Колонки, которые необходимо добавить в схему объекта:

    • Колонка типа [ Справочник ] ([ Lookup ], которая указывает единицу измерения времени. В качестве значения выберите справочник TimeUnit.

      Сроки, которые позволяет настроить Creatio:

      • Время реакции.
      • Время разрешения.
    • Колонка типа [ Целое ] ([ Integer ]), которая хранит значение соответствующего срока.
    • Колонка типа [ Справочник ] ([ Lookup ], которая хранит календарь. По этому календарю рассчитываются сроки в обращении. В качестве значения выберите справочник Calendar.
    • Колонка типа [ Справочник ] ([ Lookup ], которая хранит ссылку на сервисный договор для возможности выполнения фильтрации. В качестве значения выберите справочник ServicePact.
    • Колонка типа [ Справочник ] ([ Lookup ], которая хранит ссылку на сервис для возможности выполнения фильтрации. В качестве значения выберите справочник ServiceItem.
  2. Создайте справочник с временными параметрами, в котором настройте отображение колонок реестра. Для создания справочника воспользуйтесь инструкцией, которая приведена в статье Создать новый справочник. Для настройки отображения колонок реестра воспользуйтесь инструкцией, которая приведена в статье Реестр раздела.
  3. Реализуйте получение временных параметров.

    1. Создайте схему типа [ Исходный код ] ([ Source code ]). Для этого воспользуйтесь инструкцией, которая приведена в статье Исходный код (C#).
    2. В дизайнере исходного кода реализуйте класс.

      • Класс является наследником абстрактного класса BaseTermStrategy.
      • В классе реализуйте параметризованный конструктор.

        Параметры конструктора:

        • UserConnection userConnection — текущее подключение пользователя.
        • Dictionary<string, object> — параметры, на основании которых выполняется расчет.
  4. Подключите пользовательское правило расчета сроков.

    1. Перейдите в дизайнер системы по кнопке . В блоке [ Настройка системы ] ([ System setup ]) перейдите по ссылке [ Справочники ] ([ Lookups ]).
    2. Откройте справочник [ Правила расчета сроков по обращениям ] ([ Case deadline calculation schemas ]).
    3. На панели инструментов страницы настройки справочника нажмите [ Добавить ] ([ New ]) и заполните значения полей справочника:

      • [ Название ] ([ Name ]) — произвольное название пользовательского правила.
      • [ Обработчик ] ([ Handler ]) — имя класса, который был создан на предыдущем шаге. Обязательно укажите пространство имен.

        Пример обработчика: Terrasoft.Configuration.UsrCustomRule.

        Terrasoft.Configuration — пространство имен.

        UsrCustomRule — класс, в котором реализовано получение временных параметров.

      • [ По умолчанию ] ([ Default ]) — признак, который настраивает использование по умолчанию текущего правила для расчета сроков.
      • [ Альтернативное правило ] ([ Alternative schema ]) — правило, по которому расчитываются сроки, если невозможен расчет сроков по текущему правилу (т. е. любой из временных параметров невозможно расчитать классом стратегии). В этом случае создается экземпляр класса альтернативной стратегии. Если сроки невозможно расчитать с использованием альтернативной стратегии, то создается ее альтернативная стратегия. Таким образом формируется очередь правил расчета сроков.

      Подробнее о настройке правил расчета сроков читайте в статье Настроить расчет сроков реакции и разрешения.

Реализовать пользовательское правило расчета сроков в обращении
Сложный

Пример реализован для продуктов линейки Service Creatio.

Пример. На странице обращения для контрагента [ Elite Systems ] согласно сервисного договора [ 78 — Elite Systems ] сервиса [ Восстановление утерянных данных ] ([ Lost data recovery ]) добавить пользовательское правило для расчета временных параметров обращений.

Поля обращения, логику заполнения которых необходимо изменить:

  • [ Время реакции ] ([ Response time ]) — 2 часа.
  • [ Время разрешения ] ([ Resolution time ]) — 1 рабочий день.

В приложении используется типовой календарь (т. е. в значении системной настройки [ Базовый календарь ] ([ Base calendar ], код BaseCalendar) выбрано значение "Типовой календарь" ("Default calendar")).

1. Создать схему объекта сервиса 

  1. Перейдите в раздел [ Конфигурация ] ([ Configuration ]) и выберите пользовательский пакет, в который будет добавлена схема.
  2. На панели инструментов реестра раздела нажмите [ Добавить ] —> [ Объект ] ([ Add ] —> [ Object ]).

  3. В дизайнере схем заполните свойства схемы:

    • [ Код ] ([ Code ]) — "UsrServiceTerms".
    • [ Заголовок ] ([ Title ]) — "Сервис расчета временных параметров" ("Service for calculating terms").
    • [ Родительский объект ] ([ Parent object ]) — выберите "BaseEntity".
  4. Добавьте колонку, которая указывает единицу измерения времени реакции.

    1. В контекстном меню узла [ Колонки ] ([ Columns ]) структуры объекта нажмите add_button —> [ Справочник ] ([ Lookup ].

    2. Заполните свойства колонки:

      • [ Код ] ([ Code ]) — "UsrReactionTimeUnit".
      • [ Заголовок ] ([ Title ]) — "Единица измерения времени реакции" ("Response time unit").
      • [ Справочник ] ([ Lookup ]) — выберите "TimeUnit".
  5. Аналогично добавьте другие колонки.

    Свойства колонок, которые необходимо добавить, приведены в таблице ниже.

    Значения свойств колонок
    Колонка
    Свойство
    Значение свойства
    Колонка, которая хранит значение срока реакции
    [ Тип данных ]
    ([ Data type ])
    "Целое" ("Integer")
    [ Код ]
    ([ Code ])
    "UsrReactionTimeValue"
    [ Заголовок ]
    ([ Title ])
    "Значение времени реакции" ("Response time")
    Колонка, которая указывает единицу измерения времени разрешения
    [ Тип данных ]
    ([ Data type ])
    "Справочник" ("Lookup")
    [ Код ]
    ([ Code ])
    "UsrSolutionTimeUnit"
    [ Заголовок ]
    ([ Title ])
    "Единица измерения времени разрешения" ("Resolve time unit")
    [ Справочник ]
    ([ Lookup ])
    Выберите "TimeUnit"
    Колонка, которая хранит значение срока разрешения
    [ Тип данных ]
    ([ Data type ])
    "Целое" ("Integer")
    [ Код ]
    ([ Code ])
    "UsrSolutionTimeValue"
    [ Заголовок ]
    ([ Title ])
    "Значение времени разрешения" ("Resolution time")
    Колонка, которая хранит календарь. По этому календарю рассчитываются сроки в обращении.
    [ Тип данных ]
    ([ Data type ])
    "Справочник" ("Lookup")
    [ Код ]
    ([ Code ])
    "UsrCalendarId"
    [ Заголовок ]
    ([ Title ])
    "Используемый календарь" ("Calendar that is used")
    [ Справочник ]
    ([ Lookup ])
    Выберите "Calendar"
    Колонка, которая хранит ссылку на сервисный договор для возможности выполнения фильтрации
    [ Тип данных ]
    ([ Data type ])
    "Справочник" ("Lookup")
    [ Код ]
    ([ Code ])
    "UsrServicePactId"
    [ Заголовок ]
    ([ Title ])
    "Сервисный договор" ("Service agreement")
    [ Справочник ]
    ([ Lookup ])
    Выберите "ServicePact"
    Колонка, которая хранит ссылку на сервис для возможности выполнения фильтрации
    [ Тип данных ]
    ([ Data type ])
    "Справочник" ("Lookup")
    [ Код ]
    ([ Code ])
    "UsrServiceItemId"
    [ Заголовок ]
    ([ Title ])
    "Сервис" ("Service")
    [ Справочник ]
    ([ Lookup ])
    Выберите "ServiceItem"
  6. На панели инструментов дизайнера объекта нажмите [ Опубликовать ] ([ Publish ]) для создания соответствующей таблицы в базе данных.

2. Создать справочник с временными параметрами 

  1. Перейдите в дизайнер системы по кнопке . В блоке [ Настройка системы ] ([ System setup ]) перейдите по ссылке [ Справочники ] ([ Lookups ]).
  2. Зарегистрируйте справочник.

    1. На панели инструментов раздела [ Справочники ] ([ Lookups ]) нажмите [ Добавить справочник ] ([ New lookup ]) и заполните свойства справочника:

      • [ Название ] ([ Name ]) — "Пользовательские сроки реакции и разрешения" ("Custom response and resolution deadlines").
      • [ Объект ] ([ Object ]) — выберите "Сервис расчета временных параметров" ("Service for calculating terms").
    2. На панели инструментов страницы настройки справочника нажмите [ Сохранить ] ([ Save ]) для сохранения справочника.
  3. Откройте справочник [ Пользовательские сроки реакции и разрешения ] ([ Custom response and resolution deadlines ]).
  4. Настройте отображение колонок реестра. Для этого воспользуйтесь инструкцией, которая приведена в статье Реестр раздела.

    Колонки, которые необходимо отобразить:

    • [ Сервис ] ([ Service ]).
    • [ Сервисный договор ] ([ Service agreement ]).
    • [ Используемый календарь ] ([ Calendar that it used ]).
    • [ Единица измерения времени разрешения ] ([ Resolve time unit ]).
    • [ Время разрешения ] ([ Resolution time ]).
    • [ Единица измерения времени реакции ] ([ Response time unit ]).
    • [ Время реакции ] ([ Response time ]).
  5. На панели инструментов страницы настройки справочника нажмите [ Добавить ] ([ New ]) и заполните значения полей справочника:

    • [ Сервис ] ([ Service ]) — выберите "Восстановление утерянных данных" ("Lost data recovery").
    • [ Сервисный договор ] ([ Service agreement ]) — выберите "78 — Elite Systems".
    • [ Используемый календарь ] ([ Calendar that it used ]) — выберите "Типовой календарь" ("Default calendar").
    • [ Единица измерения времени разрешения ] ([ Resolve time unit ]) — выберите "Календарных дней" ("Calendar days").
    • [ Время разрешения ] ([ Resolution time ]) — "1".
    • [ Единица измерения времени реакции ] ([ Response time unit ]) — выберите "Календарных часов" ("Calendar hours").
    • [ Время реакции ] ([ Response time ]) — "2".

3. Реализовать получение временных параметров 

  1. Перейдите в раздел [ Конфигурация ] ([ Configuration ]) и выберите пользовательский пакет, в который будет добавлена схема.
  2. На панели инструментов реестра раздела нажмите [ Добавить ] —> [ Исходный код ] ([ Add ] —> [ Source code ]).

  3. В дизайнере исходного кода заполните свойства схемы:

    • [ Код ] ([ Code ]) — "UsrServiceTermsStrategy".
    • [ Заголовок ] ([ Title ]) — "Правило расчета временных параметров" ("Rule for calculating terms").

    Для применения изменений свойств нажмите [ Применить ] ([ Apply ]).

  4. Реализуйте логику получения временных параметров.

    1. Создайте класс, который является наследником абстрактного класса BaseTermStrategy.
    2. В классе реализуйте параметризованный конструктор.

      Параметры конструктора:

      • UserConnection userConnection — текущее подключение пользователя.
      • Dictionary<string, object> — параметры, на основании которых выполняется расчет.

    Исходный код схемы исходного кода представлен ниже.

    UsrServiceTermsStrategy
    Code copied
    namespace Terrasoft.Configuration
    {
        using System;
        using System.Collections.Generic;
        using Terrasoft.Common;
        using Terrasoft.Configuration.Calendars;
        using Terrasoft.Core;
        using Terrasoft.Core.Entities;
        using CalendarsTimeUnit = Calendars.TimeUnit;
        using SystemSettings = Terrasoft.Core.Configuration.SysSettings;
        public class UsrServiceTermsStrategy: BaseTermStrategy<CaseTermInterval, CaseTermStates>
        {
            /* Класс-контейнер для хранения данных, которые получены из точки входа. */
            protected class StrategyData
            {
                public Guid ServiceItemId {
                    get;
                    set;
                }
                public Guid ServicePactId {
                    get;
                    set;
                }
            }
            /* Поле, которое хранит полученные из точки входа данные. */
            protected StrategyData _strategyData;
            /* Параметризированный конструктор, который необходим для корректной инициализации классом-селектором. */
            public UsrServiceTermsStrategy(UserConnection userConnection, Dictionary<string, object> args) : base(userConnection) {
                _strategyData = args.ToObject<StrategyData>();
            }
            /* Метод, который получает данные и возвращает их в экземпляре класса CaseTermInterval. */
            public override CaseTermInterval GetTermInterval(CaseTermStates mask) {
                var result = new CaseTermInterval();
                /* Создает EntitySchemaQuery-запрос. */
                var esq = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "UsrServiceTerms");
                /* Добавляет колонки в запрос. */
                string reactionTimeUnitColumnName = esq.AddColumn("UsrReactionTimeUnit.Code").Name;
                string reactionTimeValueColumnName = esq.AddColumn("UsrReactionTimeValue").Name;
                string solutionTimeUnitColumnName = esq.AddColumn("UsrSolutionTimeUnit.Code").Name;
                string solutionTimeValueColumnName = esq.AddColumn("UsrSolutionTimeValue").Name;
                string calendarColumnName = esq.AddColumn("UsrCalendarId.Id").Name;
                /* Добавляет фильтры в запрос. */
                var esqFirstFilter = esq.CreateFilterWithParameters(FilterComparisonType.Equal, "UsrServiceItemId", _strategyData.ServiceItemId);
                var esqSecondFilter = esq.CreateFilterWithParameters(FilterComparisonType.Equal, "UsrServicePactId", _strategyData.ServicePactId);
                esq.Filters.Add(esqFirstFilter);
                esq.Filters.Add(esqSecondFilter);
                /* Выполняет и обрабатывает результаты запроса. */
                EntityCollection entityCollection = esq.GetEntityCollection(UserConnection);
                if (entityCollection.IsNotEmpty()) {
                    /* Добавляет к возвращаемому значению время реакции. */
                    if (!mask.HasFlag(CaseTermStates.ContainsResponse)) {
                        result.ResponseTerm = new TimeTerm {
                            Type = entityCollection[0].GetTypedColumnValue<CalendarsTimeUnit>(reactionTimeUnitColumnName),
                            Value = entityCollection[0].GetTypedColumnValue<int>(reactionTimeValueColumnName),
                            CalendarId = entityCollection[0].GetTypedColumnValue<Guid>(calendarColumnName)
                        };
                    }
                    /* Добавляет к возвращаемому значению время разрешения. */
                    if (!mask.HasFlag(CaseTermStates.ContainsResolve)) {
                        result.ResolveTerm = new TimeTerm {
                            Type = entityCollection[0].GetTypedColumnValue<CalendarsTimeUnit>(solutionTimeUnitColumnName),
                            Value = entityCollection[0].GetTypedColumnValue<int>(solutionTimeValueColumnName),
                            CalendarId = entityCollection[0].GetTypedColumnValue<Guid>(calendarColumnName)
                        };
                    }
                }
                return result;
            }
        }
    }
  5. На панели инструментов дизайнера исходного кода нажмите [ Сохранить ] ([ Save ]) для временного сохранения изменений в метаданных схемы.
  6. На панели инструментов дизайнера исходного кода нажмите [ Опубликовать ] ([ Publish ]) для выполнения изменений на уровне базы данных.

4. Подключить пользовательское правило расчета сроков 

  1. Перейдите в дизайнер системы по кнопке . В блоке [ Настройка системы ] ([ System setup ]) перейдите по ссылке [ Справочники ] ([ Lookups ]).
  2. Откройте справочник [ Правила расчета сроков по обращениям ] ([ Case deadline calculation schemas ]).
  3. На панели инструментов страницы настройки справочника нажмите [ Добавить ] ([ New ]) и заполните значения полей справочника:

    • [ Название ] ([ Name ]) — "Стратегия для 78 — Elite Systems" ("Strategy for 78 — Elite Systems").
    • [ Обработчик ] ([ Handler ]) — "Terrasoft.Configuration.UsrServiceTermsStrategy".
    • Установите признак [ По умолчанию ] ([ Default ]).

Результат выполнения примера 

Чтобы посмотреть результат выполнения примера:

  1. Перейдите в рабочее место [ Сервис ] ([ Service ]).
  2. Создайте обращение. Для этого воспользуйтесь инструкцией, которая приведена в статье Создать обращение.
  3. В поле [ Контрагент ] ([ Account ]) выберите "Elite Systems".
  4. В поле [ Сервис ] ([ Service ]) выберите "Восстановление утерянных данных" ("Lost data recovery").

В результате выполнения примера на страницу обращения добавлено пользовательское правило для расчета временных параметров обращений. Время реакции (т. е. значение поля [ Время реакции ] ([ Response time ])) — 2 часа. Время разрешения (т. е. значение поля [ Время разрешения ] ([ Resolution time ])) — 1 рабочий день.