Я устал отвечать на однотипные сообщения в Telegram и сделал конструктор «Вахтёров»

Бот за меня отвечает IT-рекрутерам, неадекватным юзерам моих сервисов, спамерам. А важные сообщения пересылает мне. Теперь каждый может сделать личного «Вахтёра» в три клика!

Я устал отвечать на однотипные сообщения в Telegram и сделал конструктор «Вахтёров»

Всем привет. На VC очень любят писать кликбейтные заголовки как автор задолбался и героически решил выдуманную проблему — лишь бы привлечь внимание к своему продукту. Поэтому дам немного контекста.

Да, я действительно устал. Помимо того что я Go разраб с 3к контактами на LinkedIn, у меня есть несколько проектов с общей посещаемостью 5-6к в день, также мой контакт был указан на GitHub.

И все эти люди настойчиво штурмуют мою телегу. Цели у всех разные — предложить уникальную вакансию, потребовать удалить или отредактировать инфу на сайте, угрожать РКН. Объединяет все эти обращения один факт — у меня уже готов ответ на это, а дальнейшие сообщения отправителя мне не интересны. Ведь работу я не ищу, на сайте есть личный кабинет для редактирования, а давать определения термину «персональные данные» десятый раз на дню не интересно. Но некрасиво быть душнилой, и просто игнорить их или банить.

Я заметил, что разгребаю личку по одному паттерну:

  • По диагонали прочитал сообщение;
  • Копипастнул ответ;
  • Заглушил отправителя и кинул чат в архив;

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

Демо настройки и использования

Про продукт

Сделать одного бота чисто для себя очень просто и не интересно, поэтому лучше сделать конструктор, и стать его первым пользователем.

Классический набор фичей конструкторов ботов нам не подходит. У нас конечный пользователь — юзер, а не бизнес. Таким образом, у бота нет необходимости иметь сложную настраиваемую структуру, пункты меню и пр. Идеальный вариант — сделать максимально нативно, чтобы отправитель даже не понял что ему ответил бот, и замьютил его, а реальный адресат даже уведомления не получил.

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

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

По принципу Парето, скорее всего элементарные фильтры, автоответы, предустановленные стратегии (20% усилий) — сильно разгрузят личку владельца (80% результата) — что упрощает и использование сервиса и разработку нашего конструктора.

В итоге возможности следующие:

  • Нет платных тарифов, все возможности бесплатно;
  • Два режима работы: или бот реагирует автоответом только на первое сообщение (продолжая при этом их пересылать), или на все;
  • Для каждого ключевого слова можно указать банить или нет пользователя, если он его отправил;
  • Можно создавать много разных ботов, и они будут работать независимо друг от друга;
  • Владелец может отвечать на пересланные сообщения анонимно через бота. Пока только текст, медиа/стикеры не поддерживаются, скоро будет т.к. считаю приоритетной доработкой;
  • Владелец может в любой момент «замьютить» отправителя, и тогда бот не будет ни пересылать ни отвечать на сообщения этого пользователя;

Про конфиденциальность

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

Как это работает

Создание бота

Я устал отвечать на однотипные сообщения в Telegram и сделал конструктор «Вахтёров»

Настройка бота владельцем

Я устал отвечать на однотипные сообщения в Telegram и сделал конструктор «Вахтёров»

Сторонний юзер пишет боту, созданному через конструктор

Я устал отвечать на однотипные сообщения в Telegram и сделал конструктор «Вахтёров»

Можно ли сделать конструктор по-другому

Да, можно. Но такую схему считаю самой правильной — легко горизонтально масштабировать, все состояние хранится в базе данных (stateless). Сервис разросся до десятков миллионов ботов? Просто добавляем в 1 клик настройку автоскейлинга backend и при необходимости масштабируем базу данных.

Единственное упрощение которое я сознательно сделал — отсутствие очереди перед телеграмом (чтобы не терять сообщения, если не смогли отправить запрос в телегу из-за сетевой ошибки, например) и после телеграма (чтобы не терять сообщения если БД недоступна).

Так как оба кейса супер редкие — оставил доработку на потом. Ничьи сообщения не потеряются потому что:

  • Telegram сам делает повторы запросов которые были неуспешны (не бесконечно);
  • Если телега ляжет то какая разница работает ли мой конструктор, если телеграм не работает в принципе;

Другие варианты:

Галактики

Ребята из ManyChat шардируют крупных ботов по серверам, а мелкие сидят вместе. Код+база+очередь — это их единица масштабирования и они называют это «галактики».

Главный минус — неудобно масштабировать, управлять, отслеживать проблемы.

Библиотеки для ботов

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

При старте сервиса, выгружать правила автоответов из базы и формировать структуры предоставленные библиотекой. Так как все в памяти — в теории будет работать быстрее (но визуально разницы не увидите, т.к. 99% времени ответа это вебхук телеграма).

Из минусов — сложно масштабировать, единственный вариант это помечать в базе какой бот на каком шарде / stateful-set pod / сервере живет, чтобы при старте например 3 серверов, каждый вычитывал из базы и стартовал только свой кусочек из списка ботов. Возникает вопрос с ребалансировкой — например, если кто то удалил много ботов которые «принадлежат» первому серверу, получается что он недозагружен.

Единственный плюс — очень просто запрограммировать, у меня даже есть бэкенд конструктора ботов ВКонтакте по такой схеме (тогда я такие тонкости не понимал).

Юзер бот

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

Плюс — бесшовная интеграция, и отправитель не видит что в аккаунте помимо человека сидит бот.

Огромный минус — могут забанить свежие профили, правда разбанивают обычно всех через суппорт, рассказывал уже об этом. Также в этом случае код получает возможность смотреть все переписки аккаунта, включая приватные групповые чаты. Такой вариант я даже не рассматривал, потому что таким сервисом никто пользоваться не будет (я бы сам не стал).

Про магию

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

Для меня тогда это казалось черной магией — почему бота я настраивал на сайте этого сервиса, а работает он ВКонтакте; на сервисе тысячи ботов разных пользователей — как они понимают что сообщение от пользователя именно моего бота, и нужно ответить ему, и как технически он «отвечает».

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

Данный сервис я закодил, задеплоил и протестировал за 4 вечера. Разработка перестала быть магией, но от этого стала только интереснее.

Спасибо, что дочитали до конца. Какие еще юзкейсы видите у ботов, созданных через сервис? Будете пользоваться?

Создать своего Вахтера можно тут @vahter_robot

1919
34 комментария

О, телеграм бот.
Давно их не было)

5
Ответить

но он не "задолбался", значит не все еще потеряно!

7
Ответить
Автор

Бот который делает новых ботов )

Ответить

Комментарий недоступен

2
Ответить

У вас практически все комментарии начинаются с претензий к теме или автору. Больше смахивает на нудного токсика в поисках темы для обесценивания. По теме есть что сказать?

14
Ответить
Автор

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

1
Ответить
2
Ответить