Истории успеха наших клиентов — лучшие проекты
Вход/ Регистрация

Как создать и настроить чат-бот в Телеграм

5918
20 минут чтения
Средний рейтинг статьи: 3.2

Чат-боты — это программное обеспечение, которое имитирует общение с пользователями. Сейчас их используют для совершенно любых целей: это может быть простой справочник или сложный сервис с интеграцией в CRM и платежные системы.

Ботов создают для разных мессенджеров. У каждой платформы — свои правила и возможности: где-то нет оплаты, где-то нет гибких клавиатур. В статье говорим о Telegram: он удобен, у него простой API и активная аудитория.

В этой статье мы расскажем:

  • как создать чат бот в Телеграме самостоятельно,
  • когда удобно использовать конструкторы для разработки,
  • как интегрировать чат-бот с внешними сервисами и API,
  • что необходимо для бесперебойной работы бота,
  • основные функции aiogram — популярной библиотеки для разработки чат-ботов на Python.

Создание чат-бота в Телеграме без навыков программирования

Сейчас всё более интенсивно набирают популярность конструкторы — это сервисы, где бота собирают через понятный интерфейс «drag-and-drop». Для работы с ними совсем не нужно знать языки программирования. Можно просто выстраивать логику блоками, как в детской игре. 

Существуют недостатки подобных решений:

  • Ограниченная функциональность. Большинство конструкторов предлагает пользователям лишь часть функционала Telegram API. Например, интеграция со сторонними сервисами через HTTP-запросы есть не у всех. А те, кто имеет такой функционал, предлагают завышенные тарифы.

  • Одинаковые сценарии. Минимальная гибкость конструкторов приводит к тому, что все боты на конструкторе выглядят и работают одинаково.

  • Зависимость от сервиса. Если платформа «ляжет» или внезапно подорожает, придется переносить бота.

Конструкторы весьма удобны для прототипов и простых сценариев — приветственное сообщение, ответ на пару вопросов, сбор контактных данных. Более сложные алгоритмы требуют знания переменных, логики обработки данных и функционала Telegram API. Даже в конструкторе нужно понимать, как обратиться к пользователю по имени, как работают inline-клавиатуры и обработка состояний.

Зачастую бесплатные версии таких сервисов имеют ограничения: добавляют свои рекламные сообщения, запрещают интеграцию с нужными API или накладывают лимиты на количество пользователей. Это снижает лояльность аудитории, а сам чат-бот может остаться неиспользуемым. Платные версии в перспективе обходятся дороже, чем разработка бота с нуля и его размещение на сервере.

Если чат-бот должен решать реальные бизнес-задачи, автоматизировать процессы или работать с базами данных, конструктора зачастую будет недостаточно. В таком случае проще обратиться к разработчику: он сразу заложит гибкую архитектуру, подберет оптимальные технологии и избавит от технических ограничений, которые могут стать проблемой при масштабировании проекта. В качестве технического задания для разработчика можно использовать алгоритм из конструктора, если он уже есть. 

Как создать чат-бота в Телеграме самостоятельно

Теперь обсудим создание чат-бота в Telegram на языке программирования Python. Для работы понадобятся базовые знания о переменных, условных конструкциях, циклах и функциях в Python.

Для разработки чат-ботов чаще всего используют фреймворк — это набор инструментов, библиотек и готовых решений, которые помогают разрабатывать программное обеспечение. Можно использовать чистый Telegram API и реализовывать функционал на HTTP-запросах. Но всё это — тысячи строк кода даже для простых задач.

В статье будем использовать фреймворк aiogram — один из самых популярных фреймворков для разработки чат-ботов в Telegram на Python. 

Шаг первый. Создайте виртуальное окружение проекта 

Использовать виртуальное окружение в любом проекте на Python считается хорошим тоном. К тому же, чат-боты зачастую устанавливаются на облачных серверах, где потребуется установка зависимостей. Удобно экспортировать список зависимостей, принадлежащих конкретному проекту, поможет виртуальное окружение. 

О создании виртуального окружения мы рассказывали в нашей инструкции.

Шаг второй. Установите зависимые библиотеки

Установите саму библиотеку фреймворка через pip:

    

Добавьте библиотеку для работы с переменными окружения. Мы рекомендуем использовать этот способ передачи токенов в любом проекте, даже если вы не планируете выкладывать его в открытый доступ. Это снижает риск случайной публикации конфиденциальных данных.

    

Далее можете установить другие зависимости по необходимости.

Шаг третий. Инициализируйте чат-бота через BotFather

Несложный этап, но зачастую именно он вызывает затруднения. Нам самим нужно обратиться к чат-боту, который создаст и пришлет токен нашего проекта. 

