About

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

В ядре поддерживаются сообщения типа Звонок, Заметки (Комментарии). Дополнительные типы сообщений предоставляются плагинами.

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

Сообщения E-Mail могут быть использованы для коммуникации двух BGERP между собой. В каждой из них сообщения будут привязаны к своему процессу, имеющих собственных исполнителей.

Setup

Для настройки сообщений создать отдельную конфигурацию, включаемую в основную посредством инклуда.

Following settings should be done in the configuration.

Типы

Типы сообщения настраиваются в конфигурации, одна или несколько записей вида:

messageType.<id>.title=<title>
messageType.<id>.class=<messageTypeClassName>

Где:

  • <id> - уникальный числовой идентификатор типа сообщения, не должен меняться впоследствии;

  • <title> - наименование типа сообщения;

  • <messageTypeClassName> - имя класса-обработчика сообщений.

Опциональные параметры:

# не информировать о необработанных сообщениях данного типа
messageType.<id>.unprocessedMessageNotify=0

Остальные параметры различаются для разных видов сообщений.

Для типа сообщения могут быть указаны один или несколько режимов поиска:

messageType.<id>.search.<searchModeId>.title=<title>
messageType.<id>.search.<searchModeId>.class=<searchModeClassName>

Где:

  • <searchModeId> - уникальный числовой идентификатор режима поиска, начиная с 1;

  • <title> - наименование режима поиска;

  • <searchModeclassName> - имя класса, реализующего режим поиска.

Первый режим поиска применяется по-умолчанию при открытии сообщения для обработки.

Необязателен к указанию и класс, сохраняющий контакт.

messageType.<id>.saver.class=<saverClassName>

На скриншоте цифрой 1 изображены режимы поиска, 2 - режимы сохранения контакта.

message process

Режимы поиска и сохранения могут быть специфичны для типа сообщения. Search modes, marked as Auto are automatically and parallel running when a message is opened.

Значение <searchModeClassName>, что ищет Конфигурация и пример

ru.bgcrm.dao.message.MessageTypeSearchCustomerByTitle
Контрагента по наименованию, для любого типа сообщения.

i0111

Нет дополнительных параметров.
Пример:

messageType.1.search.2.title=Customer by Title
messageType.1.search.2.class=ru.bgcrm.dao.message.MessageTypeSearchCustomerByTitle

ru.bgcrm.dao.message.MessageTypeSearchEmail
Auto
Поиск контрагента по Email для типа сообщения Email.

Нет дополнительных параметров.
Пример:

messageType.1.search.1.title=Customer by EMail
messageType.1.search.1.class=ru.bgcrm.dao.message.MessageTypeSearchEmail

ru.bgcrm.dao.message.MessageTypeSearchCall
Auto
Поиск контрагента в базе BGERP по номеру телефона звонящего для типа сообщения Call. Поиск производится по точному совпадению.

messageType.<id>.search.<searchModeId>.title=<title>
messageType.<id>.search.<searchModeId>.class=ru.bgcrm.dao.message.MessageTypeSearchCall
messageType.<id>.search.<searchModeId>.commands=<commands>
# необязательный параметр
messageType.<id>.search.<searchModeId>.stringExpressionNumberPreprocess=<jexl>

Где:

  • <commands> - команды разделённые точкой с запятой, в данный момент поддержана customerByPhoneParam:<paramIds>, где <paramIds> - коды параметров типа "телефон" в биллинге через запятую;

  • <jexl> - JEXL выражение для предобработки номера перед поиском с его использованием, исходный номер передаётся переменной numberFrom.

Пример:

messageType.1.search.1.title=Customer by Phone
messageType.1.search.1.class=ru.bgcrm.dao.message.MessageTypeSearchCall
messageType.1.search.1.commands=customerByPhoneParam:10
messageType.1.search.1.stringExpressionNumberPreprocess=if( numberFrom.length() == 11 ){ numberFrom = numberFrom.substring(1)}; return numberFrom;

ru.bgcrm.plugin.bgbilling.dao.MessageTypeSearchEmail
Auto
Поиск договора в базе BGBilling по EMail парамеру для типа сообщения EMail.

messageType.<id>.search.<searchModeId>.title=<title>
messageType.<id>.search.<searchModeId>.class=ru.bgcrm.plugin.bgbilling.dao.MessageTypeSearchEmail
messageType.<id>.search.<searchModeId>.billingId=<billingId>
messageType.<id>.search.<searchModeId>.paramIds=<paramIds>

Где:

  • <billingId> - идентификатор биллинга;

  • <paramIds> - коды параметров договора т ипа EMail через запятую.

