
Привет, Хабр!
Меня зовут Евгений, и в этой статье я хочу рассказать, как я создавал свой таск - менеджер на базе Google Sheets и Telegram
Введение
В современном мире, насыщенном информацией и обязанностями, управление временем и задачами становится критически важным навыком. Многие из нас используют различные приложения и инструменты для планирования, однако зачастую они не обеспечивают необходимой гибкости, удобства и функциональности.
Работая в ИТ-сфере и совмещая несколько ролей, в том числе руководителя проекта, я сталкиваюсь с множеством задач и активностей. Держать все это в голове невозможно и нецелесообразно — мы, айтишники, должны использовать инструменты, которые помогут нам организовать свою работу. Важно иметь под рукой решение для фиксации задач, определения их статуса и приоритета, отслеживания сроков и получения уведомлений о дедлайнах. Кроме того, возможность добавления дополнительной информации по каждой задаче играет немаловажную роль.
Одной из ключевых особенностей, которую я искал в инструменте для управления задачами, была возможность быстро фиксировать новые задачи — всего в два клика. Это особенно актуально во время встреч или митапов, когда важно мгновенно записать идею или задачу, чтобы не упустить её из виду.
Рождение идеи
Чуть больше года назад, погружаясь в рутинные обязанности и сталкиваясь с постоянным потоком задач, я пришел к важному осознанию: существующие инструменты для управления задачами не отвечают моим требованиям. Я перепробовал множество приложений, от простых списков до сложных систем, но ни одно из них не обеспечивало необходимую гибкость и удобство. Я искал не просто программу, а настоящего помощника, который бы позволял мне эффективно организовывать свою работу, отслеживать прогресс и быстро фиксировать новые идеи.
В тот момент, когда я осознал, что не найду подходящий инструмент на рынке — тем более бесплатный, который бы соответствовал всем моим ожиданиям — у меня возникла идея. Почему бы не создать свой собственный инструмент? Я понимал, что для этого мне нужно было использовать что-то простое и доступное, чтобы не тратить время на изучение сложных языков программирования или разработку полноценного приложения.
В качестве базы я выбрал Excel — мощный инструмент, который уже давно зарекомендовал себя в мире управления данными. Но я хотел большего: мне нужно было решение, с которым можно работать в любом месте и на любых устройствах. Так родилась идея использовать Google Sheets. Эта платформа предоставляла возможность легко делиться документами, редактировать их в реальном времени и обеспечивала доступность с любого устройства — будь то компьютер, планшет или смартфон.
Этапы реализации
Для начала я создал таблицу в google sheets, чтобы просто фиксировать задачи.
Столбцы были такие:
Дата - дата добавления задачи;
Название - фактически название задачи;
Следующее действие - дополнительное информационное поле;
Приоритет;
Примечание;
Статус - статус задачи (В работе/Готово/В ожидании);
Дедлайн;
Время дня - информационное поле, время в течении дня, когда задачу нужно выполнить (для сортировки задач в течении одного дня);
Дата закрытия - дата/время фактического выполнения задачи.
Для меня было важно разделять задачи по степени их приближения к дедлайну с помощью цветового кодирования:
• Красный — просроченные задачи;
• Оранжевый — дедлайн сегодня;
• Желтый — дедлайн завтра;
• Зеленый — выполненные задачи (зачеркнуты).
Также я окрашиваю задачи со статусом "Ожидание". Это те задачи, которые не зависят от меня, и я просто жду ответа от кого-то или какого-то события.
Используя реестр задач в повседневной жизни, я заметил, что ориентироваться в неотсортированной таблице задач не очень удобно. Я хотел бы видеть задачи, отсортированные по убыванию дедлайна, чтобы самые "горящие" задачи находились вверху списка.
У меня появилась идея автосортировки: при изменении или добавлении задачи она должна автоматически вставляться на "свое" место. При этом выполненные задачи должны перемещаться в конец списка, так как они уже неактуальны.