Перейдите в Телеграм в диалог с @BotFather и нажмите кнопку «Начать».

Image7

Бот выдаст приветственное сообщение. Отправьте следующую команду:

    

Бот спросит название будущего бота, которое будет отображаться в списке чатов пользователя. 

Далее нужно ввести имя пользователя (username) бота. Оно должно быть уникальным, чтобы любой пользователь смог найти его в поиске Телеграма. Обратите внимание, что имя пользователя должно оканчиваться на «bot». 

Image4

Всё готово: BotFather создал чат-бота, присвоил ему имя пользователя и токен. 

Внимание! Всегда храните токен в секрете. По нему любой человек сможет писать сообщения от лица вашего чат-бота. Если токен мог быть скомпрометирован, немедленно замените его в BotFather.

Перейдите в чат с только что созданным ботом и нажмите на кнопку «Изм.» (1), чтобы поменять фотографию (2), приветствие (3), описание (4) и предложение команд по умолчанию (5). 

Image9

Далее создайте файл окружение с названием .env (файл не имеет имени, а название содержит только расширение). Добавьте в файл строку в формате:

    

В Linux и MacOS для быстрой записи можно использовать команду:

    

App Platform

Готовое окружение для быстрого деплоя
и тестирования проектов из GitHub, GitLab, Bitbucket
или любого другого git-репозитория.

Шаг четвертый. Создание скрипта

В рабочей директории создайте файл main.py — тут будет вестись основная работа. 

Импортируйте в файл тестовый код, который отправит пользователю приветственное сообщение при получении команды /start.

    

В примере основные компоненты закомментированы — изучите эти краткие пояснения, если не желаете вникать более глубоко. Можно продолжить узнавать функционал библиотеки aiogram, приняв использование Dispatcher, Router как данность. Далее в статье разберем функционал этих компонентов. 

Для начала любого проекта можно использовать эту готовую структуру: по ходу разработки будут добавляться новые обработчики, клавиатуры, состояния. 

Шаг пятый. Запуск и проверка работоспособности

Запустите созданный скрипт:

    

Теперь можно проверить открыть диалог с ботом и начать его:

Image12

Обзор основного функционала фреймворка aiogram версии 3.x

Для создания чат-бота в Телеграм необходимое знание немногих компонентов и функций.

В этом разделе будет использоваться версия aiogram v3.x, выпущенная 1 сентября 2023 года. Подойдет любая версия, начинающаяся с тройки. Проекты с версиями ниже встречаются в работе, но aiogram 2.x считается устаревшим.

Ключевые компоненты aiogram

Bot

Bot — это ваш интерфейс к Telegram API. Через него вы отправляете сообщения, картинки и другие данные пользователям.

    

Токен, разумеется, можно передать напрямую в аргументы класса Bot, без использования переменных окружения. Но мы рекомендуем сразу привыкать к именно такому способу передачи токена бота, во избежание случайного попадания токена в открытый доступ. 

Процесс получения токена описан в третьем шаге предыдущего раздела.

Dispatcher

Dispatcher — «сердце» фреймворка. Он принимает апдейты (входящие сообщения и события) и передает их нужным обработчикам. В v3 используется новая схема с Router (см. ниже), но Dispatcher остается для инициализации и запуска.

    

Router

В aiogram v3 обработчики группируют в Router. Это отдельная сущность, которая хранит логику — хендлеры команд, сообщений, колбэков и т.д.

    

router = Router()

Потом разработчики регистрируют хендлеры внутри роутера и добавляют router в экземпляр Dispatcher:

    

Обзор возможностей фреймворка aiogram v3.x

Знание следующих инструментов и умение их использовать позволит разработчику реализовать большинство алгоритмов чат-ботов. 

Обработка команд

Самый популярный сценарий — реагировать на команды вроде /start или /help.

    

F.text == "/start" — это новый способ фильтрации сообщений через объект F.

message.answer(...) отправляет ответ пользователю.

Обработка обычных сообщений

Для реакции на любое сообщение уберите фильтр или сделайте другой:

    

В этом примере бот возвращает текст, который прислал пользователь.

Inline-кнопки и клавиатуры

    

Когда пользователь нажмет кнопку, бот получит callback_data="press_button" — обработать это можно отдельно:

    

Визуально в чате inline-кнопки выглядят так:

Image6

Обычные кнопки (Reply Keyboard)

Обычные кнопки отличаются от inline-кнопок тем, что появляются вместо клавиатуры. Пользователь видит сразу список готовых вариантов для ответа. Отслеживать такие кнопки надо через текст сообщения, а не через callback_data.

    

Модули filters, middlewares и т.д.

