Представьте, что у вас есть свой канал в Телеге. Допустим, вы высказываете непопулярную политическую точку зрения и, соответственно, ловите хейт в личку со стороны читателей и проходящих мимо.
Или, например, вы продаете что-то через свой канал. Клиентов так много, что один «продажник» (=вы) не справляется. Или поддержка вашего бизнеса отвечает всем в публичном чате, который прикреплен к вашему каналу. Но многие стесняются задать вопросы, так как их могут увидеть, поэтому пишут в личку, что не масштабируется.
Проблем много, а решение одно: сделать Телеграм бот, который будет работать посредником между вашими клиентами и командой поддержки.
Мое мнение: это самый лучшее применение телеграм ботов за всю историю их существования. На втором месте — рассылка закрытой информации через бота только проплатившим пользователям.
Самый популярный конструктор таких ботов — Livegrambot. Он позволяет сделать тоже самое, но при этом бот будет писать вашим пользователям «я сделан через Livegrambot», выпрашивая деньги у вас. Будучи умелым создателем Телеграм ботов, я решил сделать свой аналог, но уже с открытым исходным кодом и легким способом запустить его бесплатно на бесплатные серверы.
How to Find Your Telegram Chat ID and Token for Python Bot | Prakash Info
Ниже я расскажу, как в 1 клик запустить такого бота и как он технически устроен.
TL;DR: Код выложил сюда
Юзер стори или как с этим ботом работать.
- Ваши Пользователи (читатели канала, клиенты),
- Закрытый Чат Поддержки (где сидят те, кто будет отвечать на вопросы Пользователей),
- Бот (которому Пользователи будут писать свои вопросы).
Вот так это все будет работать:
- Вы публикуете ссылку на Бота,
- Пользователи пишут в него свои вопросы,
- Бот пересылает их сообщения в ваш Чат Поддержки,
- В этом чате вы или ваши помощники отвечают на сообщение (через reply),
- Бот пересылает ответ обратно пользователю от своего лица, скрывая аккаунт отвечающего.
Такая схема неплохо масштабируется: достаточно нанять больше Агентов поддержки, и все Пользователи получат свои ответы вовремя и через бота.
Как это все запустить? Желательно, без навыков
Планируя дизраптнуть платный аналог, необходимо продумать онбординг. Большинству проще заплатить, чем самому разбираться в коде, технологии и деплое. К счастью, я фанат Heroku, а именно там можно бесплатно хостить свой код, нажав всего одну кнопку.
В README.md я добавил волшебную кнопку от Heroku, которая поможет запустить код из репозитория. После нажатия, при наличии аккаунта на Heroku (который можно создать также по 1 кнопке), вы увидите такую картину:
Heroku уже понял, какие данные нужно запросить у вас, у создателя, чтобы все завелось автоматически. Давайте пройдемся по этим параметрам:
УЗНАТЬ ID TELEGRAM ► Как узнать ID телеграм канала, группы
— 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 # Для приветственного сообщения и для «к вам подключился » 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)
Источник: temofeev.ru
Отправка сообщений в Telegram при помощи Python
Представьте, что вы запустили какую-то программу, на выполнение которой требуется некоторое время, и хотите вздремнуть или что-то в этом роде. Вам нужен простой скрипт, который отправит вам сообщение, когда ваша программа закончит работу.
Реализовать функцию отправки сообщения в Telegram при помощи Python довольно просто. План действий:
- Создать Telegram-бота с помощью BotFather от Telegram
- Получить идентификатор чата
- Послать сообщение Telegram с помощью Python
Создание Telegram-бота
- Откройте приложение Telegram и найдите BotFather. Это встроенный бот Telegram, который помогает создавать пользовательские боты.
- Введите /newbot , чтобы создать нового бота.
- Дайте своему боту имя и уникальный username
- Скопируйте токен вашего нового бота Telegram
Примечание: не загружайте свой токен в интернет, так как любой пользователь с вашим токеном имеет полный контроль над вашим Telegram-ботом.
Получение идентификатора чата
В Telegram каждый чат имеет ID. Нам он нужен, чтобы отправлять в наш чат сообщения.
Отправьте своему Telegram-боту любое сообщение. После этого запустите скрипт Python, чтобы найти ID вашего чата:
import requests TOKEN = «Сюда вставьте свой токен» url = f»https://api.telegram.org/bot/getUpdates» print(requests.get(url).json())
Примечание редакции Pythonist: если у вас не установлена библиотека requests , нужно сперва ее установить:
$ python -m pip install requests
Этот скрипт вызывает функцию getUpdates , которая как бы проверяет наличие новых сообщений. Мы можем найти ID нашего чата из возвращаемого JSON (на иллюстрации выделен красным цветом).
Примечание: если вы не отправите сообщение своему Telegram-боту, результаты могут быть пустыми.
Найдя идентификатор чата, скопируйте его.
Отправка сообщения Telegram с помощью Python
Скопируйте и вставьте в следующий скрипт Python токен вашего Telegram-бота и ID чата из предыдущих двух шагов. Также напишите собственное сообщение.
import requests TOKEN = «Сюда вставьте свой токен» chat_id = «Сюда вставьте ID чата» message = «Здесь напишите свое сообщение» url = f»https://api.telegram.org/bot/sendMessage?chat_id= print(requests.get(url).json()) # Эта строка отсылает сообщение
Запустите скрипт и проверьте свой Telegram!
Источник: pythonist.ru
Как написать telegram-бота на python с помощью библиотеки telebot
Как написать telegram-бота на python с помощью библиотеки telebot
Установка и настройка
Для начала давайте скачаем сам python. Сделать это можно на официальном сайте. Не забудьте поставить галочку add to PATH во время установки! После установки python’a нам понадобится хороший редактор кода. На помощь приходит компания JetBrains со своим бесплатным PyCharm.
Мы уже близко, осталось скачать библиотеку telebot. Для этого заходим в командную строку и пишем:
pip install pytelegrambotapi
Если всё прошло успешно, мы можем продолжать!
VPN
Думаю все знают о блокировки telegram в России и единственным решением как всегда остаётся vpn. Лично я рекомендую NordVPN.
Bot Father
В поиске telegram находим Bot Farher’a и создаем своего бота с помощью команды /newbot. Затем вводим имя и юзернейм. Обратите внимание, что юзернейм должен оканчиваться на bot!
Как вы видите нам выдали специальный api токен, с помощью которого вы сможете управлять своим ботом (в моём случае это: 776550937:AAELEr0c3H6dM-9QnlDD-0Q0Fcd65pPyAiM). Свой токен Вы можете запомнить, но я рекомендую его записать.
Код
Настал момент, которого ждали все. Открываем PyCharm и создаем новый проект.
Тут рекомендую поставить всё как у меня (название, конечно можно изменить). После создания проекта, давайте создадим файл, в котором будет наш код. Кликните правой кнопкой по папке с вашем проектом, затем New → Python File. Отлично, начнем писать код. Импортируем библиотеку telebot, с помощью:
import telebot
Теперь нужно создать переменную bot. На самом деле имя переменной может быть каким угодно, но я привык писать bot.
bot = telebot.TeleBot(‘ваш токен’)
Напишем декоратор bot.message_handler(), с помощью которого наш бот будет реагировать на команду /start. Для этого в круглых скобках пишем commands=[‘start’]. В итоге у нас должно получиться это:
Если Вы попробуете запустить своего бота (ПКМ->Run), то у вас ничего не выйдет. Во первых в конце кода мы должны прописать bot.polling(). Это нужно для того, чтобы бот не выключился сразу, а работал и проверял, нет ли на сервере нового сообщения. А во вторых наш бот если уж и будет проверять наличие сообщений, то всё равно ничего ответить не сможет. Пора это исправлять!
После нашего декоратора создаем функцию start_message, которая будет принимать параметр message (название функции может быть любым). Далее давайте реализуем отправку сообщения от самого бота. В функции пропишем bot.send_message(message.chat.id, ‘Привет, ты написал мне /start’). Смотрите, что у Вас должно получиться:
Отлично, наш бот работает! Чтобы он отвечал не только на команды, но и на сообщения, создадим новый декоратор bot.message_handler(), а в круглые скобочки напишем content_types=[‘text’]. Вообще существует множество видов контента, к примеру location, photo, audio, sticker и т.д. Но нам же нужно отвечать на текст, верно? Поэтому создаём функцию send_text, принимающую параметр message. В функции пропишем условие:
Если текст сообщения будет равен «Привет», то бот отвечает «Привет, мой создатель», а если текст сообщения будет равен «Пока», то бот ответит «Прощай, создатель». Тут думаю всё понятно. Но вы скорее всего задались вопросом, а если пользователь пропишет «привет», ну или «пРиВет», как быть в этой ситуации? Всё достаточно просто!
В условии, после message.text напишите функцию .lower(), а в тексте все заглавные буквы замените на строчные. Теперь наш бот отвечает не только на «привет», но и на «ПривеТ», и даже «пРиВеТ».
Вот что у вас должно получиться:
Отлично, с текстом мы разобрались, но как же отправить к примеру стикер? Всё просто! У каждого стикера есть свой id, соответственно зная id мы сможем его отправить. Получить id стикера можно двумя способами. Первый (простой) — через специального бота «What’s the sticker id?»
Ну и второй способ, для тех, кто не ищет лёгких путей. Создаем новый декоратор bot.message_handler(), вот только в скобочки пишем content_types=[‘sticker’]. Далее всё как обычно. Создаем функцию, принимающую параметр message, а вот в ней пропишем print(message). Запускаем бота.
Смотрите, как только я отправил стикер, он сразу же вывел информацию в консоль, и в самом конце будет наш id стикера (file_id). Давайте сделаем так, чтобы когда пользователь отправил боту «я тебя люблю», то бот ему ответил стикером. Создавать новый декоратор не нужно, мы просто допишем условие, которое было до этого. Вот только вместо bot.send_message() пропишем bot.send_sticker(), а вместо текста напишем id стикера.
Поздравляю, всё получилось! Думаю как отправить аудио, фото, и геолокацию, вы разберетесь сами. Я же хочу показать вам, как сделать клавиатуру, которую бот покажет вам при старте. Это уже будет сделать сложнее. Создаем переменную keyboard1, в которую запишем telebot.types.ReplyKeyboardMarkup().
Эта функция вызывает клавиатуру. Далее создадим ряды, но помните, что рядов может быть не больше 12! Для того, чтобы их создать, пишем keyboard1.row(). В круглые скобочки запишите всё что хотите, лично я напишу «Привет» и «Пока». Теперь, чтобы вызвать клавиатуру, допишем reply_markup=keyboard1 к функции отправки сообщения при старте. Вот, что у вас должно получиться:
Вы видите, что клавиатура какая-то большая. Чтобы это исправить, нужно просто в ReplyKeyboardMarkup() прописать True. Ну а если вы хотите, чтобы клавиатура скрывалась, как только пользователь нажал на нее, то напишите еще один True. Подробнее прочитать, что означают эти True вы можете в официальной документации.
keyboard1 = telebot.types.ReplyKeyboardMarkup(True, True)
Ну а на этом всё! Конечно, это не все возможно ботов в telegram, но основные возможности я вам показал. Спасибо за внимание.
Что такое message?
Наверное многие, кто писал бота по моей предыдущей статье задались вопросом, что такое message и почему к примеру, чтобы отправить сообщение мы должны указать message.chat.id в параметрах функции send_message? Для того, чтобы узнать это давайте выведем message в консоль:
Теперь когда мы вводим команду /start, наш бот присылает огромное кол-во информации. Все, что мы сейчас получили — это ответ в формате json. Json — это простой формат для хранения структурированных данных. Все выводится в формате: ‘ключ’: значение. Давайте посмотрим на то, что получил я:
< ‘content_type’:’text’, ‘message_id’:573, ‘from_user’:< ‘id’:687595402, ‘is_bot’:False, ‘first_name’:’Dmitry’, ‘username’:’dimagorovtsov’, ‘last_name’:’Gorovtsov’, ‘language_code’:’ru’ >, ‘date’:1565206363, ‘chat’:< ‘type’:’private’, ‘last_name’:’Gorovtsov’, ‘first_name’:’Dmitry’, ‘username’:’dimagorovtsov’, ‘id’:687595402, ‘title’:None, ‘all_members_are_administrators’:None, ‘photo’:None, ‘description’:None, ‘invite_link’:None, ‘pinned_message’:None, ‘sticker_set_name’:None, ‘can_set_sticker_set’:None >, ‘forward_from_chat’:None, ‘forward_from’:None, ‘forward_date’:None, ‘reply_to_message’:None, ‘edit_date’:None, ‘media_group_id’:None, ‘author_signature’:None, ‘text’:’/start’, ‘entities’:[ ], ‘json’:< ‘message_id’:573, ‘from’:< ‘id’:687595402, ‘is_bot’:False, ‘first_name’:’Dmitry’, ‘last_name’:’Gorovtsov’, ‘username’:’dimagorovtsov’, ‘language_code’:’ru’ >, ‘chat’:< ‘id’:687595402, ‘first_name’:’Dmitry’, ‘last_name’:’Gorovtsov’, ‘username’:’dimagorovtsov’, ‘type’:’private’ >, ‘date’:1565206363, ‘text’:’/start’, ‘entities’:[ < ‘offset’:0, ‘length’:6, ‘type’:’bot_command’ >] > >
К примеру из всей этой информации мы хотим получить id чата, из которого я отправлял сообщение. Для этого обратимся к ключу chat.
print(message.chat)
687595402, ‘title’: None, ‘all_members_are_administrators’: None, ‘photo’: None, ‘description’: None, ‘invite_link’: None, ‘pinned_message’: None, ‘sticker_set_name’: None, ‘can_set_sticker_set’: None>
Смотрите, у ключа chat есть еще несколько ключей: first_name, last_name, username… и у каждого из них есть свои значения. Теперь обратимся к ключу id:
print(message.chat.id)
Как вы видите для того чтобы получить нужное значение необходимо просто записать название ключей через точку. А теперь смотрим на ответ от сервера:
687595402
Все идет как надо! Мы получили id чата, собственно как и хотели! А теперь получим имя отправителя. Тут, как вы заметили нужно использовать ключ from_user.
print(message.from_user)
687595402, ‘is_bot’: False, ‘first_name’: ‘Dmitry’, ‘username’: ‘dimagorovtsov’, ‘last_name’: ‘Gorovtsov’, ‘language_code’: ‘ru’>
Теперь достанем значение у ключа first_name:
print(message.from_user.first_name)
Ну вот и все! За пару секунд мы смогли получить id чата и мое имя в telegram. И еще раз, для тех кто не понял:
Чтобы получить значение ключа first_name, нам нужно сначала обратиться к ключу chat, а только потом уже к first_name!
Теперь смотрите, для того, чтобы отправить сообщение в какой-либо чат нам необходимо указать несколько параметров в функцию send_message. Первый параметр — это chat_id, собственно сам id чата. Второй — text, текст сообщения. И как вы догадались, вместо того, чтобы писать message.chat.id, мы можем написать свои данные! Вот так можно прислать сообщение самому себе, если указать в параметрах свой id:
bot.send_message(, ‘Текст сообщения’)
Ну а когда мы пишем message.chat.id, мы подразумеваем, что бот отправит сообщение в чат, из которого его вызвали.
Заключение
Ну а на этом всё! Надеюсь вы поняли как получать данные от сервера, обрабатывать их и использовать где нужно. Спасибо за внимание.
Источник: bookflow.ru