Уведомления о новой задаче в Alfresco по email

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

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

Оба способа требуют предварительной настройки почтового сервера. Для этого в файл tomcat/shared/classes/alfresco-global.properties пропишем информацию о том, от чьего имени будут отправляться уведомления. Например, так:

mail.host=127.0.0.1
mail.port=25
mail.username=noreply
mail.password=qwerty

Если почтовый сервер требует нестандартных настроек для соединения, то их можно указать:

mail.protocol=smtps
mail.smtps.starttls.enable=true
mail.smtps.auth=true

Для того, чтобы начать использовать новые настройки нужно перезагрузить Alfresco.

А теперь к способам:

1. Сложный
В описании бизнес-процесса можно использовать JavaScript, отправляющий письмо нна произвольный email и произвольным текстом. Пример, как это делается, можно найти в этой статье: www.ossportal.ru/technologies/alfresco/blogs/141

      <script>
        <![CDATA[
          logger.log("PublishPaperProcess: Approved");
          if (tcwf_notifyMe)
          {
            var mail = actions.create("mail");
            mail.parameters.to = initiator.properties["cm:email"];
            mail.parameters.subject = "Публикация статьи";
            mail.parameters.text = "Добрый день. Ваша статья прошла проверку редактора и отправлена техническому редактору на рассмотрение.";
            mail.execute(bpm_package);
            }
          ]]>
      </script>

При завершении выполнения задачи инициатору бизнес-процесса приходит на почту уведомление, что его его статья одобрена и передана дальше.

Плюсы использования этого способа:

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

Минусы использования этого способа:

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

Когда использовать этот способ:

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

2. Простой:
В Alfresco встроен сервис отправки уведомлений. И именно его нужно использовать, чтобы избежать всех минусов первого способа.
Все типы бизнес-процессов наследуются из стандартных типов Alfresco. То есть во всех процессах можно использовать переменные, введенные в Alfresco. За отправку уведомлений о новой задаче отвечает значение свойства bpm:sendEMailNotifications из модели bpmModel. По умолчанию, это значение - "0", то есть уведомление не отправляется. Для отправки уведомления его нужно изменить на "1". Как это сделать?
Добавим в конфигурацию Share первого этапа своего произвольного процесса отображение поля bpm:sendEMailNifications и включим его по умолчанию, используя шаблон Alfresco:

<config evaluator="task-type" condition="wf:startTask">
  <forms>
    <form>
      <field-visibility>
        <show id="bpm:workflowDescription" />
        <show id="bpm:assignee" />
        <show id="bpm:sendEMailNotifications"/>
        <show id="packageItems" />
      </field-visibility>
      <appearance>
        <set id="task-info" appearance="title" label-id="" template="/org/alfresco/components/form/2-column-set.ftl"/>
        <set id="documents" appearance="title" label-id="alvex.workflow.related-documents" />
        <field id="bpm:workflowDescription" label-id="alvex.workflow.task-summary" set="task-info" mandatory="true"/>
        <field id="bpm:assignee" label-id="alvex.workflow.bpm_assignee" set="task-info">
          <control template="/orgchart-picker.ftl" />
        </field>
        <field id="bpm:sendEMailNotifications" set="task-info">
            <control template="/org/alfresco/components/form/controls/workflow/email-notification.ftl" />
        </field>
      </appearance>
    </form>
  </forms>
</config>  

После того, как уведомления включены в первой задаче, все остальные задачи процесса также будут отправлять уведомления. По умолчанию в Alfresco пока что нет шаблона уведомления о новой задаче на русском языке. Появится, начиная с 4.1.4 и 4.2.d(e?). Для его добавления в систему:

  1. Скопируем файл dl.dropbox.com/u/2916264/wf-email_ru.html.ftl в репозиторий системы в папку Data Dictionary > Email Templates > Workflow Notification (или Словарь данных > Шаблоны сообщений электронной почты > Уведомление о бизнес-процессе, если вам не повезло установить Alfresco на машину с русской локалью).
  2. Поправим перевод темы письма в файле tomcat/webapps/alfresco/WEB-INF/classes/alfresco/messages/notification-service_ru.properties, изменив перевод строк assigned-task и new-pooled-task (последние 2 строки) на:
assigned-task=\u0412\u0430\u043c \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0430 \u0437\u0430\u0434\u0430\u0447\u0430
new-pooled-task=\u041d\u043e\u0432\u0430\u044f \u043d\u0435\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430

Чтобы второй пункт вступил в силу, перезагрузим Alfresco.
Нестандартные поля задачи не переводятся, но все остальное локализовано (ссылка будет правильной, если у машины настроены DNS и прописаны hosts):


Плюсы использования этого способа:

  • Если почтовый сервер недоступен, и не удается отправить письмо, то задача успешно завершается (ставится), хотя уведомление и не отправлено. 
  • Письмо отправляется на языке инициатора задачи. Так как обычно разные филиалы в разных странах редко взаимодействуют между собой в рамках бизнес-процессов, то обычно письмо отправляется и на языке получателя.
  • Шаблон письма содержит основную информацию о задаче: название, сроки, ссылки на документы, что позволяет использовать сервис во всех процессах.
  • Добавляя уведомления по email к первой задаче в процессе, вы добавляете уведомления для всех задач.

Минусы использования этого способа:

  • Письмо стандартно и отправляется только при постановке задачи. Если вам нужна отправка письма НЕ исполнителю и НЕ в момент постановки задачи, то все равно придется использовать первый способ.

Когда использовать этот способ:

  • Всегда, когда возможно.
132

Комментарии

