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

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

Сообщения с задачами от других людей могут быть более важными, чем личные задачи, потому что о чужих просьбах проще забыть, такой мессенджер/список дел может помочь держать их под рукой и не забывать выполнять.

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

Я хотел бы использовать такое приложение в первую очередь для супер-простого списка дел, о которых нужно не забыть. Пока что мне такие не попадались. Есть приложения с чатами и комментариями в контексте задач, но это больше подходит для систем управления проектами, а мне нужно зеркально противоположное – задачи в контексте чата. Недавно наткнулся на приложение Visera, похожее на то, что мне нужно, но оно находится в разработке и имеет уклон больше в сторону тайм-менеджера.

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

Для этого подходят встраиваемые (inline) боты в Telegram. К встраиваемому боту можно обращаться в любом чате, без необходимости добавлять его в группу или писать ему в личном чате. Для этого нужно просто набрать имя бота и запрос. Бот предложит варианты ответа, и выбранный будет отправлен в чат.

В качестве первой стадии реализации проекта и прототипа для тестирования описанных выше идей я разработал Таскобота для Telegram. Чтобы пометить свое сообщение как задачу, нужно в личном чате с собеседником набрать @tasko_bot <Текст задачи> и нажать "Создать задачу".

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

Чтобы увидеть свой список дел, нужно добавить бота и написать ему команду /list. Список задач категоризирован по вашим собеседникам.

Любой из собеседников может отметить задачу выполненной, тогда другой получит уведомление от бота (если он разрешил боту писать ему, отправив команду /start).

Таким образом, пользователи Telegram могут начать вести общие списки дел в личных чатах практически без лишних телодвижений, нужно только упомянуть @tasko_bot. Главное удобство в том, что постановка задачи почти не отличается от отправки обычного сообщения. Приглашаю попробовать! Дальше – о разработке бота.

Бот разработан с использованием моих любимых технологий – язык программирования Kotlin, фреймворк Spring Boot и база данных на СУБД PostgreSQL. Взаимодействие с бот-платформой производится с использованием удобной Java-библиотеки TelegramBots. Код можно увидеть на Github.

Было сложно найти хостинг для приложения. Мне как разработчику удобнее всего использовать PaaS типа Heroku и OpenShift, чтобы я только писал код, а платформа заботилась обо всем остальном – установке и настройке требуемого ПО типа JRE, СУБД, прокси и так далее. Этот блог размещен на OpenShift. Проблема в том, что 3 бесплатных картриджа для приложений на OpenShift у меня уже заняты, и все PaaS-сервисы немного дороговаты для размещения хобби-проекта без планов по монетизации. Дешевый вариант для хостинга любого приложения – приобретение VPS, виртуального выделенного сервера, но это голая машина на Линуксе, для хостинга ее нужно настраивать самостоятельно. Попытавшись найти какие-нибудь краткие общие туториалы по подобной настройке для Java-приложений, я немного загрустил, потому что в одном из тредов на Реддите в ответ на подобный вопрос посоветовали книгу UNIX and Linux System Administration Handbook. В детстве я хотел быть бэкенд-разработчиком, а не линуксовым админом. Конечно, посидев несколько дней, я бы все установил и настроил, но мне было лень. Погуглив еще немного, я наткнулся на статью "Deploy a Spring Boot app on your own server in less than 15 minutes", в которой автор рассказывал о Dokku – мини-PaaS типа Heroku на основе Docker, который можно установить на свой сервер. Он не обманул, мне действительно удалось поднять на нем свое приложение меньше чем за 15 минут, причем большую часть времени скачивался и устанавливался сам Dokku.

Работать с ним – одно удовольствие. Нужно только коммитить код на сервер, Dokku сам распознает Java-приложение, создает контейнер с JVM, устанавливает Maven, собирает приложение, настраивает nginx, прокидывает порты и запускает jar-файл. Для создания БД нужно только установить плагин postgres и указать имя БД, он устанавливает СУБД, создает БД и указывает переменную среды DATABASE_URL с адресом базы данных для приложения. Настройка https-сертификатов для сервера была произведена установкой плагина letsencrypt и запуском одной команды, плагин создал, скачал сертификаты и перенастроил nginx для https. Просто чудо, Dokku только пуговицы не пришивает.

Поиск