Я устал отвечать на однотипные сообщения в Telegram и сделал конструктор «Вахтёров»
Бот за меня отвечает IT-рекрутерам, неадекватным юзерам моих сервисов, спамерам. А важные сообщения пересылает мне. Теперь каждый может сделать личного «Вахтёра» в три клика!
Всем привет. На VC очень любят писать кликбейтные заголовки как автор задолбался и героически решил выдуманную проблему — лишь бы привлечь внимание к своему продукту. Поэтому дам немного контекста.
Да, я действительно устал. Помимо того что я Go разраб с 3к контактами на LinkedIn, у меня есть несколько проектов с общей посещаемостью 5-6к в день, также мой контакт был указан на GitHub.
И все эти люди настойчиво штурмуют мою телегу. Цели у всех разные — предложить уникальную вакансию, потребовать удалить или отредактировать инфу на сайте, угрожать РКН. Объединяет все эти обращения один факт — у меня уже готов ответ на это, а дальнейшие сообщения отправителя мне не интересны. Ведь работу я не ищу, на сайте есть личный кабинет для редактирования, а давать определения термину «персональные данные» десятый раз на дню не интересно. Но некрасиво быть душнилой, и просто игнорить их или банить.
Я заметил, что разгребаю личку по одному паттерну:
- По диагонали прочитал сообщение;
- Копипастнул ответ;
- Заглушил отправителя и кинул чат в архив;
В отличии от почты, куда тоже регулярно падают разные предложения, Telegram уведомления у меня всегда включены. Поэтому нежелательные сообщения регулярно пиликают, отвлекают от работы. При этом не хотелось бы совсем снимать из публичного поля свой контакт, иногда пишут разные идеи и фидбек по сервисам и т.д. Пришло время реализовать автоматизированное решение проблемы, я ж погромист.
Про продукт
Сделать одного бота чисто для себя очень просто и не интересно, поэтому лучше сделать конструктор, и стать его первым пользователем.
Классический набор фичей конструкторов ботов нам не подходит. У нас конечный пользователь — юзер, а не бизнес. Таким образом, у бота нет необходимости иметь сложную настраиваемую структуру, пункты меню и пр. Идеальный вариант — сделать максимально нативно, чтобы отправитель даже не понял что ему ответил бот, и замьютил его, а реальный адресат даже уведомления не получил.
Далее поразмышлял о продуктовых фичах, ведь не всем нужно банить отправителя, нужно сделать это опциональным. Например вы владелец ютуб/телеграм канала, у вас указан контакт для рекламы, и пусть на сообщение содержащее «реклама» или «цена» бот ответит прайсом на рекламу и вопросом какой ресурс вы будем рекламировать, далее перешлет ветку владельцу бота, который будет в курсе и сможет также ответить отправителю анонимно через бота.
Также показалось важным сделать опциональный режим когда бот перестанет отправлять автоответы после первого сообщения. Представьте, вы ведете диалог с кем-то через бота, и если отправитель упомянул ключевое слово — бот влезает со своим автоответом.
По принципу Парето, скорее всего элементарные фильтры, автоответы, предустановленные стратегии (20% усилий) — сильно разгрузят личку владельца (80% результата) — что упрощает и использование сервиса и разработку нашего конструктора.
В итоге возможности следующие:
- Нет платных тарифов, все возможности бесплатно;
- Два режима работы: или бот реагирует автоответом только на первое сообщение (продолжая при этом их пересылать), или на все;
- Для каждого ключевого слова можно указать банить или нет пользователя, если он его отправил;
- Можно создавать много разных ботов, и они будут работать независимо друг от друга;
- Владелец может отвечать на пересланные сообщения анонимно через бота. Пока только текст, медиа/стикеры не поддерживаются, скоро будет т.к. считаю приоритетной доработкой;
- Владелец может в любой момент «замьютить» отправителя, и тогда бот не будет ни пересылать ни отвечать на сообщения этого пользователя;
Про конфиденциальность
Сервис не хранит текст сообщений, юзернеймы тех кто вам писал и как часто. Храним только идентификаторы и токены для общения с телеграм и корректной работы. Можно удалить бота — его токен и все связанные данные будут удалены. А еще исходный код открыт и любой может поучаствовать в разработке!
Как это работает
Создание бота
Настройка бота владельцем
Сторонний юзер пишет боту, созданному через конструктор
Можно ли сделать конструктор по-другому
Да, можно. Но такую схему считаю самой правильной — легко горизонтально масштабировать, все состояние хранится в базе данных (stateless). Сервис разросся до десятков миллионов ботов? Просто добавляем в 1 клик настройку автоскейлинга backend и при необходимости масштабируем базу данных.
Единственное упрощение которое я сознательно сделал — отсутствие очереди перед телеграмом (чтобы не терять сообщения, если не смогли отправить запрос в телегу из-за сетевой ошибки, например) и после телеграма (чтобы не терять сообщения если БД недоступна).
Так как оба кейса супер редкие — оставил доработку на потом. Ничьи сообщения не потеряются потому что:
- Telegram сам делает повторы запросов которые были неуспешны (не бесконечно);
- Если телега ляжет то какая разница работает ли мой конструктор, если телеграм не работает в принципе;
Другие варианты:
Галактики
Ребята из ManyChat шардируют крупных ботов по серверам, а мелкие сидят вместе. Код+база+очередь — это их единица масштабирования и они называют это «галактики».
Главный минус — неудобно масштабировать, управлять, отслеживать проблемы.
Библиотеки для ботов
Использовать библиотеки для ботов, не ходить за ключевыми словами в базу на каждое сообщение.
При старте сервиса, выгружать правила автоответов из базы и формировать структуры предоставленные библиотекой. Так как все в памяти — в теории будет работать быстрее (но визуально разницы не увидите, т.к. 99% времени ответа это вебхук телеграма).
Из минусов — сложно масштабировать, единственный вариант это помечать в базе какой бот на каком шарде / stateful-set pod / сервере живет, чтобы при старте например 3 серверов, каждый вычитывал из базы и стартовал только свой кусочек из списка ботов. Возникает вопрос с ребалансировкой — например, если кто то удалил много ботов которые «принадлежат» первому серверу, получается что он недозагружен.
Единственный плюс — очень просто запрограммировать, у меня даже есть бэкенд конструктора ботов ВКонтакте по такой схеме (тогда я такие тонкости не понимал).
Юзер бот
Принимаем логин, пароль, ожидаем код подтверждения. То есть притворяемся официальным клиентом как пользователь. В остальном так же читаем события, только не бот-аккаунта, а юзер-аккаунта.
Плюс — бесшовная интеграция, и отправитель не видит что в аккаунте помимо человека сидит бот.
Огромный минус — могут забанить свежие профили, правда разбанивают обычно всех через суппорт, рассказывал уже об этом. Также в этом случае код получает возможность смотреть все переписки аккаунта, включая приватные групповые чаты. Такой вариант я даже не рассматривал, потому что таким сервисом никто пользоваться не будет (я бы сам не стал).
Про магию
Когда-то давно, на старой работе, сказали создать и настроить бота ВКонтакте. Тогда я не умел программировать, нагуглил какой-то конструктор ботов, понажимал кнопочки, и конечно бот был готов через 5 минут.
Для меня тогда это казалось черной магией — почему бота я настраивал на сайте этого сервиса, а работает он ВКонтакте; на сервисе тысячи ботов разных пользователей — как они понимают что сообщение от пользователя именно моего бота, и нужно ответить ему, и как технически он «отвечает».
Поэтому в своих статьях помимо продуктовой части, затрагиваю техническую. Думаю некоторым читателям интересно как под капотом работает сервис которым они пользуются, почему были приняты такие архитектурные решения.
Данный сервис я закодил, задеплоил и протестировал за 4 вечера. Разработка перестала быть магией, но от этого стала только интереснее.
Спасибо, что дочитали до конца. Какие еще юзкейсы видите у ботов, созданных через сервис? Будете пользоваться?
Создать своего Вахтера можно тут @vahter_robot
О, телеграм бот.
Давно их не было)
но он не "задолбался", значит не все еще потеряно!
Бот который делает новых ботов )
Комментарий недоступен
У вас практически все комментарии начинаются с претензий к теме или автору. Больше смахивает на нудного токсика в поисках темы для обесценивания. По теме есть что сказать?
Во-первых, работу так не ищут.
Во-вторых, единственная причина ссылки на линкедин — разумная мысль при чтении "раз упоминаешь, где профиль".
В-третьих, тезис про джуна сильный, статью видимо вы не читали ниже первого абзаца