Filters (фильтры) помогают гибко определять, какие сообщения ловить. Например, можно составлять кастомные фильтры.

    

Middlewares (промежуточные слои) вставляются между входящим запросом и хендлером. Можно перехватывать сообщения, редактировать их, проверять права доступа и т.д.

    

Работа с состояниями (FSM)

Aiogram 3 поддерживает машину состояний (Finite State Machine). Это удобно, когда нужно пошагово собирать данные (например, регистрацию пользователя). FSM — это основной инструмент реализации ветвлений. 

Представим, что перед нами стоит задача разработать чат-бот для заказа пиццы. Нам нужно узнать у пользователя размер пиццы и адрес доставки. Сделать это нужно последовательно: нельзя сразу перепрыгнуть на второй шаг без первого. Причем нужно сохранять данные, которые отправляет пользователь, на всех этапах работы с чат-ботом. 

  1. Объявите состояния:

    
  1. Переключайтесь между состояниями:

    

Обратите внимание, как хранится информация в промежуточных состояниях — используется внутреннее хранилище, принадлежащее конкретному пользователю, без использования базы данных. 

Так пользователь идет по цепочке вопросов, а в конце можно отправить информацию о заказе на внутренний API.

Image5

Подбор конфигурации сервера для размещения бота

Мы подготовили таблицу для универсального подбора конфигурации в зависимости от задач чат-бота. Поля в первой колонке кликабельны — там ссылки на создание сервера выбранной конфигурации в панели управления Timeweb Cloud.

Конфигурация

Стоимость облачного сервера + публичный IP

Стоимость размещения через Dockerfile в App Platform от Timeweb Cloud

Задачи

Вывод

1 x 3.3 ГГц • 1 ГБ RAM • 15 ГБ NVMe

300 ₽/мес

188 ₽/мес

Простые текстовые боты, легкие aiogram-боты без БД, inline-кнопки, парсеры по расписанию

Только для самых базовых ботов без лишней нагрузки

1 x 3.3 ГГц • 2 ГБ RAM • 30 ГБ NVMe

550 ₽/мес

355 ₽/мес

Боты с небольшой базой (SQLite, PostgreSQL), API-интеграции, простые аудиоботы, парсеры

Стандартный сервер для небольшого коммерческого бота

2 x 3.3 ГГц • 2 ГБ RAM • 40 ГБ NVMe

850 ₽/мес

555 ₽/мес

Боты с активной БД (PostgreSQL, MySQL), чат-боты с анализом сообщений, легкие торговые боты

Подходит для средних проектов с активной базой данных

2 x 3.3 ГГц • 4 ГБ RAM • 50 ГБ NVMe

1000 ₽/мес

655 ₽/мес

Боты с несколькими модулями, обработка изображений (QR-коды, ресайз), API-серверы с ботами, OpenAI API

Универсальный сервер для большинства ботов

4 x 3.3 ГГц • 8 ГБ RAM • 80 ГБ NVMe

1650 ₽/мес

1100 ₽/мес

Многопользовательские боты (до 10 000+), работа с Telegram API, распознавание аудио, обработка изображений и видео

Оптимально для ботов с высокой нагрузкой

8 x 3.3 ГГц • 12 ГБ RAM • 100 ГБ NVMe

2800 ₽/мес

1833 ₽/мес

Боты с AI-функциями, мультиязычные боты, торговые боты для криптобирж

Для сложных задач, но без GPU

8 x 3.3 ГГц • 16 ГБ RAM • 160 ГБ NVMe

4200 ₽/мес

2777 ₽/мес

AI-боты с ML, мультитрединг с Redis и MongoDB, боты с видеообработкой в реальном времени

Максимальные возможности, но для AI лучше использовать GPU-сервер

Развертывание бота: запуск на сервере

Разберем два основных способа деплоя (развертывания проекта на сервере)

Быстрый способ: Docker + App Platform от Timeweb Cloud

Этот способ не требует никаких знаний системного администрирования, весь деплой производится автоматически. К тому же, этот способ позволяет сэкономить (стоимость минимальной конфигурации — 188 рублей в месяц). Следуйте этим шагам:

  1. Выгрузите все зависимости проекта в файл requirements.txt. Здесь пригождается использование виртуального окружения, чтобы не тянуть библиотеки со всего компьютера. Выполните в Терминале в директории проекта:
    
  1. Добавьте в директорию проекта новый файл для деплоя — Dockerfile. Расширения у файла нет, только имя. Вставьте следующее содержимое:

    
  1. Создайте Git-репозиторий и выложите его на GitHub. Для этого можно воспользоваться минимальным набором команд git из нашей статьи, выполнив эти команды последовательно.
    Не забудьте добавить файл переменных окружения .env в .gitignore — он не должен попасть в общий доступ.

  2. Осталось немного: перейдите в панель управления Timeweb Cloud, выберите таб «App Platform», нажмите кнопку «Добавить» или «Создать». Во вкладке «Тип» перейдите на таб «Dockerfile».

  3. Привяжите свой аккаунт GitHub или подключите Git-репозиторий по URL.

