Самый лучший Telegram-бот для напоминаний: обзор @WhisperBellBot | Лонг
Ладно, ладно, возможно, не самый лучший, про это я узнаю в комментариях этой статьи.
Летом прошлого года я уже писал пост про мой способ ничего не забывать - с помощью Telegram бота @WhisperBellBot, который написал сам для себя.
ㅤ
Все это время я развивал и улучшал его. В комментариях прошлой статьи обещал поделиться изменениями. Что ж, это время настало!
ㅤ
Ах да, в боте нет ничего платного. Нет и ограничений на кол-во напоминаний.
Вот предыдущая статья:
Предисловие
Изначально была идея получать напоминания про дни рождения, но сразу стало понятно, что это слишком узкое направление, так как хочется получать различные напоминания (оплатить вовремя подписку, парковку, интернет и тд).
Бот был разработан для личного использования, и когда стало понятно, что я без него уже не могу обходиться, появилась идея "быть может, он кому-нибудь тоже нужен?". Таким образом бот стал доступен для всех желающих 2 июня 2024 года. Получается больше 300 дней назад, скоро будет ДР.
Все это время я продолжал совершенствовать его и добавлять новую функциональность. Решил, что было бы еще и здорово уметь управлять напоминаниями через веб интерфейс, но обо всем по порядку.
Взаимодействие с ботом
Как выглядит взаимодействие с ботом:
Пишем сообщение в определенном формате и видим, что бот нас понял и запланировал событие на правильную дату.
Вот несколько примеров форматов сообщений:
- Зайти на DTF в 20:00
- Зайти на DTF через 3 часа
- Зайти на DTF в понедельник
- Зайти на DTF 25 мая (вроде как день рождения DTF)
- Заходить на DTF каждый день в 22:15
- Заходить на DTF каждый вторник
Доступно множество форматов сообщений, все их можно посмотреть через команду бота /formats или через веб интерфейс:
Но! Если вдруг формат сообщения был не распознан, вмешается ChatGPT и велика вероятность того, что все-таки бот правильно поймет, когда же нужно напомнить, но тут уже без гарантий.
Для удобства, у напоминания есть кнопка "Редактировать", которая ведет в веб интерфейс, где можно скорректировать настройки/дату напоминания.
Взаимодействие с ботом в групповом чате
Конечно, бот должен уметь работать в групповом чате, но как это сделать безопасно? Одно дело отправленное сообщение персонально боту (бот его видит), другое дело отправленное сообщение в группе, к которому бот не должен иметь никакого доступа.
Что ж, это сделать очень просто. В настройках самого бота есть выбор, должен ли иметь доступ к сообщениям сам бот. Убедиться в том, что бот не имеет доступа к сообщениям легко, достаточно открыть группу с его участием и обратить внимание на текст рядом с названием бота.
Если кто-то переживает, что разработчик бота может в любой момент изменить настройки бота и получить доступ к сообщениям группы, спешу расстроить. Такая настройка бота не применится до тех пор, пока бот не будет заново добавлен в группу.
Кстати, если вы разрабатываете своего бота и интересуетесь вопросом "Почему доступ к сообщениям не появился/пропал после изменения настроек" то теперь вы знаете ответ - заново добавьте его в группу.
Но вернемся к созданию напоминания, как же создать напоминание, если бот не имеет доступа к сообщениям? Тут тоже все просто - бот имеет доступ к сообщениям "ответам" (reply). Выглядит это так:
Здесь мы воспользовались командой /new, которая всего лишь возвращает текст заглушку, объясняющую как создавать сообщение в группе. Пишем ответ на сообщение и все готово.
Не обязательно использовать каждый раз команду /new, достаточно написать ответ на любое сообщение бота.
Кто может создавать напоминания в группе?
Только владелец или администратор группы. Если обычный участник решит понажимать на кнопки или создать напоминание, бот напишет сообщение о том, что у него не хватает прав и нужно обратиться к администратору.
Настройка работы бота в группе
Забежим чуть вперед и рассмотрим веб интерфейс настройки группы (он, к сожалению, настройки группы есть только в веб интерфейсе):
Что у нас есть на этой странице:
- Язык - здесь все понятно, умеет в английский и русский. Язык для группы настраивается отдельно т.к. кто знает, может быть одна группа у вас англоговорящая, а в остальные нужно писать на русском. По умолчанию берется язык автора.
- Настройки взаимодействия:
1. Можно включить отбивки в чат, когда напоминание редактируется (вдруг для кого-то важно видеть, что событие кем-то было изменено)
2. Можем отключить создание напоминаний через бота в принципе, чтобы бот никак не реагировал на людей в чате. Тогда создавать напоминания сможем только через веб интерфейс. - Настройки отображения
1. Можем выключить отображение всех кнопок управления напоминанием
2. Можем отключить кнопки для быстрого повтора напоминания (см. скриншот ниже)
3. Можем опустить все подробности напоминания, оставив только сам текст
На скриншоте выше видно, что когда пришло само напоминание, снизу есть кнопки для того, чтобы опять повторить напоминание чуть позже. На текущий момент кнопки фиксированные, но планирую дать пользователям самим выбирать, какие кнопки им нужны
Если отключить все кнопки и технические тексты, то сообщение будет выглядеть так:
Веб интерфейс
Бот - это хорошо, но когда есть веб интерфейс, становится еще лучше. Давайте посмотрим на него. С прошлой статьи интерфейс немного изменился.
Встречает нас страница, требующая авторизации:
Авторизация сделана через OAuth Telegram. На странице сможете выбрать язык и тему (куда ж в сейчас без темной темы).
После этого нас встречает главная страница
На ней мы можем в хронологическом порядке посмотреть, какие напоминания нас ждут. Можем выключить/удалить или перейти в редактирование.
Страница создания/редактирования напоминания
Рассмотрим страницу редактирования (создание аналогичное).
Да, здесь уже много настроек: время, правило повторения, диапазон дат в котором событие должно приходить, получившиеся даты уведомлений (зеленые строчки). Отдельными пунктами расскажу про сам редактор, выбор группы и предварительные уведомления.
Редактор сообщения
Написал свой Wysiwyg редактор, чтобы можно было разметку Telegram писать в браузере (готового решения не нашел). Давайте посмотрим на 2 скриншота ниже, как созданное сообщение в веб интерфейсе отображается в самом Telegram:
Для того, чтобы писать сообщения с нужным редактированием, веб интерфейс не нужен. Такие сообщения можно создать и через сам Telegram:
Получается, вы можете создавать напоминания с каким угодно текстом и редактированием.
Выбор группы при создании/редактировании напоминания
Выглядит как компонент выбора группы:
Но тут встает вопрос, откуда бот узнает, какие группы есть?
Бот запоминает группу при любой из 3 активностей:
- Пользователь ввел команду /new в групповом чате
- Пользователь создал напоминание через бота
- Пользователь зашел по прямой ссылке на напоминание из группы
Любую группу в интерфейсе можно удалить (это не повлияет на отправку сообщения в нужную группу).
Для групп есть отдельная страница, где можно посмотреть весь перечень доступных для выбора групп (требуется авторизация):
Предварительные уведомления
Что делать, если бы мы хотели получить уведомление о предстоящем событии заранее? Например, мы бы хотели узнать о дне рождения за неделю, чтобы успеть подготовить подарок? Или хотим записаться на техническое обслуживание автомобиля за месяц до наступления самого ТО? Или хотим получить напоминание за минуту до его наступления?
На помощь приходят предварительные уведомления. Мы выбираем кнопки, за сколько времени нам нужно напомнить о событии и все.
В разделе "Даты уведомлений" мы увидим изменения:
Мы видим, как у каждой даты уведомления (зеленый цвет) появились еще и дополнительные уведомления. Можно сразу проверить, что мы всё настроили верно.
Работает ли бот в группах с темами (тредами)?
Да, работает как и любой другой группе, но есть нюанс. Если создавать напоминание через самого бота, то напоминание придет в правильную тему. Если создать напоминание через веб интерфейс, то сообщение придет в основную тему.
Дело в том, что Telegram не позволяет боту узнать название темы. Все, что бот знает, это ID темы куда нужно слать. Показывать в интерфейсе непонятные ID выглядело странным решением, поэтому проработку вопроса оставил как-нибудь на потом.
Как вариант, можно создать напоминание через бота, а уже отредактировать его через веб интерфейс - сообщение придет в правильную тему чата.
Если в настройках группы включена настройка "Создание напоминания только через веб интерфейс", то потребуется сначала выключить настройку, создать напоминание и можно включать обратно.
Статистика бота
Как писал уже выше, бот работает больше 300 дней и им уже успели немного воспользоваться пользователи.
Для начала MAU (кол-во пользователей за месяц) составляет 494 пользователя. Здесь есть интересный момент, что у бота на текущий момент не показывается MAU под именем бота, хотя если посмотреть на множество других ботов, то MAU показывается и при значении 150. Техподдержка Telegram (да, такое есть) ответила, что они не могут раскрывать детали, когда этот индикатор показывается и сказали, что как только ботом будет пользоваться больше пользователей, то все появится. Ладно.
Как узнать MAU бота, если оно нигде не выводится?
Случайно для себя обнаружил, что если зайти в настройки бота (через BotFather) и нажать на кнопку "Paid Broadcase", то вы увидите нужную информацию по MAU:
Статистика списком
- 494 MAU
- 1694 пользователей воспользовались ботом
- 13155 - общее кол-во созданных напоминаний
- 35% напоминаний являются регулярными
- 47% напоминаний отправляются в групповые чаты
- 79672 напоминаний отправлено пользователям
- 685 сообщений отправляется ежедневно (среднее значение за последнюю неделю)
- 167 - максимум активных напоминаний у 1 пользователя
- 548 напоминаний максимум создано за 1 день
- Бот добавлен в 422 группы
- Пики рассылки напоминаний происходят в 10:00 и в 20:00 (по UTC+3)
Архитектура бота
Как я уже говорил, изначально бот разрабатывался для себя, и как обычно бывает в таких ситуациях, такая разработка ведется значительнее быстрее т.к. можно сильно не закладываться на хорошие архитектурные решения ведь это все время.
Как проще всего сделать? Сделать монолитное приложение, которое в себе содержит и планировщик и работу бота и работу веб сервера. Конечно, у такого подхода есть жирный минус, нельзя внести изменения незаметным для пользователя (чтобы все части сервиса работали, когда какая-то часть обновляется). Поэтому пришлось переходить на взрослые рельсы, когда все приложение разбито на микросервисы и каждый сервис отвечает только за свой кусок пирога.
Пришлось поднять отдельный балансировщик уровня L7 (Application Load Balancer), который отвечает за веб интерфейс и роутит запросы между несколькими серверами. Поднял несколько серверов отвечающих за работу самого бота, чтобы нагрузка между ними тоже распределилась. Для этого пришлось перевести его работу на webhook.
Для взаимодействия между планировщиком и ботами пришлось добавить прослойку в виде брокера сообщений.
Все эти ресурсы, конечно, не бесплатные. Но моя жизнь разделилась на "до и после", когда стал пользоваться ботом. Вот так сильно я к нему привык. Поэтому собираюсь и дальше поддерживать и развивать его.
Ошибки
За время разработки бота я столкнулся с огромным разнообразием ситуаций, когда бот переставал работать ожидаемым образом.
Пара примеров:
1. Первая ошибка, с которой я столкнулся по неопытности произошла в момент, когда ботом стали пользоваться другие пользователи и один из пользователей забанил бота. В целом, такая ситуация - ожидаемая т.к. понятно, что всем угодить бот не может, но на ранних этапах это не было учтено. Пришлось вносить быстрый фикс.
2. Еще пример. Когда группа, куда добавлен бот, стала "супергруппой". Такое может произойти при различных действия, например, когда группу преобразовывают в группу с темами (тредами). В момент перехода группы в супергруппу у нее меняется ID. И если вы захотите отправить напоминание в ранее сохраненный ID группы, то увы, не сможете т.к. группа с таким ID больше не существует.
Раздел про ошибки, кажется, тянет на отдельный пост, поэтому оставлю это как-нибудь на потом.
Заключение
1. Планы на бота
- Не собираюсь делать его платным. Мне нравится подход, когда все мои наработки могут использоваться каждым, а не узкий круг круг людей. Однажды доберусь до того, чтобы прикрутить возможность оставить донат. Пока это время не настало.
- Буду продолжать развивать его, добавляя все больше фичей.
2. Нам нужна кастомная логика, можешь помочь?
Ко мне обратился один из пользователей и попросил сделать логику, когда в напоминании отображается кнопка "Прочитать сообщение" и тот, кто жмет на кнопку, фиксируется в сообщении.
Такая логика работает специально для определенной группы. Пока не придумал хорошего решения, как ее раскатить на всех. Если вам нужна такая же, приходите в личку.
Функциональность с настройкой групп тоже появилась благодаря просьбам в чате поддержки.
Так что если у вас есть какая-то идея, дайте знать. Кто знает, может быть именно эта фича пойдет в работу. Деньги за работу не попрошу.
3. Аналоги
Конечно, есть ряд ботов с аналогичной функциональностью, но каждое из решений мне не подошло. Где-то ограниченный бесплатный период, где-то неудобно само взаимодействие, где-то не поддержана работа в группах, где-то нет веб интерфейса и нигде нельзя в веб интерфейсе написать сообщение с разметкой Telegram.
4. Фидбек
Буду рад услышать впечатления от вашего использования бота! Как позитивный опыт использования, так и критику.
5. Интерфейс
Текущий веб интерфейс далеко не самый лучший, хоть и есть поддержка мобильной версии. Если есть идеи как его можно улучшить, дайте, пожалуйста, знать.
6. Полезные ссылки
- Канал с новостями https://t.me/WhisperBellNews_RU, веду с конца января
- Есть чат поддержки, куда можно приходить с любыми идеями/проблемами https://t.me/WhisperBellSupport_RU
- Можно писать лично https://t.me/klester
- Ссылка на самого бота https://t.me/WhisperBellBot