Реализация поддержки пользователей средствами JIRA или как мы избавились от OTRS

0. О чем это все История началась с того, что в компании, в которой я работал, была старая и, субъективно, несколько неудобная система обработки заявок (OTRS), с которой работала техническая поддержка. Разработка использовала JIRA, а отсутствие интеграции между JIRA и OTRS мешало толком формализовать процесс взаимодействия отделов. Кроме этого, в OTRS было несколько существенных недостатков, например письмо, взятое в работу одним сотрудником поддержки, не мог видеть другой. Эти проблемы надо было как-то решать и в процессе раздумий все свелось к двум вариантам: Обновление OTRS и настройка ее интеграции с JIRA Полный перенос работы техподдержки в JIRA и отключение OTRS Делать решили второй вариант: это позволяло унифицировать рабочие инструменты, перестать поддерживать лишний сервис (который админы поддерживали по принципу «работает — не трожь», что не позволяло его оптимизировать и развивать), реализовать автоматическую сборку статистики по работе технической поддержки и использовать различные плюшки JIRA: канбан-доски, создание шаблонного бага на разработку одной кнопкой, гибкий поиск, автоматическую рассылку писем при исправлении ошибки и прочее.Для упрощения работы переписку с пользователями решили свести к заведению задачи по первому письму от пользователя и комментированию задачи по всем последующим. Комментарии техподдержки отправлялись обратно пользователю письмом.

Для реализации минимально рабочего проекта, о котором пойдет речь в этой статье, нам понадобятся:

JIRA на своем сервере. Облачная JIRA не поддерживает необходимые плагины, JETI (можно и JEMH, но дорого и не в данном мануале) — плагин, добавляющий инструментарий для корректной работы с входящими и исходящими письмами, Права администратора и руки средней кривизны ;-) Пользователь, которым мы будем создавать задачи и комментарии (назовем его support), Отдельный проект JIRA для работы с ящиком техподдержки (в статье это будет support@example.com), настроенный по вашему вкусу. В нем один тип задач (в моем случае — Ticket) 1. Допиливаем поля и роли проекта Сначала нам нужно внести в созданный проект несколько изменений, связанных со спецификой используемых плагинов и с особенностями проекта.Создаем поле типа «Text Field (single line)» и привязываем его к экранам редактирования и просмотра задач. В нем плагин будет хранить почту пользователя. Назовем его «Customer Email». В роль Developers проекта записываем людей, которые будут осуществлять поддержку пользователей. Все возможные изменения тасков запрещаем для всех, кроме данной роли, с помощью Permission Scheme, так как в нашем случае «написал комментарий в задаче» = «отправил письмо пользователю». 2. Настраиваем шаблоны автоответа и комментариев в JETI У нас будет два типа писем: Автоответ — подтверждение для пользователя о создании задачи. Позволяет избавить поддержку от лишней работы, а пользователей — от лишней траты нервов на написание второго письма. Обычное письмо — основной способ коммуникации поддержки с пользователем, будет отсылаться при комментировании задачи. *В шаблонах можно сделать клевую верстку и прочее, но не в рамках данной статьи, поэтому примеры будут некрасивые, но рабочие. Для всего остального на форме есть Field picker (позволяет вытаскивать значения полей из JIRA) и HTML-теги ;-)Пожалуй, начнем. Для этого:

Идем в Administration > Add-ons > JIRA Email This Issue (Configuration) > Templates > Add В открывшейся форме вводим название шаблона (В моем случае «Comment template»), жмем «Add» Заполняем поля Subject template (Тема письма) и HTML Body Template (Тело письма), пример: тутСкриншот 29a0858f5aabc6adb71aa64abde16120.png Повторяем шаги 1–3 для шаблона автответа (В моем случае «Auto-reply template»), пример: тутСкриншот 66d03fbfad920d8050482cb24d6aec72.png Теперь «Comment template» нужно привязать к конкретному проекту и событию с помощью Notification template. Для «Auto-reply template» этого делать не надо — мы привяжем его к созданию задачи из письма, а не к событию в JIRA. Идем в Administration > Add-ons > JIRA Email This Issue (Configuration) > Notifications > Add В открывшейся форме вводим название шаблона уведомлений: «Comment notification template» и жмем «Add» Снова жмем «Add» в правом верхнем углу экрана Заполняем форму: Event Type: «Issue Commented» — письмо высылается как реакция на событие в JIRA. В данном случае выбираем событие, которое высылается JIRA при комментировании любой задачи.Template: «Comment template» Опять жмем «Add» В открывшейся форме заполняем поля: Recipients (To): «Customer Email» из пункта 1.1Add attachments to email: Newest — в письме пользователю будем высылають только последние вложения. Жмем «Save». 3. Конфигурируем JIRA для работы со входящей почтой Теперь настроим создание задач и комментариев к ним через почту. Это можно сделать и без использования плагина JETI, заменив в 4-м пункте «Email this Issue Mail Handler» на «Create a new issue or add a comment to an existing issue».Идем по пути: Administration > System > Incoming Mail > Add POP > IMAP Mail Servers Подключаемся к почте поддержки «support@example.com» — абсолютно аналогично любому почтовому клиенту. Обратите внимание на полезную кнопочку «Test connection».Пример заполнения 05e5eb327ccc667f46e5771c9d4b4fbd.png После успешного заведения ящика жмем по кнопке «Add Incoming Mail Handler» чуть ниже, чтобы добавить обработчик нашей почты. В открывшемся окне заполняем: «Server» — Почта, созданная чуть выше; «Handler» — «Email this Issue Mail Handler» Заполнив, жмем «Next» На следующей странице заполняем форму следующим образом: Project: Ваш проектIssue Type: TicketDefault Reporter: supportNotify user: Убираем галочкуТак же есть кнопка «Test».Пример заполнения 0eb358221c1f230babd670088066db50.png Теперь JIRA умеет создавать задачи через почту, но для корректной работы всего проекта нужно донастроить Handler в самом плагине.