Image1

  1. Выберите репозиторий из списка после того, как привязали свой аккаунт с GitHub.

Image8

  1. Выберите конфигурацию. В App Platform доступна конфигурация CPU 1 x 3.3ГГц, RAM 1Гб, NVMe 15Гб стоимостью 188 рублей в месяц. Она отлично подходит для простых текстовых ботов, проектов с небольшими inline-клавиатурами, базовой FSM-логикой, не требовательными API-запросами, работы с SQLite или легковесными JSON-файлами. Такая конфигурация может обрабатывать до 50-100 пользователей в минуту.

  2. Добавьте токен в переменные окружения. Во вкладке «5. Настройка приложения» нажмите на кнопку «+ Добавить». Ключ — BOT_TOKEN, а в значение вставьте токен, полученный из BotFather.

Image3

  1. Запустите деплой и дождитесь его окончания. После этого бот будет запущен.

Image10

Стандартный способ: Ubuntu + systemd

  1. Выгрузите все зависимости проекта в файл requirements.txt. Выполните следующую команду в Терминале, находясь в директории проекта:

  1. Создайте облачный сервер в панели Timeweb Cloud с нужной конфигурацией и ОС Ubuntu.

  2. Перенесите файлы проекта в директорию на удаленном сервере. Проще всего это сделать с помощью утилиты rsync, если используете Ubuntu / MacOS:

Не забудьте вставить IP сервера и исправить конечную директорию.

Image11

Для пользователей на Windows — используйте отправку файлов через FileZilla. Об этом рассказано в нашей документации

  1. Подключитесь к серверу по SSH. Если возникают сложности, воспользуйтесь информацией из нашей документации по UNIX-системам

  2. Установите пакет для виртуального окружения:

  1. Перейдите в директорию проекта, куда прежде отправили файлы. Создайте виртуальное окружение и выполните установку зависимостей.
    
  1. Проверьте работоспособность бота — запустите его с помощью:

Если всё работает, то переходите к следующему шагу.

  1. Создайте юнит-файл /etc/systemd/system/telegram-bot.service:

Добавьте в файл следующее содержимое содержимое:

    

Измените значения следующих переменных:

  • WorkingDirectory — директория проекта
  • ExecStart — команда для запуска чат-бота в формате <интерпретатор> <полный путь до файла>

При использовании виртуального окружения интерпретатор находится по тому же пути, как в примере. Если работаете без venv, то используйте /usr/local/bin/python3.

  1. Перезапустите systemd и включите службу:

    
  1. Проверьте статус службы и просмотрите логи, при необходимости:

При нормальном запуске в поле «Active» находится значение «active (running)».

Image2

Просмотр логов бота:

    
  1. При необходимости, управляйте службой следующими командами:

    • Перезапуск бота

    • Остановка бота

    • Удаление службы (если нужно)

    

Надежное облако для ваших проектов

Cloud MSK 15

477 ₽/мес

Процессор
1 x 3.3 ГГц
Память
1 ГБ
NVMe
15 ГБ
Канал
1 Гбит/с
Публичный IP
Cloud MSK 30

657 ₽/мес

Процессор
1 x 3.3 ГГц
Память
2 ГБ
NVMe
30 ГБ
Канал
1 Гбит/с
Публичный IP

Заключение

Создание чат-бота в Telegram на Python — задача, которую можно решить даже без опыта в программировании, используя конструкторы. 

Если вам нужна гибкость и более широкие возможности, лучше освоить фреймворк aiogram и развернуть собственный проект. Вы сразу получите контроль над кодом, сможете легко дорабатывать функционал, управлять интеграциями и не зависеть от ограничений платных тарифов. Для запуска бота на продакшене достаточно выбрать подходящую конфигурацию сервера и настроить автоматический деплой. Уделите внимание безопасности: храните токен в переменной окружения и шифруйте важные данные. 

В будущем бота можно масштабировать, добавлять поддержку вебхуков, подключать платёжные системы, системы аналитики и работать с ML-моделями, если потребуются AI-функции.

5918
20 минут чтения
Средний рейтинг статьи: 3.2
Хотите внести свой вклад?
Участвуйте в нашей контент-программе за
вознаграждение или запросите нужную вам инструкцию
img-server