Пример:

messageType.1.search.3.title=Договор по параметру EMail
messageType.1.search.3.class=ru.bgcrm.plugin.bgbilling.dao.MessageTypeSearchEmail
messageType.1.search.3.billingId=bitel
messageType.1.search.3.paramIds=7

ru.bgcrm.plugin.bgbilling.dao.MessageTypeSearchCall
Auto
Поиск договора в базе BGBilling по номеру телефона звонящего для типа сообщения Call. Поиск производится по подстроке.

messageType.<id>.search.<searchModeId>.title=<title>
messageType.<id>.search.<searchModeId>.class=ru.bgcrm.plugin.bgbilling.dao.MessageTypeSearchCall
messageType.<id>.search.<searchModeId>.billingId=<billingId>
messageType.<id>.search.<searchModeId>.commands=<commands>
# необязательный параметр
messageType.<id>.search.<searchModeId>.stringExpressionNumberPreprocess=<jexl>

Где:

  • <billingId> - идентификатор биллинга;

  • <commands> - команды, в данный момент поддержана contractByPhoneParam:<paramId>, где <paramId> - идентификатор параметра типа "телефон" в биллинге;

  • <jexl> - JEXL выражение для предобработки номера перед поиском с его использованием, исходный номер передаётся переменной numberFrom.

Пример:

messageType.1.search.1.title=Договор по номеру
messageType.1.search.1.class=ru.bgcrm.plugin.bgbilling.dao.MessageTypeSearchCall
messageType.1.search.1.billingId=bg
messageType.1.search.1.commands=contractByPhoneParam:27
messageType.1.search.1.stringExpressionNumberPreprocess=if( numberFrom.length() == 11 ){ numberFrom = numberFrom.substring(1)}; return numberFrom;

ru.bgcrm.plugin.bgbilling.dao.MessageTypeSearchContractByTitleAndComment
Поиск договора в базе BGBilling по номеру и комментарию, для любого типа сообщения.

i0112
messageType.<id>.search.<searchModeId>.title=<title>
messageType.<id>.search.<searchModeId>.class=ru.bgcrm.plugin.bgbilling.dao.MessageTypeSearchContractByTitleAndComment
messageType.<id>.search.<searchModeId>.billingId=<billingId>

Где:

  • <billingId> - идентификатор биллинга.

Пример:

messageType.1.search.2.title=По номеру/примечанию
messageType.1.search.2.class=ru.bgcrm.plugin.bgbilling.dao.MessageTypeSearchContractByTitleAndComment
messageType.1.search.2.billingId=bg

ru.bgcrm.plugin.bgbilling.dao.MessageTypeSearchContractByDialUpLogin
Поиск договора в базе BGBilling по логину либо алиасу DialUp модуля.

messageType.<id>.search.<searchModeId>.title=<title>
messageType.<id>.search.<searchModeId>.class=ru.bgcrm.plugin.bgbilling.dao.MessageTypeSearchContractByDialUpLogin
messageType.<id>.search.<searchModeId>.billingId=<billingId>
messageType.<id>.search.<searchModeId>.moduleId=<moduleId>

Где:

  • <billingId> - идентификатор биллинга;

  • <moduleId> - код экземпляра модуля DialUp.

Пример:

messageType.1.search.3.title=По логину DialUp
messageType.1.search.3.class=ru.bgcrm.plugin.bgbilling.dao.MessageTypeSearchContractByDialUpLogin
messageType.1.search.3.billingId=bg
messageType.1.search.3.moduleId=1

Режимы сохранения

Значение <saverClassName>, что делает Конфигурация и пример

ru.bgcrm.dao.message.MessageTypeContactSaverEmail
Сохранение EMail в параметр типа "email" контрагента. Возможно сохранение домена либо только EMail а.

messageType.<id>.saver.class=ru.bgcrm.dao.message.MessageTypeContactSaverEmail
messageType.<id>.saver.paramId=<paramId>

Где:

  • <paramId> - код параметра контрагента типа "EMail".

Пример:

messageType.1.saver.class=ru.bgcrm.dao.message.MessageTypeContactSaverEmail
messageType.1.saver.paramId=27

ru.bgcrm.dao.message.MessageTypeContactSaverPhone
Сохранение телефона в параметр типа "phone" контрагента. Возможно сохранение домена либо только EMail а.

messageType.<id>.saver.class=ru.bgcrm.dao.message.MessageTypeContactSaverPhone
messageType.<id>.saver.paramId=<paramId>

Где:

Пример:

messageType.1.saver.class=ru.bgcrm.dao.message.MessageTypeContactSaverPhone
messageType.1.saver.paramId=37
messageType.1.saver.format=13

