Боты повсюду. Кажется, что еще вчера мы даже не подозревали об их существовании, а сейчас уже с трудом можем представить свою жизнь без них. Они стали широко популярны среди многочисленных активных пользователей мессенджеров, поскольку имеют различные сферы применения – от развлекательного контента, включая пошаговые игры и сбор бонусных баллов в ресторанах, до ведения личного плана питания, отслеживания доставки и даже осуществления платежей за различные услуги.
Почему они так популярны? В чем их секрет? Я думаю, что более правильно будет спросить, почему они удобнее, чем приложение. И на это есть несколько причин.
Чем Telegram Bot лучше приложения?
(Этот раздел можно пропустить, если вы и так знаете, почему вам нужен именно бот).
1. Минималистичный и простой дизайн
По сравнению с многочисленными приложениями с различным дизайном, когда приходится запоминать, где и что нажимать, боты более универсальны и просты. Telegram Bot предлагает простое взаимодействие посредством текстов и кнопок.
Telegram bot webhook on PythonAnywhere | python-telegram-bot + PythonAnywhere
Вообще, никто не требовал от ботов красочного дизайна. Однако с весны 2022 года Telegram предоставил разработчикам ботов инструменты для создания бесконечно гибких интерфейсов с помощью JavaScript. Теперь, если у вас есть опыт создания ботов для Telegram, знание Python и мотивация, вы можете создать полноценную замену обычному сайту.
2. Минимум рекламы и фокус на потребностях пользователей
Вам не придется устанавливать сотни приложений для каждого сервиса, если всю необходимую помощь вам окажет Telegram Bot. Это особенно полезно для ресторанов и магазинов.
Клиенты редко горят желанием устанавливать приложения из кучи мест, которые они посетили. Из-за этого владельцы бизнеса упускают отзывы клиентов и теряют с ними связь. Если бы у каждого из этих мест был свой бот, доступный в разных мессенджерах, это было бы удобнее и дружелюбнее для пользователей.
Никто не любит заполнять память своего телефона ненужными приложениями, которые будут использоваться один или два раза. Однако клиентам необходимо взаимодействовать с владельцами услуг, и они будут рады сделать это через свой любимый мессенджер.
3. Отсутствие необходимости в регистрации, авторизации и постоянных перелогинах
При настройке Telegram Bot можно использовать Python и его библиотеки для автоматизации авторизации. Это позволяет пользователю пройти авторизацию только один раз при добавлении бота в чат. Клиент может использовать бота столько, сколько нужно, а когда в нем больше нет необходимости, пользователь просто блокирует бота. Вот и все, легко! Больше никаких сбросов пароля.
Не нужно запоминать пароли или используемые логины. Добавление бота на сайт или в приложение увеличивает количество пользовательской аудитории, так как делает общение с клиентами и оказание им помощи намного проще и удобнее.
Кроме того, популярность мессенджера также играет свою роль. А если говорить о ботах в Telegram, то летом 2022 года Telegram объявил, что число ежемесячных активных пользователей превысит 700 миллионов.
Итак, мы описали основные преимущества ботов, и теперь у вас должно появиться желание создать своего собственного бота. Давайте перейдем к практике. Но сначала мы рассмотрим вопросы, которые необходимо решить на этапе проектирования.
Нюансы разработки Telegram Bot
Выше мы определили причины создания бота. В этой части мы планируем рассказать о том, как создать приложение и какие инструменты разработки использовать. Далее мы покажем, как создать Telegram-бота на Python и научим его разворачивать.
Поскольку это статья по Telegram Bot для начинающих, примеры кода не должны быть сложными. Мы запустим сервер с одним эндпоинтом, который будет получать наши сообщения в Telegram и отправлять ответ.
Для этого мы будем использовать следующие инструменты:
- bottle – для нашего сервера; простой и легкий микро-веб-фреймворк WSGI
- requests – для отправки запросов в telegram. Библиотека request не нуждается в чрезмерном представлении. Она повсеместно используется во всем мире в самых разных проектах.
Примечание: вам необходимо установить эти инструменты на свой компьютер. Они понадобятся нам позже. Для этого давайте создадим виртуальное окружение в директории проекта и установим необходимые инструменты через pip. Если вы не знакомы с тем, что такое окружение, просто установите необходимые библиотеки, выполнив pip install bottle requests .
python3 -m venv venv . ./venv/bin/activate pip install bottle requests
- ngrok – это приложение, которое предоставляет нам публичные URL-адреса для взаимодействия с Telegram WebHook на этапе разработки (см. информацию о WebHook ниже). Это полезно, так как Telegram не сможет установить соединение с нашим локальным сервером, потому что мы не можем указать наш локальный адрес в конфигурации Telegram API. Необходимо скачать ngrok с официального сайта и поместить установленное приложение в папку с проектом.
Как насчет того, чтобы создать своего первого бота?
В этой части вы найдете подробное руководство по созданию Telegram Bot. Также мы рассмотрим полезные инструменты для его разработки на Python.
Прежде всего, чтобы создать Telegram-бота, вам нужно зарегистрироваться в Telegram (очевидно). Для тестирования основных концепций я рекомендую использовать веб-клиент Telegram.
- свой собственный TOKEN
- URL telegram api – api.telegram.org/
- ссылка на документацию
Вот, собственно, и все. На данный момент бот на 100% пассивен.
Вам нужно инициализировать диалог с ботом. Откройте поиск и введите имя вашего бота. Начните диалог, нажав на кнопку /start . Введите что-то вроде “Привет”. Это сообщение очень важно, так как это первое обновление, которое получит ваш бот.
Если это ваш первый опыт создания API, вы можете легко понять идею с помощью веб-браузера. Откройте новую вкладку в браузере и используйте URL Telegram api: api.telegram. org/bot/getUpdates .
Когда вы открываете этот URL в браузере, вы делаете запрос на сервер Telegram, который отвечает JSON. Ответ напоминает словарь Python. Вы должны увидеть что-то вроде этого:
<«ok»:true,»result»:[<«update_id»:523349956, «message»:<«message_id»:51,»from»:<«id»:303262877,»first_name»:»YourName»>,»chat»:,»date»:1486829360,»text»:»Hello»>>]>
Примечание редакции: кратко о формате JSON можно почитать в статье “Кодирование JSON на Python”.
Если вы откроете документацию бота и посмотрите раздел метода /sendMessage, то заметите, что этот метод требует 2 дополнительных параметра: chat_id и text . В строке поиска браузера вы можете соединить параметры цепочкой, используя ? для первого и text=test
Попробуйте получить ответ от вашего бота, заменив chat_id на тот, который вы получили, вызвав /getUpdates . В моем случае это 303262877. Текстовый параметр выбирайте сами. Запрос должен выглядеть следующим образом:
api.telegram. org/ bot/sendMessage?chat_id= простое уведомление о событии через HTTP POST.
Объясню немного подробнее: иногда взаимодействие между приложениями в сети требует немедленной реакции на событие, в то время как решения для постоянных и непрерывных соединений в большинстве случаев громоздки, требовательны и трудно поддерживаются. В этом случае лучшим и самым простым решением является немедленная отправка колбэка через HTTP (чаще всего POST).
Другими словами, это решение обеспечивает реакцию на любое событие внутри одного приложения путем отправки HTTP POST запроса другому подключенному приложению, чтобы проинформировать его или заставить его ответить.
Такая концепция называется WebHook. Она широко используется для:
- получения данных в режиме реального времени
- получения данных и их передачи
- обработки данных и предоставления чего-то взамен
Кажется, что это лучшее решение для взаимодействия клиента Telegram (приложения Telegram) с нашим проектом.
Написание кода Telegram Bot
Наконец, мы приступаем к самой практической части, где вы сможете написать Telegram-бота.
Основная задача – научить нашего бота отвечать на полученные сообщения.
Во-первых, создайте папку для нашего проекта бота. Во-вторых, создайте в этой папке файл bot.py для сервера бота.
1. Давайте попробуем запустить наш сервер. Для этого откройте bash в папке bot.
python bot.py
В результате вы должны увидеть что-то вроде этого:
2. Затем откройте новую вкладку. В ней мы запустим ngrok ( ./ngrok http ):
./ngrok http 8080
В результате вы увидите что-то вроде этого:
3. Теперь давайте установим WebHook.
Сейчас мы сообщим Телеграму, куда ему отправлять сообщения о событиях в боте. Для этого откройте браузер и перейдите по ссылке
https://api.telegram.org/bot/setWebHook?url=https://.ngrok.io/
- Примечание: чтобы найти ngrok URL, необходимо запустить ngrok. Затем на экране, подобном приведенному ниже, вы найдете URL (он выделен на нашем скриншоте). Этот URL вы используете в ссылке для установки WebHook.
Ответ на переход по ссылке должен иметь следующий вид:
Давайте проверим, удалось ли вам настроить WebHook. Перейдите по этой ссылке, используя ваш токен:
https://api.telegram.org/bot/getWebhookInfo
Если все правильно, вы увидите перед ключом URL то же значение адреса ngrok, которое вы указали при настройке.
Поздравляем, it’s alive!
Теперь нам нужно реализовать механизм запроса/ответа на сообщение.
По сути, наш эндпоинт получает данные в формате JSON. Поэтому, как правило, вы должны увидеть сообщение с данными.
from bottle import run, post, request as bottle_request #
Вы должны увидеть что-то вроде этого на вкладке консоли, где запущен сервер.
, ‘message’: , ‘from’: , ‘is_bot’: False, ‘first_name’: », ‘last_name’: », ‘username’: », ‘language_code’: ‘en-En’>, ‘chat’: , ‘first_name’: », ‘last_name’: », ‘username’: », ‘type’: ‘private’>, ‘date’: 1535022558, ‘text’: ‘1’>>
Более подробную информацию о параметрах вы можете найти в официальной документации Telegram.
Теперь нам нужно извлечь chat_id и text , чтобы отправить наше сообщение пользователю.
Итак, мы уже подготовили ответ. Давайте отправим его Telegram-боту.
После всех настроек и написания, если все работает, давайте попробуем пообщаться с нашим ботом.
Теперь давайте сделаем наш код более читабельным и реализуем структуру ООП.
import requests from bottle import Bottle, response, request as bottle_request class BotHandlerMixin: BOT_URL = None def get_chat_id(self, data): «»» Method to extract chat id from telegram request. «»» chat_id = data[‘message’][‘chat’][‘id’] return chat_id def get_message(self, data): «»» Method to extract message id from telegram request. «»» message_text = data[‘message’][‘text’] return message_text def send_message(self, prepared_data): «»» Prepared data should be json which includes at least `chat_id` and `text` «»» message_url = self.BOT_URL + ‘sendMessage’ requests.post(message_url, json=prepared_data) class TelegramBot(BotHandlerMixin, Bottle): BOT_URL = ‘https://api.telegram.org/bot000000000:aaaaaaaaaaaaaaaaaaaaaaaaaa/’ def __init__(self, *args, **kwargs): super(TelegramBot, self).__init__() self.route(‘/’, callback=self.post_handler, method=»POST») def change_text_message(self, text): return text[::-1] def prepare_data_for_answer(self, data): message = self.get_message(data) answer = self.change_text_message(message) chat_id = self.get_chat_id(data) json_data = < «chat_id»: chat_id, «text»: answer, >return json_data def post_handler(self): data = bottle_request.json answer_data = self.prepare_data_for_answer(data) self.send_message(answer_data) return response if __name__ == ‘__main__’: app = TelegramBot() app.run(host=’localhost’, port=8080)
Вот, собственно, и все. Теперь вы создали работающего бота для Telegram, на базе Python и даже умеющего писать фразу “racecar” задом наперед. Поздравляем!
1 комментарий к “Создание Telegram Bot с помощью Python”
- Пингбэк: Простой Telegram бот для логирования
Источник: pythonturbo.ru
Создание чат-бота с ИИ в Telegram
В настоящее время активно развиваются и внедряются системы искусственного интеллекта. Собеседник всё чаще становится виртуальным, представляющим из себя мощную программу. Таковой является чат-бот. Сейчас такие программы-собеседники уже напоминают личных секретарей, в круг их обязанностей входят информирование о погоде, перевод денег, напоминание о важных событиях, запись на приём к врачу и многое другое.
23K открытий
В данной статье я расскажу, как можно создать такого небольшого чат-бота в Telegram. Он сможет говорить на общие темы: погода, досуг и т.д. В статье будет много ссылок на дополнительные материалы, они позволят более глубоко погрузиться в тему NLP и создания ботов в Telegram. Также в конце я оставлю предложения по усовершенствованию разработанного чат-бота.
Весь код написан на языке Python.
1. Создание бота в Telegram
Для того, чтобы создать бота в Telegram необходимо написать боту по имени BotFather.
С помощью BotFather можно создавать новых ботов в Telegram и изменять настройки существующих. Например, добавить описание, установить аватарку для бота.
После создания чат-бота в BotFather вы получите уникальный токен. Токен нужен для идентификации вашего бота. Не сообщайте его никому.
2. Написание кода бота
Для создания чат-ботов в Telegram можете использовать библиотеки python-telegram-bot или pyTelegramBotAPI
from telegram import Update from telegram.ext import Updater, CommandHandler # Обработка команды start def send_start(update: Update): update.message.reply_text(“Hey, what’s up?”) updater = Updater(“YOUR_BOT_TOKEN”) # Добавление обработчика updater.dispatcher.add_handler(CommandHandler(‘hello’, send_start)) # Запуск бота updater.start_polling() updater.idle()
Использование библиотеки python-telegram-bot
Использование библиотеки pyTelegramBotAPI
Принципиально эти библиотеки ничем друг от друга не отличаются. Отличие связано с синтаксисом.
В данной статье я использовал библиотеку python-telegram-bot.
Если речь идёт о чат-боте для сотен людей, то лучше использовать библиотеку aiogram. В отличие от двух предыдущих библиотек aiogram поддерживает ассинхронность. Это позволит обрабатывать сообщения нескольких людей одновременно.
3. Создание искусственного интеллекта
NLP (Natural Language Processing) – тема объёмная, тема для ряда статей. В этой статье я расскажу, что использовал и оставлю ссылки на ресурсы с более подробным обзором данной темы.
а. Набор датасета
Датасет я составлял вручную. Структура датасета представлена ниже на изображении.
Интенты – намерения пользователей. Интент включает в себя примеры вопросов, которые задают пользователи. Например, интент Спортивные мероприятия содержит все вопросы (строго говоря, это могут быть и утверждения), связанные со спортивными мероприятиями. Также интент включает в себя ответы чат-бота. Интент может включать один или несколько ответов. Если ответов несколько, то ответ бота выбирается случайным образом.
В Python структура датасета следующая:
Если знаете, как это сделать проще или где можно найти готовые датасеты, пишите в комментариях.
b. Предобработка текста
Были использованы три метода: удаление символов пунктуации, приведение слов к нижнему регистру и лемматизация.
Для удаления символов пунктуации использовался модуль string.
import string # Удаление символов пунктуации def remove_punctuation(text): translator = str.maketrans(», », string.punctuation) return text.translate(translator)
Лемматизация – это процесс приведения слова к нормальной (словарной) форме.
Лемматизация нужна для того, чтобы слова, имеющие одинаковое значение, но написанные в разной временной форме, не воспринимались ботом как совершенно разные слова и относились к одному интенту.
Библиотека pymystem3 — это морфологический анализатор русского текста от компании Яндекс. Он приводит слова к начальной форме и нижнему регистру.
Ссылка на статью с рассмотрением различных способов предобработки текста.
Источник: vc.ru
Деплой Python-приложения на сервер
Деплой ( deploy ) – это процесс публикации (развёртывания) вашего приложения на сервере для того, чтобы оно было доступно в интернете или другой сети.
В этой статье мы рассмотрим туториалы по развертыванию Flask- и Django -приложений на сервере от Timeweb Cloud и облачной платформе PythonAnywhere.
В качестве примера мы будем использовать простейшее приложение, которое выводит на экран приветствие “Hello, world!”
Деплой приложения на сервере
Когда вы разворачиваете приложения на облачном сервере , кроме непосредственного запуска контейнера может потребоваться настройка реверс-прокси ( например nginx) и SSL. Docker — инструмент, который упрощает создание, развертывание и запуск приложений с использованием контейнеров.
Контейнер docker — это набор зависимостей и кода, организованный в виде программного обеспечения, которое позволяет приложениям быстро и эффективно работать в различных вычислительных средах.
В первую очередь мы устаналиваем Docker с официального сайта.
Приложение Flask
Опубликуем приложение Flask .
Настройка Dockerfile
Создаём файл и называем его Dockerfile. Добавим в него код:
# Docker позволяет наследовать существующие образы, поэтому в качестве базового образа устанавливаем образ Python.
FROM python:3.8-slim-buster
# Меняем рабочую директорию внутри контейнера. Все оставшиеся операции будут запускаться внутри /app контейнера.
WORKDIR /app
# Устанавливаем все зависимости из файла requirements.txt внутри контейнера.
RUN pip install -r requirements.txt
# Копируем все остальные файлы из текущей директории (та, в которой находится файл Dockerfile) в директорию /app внутри образа.
COPY . /app
# Запускаем интерпретатор python
ENTRYPOINT [ «python» ]
# Добавляем список параметров к ENTRYPOINT. для выполнения команды, которая запускает приложение. Это похоже на то, как вы бы запустили его Python на своем терминале, используя команду python name_.py
CMD [«name_app.py» ]
Создание образа контейнера
Создадим образ для только что созданного контейнера:
docker build -t flask-docker .
Запуск контейнера
Для запуска контейнера выполняем код :
docker run -d -p 5000:5000 flask-docker
-d – для запуска контейнера в автономном режиме
-p – для указания порта, который будет открыт
Запустив localhost:5000 в браузере, увидим приложение.
Приложение Django
Деплой Django-приложения на Docker мало чем отличается от деплоя Flask-приложения.
Создадим виртуальное окружение и Dockerfile, в который добавим код:
FROM python:3.8-slim-buster
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip3 install -r requirements.txt
COPY . /app
CMD [«python3», «manage.py», «runserver», «0.0.0.0:5000»]
venv
Создадим образ контейнера и запустим контейнер, используя команды build и run:
docker build —tag django-docker .
docker run —publish 8000:8000 django-docker
Запустив в браузере http://localhost:5000/, увидим приложение.
Деплой на облачной платформе PythonAnywhere
При использовании облачных сервисов, таких как PythonAnywhere или Heroku , вы сможете писать проекты прямо в браузере. Но для такой работы вам понадобится установка и подготовка Git-репозитория.
Установка Git и создание Git-репозитория
Вначале необходимо подготовить проект для Github. В своей учетной записи Github создайте новый репозиторий во вкладке Repositories. Назовите его по своему усмотрению и нажмите Create repository.
Дальше вам нужно подключить проект к Github с помощью Git. Установить Git можно с официального сайта git-scm.com .
Создадим локальный репозиторий на нашем компьютере. Внутри рабочего каталога вашего проекта (там, где находится manage.py) в консоли запускаем команду:
git init
Она инициализирует новый репозиторий git для вашего проекта.
Создание файла .gitignore
Необходимо создать файл в корневом каталоге проекта с именем .gitignore , который используется для указания git, какие файлы и папки игнорировать. Откройте редактор и внесите:
*.log
*.pot
*.pyc
__pycache__/
db.sqlite3
db.sqlite3-journal
media
static