Представьте, что у вас есть свой канал в Телеге. Допустим, вы высказываете непопулярную политическую точку зрения и, соответственно, ловите хейт в личку со стороны читателей и проходящих мимо.
Или, например, вы продаете что-то через свой канал. Клиентов так много, что один "продажник" (=вы) не справляется. Или поддержка вашего бизнеса отвечает всем в публичном чате, который прикреплен к вашему каналу. Но многие стесняются задать вопросы, так как их могут увидеть, поэтому пишут в личку, что не масштабируется.
Проблем много, а решение одно: сделать Телеграм бот, который будет работать посредником между вашими клиентами и командой поддержки.
Мое мнение: это самый лучшее применение телеграм ботов за всю историю их существования. На втором месте - рассылка закрытой информации через бота только проплатившим пользователям.
Самый популярный конструктор таких ботов - Livegrambot. Он позволяет сделать тоже самое, но при этом бот будет писать вашим пользователям "я сделан через Livegrambot", выпрашивая деньги у вас. Будучи умелым создателем Телеграм ботов, я решил сделать свой аналог, но уже с открытым исходным кодом и легким способом запустить его бесплатно на бесплатные серверы.
Ниже я расскажу, как в 1 клик запустить такого бота и как он технически устроен.
TL;DR: Код выложил сюда
Юзер стори или как с этим ботом работать.
Действующие лица:
Ваши Пользователи (читатели канала, клиенты),
Закрытый Чат Поддержки (где сидят те, кто будет отвечать на вопросы Пользователей),
Бот (которому Пользователи будут писать свои вопросы).
Вот так это все будет работать:
Вы публикуете ссылку на Бота,
Пользователи пишут в него свои вопросы,
Бот пересылает их сообщения в ваш Чат Поддержки,
В этом чате вы или ваши помощники отвечают на сообщение (через reply),
Бот пересылает ответ обратно пользователю от своего лица, скрывая аккаунт отвечающего.
Такая схема неплохо масштабируется: достаточно нанять больше Агентов поддержки, и все Пользователи получат свои ответы вовремя и через бота.
Как это все запустить? Желательно, без навыков
Планируя дизраптнуть платный аналог, необходимо продумать онбординг. Большинству проще заплатить, чем самому разбираться в коде, технологии и деплое. К счастью, я фанат Heroku, а именно там можно бесплатно хостить свой код, нажав всего одну кнопку.
В README.md я добавил волшебную кнопку от Heroku, которая поможет запустить код из репозитория. После нажатия, при наличии аккаунта на Heroku (который можно создать также по 1 кнопке), вы увидите такую картину:
Heroku уже понял, какие данные нужно запросить у вас, у создателя, чтобы все завелось автоматически. Давайте пройдемся по этим параметрам:
- App name: название приложения в системе Heroku. Можно придумать любое.
- Choose a region: где Хероку запустит ваш код. Можно выбрать любое место.
- HEROKU_APP_NAME
: впишите сюда тоже самое, что указали выше в App name (это важно для того, чтобы завести тг бота через вебхуки).
- TELEGRAM_SUPPORT_CHAT_ID
: айдишник чата, куда Телеграм бот будет пересылать сообщения пользователей. Как узнать его - смотрите ниже.
- TELEGRAM_TOKEN
: токен вашего бота, который можно получить у BotFather.
Как узнать TELEGRAM_SUPPORT_CHAT_ID
Способов много, но самый простой - это добавить вот этого бота в ваш созданный приватный чат. Этот бот возвращает все данные, которые ему присылает Телеграм, в частности событие "меня добавили в чат", откуда вы и сможете извлечь chat_id
.
Как реализовать такого бота?
Ниже будет много технической информации. Мы же на Хабре, поэтому я решил добавить этот раздел для любителей разобраться в коде и при необходимости его адаптировать. Это раздел можно спокойно пропустить, если хотите.
Примеры кода я буду писать на языке Python и использовать библиотеку python-telegram-bot
. Итогда я буду вставлять ссылки на GitHub (гит), чтобы легко можно было найти этот кусок кода в моем репозитории.
Хендлеры (обработчики событий)
Для нашей задумки необходимы всего 3 хендлера (гит):
from telegram.ext import Updater
from telegram.ext import CommandHandler, MessageHandler, Filters
updater = Updater(TELEGRAM_TOKEN)
dp = updater.dispatcher
# Для приветственного сообщения и для "к вам подключился {username}"
dp.add_handler(CommandHandler('start', start))
# Для пересылки из бота в чат поддержки
dp.add_handler(MessageHandler(Filters.chat_type.private, forward_to_chat))
# Для пересылки ответа из чата обратно пользователю
dp.add_handler(MessageHandler(Filters.chat(TELEGRAM_SUPPORT_CHAT_ID) & Filters.reply, forward_to_user))
С командой /start все понятно. Юзер нажал - прислать приветственное сообщение - прислать в чат поддержки о том, что подключился новый юзер (гит).
def start(update, context):
update.message.reply_text(WELCOME_MESSAGE)
user_info = update.message.from_user.to_dict()
context.bot.send_message(
chat_id=TELEGRAM_SUPPORT_CHAT_ID,
text=f"