Бот в качестве таск-менеджера?
Предлагаю читателям «Хабрахабра» историю о том, как я искал удобный таск-менеджер для работы среди множества готовых решений и в итоге остановился на самописном.
Вам будет интересно почитать, если вы:
- Не довольны своим таск-менеджером, так как он очень сложный/неудобный
- Работаете с небольшой командой
- Часто взаимодействуете с коллегами через месенджеры, и вам хотелось бы иметь таск-менеджер под рукой
- Хотели бы начать знакомство с простым и понятным таск-менеджером
Решение распространяется под лицензией 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 - Срочный баг
Послесловие
Скажу честно, опробовать бота на реальном проекте мне еще не довелось. Надеюсь сделаю это после отпуска. Если вас заинтересовало данное решение, вот несколько ссылок:
- Демо-стенд
- Бот на GitHub