а ещё неплохо было бы придумать удобный способ отправки регулярных (например, ежедневных) оповещений пользователей о текущих задачах
Aviriel аватар
  Alfresco рассылает ежедневные уведомления о новых документах в рабочих областях пользователя, об обновлениях в ленте активности, о действиях людей, которых фоловит пользователь. Насчет задач - наверно было бы хорошо, но нужно все-таки заглядывать иногда в систему ;) Имхо, по одному уведомлению, когда задача поставлена, хватит..
alexvg75 аватар
Отличная статья, спасибо!
Возникла пара вопросов.
1) Используется протокол smtps, но порт 25?
2) Требуется ли при этом импорт сертификата почтового сервера в keystore? Если возможно, то осветите этот момент подробнее.
Спасибо!
Aviriel аватар
1) Это пример, и там есть слово "если".
2) Требуется, спасибо, что напомнили, добавлю чуть позже.
очень жду описание решение о отправке уведомлений по sms и jabber
fufler аватар
Из коробки такой возможности но нет, но вы всегда можете реализовать недостающий функционал самостоятельно:
 а можно ссылочку на описание или примеры по настройке смс уведомлений. 
заранее сильно благодарен
 Люди, подскажите, как включить почтовое уведомление при запросе на сайт, т.е. когда менеджеру сайта приходит таска с запросом на присоединение какого-то пользователя. В alfresco-global.properties выставил notification.email.siteinvite=true. Безрезультатно. Спасибо...
fufler аватар
Почтовый сервер настроен?
Да. Обычные уведомления приходят, ну с обычными задачами, поставленными через "Начать бизнес-процесс". Alfresco 4.2.b. 
Подскажите пожалуйста, а прием почты в alfresco возможен? Если например на определеный электронный адрес приходит письмо с вложением, которое alfresco ложит в папку определенному пользователю. Спасибо.
Спасибо за ответ!
Поправьте если я не прав, я так понял, что нужно добавить аспект к пространству. Добавил. А вот как mailserver мне подключить в alfresco не понял... Добавил аспект "Псевдоним (электронная почта)" к вновь созданной папке и в ее свойствах указал значение псевдонима "test". Я так понял что если я указываю псевдоним "test" без "@domain.com"  значит в alfresco должен быть включен mailserver на порту 25, который при обращении к нему как к почтовой системе будет принимать почту для моего псевдонима или я не правильно понял.
Подскажите пожалуйста, мне приходят письма с уведомлениями от alfresco@demo.alfresco.com как мне его изменить?
Спасибо.
alexvg75 аватар
День добрый! А что у Вас прописано в настройках /opt/Alfresco/tomcat/shared/classes/alfresco-global.properties? mail.username=alfresco mail.password= mail.encoding=UTF-8 mail.from.default=alfresco@demo.alfresco.com Но более интересно то, что у Вас получается почтовик можно использовать как релей?
Спасибо за ответ! Опция mail.from.default в alfresco-global.properties отсутствовала. Прописал. Почта рассылается внутри домена. Я не использую alfresco во внешней сети. :)))
Достаточно интересная ситуация возникает при получении почты в папку. Буквально вчера все работало, но сегодня опять. Попытаюсь в кратце описать проблему. Настроил систему так, что бы письма которые приходят для user@alfresco.local пересылались на сервер alfresco.local (MX запись прописана, проверял - работает) в папку под названием user_mail. В alfresco создаю пользователя user и добавляю его в группу EMAIL_CONTRIBUTORS. Потом создаю папку user_mail и добавляю аспект "Псевдоним (электронная почта)", в свойства папки прописываю псевдоним: user.

В конфигурации global.property:
### Email SMTP Server property values ###
#
email.inbound.unknownUser=anonymous
#email.inbound.enabled=true
# The following properties are used to configured the inbound SMTP email server.
# whether the inbound SMTP server is enabled or not true/false
email.server.enabled=true
# the tcp port number to listen on, normally 25 for a SMTP server.
email.server.port=25
# the tcp hostname to bind the inbound SMTP service to.
email.server.domain=alfresco.local
# The maximum number of connections allowed. Increase this number to favour the email subsystem at the expense of the rest of alfresco.
email.server.connections.max=3
# Enable authentication for inbound SMTP.
email.server.auth.enabled=true
# On the EHLO command, Hide the fact that the server supports TLS, TLS will still be accepted and work if the client uses TLS.
email.server.hideTLS=false
# On the EHLO command, Announce the fact that the server supports TLS.
email.server.enableTLS=true
# Require TLS authentication.
email.server.requireTLS=false
# Should duplicate messages to a folder overwrite each other or be named with a (number)
email.handler.folder.overwriteDuplicates=true
#    list of patterns to allow.
email.server.allowed.senders=.*
# logger
log4j.logger.org.subethamail.smtp.server.ConnectionHandler=debug

В логах почтового сервера при отправке на user@alfresco.local:
Aug 16 10:22:54 mail postfix/smtp[2271]: 093EE141180: to=<user@alfresco.local>, relay=alfresco.local[192.168.0.2]:25, delay=16, delays=0.03/0.02/0.01/16, dsn=5.0.0, status=bounced (host alfresco.local[192.168.0.2] said: 554 ???????????????????????? 'anonymous' ???? ???????????? ?? ???????????? ?????????????????????????????? ?????????????????????? ??????????. (in reply to end of DATA command))
Aug 16 10:22:54 mail postfix/cleanup[2254]: 49727140FD2: message-id=<20130816062254.49727140FD2@mail.local>

Иногда между вопросами в логах вместо 'anonymous' появляется 'uucp'.
Такая ситуация была вчера, я создал пользователя uucp и сделал все как описывал выше и почта приходила, а вот сегодня почему-то anonymous и почта не приходит. В чем может быть проблема?