Сортировать каждый раз вручную — не комильфо. Здесь мне на помощь пришла Apps Script — платформа на основе JavaScript для быстрой и простой разработки бизнес-решений, фактически для автоматизации работы с таблицами в Google Sheets.
Я написал простой код, который запускает функцию сортировки при изменении определённых полей (релевантных для сортировки):function sortData(sheet) {
var lastRow = sheet.getLastRow();
var range = sheet.getRange("A2:L" + lastRow);
range.sort([
{ column: 4, ascending: true },
{ column: 7, ascending: true },
{ column: 8, ascending: true },
{ column: 9, ascending: true },
{ column: 6, ascending: true }
]);
}
Стало лучше, но добавление новой задачи по-прежнему занимало достаточно времени. Часто нужно быстро зафиксировать задачу в пару кликов, чтобы не забыть. Поэтому я разработал механизм, при котором задача считается добавленной, если заполнены два обязательных поля: название задачи и дедлайн. Если они заполнены, задача автоматически размещается на своем месте в реестре (спасибо автосортировке). Остальные поля заполняются автоматически: дата — текущая дата, приоритет — высокий, статус — в работе. Для реализации этого механизма я также использовал Apps Script.
Двигаемся дальше... Задачи теперь быстро добавляются, сортируются и подкрашиваются — работать стало удобно. Однако есть одно "но": все это возможно только со стационарного компьютера. Часто нужно зафиксировать задачу на совещании, в поездке или просто вдали от рабочего места. Кроме того, хотелось бы использовать этот инструмент для управления личными делами, а не только служебными.
Тогда возникла идея создать Telegram-бота. Telegram всегда под рукой, доступен на всех устройствах, стабилен, и библиотеки для интеграции с ним доступны для многих платформ и языков программирования.
Я выбрал Python. Создать бота довольно просто — в интернете есть множество пошаговых инструкций. В кратце: создаем бота через BotFather и добавляем для него меню команд.
О том, как я реализовал бота и интегрировал его с Google Sheets, расскажу в следующей статье. :-)
Использование Telegram - бота
В текущей реализации у меня есть следующие команды для бота:
Добавить задачу;
При добавлении задачи указываю, куда добавлять (личное / работа), указываю дедлайн, ввожу текст задачи. Далее бот спрашивает, нужно ли уведомить меня, и если да, то в какое время. При этом дату дедлайна, время, проект и т.д. я не ввожу вручную, а использую так называемую онлайн-клавиатуру.
Online keyboard (онлайн-клавиатура) в Telegram-ботах — это интерактивный элемент интерфейса, который позволяет пользователям взаимодействовать с ботом более удобным способом. Вместо того чтобы вводить команды вручную, пользователи могут нажимать кнопки, которые бот предоставляет в виде клавиатуры.
После успешного добавления задачи бот присылает соответствующее сообщение и присваивает номер добавленной задаче, который в дальнейшем может пригодиться.Экран бота при добавлении задачи Да, если нужно быстро ввести задачу и нет времени на заполнение параметров, можно без выбора команды ввести сообщение в ТГ-бот, при этом создастся задача с таким названием, уйдет по умолчанию в реестр рабочих задач с дедлайном - сегодня.
Быстрое добавление задачи Завершить задачу
При завершении задачи указываю номер задачи, которую хочу завершить. Далее бот присылает подтверждение о том, что задача завершена.Экран при завершении задачи Вывести задачи
Команда, позволяющая вывести все незакрытые задачи с указанием номеров.Экран при выводе всех задач Подробности
Выводит в Telegram всю информацию о задаче. Для вывода необходимо ввести номер задачи.Подробности по задаче Редактировать
Команда позволяет отредактировать задачу по нескольким параметрам: изменить дедлайн (дату/время) и/или добавить примечание.Поиск
Позволяет найти по подстроке все задачи (включая закрытые), где в любом из полей фигурирует данный текст. Выводит такие задачи списком, а далее через команду "Подробнее" можно зайти в каждую из задач и увидеть детали.Экран поиска задач Уведомить
Позволяет установить дату/время уведомления о данной задаче. В указанное время в Telegram-боте придет сообщение о необходимости выполнить задачу.Уведомление о задаче, приходит в указанное время Работа сегодня
Выводит все выполненные сегодня задачи. Полезно, когда нужно, например, списать время на выполненные задачи в Jira.Работа сегодня Скопировать
Иногда возникают однотипные задачи, которые выполняются каждый день, например, проверка очередной порции данных в БД или ежедневная проверка данных отчета. Можно завести задачу один раз, и по команде "Скопировать" задача выполнится, но автоматически сформируется копия задачи, которую можно перенести на завтра и т.д., таким образом сэкономив время на заведение задачи.Отмена
Отменяет действие.
Также у меня работают уведомления по умолчанию: каждое утро в 8:00 приходит сообщение о задачах на текущий день. Это позволяет мне сразу настроиться на продуктивный рабочий процесс.

Вечером в 17:00 я получаю перечень выполненных за сегодня задач, что помогает трекнуть затраченное время, например, для отчётов в Jira.

Кроме того, я завел отдельные проекты для личных и рабочих задач, чтобы разделять свои активности. При использовании бота я сначала выбираю, для какого проекта будет отправлен запрос (личные или рабочие).
В качестве хостинга я использую PythonAnywhere — это удобная среда для разработки на Python непосредственно в браузере, а также хостинг для этих проектов. Из плюсов — он бесплатный! Однако есть и минусы: часто приходится перезапускать проект вручную. В планах перейти на что-то более качественное и стабильное.
Также собираюсь прикрутить API с календарем, чтобы рабочие встречи, формируемые в календаре, сразу попадали в список задач.
Заключение
В заключение хочу отметить, что с использованием данного инструмента моя эффективность значительно возросла! Планирование стало более прозрачным, благодаря чему я реже сталкиваюсь с авралами и забытыми задачами. Теперь у меня есть возможность грамотно распланировать свой день, что приносит не только продуктивность, но и удовлетворение от выполненной работы. Эффективное управление временем — это ключ к успеху, и я рад, что нашел способ сделать этот процесс более организованным и комфортным!