Проект: Таскобот — Telegram-бот для создания совместных задач  Публичный пост
29 марта 2021  230
Таскобот – Telegram-бот для создания совместных задач

TL;DR: Таскобот — это инлайн-бот для создания совместных задач. Напиши @tasko_bot <задача> в любом личном чате, после подтверждения собеседником она появится в общем списке дел (отправь в чат с ботом команду /list).

Идеи и проблемы

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

Я считаю, не нужно бороться с тем, что мессенджеры используются не по назначению. Наоборот, мессенджер может помочь в работе с такой короткоживущей информацией, которая рождается и умирает в чатах. Telegram уже многое делает в этом направлении, мне нравятся отдельные разделы с ссылками и медиа из чатов, это очень помогает искать нужные сообщения. Было бы также полезно иметь разделы с телефонами, адресами и датами встреч. В наше время количество способов общения в мессенджерах сильно выросло, добавились стикеры, реакции, голосовые и видеосообщения. При этом работа с текстовыми сообщениями практически не изменилась, несмотря на то, что они могут нести принципиально разную нагрузку с точки зрения обмена информацией между участниками переписки. Мало что мешает структурировать, выделять и категоризировать отдельные типы сообщений, автоматически или с минимальной помощью пользователей. Думаю, что на таких идеях можно сделать принципиально новый мессенджер, ну или же это просто дополнительные фичи для уже существующих.

Интеграция мессенджера и списка задач

Меня же заинтересовала более узкая проблема — интеграция менеджера задач в приложение для обмена сообщениями. Зачастую личные задачи мы получаем в виде сообщений с какими-то просьбами; например, список покупок от жены. Такие задачи может быть проще открыть и посмотреть прямо в диалоге, а не заносить в отдельное приложение со списком дел. Но сообщение с задачей может быстро потеряться среди новых сообщений.

Решение — возможность просмотра сообщений-задач в отдельном списке с разделением по собеседникам; как Сохраненные сообщения, но с категоризацией по чатам. Уже хорошо, но можно развить идею дальше: если мы о чем-то просим собеседника, то хотим, чтобы он, во-первых, не пропустил сообщение, а во-вторых — проконтролировать, выполнена ли задача. Также такие задачи часто бывают общими, то есть могут выполняться любым из собеседников. Например, задача "нужно купить хлеб" может быть выполнена тем, кто первым окажется в магазине. Это может работать так: получатель сообщения подтверждает его как общую задачу, и она появляется в списках дел обоих собеседников. При выполнении задачи одним из них другой получает уведомление.

Тут стоит пояснить, почему я вообще начал об этом думать. Я хотел помочь нам с женой вести семейные дела и перестать терять просьбы друг к другу в переписке. То есть эти идеи в первую очередь касаются личных чатов, один на один. Мне хотелось помочь людям в их личной жизни, а не в профессиональной, поэтому групповые чаты мной не рассматривались совсем. На территорию систем управления проектами и командной работы залезать желания не было; к этому вопросу вернусь чуть позже.

Еще один дисклеймер — все это не про продуктивность, я хотел использовать такое приложение для супер-простого списка дел, которые надо не забыть — как стикеры на холодильнике. В 2017-м году таких мессенджеров-задачников найти не удалось. Были приложения с чатами в контексте задач, мне же нужно было обратное — задачи в контексте чатов.

В общем, это была интересная идея для пет-проекта, но стало понятно, что если создать еще один мессенджер, им никто не будет пользоваться, даже я сам. Нужно было решение для реализации требуемой функциональности в одном или нескольких из существующих мессенджеров. Для этого подходят встраиваемые (inline) боты в Telegram, к такому боту можно обращаться в любом чате, набрав его имя и запрос. Бот предложит список ответов, выбранный будет отправлен в чат. Это позволило мне максимально просто реализовать Таскобота и протестировать вышеописанные идеи.

Как пользоваться

Чтобы пометить свое сообщение как задачу, нужно в личном чате с собеседником набрать @tasko_bot <текст задачи> и нажать "Create task". В чат будет отправлено выделенное жирным сообщение с кнопкой "Confirm task". Когда ее нажмет получатель сообщения, задача появится в списках дел обоих собеседников.


Список своих задач можно увидеть в чате с ботом по нажатию кнопки "Tasks" или по команде /list. Он категоризирован по собеседникам. Чтобы собеседник получил уведомление о выполнении задачи, он должен также добавить бота, отправив ему команду /start.

Так пользователи Telegram могут начать вести общие списки дел без лишних телодвижений. Главное удобство в том, что постановка задачи почти не отличается от отправки обычного сообщения. В чате с ботом также можно создавать персональные задачи, для меня это заменило все остальные менеджеры задач.

Результаты и выводы

