{"id":14284,"url":"\/distributions\/14284\/click?bit=1&hash=82a231c769d1e10ea56c30ae286f090fbb4a445600cfa9e05037db7a74b1dda9","title":"\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0444\u0438\u043d\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0430 \u0442\u0430\u043d\u0446\u044b \u0441 \u0441\u043e\u0431\u0430\u043a\u0430\u043c\u0438","buttonText":"","imageUuid":""}

Я устал отвечать на однотипные сообщения в 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

0
34 комментария
Написать комментарий...
Стас Иванов

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

Ответить
Развернуть ветку
Vyacheslav Teplyakov

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

Ответить
Развернуть ветку
Denis
Автор

Осталось только расширение для Хрома сделать, чтобы скрывать "задолбавшиеся" статьи)

Ответить
Развернуть ветку
Игнат Мартынов

Это крутая функция была бы

Ответить
Развернуть ветку
Denis
Автор

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

Ответить
Развернуть ветку
Game Topia

Похоже на трындеж! Чувак который устал от внимания не будет ссылки на себя ы пост о продукте совать. Больше смахивает на нудного джуна в поисках работы.

Ответить
Развернуть ветку
Octave Parango

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

Ответить
Развернуть ветку
Denis
Автор

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

Ответить
Развернуть ветку
Game Topia

Ага, а ещё и на гитхаб! И да, мне стрёмно читать посты джуна, который таким низким способом пиарится. Пост спам.

Ответить
Развернуть ветку
Аккаунт удален

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

Ответить
Развернуть ветку
Game Topia

Вот опять. Вы либо о себе, либо о проекте. Лично мне не интересно тратить время на мыльную оперу.

Ответить
Развернуть ветку

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

Развернуть ветку
Denis
Автор

На вкус и цвет. А мне вот например не нравится читать дистиллированные статьи где по пунктам написано только узко про проект, и все. Ни архитектуры, ни мотивации, голые факты

Ответить
Развернуть ветку
Shepard

Извините, что пишем и огорчает вас, как же жаль ваше оскорблённое самолюбие (нет)

Ответить
Развернуть ветку
Denis
Автор

По этой логике любой опенсорс проект — спам?

Ответить
Развернуть ветку
Game Topia

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

Ответить
Развернуть ветку
Denis
Автор

А по сути статьи есть мнение? Или так и не дочитал?

Ответить
Развернуть ветку
borodutch
Ответить
Развернуть ветку
Denis
Автор

Руки так и чесались)) Но решил что копипастить чужой стиль — не мое)

Ответить
Развернуть ветку
Denis
Автор

А что за чат секретный? Тот самый чат клуба? Пригласишь меня по дружбе?

Ответить
Развернуть ветку
borodutch

Там вход только по инвайтам :)

Ответить
Развернуть ветку
Denis
Автор

По поводу твоей статьи что Бот Апи доставляет сообщение полчаса

А пробовал поднять свой сервер Bot API?

Bot API source code is now available at telegram-bot-api. You can now run your own Bot API server locally, boosting your bots' performance (check this out to see if this will benefit your project).

Ответить
Развернуть ветку
borodutch

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

Нужно посмотреть на дату публикации статьи, запрос на публикацию кода Телеграм бот апи внутри статьи и на дату, когда код бот апи заопенсурсили :)

Ответить
Развернуть ветку
Denis
Автор

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

Если own hosted bot api помогло то вывод можно сделать что просто резали лимитами на инстансе бот апи, и поэтому полчаса ждали сообщ. Если нет то получается тупняки на бэке телеги

Ответить
Развернуть ветку
borodutch

Там начались другие проблемы. Уже на стороне именно TDLib. Если бот слишком популярный, сервер ТГ возвращает пачками 504 :) чинить это не будут, называют в поддержке это дополнительными лимитами, которые не поднять.

Ответить
Развернуть ветку
Nik Polansky

Задумка понравилась. Единственный минус – открывая контакт, люди будут попадать на бота, перед ними будет кнопка Начать, это будет смущать и наверное даже иногда останавливать. Плюс ваш контакт уже везде указан, а теперь придётся новый указывать.
В этом плане юзер бот был бы просто великолепен, тем более у вас и опыт есть. А по поводу приватности в данном случае волноваться не стоит: каждый, кто захочет пользоваться ботом, склонирует ваш код и запустит его у себя.

Ответить
Развернуть ветку
Denis
Автор

Есть еще один минус юзербота — помимо логина, пароля, кода из смс/телеги, для логина требуется зайти на https://my.telegram.org/auth?to=apps , там авторизоваться и передать app hash и app id. Это супер усложнит пользовательский опыт, и подойдет только "опытным пользователям пк"

Ответить
Развернуть ветку
Nik Polansky

Всем, кто умеет клонировать код из гитхаба и запускать на своей впске, вполне подойдёт :)

Ответить
Развернуть ветку
Alexander Polozov

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

Ответить
Развернуть ветку
Denis
Автор

Красава! Ждем контрибов в проект )

Ответить
Развернуть ветку
Dmitry
Я устал

Устал - иди поспи. xd

Ответить
Развернуть ветку
Denis
Автор

Жестко но справедливо

Ответить
Развернуть ветку
Андрей Гуртовой

Я не смог дочитать до того места где вы объясняете почему ваш собеседник будет думать что вы не бот. Потому как Телеграм боты должны обязательно в имени иметь слово bot на конце

Ответить
Развернуть ветку
Denis
Автор

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

Ответить
Развернуть ветку
Denis
Автор

Еще прикол. Можешь сделать бота с юзернеймом @andrey_ne_bot (свободен)

Ответить
Развернуть ветку
31 комментарий
Раскрывать всегда