Идем в Administration > Add-ons > JIRA Email This Issue (Configuration) > Mail Handlers > Add Заполняем форму: Project: Ваш проектIssue Type: TicketAcknowledge new issues: «Auto-reply template» — указываем шаблон автоответа*Acknowledge new comments — сюда можно запилить еще один шаблон автоответа на последующие письма от пользователя. Лично я не использую, но можно.Sender field: «Customer Email» — выбираем поле, куда будем сохранять почту пользователя.Пример заполнения 665aeaefa245a0db80f5c654530f5796.png Нажимаем «Save» 4. Настраиваем исходящую почту в JETI Так как шаблоны мы уже создали, нам осталось только указать контекст их применения: Идем в Administration > Add-ons > JIRA Email This Issue (Configuration) > Contexts > Add В открывшейся форме заполняем: Project: Ваш проектIssue Type: TicketNotification Template: «Comment notification template«From Address: «support@example.com» — вводим почту, которую будем использовать для переписки с пользователями.Пример заполнения 7c238988532374be53367f34db44f9be.png Снова «Save» 5. Проверяем Теперь посмотрим на результаты наших трудов: Высылаем письмо на адрес поддержки — в течение пяти минут должна быть заведена задача и должен прийти автоответ. В поле Customer Email созданной задачи должен быть адрес отправителя письма, если в JIRA нет такого пользователя. На почту должен прийти автоответ о получении письма. Высылаем еще одно письмо с той же темой и с того же адреса — задача должна быть откомментирована. Комментируем задачу — пользователю должно прийти письмо с комментарием. Вид со стороны Jira 47be945aaab350250af1f6443dad17b0.png Вид со стороны почты пользователя 606d24884dd6fe70b207b335e216ecf6.png 6. Резюме На этом этапе мы создали минимально работоспособный проект для обработки запросов пользователей на основе JIRA и JETI.Плюсы:

Сбор технической информации о пользователе сайта с помощью сборщиков запросов (разрешение, браузер, страница — в теории вообще всё, что может вытащить js), Интеграция с другими плагинами: канбан-доска для проекта, автоматическая рассылка писем при релизе, рассылка напоминаний о незаконченных задачах etc, Единый рабочий инструмент для разработки и поддержки, Реализация аналитики любого уровня сложности по работе технической поддержки пользователей. Минусы:

Автором JETI до сих пор не выполнен запрос на отсылку кастомных событий при обработке писем. Поэтому не удалось настроить переоткрытие задач при получении повторного письма от пользователя после того, как первое было обработано техподдержкой. Сейчас приходится фильтрами ловить в нотификациях от JIRA, но обещают исправить в следующем релизе: cсылка Невозможность отправки конкретных аттачей пользователю: отправляется несколько последних по некому хитрому алгоритму. Зависимость от общих настроек исходящей почты JIRA (префикс письма, текстовый адрес) — не нашел, как исправить, и буду рад идеям, если найдутся.Отсутствие защиты от спама — решили фильтрами через интерфейс самой почты, но клево было бы подобные вещи делать через JIRA. Нельзя просто взять и выслать письмо от поддержки на какой-то левый ящик. Редкий, но иногда нужный кейс. На этом все, в следующей статье я постараюсь рассказать, как добавить в этот проект такие клевые и нужные вещи, как:

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

© Habrahabr.ru