Чат-бот в Telegram на python и aiogram. Создание первого Telegram бота на Python. Част. Выбираем библиотеку и пишем первого бота.
- Чат-бот в Telegram на python и aiogram. Создание первого Telegram бота на Python. Част. Выбираем библиотеку и пишем первого бота.
- Python-telegram-bot примеры. Самый простой бот
- Чат-боты в Telegram на python. част. Callback-кнопки и редактирование сообщений
- Aiogram python. Установка ¶
- Самообучающийся чат-бот python. Что делают Chatbots?
- Готовый чат-бот на python. Ша. Пишем основу бота
Чат-бот в Telegram на python и aiogram. Создание первого Telegram бота на Python. Част. Выбираем библиотеку и пишем первого бота.
Разбираемся, как написать чат-бота с помощью библиотеки aiogram. Весь код — внутри статьи.
Компании используют чат-ботов в Telegram для разных задач: рассылают новости о новых акциях, принимают платежи или даже организуют службу технической поддержки. Обычные пользователи тоже используют их для своих бытовых нужд — ведут учёт личных финансов или оформляют посты в социальных сетях.
В этой статье мы научимся с нуля создавать чат-ботов с помощью Python: выберем лучшую библиотеку и напишем на ней эхо-бота, который отвечает на сообщения пользователя точно такими же сообщениями. Это первая часть урока по чат-ботам в Telegram — во второй части мы добавим новые фичи.
Библиотеки для создания бота
Для создания Telegram-ботов на Python существует несколько десятков библиотек. Они различаются популярностью, размером комьюнити и функциональностью. Рассмотрим самые популярные.
1. aiogram
Современная библиотека, набирающая популярность. Работает с асинхронным подходом к выполнению кода. Это позволяет не останавливать работу бота в ожидании ответа пользователя. У aiogram подробная документация и большое русскоязычное комьюнити. В этой и последующих статьях цикла мы будем работать как раз с этой библиотекой.
Одна из первых библиотек для создания ботов. Отличается от aiogram синхронным подходом к работе, то есть при ожидании ответа от пользователя выполнение кода останавливается.
3. TeleBot
Библиотека для создания простых ботов, позволяющая работать с асинхронным и синхронным подходом на выбор. Подходит для небольших проектов. Подробнее можно узнать в документации .
Переходим к созданию Telegram-бота. Потренируемся на простом примере — создадим эхо-бота, который отвечает на сообщения пользователя его же словами.
Для этого нам необходимо:
- установить Python и настроить виртуальное окружение;
- зарегистрировать бота в специальном Telegram-канале @BotFather;
- установить библиотеку aiogram;
- написать код эхо-бота, связав его по API с Telegram.
Устанавливаем Python и создаём виртуальное окружение
На macOS или Linux. Python установлен в эти операционные системы изначально. Чтобы проверить его наличие, откройте терминал и введите команду:
python --version
Если у вас не установлен Python:
Переходите на официальный сайт, скачиваете актуальную версию и устанавливаете её.
Не забудьте поставить галочку add PATH во время установки
После установки и проверки Python требуется установить виртуальное окружение с помощью virtualenv.
Это специальный инструмент, который позволяет изолировать друг от друга проекты в разработке, независимо устанавливая для них библиотеки и пакеты. Удобно, когда вы работаете над разными приложениями одновременно.
virtualenv устанавливается через терминал:
sudo pip3 install virtualenv
После этого необходимо создать директорию для проекта, внутри которой будет работать виртуальное окружение:
Команда mkdir создаст папку cd переведёт нас в неё. Теперь в этой директории будут храниться файлы проекта, связанные с нашим ботом.
Развернём виртуальное окружение внутри папки
virtualenv venv -p python3
Теперь его активируем. Если этого не сделать, то оно не будет работать.
source venv/bin/activate
Шаг 2
Создаём бота
Для создания бота необходимо воспользоваться Telegram и ботом @BotFather. Откройте мессенджер и введите название бота в поисковой строке:
Открываем его, жмём кнопку «Запустить» и вводим команду /newbot:
Теперь напишем название и юзернейм для нашего бота. Назовём его echo_skillbox_bot (теперь это имя занято, так что вам надо будет придумать своё). В ответ придёт наш токен, который мы будем использовать для подключения к API Telegram.
Этот токен мы сохраняем — он потребуется нам в будущем.
Python-telegram-bot примеры. Самый простой бот
Сперва глянем внашего базового пакета, чтобы понять, с чего начинается простенький бот. Следующий код
# -*- coding: utf-8 -*-
from telegram.ext import Updater # пакет называется python-telegram-bot, но Python-
from telegram.ext import CommandHandler # модуль почему-то просто telegram ¯\_(ツ)_/¯
def start(bot, update):
# подробнее об объекте update: https://core.telegram.org/bots/api#update
bot.sendMessage(chat_id=update.message.chat_id, text="Здравствуйте.")
updater = Updater(token='TOKEN') # тут токен, который выдал вам Ботский Отец!
start_handler = CommandHandler('start', start) # этот обработчик реагирует
# только на команду /start
updater.dispatcher.add_handler(start_handler) # регистрируем в госреестре обработчиков
updater.start_polling() # поехали!
/start
) и многозначительно молчит при любых последующих действиях с вашей стороны.Соответственно, если мы захотим повесить обработчики любых текстовых сообщений или любых команд, нам нужно будет написать
from telegram.ext import Filters, MessageHandler
def handle_text(bot, update):
# …
def handle_command(bot, update):
# …
# MessageHandler -- более универсальный обработчик, который берёт на вход фильтр
text_handler = MessageHandler(Filters.text, self.handle_text)
command_handler = MessageHandler(Filters.command, self.handle_command)
# регистрируем свеженькие обработчики в диспетчере
updater.dispatcher.add_handler(text_handler) # без регистрации будет работать,
updater.dispatcher.add_handler(command_handler) # но не больше трёх месяцев (шутка)
yield
.Чат-боты в Telegram на python. част. Callback-кнопки и редактирование сообщений
Прежде, чем мы перейдем к другим кнопкам, давайте познакомимся с функциями редактирования сообщений, коих тоже три:editMessageText
(редактирование текста),editMessageCaption
(редактирование подписи к медиа) иeditMessageReplyMarkup
(редактирование инлайн-клавиатуры). В рамках этого урока рассмотрим только первую функцию, остальные работают аналогично и предлагаются для самостоятельного изучения.
Чтобы отредактировать сообщение, нам надо знать, про какое именно идёт речь. В случае, если оно было отправлено самим ботом, идентификаторами служит связкаchat_id
+message_id
. Но если сообщение было отправлено в инлайн-режиме, то ориентироваться надо по параметруinline_message_id
.
И вот теперь вернемся к нашимбаранамкнопкам. На очереди – Callback . Это, на мой взгляд, самая крутая фича нового обновления. Колбэк-кнопки позволяют выполнять произвольные действия по их нажатию. Всё зависит от того, какие параметры каждая кнопка в себе несёт. Соответственно, все нажатия будут приводить к отправке боту объектаCallbackQuery
, содержащему полеdata
, в котором написана некоторая строка, заложенная в кнопку, а также либо объектMessage
, если сообщение отправлено ботом в обычном режиме, либо полеinline_message_id
, если сообщение отправлено в инлайн-режиме.
Приведу пример, после которого все вопросы должны отпасть: пусть, например, если сообщение отправлено ботом в обычном режиме, то нажатие на кнопку заменит текст сообщения на “Пыщь”, если в инлайн – то “Бдыщь”. При этом в обоих случаях значениеcallback_data
будет равноtest
. Что для этого нужно сделать: во-первых, написать простейший хэндлер для всех входящих сообщений, во-вторых, написать простейший хэндлер для инлайн-сообщений, в-третьих, написать простейший хэндлер для колбэка, который определит, из какого режима пришло сообщение.
Aiogram python. Установка ¶
Для начала давайте создадим каталог для бота, организуем там virtual environment (далее venv) и
установим библиотеку aiogram .
Проверим, что установлен Python версии 3.9 (если вы знаете, что установлен 3.9 и выше, можете пропустить этот раздел):
Теперь создадим файлrequirements.txt
, в котором укажем используемую нами версию aiogram. Также нам понадобится
библиотека python-dotenv для файлов конфигурации.
О версиях aiogram
В этой главе используется aiogram 3.x , перед началом работы рекомендую заглянуть в канал релизов библиотеки и проверить наличие более новой версии. Подойдёт любая более новая, начинающаяся с цифры 3, поскольку aiogram 2.x более рассматриваться не будет и считается устаревшим.
Обратите внимание на префикс "venv" в терминале. Он указывает, что мы находимся в виртуальном окружении с именем "venv".
Проверим, что внутри venv вызов командыpython
указывает на всё тот же Python 3.9:
(venv)
Последней командойdeactivate
мы вышли из venv, чтобы он нам не мешал.
Если для написания ботов вы используете PyCharm, рекомендую также установить сторонний плагин Pydantic для поддержки автодополнения кода в телеграмных объектах.
Установка aiogram для Python
В этой главе мы будем использовать aiogram 3.x, поэтому перед началом работы рекомендуем заглянуть в канал релизов библиотеки и проверить наличие более новой версии. Любая более новая версия, начиная с цифры 3, будет подходящей, поскольку aiogram 2.x более не будет поддерживаться и считается устаревшим.
Если вы используете PyCharm для написания ботов, рекомендуем также установить сторонний плагин Pydantic для поддержки автодополнения кода в телеграмных объектах.
Самообучающийся чат-бот python. Что делают Chatbots?
Современные чат-боты не полагаются исключительно на текст, и часто показывают полезные карточки, изображения, ссылки и формы, предоставляя опыт, подобный приложению.
В зависимости от того, как запрограммированы боты, мы можем разделить их на два варианта: они основаны на правилах (немые боты) и самообучаются (умные боты).
- Чат-боты на основе правил Это множество ботов отвечают на вопросы, основываясь на некоторых простых правилах, по которым они обучаются.
- Самообучающиеся чат-боты : На это разнообразие ботов полагаются Искусственный интеллект (AI) & Машинное обучение (MI) технологии для общения с пользователями.
Самообучающиеся Chatbots далее делятся на Поисковая и генеративная.
На основе поиска
Роботы, основанные на поиске, работают по принципу направленных потоков или графиков. Бот обучен оценивать лучший ответ из конечного набора предопределенных ответов. Ответы здесь вводятся вручную или на основе базы знаний ранее существовавшей информации.
Например. Каковы сроки вашего магазина?
Ответ: С 9 до 17 часов
Эти системы могут быть расширены для интеграции с системами сторонних производителей.
Например. Где мой заказ?
Ответ: Он уже в пути и должен добраться до вас через 10 минут
Боты на основе поиска - это самые распространенные типы чат-ботов, которые вы видите сегодня. Они позволяют разработчикам ботов и UX контролировать опыт и сопоставлять его с ожиданиями наших клиентов. Они работают лучше всего для целенаправленный боты в поддержке клиентов, генерации лидов и обратной связи. Мы можем определить тон бота и спроектировать опыт, учитывая бренд и репутацию клиента.
порождающий
Еще один метод построения чат-ботов - использование генеративной модели. Эти чат-боты не созданы с предопределенными ответами. Вместо этого они обучаются, используя большое количество предыдущих разговоров, на основе которых генерируются ответы для пользователя. Они требуют очень большого количества разговорных данных для обучения.
Генеративные модели хороши для разговорных чат-ботов, с которыми пользователь просто хочет обменяться подшучиванием. Эти модели практически всегда будут готовы для вас. Однако во многих случаях ответы могут быть произвольными и не иметь для вас большого смысла. Чатбот также склонен генерировать ответы с неправильной грамматикой и синтаксисом.
Готовый чат-бот на python. Ша. Пишем основу бота
Создаём папку Bot, в которой потом создаём файл bot.py. Здесь будет код нашего бота.Открываем консоль и переходим в директорию с файлом, устанавливаем python-telegram-bot .
pip install python-telegram-bot --upgrade
Код настроек и импорта
# Настройки
from telegram.ext import Updater, CommandHandler, MessageHandler, Filters
updater = Updater(token='ВАШ API КЛЮЧ') # Токен API к Telegram
dispatcher = updater.dispatcher