О плагине

Плагин предназначен для интеграции BGERP системой сообщений Slack и предоставляет функционал:

  • привязка процесса к каналу Slack;

  • создание канала по событию;

  • установка параметров канала: тема, топик и т.п.;

  • приглашение исполнителей процесса в канал;

  • архивирование канала по событию;

  • отправка сообщений из BGERP в Slack;

  • загрузка выбранных сообщений из канала Slack в BGERP.

Setup

The plugin has to be enabled in configuration.

Obtaining TOKEN

  1. Login in Slack your <domain>.slack.com using account under that it will be accessed.

  2. Create an Slack Application with ClientID (e.g. 112244252083.2278905589302) and ClientSecret (e.g. 1e2d043f32ad28708e027646d8ef0322)

  3. In section OAuth & Permissions add Redirect URLs https://localhost , press Save URLs

  4. Open in BGERP Administration / Slack Configuration, use ClientID and ClientSecret there to obtain a TOKEN

Настройка BGERP

Настроить в конфигурации BGERP тип сообщения, для Slack может быть создан только один тип сообщения:

messageType.<id>.title=<title>
messageType.<id>.class=MessageTypeChannel
messageType.<id>.authToken=<token>
# необязательные параметры
messageType.<id>.accountParamId=<slackLoginParamId>
messageType.<id>.stringExpressionMessageExtract=<jexl>

Параметры, отличные от прочих типов сообщений:

  • <token> - TOKEN авторизации, сохранённый ранее;

  • <slackLoginParamId> - код текстового параметра пользователя, хранящего логин Slack, позволяющий сопоставить пользователя BGERP с пользователем Slack;

  • <jexl> - JEXL выражение для извлечения сообщения Slack в текст входящего сообщения, исходное сообщение передаётся в параметре message, не null результат скрипта используется как текст входящего сообщения.

Пример настройки типа сообщения. Входящие сообщения выбираются с подстрокой bg.

messageType.5.title=Slack
messageType.5.class=MessageTypeChannel
messageType.5.authToken=xoxp-112244252083-112987389558-112322797394-6aa31425be1725ee6ee0265a2dff1236
messageType.5.accountParamId=88
messageType.5.stringExpressionMessageExtract=<<END
   pos = message.toLowerCase().indexOf("bg");
   if (pos >= 0)
        return message.substring(0, pos) + message.substring(pos + 2);
   return null;
END

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

Работа с сообщениями

После настройки в системе типа сообщения к любому процессу может быть привязан канал Slack. Для выполнения этого в ручном режиме тип объекта выбирается в секции Привязать иной объект, наименование оставляется пустым. Уже привязанный канал изображён на снимке экрана выше.

slack 1

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

slack 2

Входящие сообщение импортируются из канала при наличии скрипта stringExpressionMessageExtract в типе сообщения.

Настройка типа процесса

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

При переходе процесса в статус 10:

  • привязать если нет канал Slack к процессу;

  • пригласить исполнителей (они сопоставляются с пользователями Slack по логину в текстовом параметре пользователя BGERP);

  • установить топик канала, полученный из названия статуса процесса и привязанного к процессу контрагента.

onProcessEvent.1.events=statusChanged:10
onProcessEvent.1.doExpression=<<END
     paramDao =  new("ru.bgcrm.dao.ParamValueDAO", conSet.getConnection());
     linkDao = new("ru.bgcrm.dao.process.ProcessLinkDAO", conSet.getConnection());
     slack.linkChannel(process);
     slack.inviteExecutors(process);
     topic = "[" + process.getStatusTitle() + "]";
     link = u.getFirst(linkDao.getObjectLinksWithType(process.getId(), "customer"));
     if (link != null )
        topic += " " + link.getLinkedObjectTitle();
   slack.setTopic(process, topic);
END

При переводе процесса в статус 8 перемещение привязанного канала в архив.

onProcessEvent.2.events=statusChanged:8
onProcessEvent.2.doExpression=<<END
   slack.archive(process, true);
END

При изменении исполнителей процесса - приглашение новых исполнителей.

onProcessEvent.3.events=executorsChanged
onProcessEvent.3.doExpression=<<END
   slack.inviteExecutors(process);
END

Объект slack класса ru.bgcrm.plugin.slack.ExpressionObject с функциями API предоставляется плагином.