[Мессенджеры, Python, CRM-системы] Телеграм бот для поддержки своими руками

Автор Сообщение
news_bot ®

Стаж: 6 лет 7 месяцев
Сообщений: 27286

Создавать темы news_bot ® написал(а)
28-Янв-2021 22:31


Представьте, что у вас есть свой канал в Телеге. Допустим, вы высказываете непопулярную политическую точку зрения и, соответственно, ловите хейт в личку со стороны читателей и проходящих мимо. Или, например, вы продаете что-то через свой канал. Клиентов так много, что один "продажник" (=вы) не справляется. Или поддержка вашего бизнеса отвечает всем в публичном чате, который прикреплен к вашему каналу. Но многие стесняются задать вопросы, так как их могут увидеть, поэтому пишут в личку, что не масштабируется.Проблем много, а решение одно: сделать Телеграм бот, который будет работать посредником между вашими клиентами и командой поддержки.
Мое мнение: это самый лучшее применение телеграм ботов за всю историю их существования. На втором месте - рассылка закрытой информации через бота только проплатившим пользователям.
Самый популярный конструктор таких ботов - Livegrambot. Он позволяет сделать тоже самое, но при этом бот будет писать вашим пользователям "я сделан через Livegrambot", выпрашивая деньги у вас. Будучи умелым создателем Телеграм ботов, я решил сделать свой аналог, но уже с открытым исходным кодом и легким способом запустить его бесплатно на бесплатные серверы. Ниже я расскажу, как в 1 клик запустить такого бота и как он технически устроен.TL;DR: Код выложил сюда: https://github.com/ohld/telegram-support-botЮзер стори или как с этим ботом работать.Действующие лица:
  • Ваши Пользователи (читатели канала, клиенты),
  • Закрытый Чат Поддержки (где сидят те, кто будет отвечать на вопросы Пользователей),
  • Бот (которому Пользователи будут писать свои вопросы).
Вот так это все будет работать:
  • Вы публикуете ссылку на Бота,
  • Пользователи пишут в него свои вопросы,
  • Бот пересылает их сообщения в ваш Чат Поддержки,
  • В этом чате вы или ваши помощники отвечают на сообщение (через 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.Как узнать TELEGRAMSUPPORTCHAT_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"? Connected {user_info}.",
    )
В случае пересылки ботом сообщения пользователя из лички в чат поддержки, тоже все просто (гит):
def forward_to_chat(update, context):
    update.message.forward(chat_id=TELEGRAM_SUPPORT_CHAT_ID)
В случае отправление ответа (reply) на пересланное сообщение, необходимо скопировать содержимое сообщения и отправить его от лица бота. Если аналогично сделать .forward, то будет виден отправитель. А тут как раз недавно в Telegram Bot API добавили возможность удобно копировать содержимое сообщения (гит):
def forward_to_user(update, context):
    user_id = update.message.reply_to_message.forward_from.id
    context.bot.copy_message(
        message_id=update.message.message_id,
        chat_id=user_id,
        from_chat_id=update.message.chat_id
    )
Бесплатный деплой на HerokuЧтобы захостить это все бесплатно на Heroku, бот должен быть запущен в режиме Webhook, а не Pooling. Разница их в том, что вебхук "слушает новые сообщения от Телеги", а пулинг "периодически запрашивает". Чтобы запрашивать, сервер должен работать постоянно (условно, каждую секунду запрашивать у серверов Телеграмма новые сообщения, которые кто-то написал в бот). Однако, в случае с вебхуками, сервер может просто ждать, когда серверы Телеграмма сами отправят нам новые обновления бота.Этот факт критически важен, если мы хотим бесплатно пользоваться услугами Heroku (который по факту дает нам свои серверы в аренду). Хероку любит "усыплять" простаивающие машины, которые пробуждаются в момент нового входящего запроса. Именно новые сообщения от серверов Телеграмма и будут пробуждать наш сервер тогда, когда необходимо переслать пользовательское сообщение из лички бота в наш чат поддержки.Для того, чтобы настроить Webhook, необходимо поднять вебсервер, который будет слушать входящие сообщения по endpoint. Сказать Телеграму: "присылай события бота мне на сервер - по этому адресу". Также нужно как-нибудь защититься от злоумышленников, которые могут отправить на наш вебсервер событие, прикинувшись сервером телеги. Также телеграм требует, чтобы все работало https.Звучит сложно, однако Heroku автоматически и бесплатно обеспечит https, а вебсервер для вебхука уже встроен в библиотеку python-telegram-bot. Если добавить секретный токен вашего бота в URL, по которому вы будете слушать события от Телеги, то можно защититься от стороннего вмешательства. Вот как можно запустить Телеграм бот в webhook-режиме (гит) через эту библиотеку:
# запускаем слушающий вебсервер
updater.start_webhook(
  listen="0.0.0.0",
  port=PORT,  # HEROKU требует, чтобы порт вебсервера задавался через переменные окружения
  url_path=TELEGRAM_TOKEN  # добавляем секретное значение в адрес, который слушаем
)
# говорим Телеграму: "присылай события бота по этому адресу"
updater.bot.set_webhook(f"https://{HEROKU_APP_NAME}.herokuapp.com/{TELEGRAM_TOKEN}")
updater.idle()
Помните, мы отдельно задавали переменную окружения HEROKU_APP_NAME , куда копипастили название нашей Heroku App? Дело в том, что эта переменная используется в адресе, по которому Heroku запускает наш вебсервер. Но при этом, имя приложения Хероку нельзя получить изнутри, поэтому решение "скопипастить название App Name в отдельную переменную окружения" для меня звучит норм. Что дальше?Допустим, вы запустили бота, у вас уже много клиентов и вы хотите усовершенствовать функционал телеграм бота. Что можно сделать?Во-первых, можно сохранять список пользователей, которые как-нибудь контактировали с ботом. Это пригодится как для выстраивания воронок, так и для массовой рассылки им сообщения через бота. Во-вторых, можно улучшить сервис со стороны агентов поддержки: в сообщения добавить кнопки с ссылками на CRM, спрашивать у пользователей качество ответа, выводить больше информации о подключенном юзере и запрашивать у них контакты. Спасибо за просмотр. Теперь вы знаете, как можно сделать и бесплатно задеплоить Телеграм бота поддержки. Полный код проекта (вместе с волшебной кнопкой "задеплой это на хероку") лежит тут. В своем Телеграм канале я делюсь опытом разработки больших телеграм ботов, делюсь датасетами и продуктовой аналитикой. Заходите.А какие другие популярные юзкейсы Телеграм ботов вы бы выделили? Напишите в комментариях.
===========
Источник:
habr.com
===========

Похожие новости: Теги для поиска: #_messendzhery (Мессенджеры), #_python, #_crmsistemy (CRM-системы), #_telegrambot, #_podderzhka (поддержка), #_python, #_pythontelegrambot, #_podderzhka_polzovatelej (поддержка пользователей), #_podderzhka_klientov (поддержка клиентов), #_telegrambot (телеграм-бот), #_messendzhery (
Мессенджеры
)
, #_python, #_crmsistemy (
CRM-системы
)
Профиль  ЛС 
Показать сообщения:     

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы

Текущее время: 05-Окт 19:32
Часовой пояс: UTC + 5