Типы сообщения настраиваются в конфигурации, одна или несколько записей вида:
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 - режимы сохранения контакта.
Режимы поиска и сохранения могут быть специфичны для типа сообщения.
Режимы поиска
Таблица. Режимы поиска
Значение <searchModeClassName> | Что ищет | Конфигурация и пример |
---|---|---|
ru.bgcrm.dao.message.MessageTypeSearchCustomerByTitle | Контрагента по наименованию, для любого типа сообщения. | Нет дополнительных параметров. Пример: messageType.1.search.2.title=Контрагент по названию messageType.1.search.2.class=ru.bgcrm.dao.message.MessageTypeSearchCustomerByTitle |
ru.bgcrm.dao.message.MessageTypeSearchEmail | Поиск контрагента по Email для типа сообщения Email. | Нет дополнительных параметров. Пример: messageType.1.search.1.title=Авто по EMail messageType.1.search.1.class=ru.bgcrm.dao.message.MessageTypeSearchEmail |
ru.bgcrm.dao.message.MessageTypeSearchCall | Поиск контрагента в базе BGCRM по номеру телефона звонящего для типа сообщения 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> Где:
Пример: messageType.1.search.1.title=Авто контрагент (номер) 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 | Поиск договора в базе 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> Где:
Пример: 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 | Поиск договора в базе 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> Где:
Пример: 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 по номеру и комментарию, для любого типа сообщения. | messageType.<id>.search.<searchModeId>.title=<title> messageType.<id>.search.<searchModeId>.class=ru.bgcrm.plugin.bgbilling.dao.MessageTypeSearchContractByTitleAndComment messageType.<id>.search.<searchModeId>.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> Где:
Пример: 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> Где:
Пример: 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 |
Сообщения EMail
<messageTypeClassName>=ru.bgcrm.dao.message.MessageTypeEmail.
Дополнительные параметры:
messageType.<id>.email=<email> messageType.<id>.host=<host> messageType.<id>.login=<login> messageType.<id>.pswd=<pswd> messageType.<id>.folderIn=<inFolder> messageType.<id>.folderProcessed=<processedFolder> messageType.<id>.folderSkipped=<skippedFolder> messageType.<id>.folderSent=<sentFolder> # # IMAP SSL протокол #messageType.<id>.store=imaps # порт, если не указано - 143 для IMAP, 993 для IMAP SSL #messageType.<id>.port= # отладка почтового обмена IMAP и SMTP #messageType.<id>.debug=1 # # параметры SMTP, добавляются после префикса идентично опциям из основной конфигурации messageType.<id>.... # необязательные параметры messageType.<id>.folderInProcessLinked=<inProcessedFolder> messageType.<id>.signExpression=<signExpression> # иной адрес отправителя письма messageType.<id>.from=<from> # адрес для ответов в письме messageType.<id>.replayTo=<replayTo>
Входящие сообщения считываются с EMail ящика по протоколу IMAP. Сообщения считываются из папки <inFolder>. Параметры подключения IMAP задаются параметрами <host>, <login>, <pswd>. После разбора текста сообщений и вложений сообщение перемещается в <processedFolder>, при возникновении ошибок - в <skippedFolder>.
<email> подставляется в поле отправителя исходящего письма. Папка <inProcessedFolder> указывает папку, из которой считываются ответные письма на отправленные из BGCRM привязанные к процессу сообщения. Определение привязки производится по теме письма, в которую при отправке из BGCRM добавляется маркер с типом процесса.
Поля <from> и <replayTo> используются в случае необходимости в момент отправки подставить в поле "От" (From) иной адрес и "Ответить на" (Replay-To).
<signExpression> - JEXL выражение, определяющее подпись письма при отправке его через данный тип сообщения.
Отправка исходящих сообщий осуществляется через протокол SMTP, параметры настраиваются в конфигурации.
Пример настройки:
messageType.1.title=billing@bitel.ru messageType.1.class=ru.bgcrm.dao.message.MessageTypeEmail messageType.1.email=billing@bitel.ru messageType.1.host=imap.ufamail.ru messageType.1.login=billing@bitel.ru messageType.1.pswd=***** messageType.1.folderIn=INBOX messageType.1.folderProcessed=INBOX.CRM_PROCESSED messageType.1.folderSkipped=INBOX.CRM_SKIPPED messageType.1.folderSent=INBOX.CRM_SENT messageType.1.signExpression=NEW_LINE + user.getTitle() + NEW_LINE + "Служба технической поддержки" + NEW_LINE + "ОАО \"Инет\"" + NEW_LINE + "тел. 2232333" + NEW_LINE + "email. mastea@inet.ru" + NEW_LINE messageType.1.mail.transport.protocol=smtp messageType.1.mail.smtp.user=billing@bitel.ru messageType.1.mail.smtp.host=smtp.ufamail.ru messageType.1.mail.smtp.pswd=******
Быстрый ответ
Полученные по E-Mail уведомления о новых сообщениях процесса могут быть использованы для быстрого ответа на них. Для этого в тему уведомлений добавляется маркер QA:код сообщения. Быстрый ответ может быть произведён на любой тип сообщения и идентичен написанию ответа из интерфейса BGCRM. Пользователь идентифицируется по EMail, сохранённому в параметре типа EMail, код которого указывается в опции quickAnswerEmailParamId типа сообщения.
Пример настройки уведомления с функцией быстрого ответа с помощью простой обработки изменений процессов событий.
Отправка уведомлений в конфигурации типа процесса. На адрес EMail указанный в параметре исполнителей с кодом 21 отправляется письмо. В тему добавляется QA маркер для быстрого ответа.
onProcessEvent.5.events=messageAdded onProcessEvent.5.doExpression=<<END text = "Новое сообщение в процессе, в котором вы числитесь исполнителем." + NEW_LINE2 + "Сообщение:" + NEW_LINE + event.getMessage().getText() + NEW_LINE2 + "Открыть процесс: http://crm.office.bitel.ru/user/process#" + process.getId() + NEW_LINE2 + "Для быстрого ответа на сообщение ответьте на это письмо сохранив идентификатор в теме."; subject = "Новое сообщение в процессе #" + process.getId() + " [" + (process.getDescription().length() < 15 ? process.getDescription() : process.getDescription().substring(0, 15) + "..") + "] " + " QA:" + event.getMessage().getId(); emailNotifyExecutors(21, subject, text); END
Уведомление о назначении процесса на исполнителя с текстом входящих сообщений.
onProcessEvent.6.events=executorsChanged onProcessEvent.6.doExpression=<<END text = "Изменён состав исполнителей процесса." + NEW_LINE2; searchResult = new("ru.bgcrm.model.SearchResult"); searchResult.getPage().setPageIndex(-1); dao = new("ru.bgcrm.dao.message.MessageDAO", conSet.getConnection()); dao.searchMessageList(searchResult, process.getId(), null, 1, null, null, null, null, null, true); lastMsg = null; for (m : searchResult.getList()) { if (lastMsg == null) lastMsg = m; text += "Входящее сообщение #" + m.getId() + NEW_LINE; text += "##########################" + NEW_LINE; text += m.getText() + NEW_LINE2; } subject = "#" + process.getId() + " [" + (process.getDescription().length() < 30 ? process.getDescription() : process.getDescription().substring(0, 30) + "..") + "] "; if (lastMsg != null) subject += " QA:" + lastMsg.getId(); emailNotifyExecutors(21, subject, text); END
На адрес, с которого было отправлено уведомление, должен быть настроен тип сообщения с конфигурацией.
messageType.<id>.title=Наименование messageType.<id>.class=ru.bgcrm.dao.message.MessageTypeEmail ... messageType.<id>.quickAnswerEmailParamId=21
Сообщения Note
<messageTypeClassName>=ru.bgcrm.dao.message.MessageTypeNote.
Используются для добавления примечаний по ходу процесса.
Пример настройки:
# messageType.100.title=Заметка messageType.100.class=ru.bgcrm.dao.message.MessageTypeNote
Сообщения Call
<messageTypeClassName>=ru.bgcrm.dao.message.MessageTypeCall.
Дополнительные необязательные параметры:
messageType.<id>.offerNumberFromParamId=<offerNumberFromParamId>
Где:
- <offerNumberFromParamId> - код текстового параметра пользователя, содержащий номер, предлагаемый к занятию по-умолчанию.
Тип сообщения представляет из себя звонок, который обрабатывается оператором. Для данного типа сообщения в оснастке обработки сообщений отображается поле занятия номера. Строго говоря, это означает, что в системе может быть зарегистрирован только один тип сообщения Call.
По занятому номеру система определяет какой из пользователей получил звонок и открывает для него сообщение для обработки. Для включения данного функционала в переменной createOnStart конфигурации сервера должн быть указан класс ru.bgcrm.event.listener.MessageTypeCallListener.
"Поставщиком" звонков может, выступить плагин Asterisk либо звонок может быть зарегистрирован внешним HTTP запросом класса ru.bgcrm.event.listener.MessageTypeCallRegister.