12 July 2016

Бот в качестве таск-менеджера?

ERP-systemsProject management

Предлагаю читателям "Хабрахабра" историю о том, как я искал удобный таск-менеджер для работы среди множества готовых решений и в итоге остановился на самописном.


Вам будет интересно почитать, если вы:


  • Не довольны своим таск-менеджером, так как он очень сложный/неудобный
  • Работаете с небольшой командой
  • Часто взаимодействуете с коллегами через месенджеры, и вам хотелось бы иметь таск-менеджер под рукой
  • Хотели бы начать знакомство с простым и понятным таск-менеджером

Решение распространяется под лицензией GNU GPL, ссылка на репозиторий будет в конце статьи.


Програмистские мытарства


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


Так же я заметил одну интересную вещь — я никогда не использую таск-менеджер более чем на 10-20% от его возможностей. Я не пользуюсь декомпозицией, диаграммой Ганта, приоритетами и датой окончания задачи. Как правило все эти функции постепенно становятся невостребованными и наша команда использует только две из них — постановка задачи и ее маркировка для поиска.


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


Таск-бот


Долго обдумывая функционал идеального, по моему мнению, таск-менеджера, я набросал себе простенькое ТЗ и решил реализовать придуманное в виде бота для Telegram. Идея бота довольна проста — бот должен регистрировать задачи, помечая их метками для поиска, а после исполнения задачи, бот должен помечать ее как завершенную. Для удобства использования, бот был снабжен двумя важными функциями: комментирование ранее созданной задачи и оповещение об изменении задачи.


Решение было написано мной за несколько ночей в свободное от работы время. В качестве языка был использован PHP, так как это мой основной (на данный момент) ЯП, а так же несколько открытых пакетов и Doctrine 2. Бот пока не использует webhook для получения сообщений от пользователей, а работает на простом полинге. Такое решение было выбрано мной чтобы не усложнять реализацию на начальном этапе, ведь будущее проекта еще туманно. Само решение доступно на GitHub, но на время бета-теста я подготовил рабочий демо-стенд, который вы сможете использовать для ознакомления с ботом.


Возможности


Функционал бота разделен на две категории: работа с метками и работа с задачами. Метки используются для поиска задач по ключевым словам, а задачи аккумулируют все остальные данные.


Работа с метками


Под меткой бот понимает любое слово, смайл или username пользователя (с ведущим знаком @), которым помечаются задачи. Задача может быть помечена любым количеством меток, по которым, в будущем, ее будет просто найти. Для удобства использования, в боте используется механизм "текущих меток". С его помощью любой пользователь определяет в начале сеанса использования бота список меток, который будет применяться ко всем создаваемым задачам.


Рассмотрим пример работы с метками. Предположим вы решили создать несколько задач для вашей команды, занимающийся проектом "Зевс". Между вами и ботом будет следующий диалог:


Вы: /ms зевс backend
Бот: ок
Вы: /t Новая задача
Бот: ок
Вы: /t Еще одна задача
Описание задачи
Бот: ок
Вы: /ts
Бот:
1 - Новая задач
2 - Еще одна задача

Все создаваемые вами задачи будут помечены вашими текущими метками (зевс и backend), которые вы задали с помощью команды /ms.


Текущие метки индивидуальны для каждого пользователя. Это позволяет работать с ботом команде разработчиков и не мешать друг другу. Для получения списка ваших текущих меток используется команда /ms (без аргументов), а для получения списка всех меток, используется команда /ms *.


Работа с задачами


Задача включает следующие данные:


  • Заголовок — название задачи
  • Описание — подробное описание задачи (может отсутствовать, если заголовка достаточно)
  • Даты создания, последнего изменения и завершения
    Задачи так же можно комментировать, но комментарии добавляются в конец блока описания.

Рассмотрим пример работы с задачами. Предположим ваша команда приступила к выполнению поставленных ранее задач:


Разработчик: /ts
Бот:
1 - Новая задач
2 - Еще одна задача
Разработчик: /t 1
Бот:
Старт: 12.07.2017

Метки: зевс backend
Новая задача
Разработчик: /t 1 c
Комментарий разработчика
Бот: ок
Разработчик: /t 2 t
Новое название для задачи
Бот: ок
Разработчик: /d 2
Бот: ок

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


  • title (t) — редактирование названия задачи
  • description (d) — редактирования описания задачи
  • marks (m) — редактирование меток задачи
  • comment © — добавление комментария задачи
  • subscribe (s) — подписка на изменение задачи
  • unsubscribe (us) — отписка от изменений задачи

Для завершения задачи используется команда /d. Завершенные задачи автоматически помечаются "виртуальной" меткой "выполнено", что позволяет получить к ним доступ в будущем, на пример так:


Вы: /ts выполнено зевс backend
Бот:
2 - Новое название для задачи

Так же к "виртуальным" меткам относится "сегодня". Этой меткой помечаются все созданные или завершенные за последние сутки задачи.


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


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

Работа с пользователями


Очень часто при постановке задач участникам проекта необходимо сразу же указать ответственных и подписать их на оповещения по этим задачам. Для этого используется специальная метка @username (username заменяется именем целевого пользователя). Если пользователь с таким именем есть в базе данных бота (взаимодействовал с ним когда-либо), он будет автоматически подписан на оповещения.


Пример:


Вы: /ms зевс backend @developer @manager
Бот: ок
Вы: /t Срочный баг
Бот: ок

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


Разработчик: /ms зевс @developer
Бот: ок
Разработчик: /ts
Бот:
3 - Срочный баг

Послесловие


Скажу честно, опробовать бота на реальном проекте мне еще не довелось. Надеюсь, что сделаю это после отпуска. Если вас заинтересовало данное решение, вот несколько ссылок:


Tags: бот telegram task management
Hubs: ERP-systems Project management
+11
18.5k 69
Comments 24
Ads