Конструктор триггеров в Telegram. Как мы сделали простейшего, но полезного бота
Как написать чат-бота в Telegram, который будет реагировать на триггеры в сообщениях и выполнять заданные действия.
4К открытий5К показов
Привет! Меня зовут Боровков Евгений, и я предприниматель. В этой статье я расскажу про свой pet-проект. Или как я решил проблему вечного поиска информации прямо в уютном Телеграммчике.
Скажу сразу: я не программист. Я скорее менеджер, который работает в команде с программистами. Поэтому прошу меня простить, если технической глубины в статье не будет хватать.
Бизнесовая часть и проблематика
Идея не нова. Скорее всего вы или уже пользовались такими ботами, или пробовали написать такого своего. Но в поиске оптимального решения своей проблемы, мы пришли именно к такой конфигурации.
Суть бота очень проста и видна на видео ниже:
Если смотреть не хочется, то вкратце:
Еду, значит, я в метротаксиавтобусе на работу. И тут новому подрядчикуколлегеклиенту срочно потребовалось скинуть наши реквизиты. Для счетадоговораактачего угодно.
Где мне их найти быстро? В закладках? В автозамене? В загрузках в телефоне? В «Избранном»? Думаю вы уловили, или сталкивались с таким сами ?
У нас даже в какой то момент появилось специальное удобное хранилище таких файлов и информации. Но достаточно быстро оно все равно забилось и проблему не решило. Пример с реквизитами тут взят исключительно как пример. Ведь всем вокруг постоянно нужны кроме реквизитов еще и логотип в «линиях», ссылки на какие-то сайты, или, в конце концов, смешные гифки.
В какой-то момент я пробовал подключить стороннего похожего бота. Но он то не работал, то как-то криво отвечал, то вообще слал рекламную рассылку. Пробовали других ботов: то же самое. Некоторых неудобно настраивать, где-то нет списка всех триггеров, где-то нет русского языка.
В итоге решили писать своего. Чат-ботов мы делаем уже больше 4 лет, видение уже ± сформировалось, на серверах место для еще одного бота найдется. Поехали!
Бизнесовая логика работы бота
Вторая гифка как продолжение первой:
Бот работает на столько просто, что разберется даже ребенок:
- Добавляем бота @trigger_new_bot в чат (можно не делать админом).
- Пишем какое-то сообщение или кидаем гифкуфайлвидео — что угодно.
- Делаем реплай нужного сообщения и пишем команду /set_trigger ключевое слово (или триггер) например «/set_trigger реквизиты».
- Бот пришлет сообщение «триггер установлен».
- Все, пишем то ключевое слово которое только что писали (ровно так же прям), и он пришлет то сообщение, куда был реплай.
Больше бот не делает НИ-ЧЕ-ГО. И, тем самым, соблюдает две основные заповеди ботостроения: имеет простой функционал и молчит, когда его не спрашивают.
Количество чатов не ограничено, количество триггеров внутри чата тоже не ограничено.
Как это работает под капотом
Основной ЯП, который мы используем — это Java. По нему у нас накоплена самая большая компетенция. Поэтому бот построен на Spring boot стеке:
База — MongoDB. Бот не хранит сами сообщения и не скачивает файлы. Ему достаточно хранить только ссылки на них.
Теперь по пунктам
- Пишем сообщение: гифкуфайлвидео — что угодно
- Делаем реплай нужного сообщения и пишем команду /set_trigger ключевое слово (или триггер) например «/set_trigger реквизиты».
После этого бот:
1. Достает имя триггера из сообщения:
2. Достает ссылку на само сообщение, которое должно быть сохранено:
3. Собирает триггер и сохраняет его в БД:
4. Отправляет ответ, что все сделано:
Другие технические тонкости
Собирается проект с помощью Maven. Просто так вышло, не спрашивайте почему. Другие проекты мы собираем, как правило, с помощью Gradle.
Собранный jar запущен на vps как unix-сервис. Для комфортной работы бота хватает 512 мб памяти. Не смотря даже на количество пользователей и количество заведенных триггеров, этого пока вполне достаточно.
Кому нужны исходники, можете написать, мы готовы ими поделиться. В общий доступ выкладывать не хочется. Хотя и секрета там особого нет. И да, сидим мы на гитлабе в приватных репозиториях, а не на гитхабе.
Бот не требует никакого обслуживания и внимания. Единственное, что недавний переход телеги на 64-битный идентификатор заставил перелопатить некоторых наших ботов. Вкратце, там дело в хранении IDшников пользователей.
В отличие от других ботов, тут мы не использовали свою State машину. Но в других проектах, где используется более 5 стейтев бота рекомендуем уже использовать либо спринговскую State машину либо самописную. Иначе с развитием проекта, код быстро превращается в набор спагетти методов.
Что еще
На данный момент, мы думаем как улучшить бота, не уничтожив его «шарм минималистичности». Если есть идеи, пишите в комментарии.
Еще у нас есть вот такой чек-лист «Что учесть при разработке чат-бота». Забирайте — это бесплатно.
4К открытий5К показов