Добрый день!

Engagement Center 7.6
стандартный процесс - создание обращение через CTI-панель по входящему звонку
В процессе есть параметры ContactID и AccountID
Звонит какой-то пользователь в системе( Supervisor, допустим) другому пользователю.
У этого Supervisor заполнен Контрагент-Наша компания.

Сам процесс на входе как-то получает значения параметров ContactID и AccountID ( звонящий пользователь и его контрагент).
Где это происходит, в каком месте, скажите, пожалуйста?

Нравится

11 комментариев

Добрый день!

Вся функциональность запуска процессов в CTI панели выполнена в отдельном пакете CTIProcessActions
Цель данного блока - дать возможность операторам колл центра, при обработке входящих обращений, запускать преднастроенные процессы обработки.
В системе можно настроить перечень процессов, которые будут отображаться в CTI панели. Так же можно указать группу пользователей, которые будут иметь возможность запускать процессы из CTI.

Настройка процессов для CTI панели
Перечень процессов, который отображается в cti панели настраивается в справочнике "Действие cti панели". В справочнике можно добавлять/удалять кнопки запуска процессов, указывать текст кнопки, сам процесс для запуска и порядок расположения.

Обязательное условие для корректного запуска процесса из cti панели - наличие параметров ContactId, AccountId, PhoneNumber. В эти параметры передаются данные контрагента или контакта по звонку. В процессе можно использовать эти данные для быстрого поиска обращений по абоненту или созданию новой записи с данными из cti панели.
ContactId – принимает идентификатор контакта в звонке, тип данных – справочник, справочник контактов
AccountId – принимает идентификатор контрагента в звонке, тип данных – справочник, справочник контрагентов
PhoneNumber – принимает номер абонента в CTI панели, строка, 250 символов

Отображение процессов для пользователей
Зачастую процессы нужны только пользователям, которые являются сотрудникаци КЦ. Что бы настроить отображение процессов только для нужной группы сотрудников в системе создана группа "Операторы КЦ". Только пользователи, которые включены в эту группу будут видеть кнопки запуска процессов в cti панели.
Если необходимо изменить группу, для которой нужно отображать процессы, это можно сделать в системных настройках. Задать другую группу для отображения процессов можно в настройке "Группа операторов КЦ".

Передача параметров реализована на CTI панеле. Когда пользователь "кликает" по нужному процессу, система передает описанные выше параметры в процесс.

"Передача параметров реализована на CTI панеле. Когда пользователь "кликает" по нужному процессу, система передает описанные выше параметры в процесс."

Расскажите подробнее, пожалуйста, где именно в пакете CTIProcessActions реализована функциональность передачи параметров в процесс.

В itil transitions при добавлении действия в CTI-панель происходит почему-то только передача параметра-контакта, а его контрагент почему-то не передается в параметр.
Хотелось бы понять почему.

Дарья, добрый день!

После ответа на звонок мы идентифицируем либо контрагента либо контакта. И далее панель, при запуске процесса, передает идентифицированную запись. Т.е. либо контакт либо контрагент. Если вы хотите получить контрагента идентифицированного контакта, то лучше его вычитать из самого контакта.

В Engagement Center у вас все же идентифицируется и контакт, и его контрагент. По крайней мере, подставляется и контакт, и его контрагент. Где же в таком случае происходит идентификация контрагента?

Дарья, идентификация Контакта и Контрагента производится процессом "ContactIdentification", который находится в пакете "OperatorCustomerEngagementCenter". В рамках данного процесса сначала производится поиск Контакта, а затем из найденной карточки контакта считывается Контрагент, что видно на скриншоте.

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

Елена, спасибо.
Посмотрите, на схему его теперь, пожалуйста.

В самом начале, идет ветвление:

Если ни определен ни контакт, ни контрагент, то открывается форма поиска клиента: и там уже пользователь либо создает новый контакт, либо выбирает существующий контакт, и из определенной карточки контакта считывается контрагент ( это то, о чем пишите вы - я не про эту ветку подпроцесса спрашивала)