Таскобот был разработан в 2017-м году на Kotlin, можно также прочитать старый пост о его создании в моем личном блоге. С тех пор я обнаружил, что люди им пользуются, и недавно переписал на Scala (мой основной язык сейчас), чтобы развивать его дальше. Пока что сделал меню на кнопках, как просили пользователи, и добавил возможность создания персональных задач пересылкой сообщений в чат с ботом. Это помогает не потерять задачи, даже если собеседник не пользуется Таскоботом.

Итак, какие же результаты проверки идей интеграции Telegram и списка задач? К сожалению, мы с женой почти не пользуемся ботом, она жалуется, что создавать задачи неудобно, ну и не так много общаемся в мессенджерах. Многие просьбы слишком короткоживущие, чтобы вспоминать о том, что надо набрать имя бота для создания задачи. Это еще раз доказывает, что в личной жизни автоматизации не нужны. Таскобот же так и остался прототипом. У меня были грандиозные замыслы — боты для нескольких мессенджеров, отдельные приложения для просмотра и редактирования задач. Но, вопреки моим ожиданиям, другие мессенджеры так и не скопировали инлайн-ботов у Телеграма, хотя это крутая фича, как по мне.

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

Сообщество

Как бы там ни было, люди пользуются Таскоботом. Приятно, когда пишут из разных стран и благодарят за крутого бота. Немного чисел:

  • всего бот попробовали 8340 пользователей, которые создали почти 20 тысяч задач;
  • последнее время в месяц создается около 1000 задач, количество активных пользователей около 500 в месяц.

О чем еще просят пользователи? Изначально Таскобот был доступен на русском и английском языках. Пользователи законтрибьютили переводы на итальянский, турецкий и традиционный китайский, теперь список языков в настройках выглядит максимально странно. Зато я узнал, что в 1950-х в КНР перешли на упрощенные иероглифы, а Тайвань остался на традиционных, и теперь параллельно существуют два китайских алфавита, радуя разработчиков. Вообще, я пожалел о том, что сделал выбор языка — теперь лишний раз не изменить строки в коде, потому что могут сломаться переводы. Следующего бота (для отслеживания подписок) я сделал только на английском.

Но самая частая просьба — это сделать Таскобота для групповых чатов. Люди пытаются использовать бота для работы и просят добавить выбор нескольких исполнителей, дедлайны, оповещения и т. д. Мне не особо интересно делать менеджер проектов, так что дарю идею: есть некоторое количество людей, которые готовы использовать Telegram для ведения рабочих проектов. Правда не знаю, готовы ли они за это платить. Однако я видел задание на бирже фриланса — разработать копию моего бота с фичами для групп за $12. С одной стороны лестно, а с другой — исполнитель мог заработать на этом примерно на 12 долларов больше меня, ибо я пока только трачусь на сервер.

Монетизация

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

Технологический стек

Изначально бот был написан на Котлине, в 2017-м году я был влюблен в этот язык. Но он оказался для меня как gateway drug в функциональное программирование, так что переписал его на Scala, мой основной язык сейчас. Стек самый модный, я хотел иметь на своем Github проект на новой библиотеке для функционального асинхронного программирования — ZIO. По итогам могу сказать, что подход ZIO мне нравится гораздо больше, чем концепция Tagless Final, которую я пробовал до этого. Код получается проще, куда лучше поддерживается средой разработки, и не нужно иметь дело с жуткими монад-трансформерами. Я остался очень довольным и начал внедрять ZIO в своей команде на работе. Мне кажется, что это будущее ФП на Scala.

Для взаимодействия с Telegram Bot API используется библиотека Telegramium. Я сейчас являюсь ее ментейнером и многое допиливаю параллельно с разработкой своих ботов, то есть занимаюсь догфудингом. Это простой unopinionated инструмент с полной поддержкой Bot API, при ее использовании не нужно сражаться с абстракциями, зато можно расширять своими. Для своих ботов я написал DSL для обработки callback-query запросов, вдохновленный функциональной библиотекой http4s. Он позволяет создавать "контроллеры" в разных файлах и потом объединять их в едином "роутере".

Хостится бот на VPS и self-hosted PaaS Dokku. Очень люблю эту технологию, снимает все головные боли, связанные с менеджментом сервера для приложения. Из коробки есть настройка nginx, генерация и обновление сертификатов, создание и подключение БД, blue-green deployment, запуск контейнеров, разработчику остается только писать код.

Ссылки

На этом все, замечания и пожелания пишите в комментарии или мне в Telegram johnspade.

  • Ссылка на добавление бота в Telegram: tasko_bot.
  • Исходный код можно найти на Github.
Откомментируйте первым 👇

😎

Автор поста открыл его для большого интернета, но комментирование и движухи доступны только участникам Клуба

Что вообще здесь происходит?


Войти  или  Вступить в Клуб