ru.bgcrm.plugin.bgbilling.dao.MessageTypeContactSaverPhone
Сохранение телефона в параметр типа "телефон" договора биллинга.

messageType.<id>.saver.class=ru.bgcrm.plugin.bgbilling.dao.MessageTypeContactSaverPhone
messageType.<id>.saver.paramId=<paramId>
messageType.<id>.saver.format=<format>

Где:

Пример:

messageType.1.saver.class=ru.bgcrm.plugin.bgbilling.dao.MessageTypeContactSaverPhone
messageType.1.saver.paramId=27

Type Note

<messageTypeClassName>=ru.bgcrm.dao.message.MessageTypeNote

Используются для добавления заметок (комментариев) по ходу процесса.

i0102

Пример настройки:

#
messageType.100.title=Заметка (Комментарий)
messageType.100.class=ru.bgcrm.dao.message.MessageTypeNote

Type Call

<messageTypeClassName>=ru.bgcrm.dao.message.MessageTypeCall

Дополнительные необязательные параметры:

messageType.<id>.offerNumberFromParamId=<offerNumberFromParamId>
messageType.<id>.autoNumberRegister=<autoNumberRegister>

Где:

  • <offerNumberFromParamId> - код текстового параметра пользователя, содержащий номер, предлагаемый к занятию по-умолчанию.

  • <autoNumberRegister> - 0, to disable automatic registering user number on login.

Тип сообщения представляет из себя звонок, который обрабатывается оператором. Для данного типа сообщения в оснастке обработки сообщений отображается поле занятия номера. Строго говоря, это означает, что в системе может быть зарегистрирован только один тип сообщения Call.

i0109

As a call’s supplier should be used Asterisk plugin or external HTTP requests.

Other Text Types

The following plugins provide support for different text message types:

Tags

Colored message tags allow to separate messages in process tab. Example of configuration:

tag.1.title=Access
tag.1.color=red
tag.2.title=Requirements
tag.2.color=green
tag.3.title=TODO
tag.3.color=magenta
You can see a sample configurations in Demo System.

To configure related processes to be found during message processing add to configuration following blocks:

message.related.process.<id>.type=<type>
message.related.process.<id>.color=<color>

Where:

  • <id> - numeric ID, found processes are sorted by IDs

  • <color> - optional HTML color for table rows with found processes

  • <type> - search type, one of the following values:

    • messageFrom - processes with messages from the same from address (E-Mail sender or calling number) as the processed message

    • foundLink - processes with the same links as found for the processed message

    • foundLinkCustomerAddressCity - processes with a link parameter values, matching to address parameter cities of found customers, that type requires additional parameter set with key foundLinkCustomerAddressCityProcessParamId

Scheduler

Получение новых сообщений и отправку созданных осуществляет класс MessageExchange, настройте его запуск в планировщике.

Дополнительные опциональные параметры конфигурации задачи:

  • messageTypeIds - коды типов сообщений через запятую, для которых производить обмен.

Usage

Оснастка "Сообщения"

Доступна через оснастку Сообщения. Основное назначение - первичная обработка сообщений с привязкой к вновь созданным, либо существующим процессам. В обработке нуждаются не все сообщения, в данный момент она используется для E-Mail ов и звонков. Обработка звонка открывается автоматически, E-Mail ы необходимо открывать в оснастке вручную.

Уведомление о количестве необработанных сообщений выводится в области уведомлений.

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

messages

При клике по строке открывается обработка сообщения, внешний вид может быть следующим для звонка (снимок уже использовался выше).

message process

Либо для E-Mail.

message process email
message process related process

Работа в процессе

Отображение вкладки сообщений должно быть настроено в конфигурации типа процесса.

process messages

Для создания сообщения в рамках процесса используйте кнопку Создать.

Доступен фильтр по сообщениям со вложениями и тегам. Теги позволяют маркировать каждое сообщение определёнными метками, позволяющими их позже легко найти, например: "TODO", "Реквизиты".

Кнопка M рядом с каждым сообщением вызывает всплывающее меню с операциями:

  • Вкл./выкл. разрывы строк - перенос длинных строк в сообщениях либо отображение скроллинга;

  • Теги - установить теги на выбранное сообщение.

  • Изменить процесс на - привязать сообщение к другому процессу:

  • Ответить - создать новое сообщение, являющееся ответом на выбранное и также привязанное к текущему процессу;

  • Редактировать - редактировать сообщение, если тип поддерживает;

  • Удалить - удалить сообщение, если тип поддерживает.

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

Отладка

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

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