Если же определен либо Контакт, либо Контрагент, то происходит сразу же выход из-под процесса
( эта стрелка самая верхняя - в ней условия [#Контакт#] != Guid.Empty || [#Контрагент#] != Guid.Empty).
Как вы видите, в этом ветке не происходит никакого считывания контрагента.
После создается обращение по процессу - в котором заполнены и контакт, и контрагент.
Вопрос - где в данном случае происходит определение контрагента? Полагаю, что и контрагент, и контакт передаются как входящие параметры в процесс.
Это возвращает нас к моему первоначальному вопросу:
"Расскажите подробнее, пожалуйста, где именно в пакете CTIProcessActions реализована функциональность передачи параметров в процесс." Где именно, в каком сервисе, каком пакете это определяется?

Дарья, процесс определения Контакта и Контрагента происходит в CTI-панели при входящем звонке, далее эти параметры передаются в процессы.

Ниже привожу код функции, которая определяет параметры в CTI-панели и зашита в коде объекта.

getActionProcessParameters: function() {
var parameters = {
PhoneNumber: this.getLastAbonentNumber()
};
var subscriberKey = this.get("IdentifiedSubscriberKey");
if (!subscriberKey) {
return parameters;
}
var subscriberCollection = this.get("IdentifiedSubscriberPanelCollection");
var subscriberPanel = subscriberCollection.get(subscriberKey);
switch (subscriberPanel.get("Type")) {
case CtiConstants.SubscriberTypes.Contact:
case CtiConstants.SubscriberTypes.Employee:
parameters.ContactId = subscriberPanel.get("Id");
break;
case CtiConstants.SubscriberTypes.Account:
parameters.AccountId = subscriberPanel.get("Id");
break;
default:
break;
}
return parameters;
},

Спасибо. Можете сказать, в каком именно объекте зашита эта функция? Название сервиса?

Дарья, данная функция находится в объекте CtiPanel.

Добрый день!
Про engagement center поняла - спасибо.
по аналогии открыла конфигурацию ITIL transitions 7.5
нашла в объекте CTIPanel эту функцию.
Функция есть и она имеет вид

getActionProcessParameters: function() {
var parameters = {
PhoneNumber: this.getLastAbonentNumber()
};
var subscriberKey = this.get("IdentifiedSubscriberKey");
if (Ext.isEmpty(subscriberKey)) {
return parameters;
}
var subscribers = this.get("IdentifiedSubscribers");
var subscriber = subscribers.get(subscriberKey);
switch (subscriber.SubscriberType) {
case CtiConstants.SubscriberTypes.Contact:
case CtiConstants.SubscriberTypes.Employee:
parameters.ContactId = subscriber.Id;
break;
case CtiConstants.SubscriberTypes.Account:
parameters.AccountId = subscriber.Id;
break;
default:
break;
}
return parameters;
}

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

Но почему-то в ITIL Transitions в процессе при этом будет заполнен только параметр контакт, в результате процесс пойдет по верхней ветке (т.к. там условие заполненности контакта или контрагента), но при этом создается обращение только с заполненным контактом.

Что не так в этой стандартной функции в определении параметров для ITIL?
Может быть исправлено это было в более новых сборках? Я сейчас рассматриваю 7.5.0.1054

Дарья, здравствуйте.

CTIPanel определяет только ИЛИ контакт ИЛИ контрагент и передает их значения в бизнес-процесс.

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

Case.BaseCasePage

onEntityInitialized: function() {
if (this.isAddMode() || this.isCopyMode()) {
this.setCaseNumber();
}
this.Terrasoft.SysSettings.querySysSettingsItem(this.statusDefSysSettingsName, function(value) {
this.set("StatusDefSysSettingsValue", value);
}, this);
this.updateOriginals();
var contact = this.get("Contact");
if (contact && !this.get("Account")) {
var account = contact.Account;
if (account) {
this.set("Account", account);
}
}
this.set("PreviousStatus", this.get("Status"));
this.callParent(arguments);
},

Показать все комментарии