Главная Веб-разработка Telegram Bot API: гайд для разработчиков ботов

Telegram Bot API: гайд для разработчиков ботов

от admin

Управляем телеграм-ботами без сторонних библиотек.

Обычно для разработки телеграм-ботов программисты используют специальные библиотеки и фреймворки, например Aiogram или Telegraf. Они ускоряют разработку и делают код компактным, однако их авторы не всегда успевают вовремя добавлять поддержку новых функций Telegram.

Альтернативное решение — Bot API. Это нативный интерфейс от создателей мессенджера, который лежит в основе всех ботов и библиотек. В этой статье рассказываем, для чего нужен Telegram Bot API и как им пользоваться.

Что такое Telegram Bot API

Чтобы понять, что такое Telegram Bot API, для начала разберёмся с самим понятием API.

Процесс работы с API строится на модели «запрос — ответ». Программист или приложение отправляет запрос на сервер и в ответ получает нужные данные, подтверждение выполнения операции или код ошибки.

Если вы никогда не работали с API и хотите узнать об этом больше, рекомендуем прочитать наше руководство.

Какие API есть в Telegram

Telegram предоставляет разработчикам несколько API для создания приложений, ботов и сторонних сервисов. Все они связаны с мессенджером, но у них разные цели и возможности:

Как создать бота в Telegram

Перед тем как писать код, надо создать бота — зарегистрировать специальный аккаунт и получить уникальный токен для API. Разберём подробно этот процесс.

Создаём бота в BotFather

Для разработчиков в Telegram есть BotFather — «крёстный отец» всех ботов. С его помощью можно зарегистрировать и настроить нового бота. Вот как это сделать:

  • Шаг 1. Запустите Telegram и перейдите в чат BotFather. Будьте внимательны, у официального бота должна быть галочка верификации.

Telegram Bot API: гайд для разработчиков ботов

Официальный бот BotFather в Telegram
Скриншот: BotFather / Telegram

  • Шаг 2. Нажмите кнопку Start, и BotFather пришлёт в ответ список доступных команд.

Telegram Bot API: гайд для разработчиков ботов

Список доступных команд
Скриншот: BotFather / Telegram

  • Шаг 3. Выберите команду /newbot для создания нового бота.
  • Шаг 4. BotFather попросит придумать боту имя, которое пользователи будут видеть в списке чатов. Можно использовать символы любого алфавита, цифры, знаки препинания и эмодзи. Например: Суперполезный бот 3000 🤓.
  • Шаг 5. После этого бот-отец попросит задать username — уникальное имя пользователя, с помощью которого вашего бота можно будет найти в Telegram. В этом случае можно использовать только латиницу, цифры и некоторые разделительные знаки, а на конце обязательно должно быть слово bot. Например: Super3kBot или Super3k_bot.

BotFather проверит доступность юзернейма, и, если он свободен, поздравит с созданием нового бота и пришлёт токен. Это специальный набор букв и цифр, который нужен для связи вашего бота с сервером Telegram. Выглядит он примерно так:

7582552655:AAHmzfaKaoMnajrk47dLS76S2epa127gJ-0

Telegram Bot API: гайд для разработчиков ботов

Сообщение с токеном нового бота
Скриншот: BotFather / Telegram

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

Полезные команды BotFather

С помощью BotFather можно не только создавать новых ботов, но и управлять существующими. Вот какие команды ещё есть:

  • /mybots — показать список всех ботов пользователя;
  • /setname — изменить имя бота;
  • /setdescription — установить описание бота, которое отображается в профиле бота;
  • /setabouttext — заполнить поле «О боте» в профиле;
  • /setuserpic — установить аватарку;
  • /setcommands — настроить список команд;
  • /setinline — включить inline-режим, чтобы ботом можно было пользоваться в любом чате Telegram;
  • /setjoingroups — разрешить боту работать в группах;
  • /deletebot — удалить бота.

Какие есть ограничения у ботов в Telegram

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

Работая над своим проектом, помните, что боты в Telegram не могут:

  • писать первыми — для начала общения пользователь должен нажать кнопку Start;
  • управлять группами, в которые их не добавили администраторы;
  • отправлять более 30 сообщений в секунду всего и более 20 сообщений в минуту в один чат;
  • отправлять файлы размером более 50 МБ.

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

Как взаимодействовать с ботом через Bot API: метод getMe

Для взаимодействия с ботом при помощи Telegram Bot API мы будем отправлять HTTP-запросы на сервер мессенджера. В ответ нам будут приходить данные в формате JSON. Отправлять запросы можно несколькими способами.

C помощью браузера

Самый простой способ отправить запрос — воспользоваться браузером. Вот как это можно сделать:

  • Шаг 1. Откройте любой браузер и введите адрес в формате https://api.telegram.org/bot{ТОКЕН}/{НАЗВАНИЕ-HTTP-МЕТОДА}.
  • Шаг 2. Перейдите по адресу, чтобы получить ответ от сервера.

В качестве примера проверим, работает ли наш бот, и запросим основную информацию о нём. Для этого отправим запрос getMe:

https://api.telegram.org/bot7432444009:AAG62HGsVhddP5kq5Cbdf1ugTcYpTriV1Mg/getMe

Если вы всё сделали правильно, то в окне браузера появится следующий код:

{ “ok”:true, “result”: { “id”:7432444009, “is_bot”:true, “first_name”:”Суперполезный бот 3000 🤓”, “username”:”Super3kBot”, “can_join_groups”:true, “can_read_all_group_messages”:false, “supports_inline_queries”:false, “can_connect_to_business”:false, “has_main_web_app”:false } }

Из него мы можем узнать уникальный идентификатор бота, юзернейм, название и список разрешений — например, можно ли добавить бота в групповой чат и может ли он читать в нём все сообщения.

С помощью Python

Запрос getMe можно отправить с помощью кода на Python и библиотеки Requests. Эта библиотека содержит функции, упрощающие процесс взаимодействия с различными API.

import requests # Создаём переменные, в которых будут храниться токен бота и HTTP-запрос bot_token = “7432444009:AAG62HGsVhddP5kq5Cbdf1ugTcYpTriV1Mg” url = f”https://api.telegram.org/bot{bot_token}/getMe” response = requests.get(url) # Пишем условие для обработки ответа сервера if response.status_code == 200: json_data = response.json() print(“Ответ API:”, json_data) else: print(f”Ошибка: {response.status_code}”)

После запуска кода в терминале IDE появится ответ сервера в виде JSON-файла. Ответ будет содержать всё то же самое, что и при отправке запроса через браузер: имя и идентификатор бота и список разрешений.

Как прочитать сообщения пользователей бота: метод getUpdates

Пользователи могут активировать нашего бота и общаться с ним. Мы же можем получать эти сообщения и обрабатывать на своём сервере. Давайте напишем боту и попробуем прочитать чат с помощью Telegram Bot API.

Telegram Bot API: гайд для разработчиков ботов

Поздороваемся с ботом
Скриншот: Telegram / Skillbox Media

Список сообщений можно получить с помощью HTTP-метода getUpdates. Для этого просто перейдите в браузере по следующему адресу:

https://api.telegram.org/bot7432444009:AAG62HGsVhddP5kq5Cbdf1ugTcYpTriV1Mg/getUpdates

В браузере появится следующий JSON-код:

{ “ok”:true, “result”: { “update_id”:123456789, “message”: { “message_id”:1, “from”: { “id”:123456789, “is_bot”:false, “first_name”:”user”, “username”:”user”, “language_code”:”ru”, “is_premium”:true }, “chat”: { “id”:123456789, “first_name”:”user”, “username”:”user”, “type”:”private” }, “date”:123456789, “text”:”Hello!” } } }

В нём:

  • update_id — уникальный номер обращения к боту;
  • message — большой блок со всеми метаданными сообщения;
  • message_id — ID сообщения в чате;
  • from — блок со всеми данными отправителя, включая ID пользователя, имя, никнейм и сведения о наличии подписки Telegram Premium;
  • chat — блок с информацией о чате, включая ID, никнейм и тип (публичный или приватный);
  • date — дата отправления;
  • text — текст сообщения.
Читать также:
Деление в Python: какие операторы и когда использовать

Также запрос getUpdates можно отправить с помощью Python:

import requests # Токен бота и HTTP-запрос bot_token = “7432444009:AAG62HGsVhddP5kq5Cbdf1ugTcYpTriV1Mg” url = f”https://api.telegram.org/bot{bot_token}/getUpdates” response = requests.get(url) # Обработка ответа сервера if response.status_code == 200: json_data = response.json() print(“Ответ API:”, json_data) else: print(f”Ошибка: {response.status_code}”)

Как отправить сообщение: метод sendMessage

Теперь попробуем ответить на наше же сообщение от имени бота. Для этого воспользуемся методом sendMessage. Он немного сложнее предыдущих и требует передать на вход дополнительные параметры: ID чата и текст сообщения. В общем виде метод выглядит так:

https://api.telegram.org/bot{ТОКЕН}/sendMessage? chat_id={ID-ЧАТА}& text={СООБЩЕНИЕ}

В нём:

  • {ТОКЕН} — токен, который нам выдал BotFather;
  • {ID-ЧАТА} — уникальный номер чата, в который бот отправит сообщение. Этот номер можно посмотреть в поле «chat»: {“id»: 123456789}, выполнив запрос getUpdates;
  • {СООБЩЕНИЕ} — текст сообщения.

Отправим сообщение «Привет!»:

https://api.telegram.org/bot7432444009:AAG62HGsVhddP5kq5Cbdf1ugTcYpTriV1Mg/sendMessage?chat_id=123456789&text=Привет!

Если вы всё сделали правильно, то в чате появится сообщение от имени бота.

Telegram Bot API: гайд для разработчиков ботов

Бот отправил в чат текст, который мы указали в запросе
Скриншот: Telegram / Skillbox Media

С помощью Python запрос sendMessage можно отправить так:

import requests # Токен бота и HTTP-запрос bot_token = “7432444009:AAG62HGsVhddP5kq5Cbdf1ugTcYpTriV1Mg” chat_id = “123456789” message_text = “Привет!” url = f”https://api.telegram.org/bot{bot_token}/sendMessage” # Параметры запроса params = { “chat_id”: chat_id, “text”: message_text } response = requests.get(url, params=params) # Обработка ответа сервера if response.status_code == 200: json_data = response.json() print(“Ответ API:”, json_data) else: print(f”Ошибка: {response.status_code}”)

Как отправить стикер

Для отправки стикеров в Bot API есть метод sendSticker. Чаще всего этот запрос получается довольно длинным из-за объёмного ID стикера, поэтому вместо браузера удобнее использовать Python. В теле запроса надо обязательно передать токен бота, ID чата и стикера.

Как получить первые два параметра, мы уже знаем из примеров выше. Чтобы получить ID стикера, сделайте следующее:

  • Шаг 1. Отправьте в чат с ботом нужный стикер.
  • Шаг 2. Выполните в браузере запрос getUpdates.
  • Шаг 3. В JSON-ответе найдите данные последнего сообщения.
  • Шаг 4. В поле file_id будет ID стикера. Например: «file_id»:”CAACAgIAAxkBAAENhyhn18v1vykSL7iweWj0syat7KNAPwACmEcAAkYhyUrp2ZMtEnJVtTYE».

Код запроса на Python выглядит так:

import requests # Токен бота и HTTP-запрос bot_token = “7432444009:AAG62HGsVhddP5kq5Cbdf1ugTcYpTriV1Mg” chat_id = “123456789” sticker_id = “CAACAgIAAxkBAAENhyhn18v1vykSL7iweWj0syat7KNAPwACmEcAAkYhyUrp2ZMtEnJVtTYE” url = f”https://api.telegram.org/bot{bot_token}/sendSticker” # Параметры запроса params = { “chat_id”: chat_id, “sticker”: sticker_id } response = requests.get(url, params=params) # Обработка ответа сервера if response.status_code == 200: json_data = response.json() print(“Ответ API:”, json_data) else: print(f”Ошибка: {response.status_code}”)

Если запустить код в IDE, то бот пришлёт указанный стикер в чат.

Telegram Bot API: гайд для разработчиков ботов

Бот прислал стикер, ID которого мы указали в коде запроса
Скриншот: Telegram / Skillbox Media

Какие ещё методы есть в Telegram Bot API

Разработчики Telegram включили в Bot API несколько десятков методов. С их помощью можно отправлять обычный текст, стикеры, файлы, фотографии, голосовые сообщения, ставить реакции и управлять групповыми чатами. Например, можно запрограммировать бота для автоматической блокировки спамеров.

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

Вот некоторые из доступных методов в Bot API:

  • forwardMessage — пересылает сообщение пользователя в другой чат;
  • copyMessage — копирует сообщение;
  • sendPhoto — отправляет изображение;
  • sendVoice — отправляет голосовое сообщение;
  • sendPoll — запускает в чате опрос;
  • getUserProfilePhotos — получает аватарку пользователя;
  • banChatMember — блокирует пользователя в групповом чате;
  • createChatInviteLink — создаёт ссылку-приглашение в групповой чат;
  • setChatPhoto — устанавливает аватарку группового чата;
  • setChatTitle — устанавливает название группового чата;
  • getChatAdministrators — получает список администраторов;
  • setMyCommands — метод для замены списка команд бота;
  • setMyName — метод для смены имени бота.

Сочетая методы Bot API можно создавать ботов со сложной логикой. Главное преимущество «чистого» API перед библиотеками в том, что запросы можно отправлять с помощью любого языка программирования или вообще без кода. Это даёт больше преимуществ разработчикам, которые создают ботов на непопулярных языках программирования.

Главный минус работы с Bot API напрямую в том, что каждый раз приходится использовать много кода даже для простых запросов. Кроме того, надо разработать алгоритм, который может быстро получать сообщения из чата с пользователем и анализировать их. Это усложняет процесс создания ботов, поэтому вместо Bot API лучше использовать специальные библиотеки.

Библиотеки для разработки телеграм-ботов

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

Рассмотрим популярные библиотеки для создания телеграм-ботов на разных языках программирования.

Библиотеки для создания ботов на Python

Python — самый популярный язык в сообществе разработчиков ботов. В большинстве гайдов, курсов и уроков именно на нём показывают все примеры кода. Для Python есть следующие библиотеки:

Библиотеки для JavaScript и Node.js

Второй по популярности язык программирования для разработки телеграм-ботов — JavaScript. Для него и платформы Node.js тоже есть много обучающих материалов и библиотек. Ниже список популярных решений:

Библиотеки для других языков программирования

Одно из преимуществ открытого Bot API в том, что сторонние разработчики могут создавать на его базе собственные библиотеки для любых языков программирования. Поддерживают их не так активно, как решения для Python и JavaScript, но базовые функции всегда работают. Ниже список библиотек для разных языков программирования.

Название Язык программирования Ссылка
PHP Telegram Bot PHP GitHub
Telegram Bot Java Library Java GitHub
Telegram.Bot .NET GitHub
Tgbot-cpp C++ GitHub
Kotlin Telegram Bot Kotlin GitHub
Swift Telegram SDK Swift GitHub
Telegram-bot-ruby Ruby GitHub

Что запомнить

  • Telegram Bot API — это набор HTTP-методов, с помощью которых можно отправлять запросы к серверу Telegram, получать ответы в формате JSON и управлять ботами.
  • При использовании Bot API важно учитывать ограничения на количество запросов и соблюдать рекомендации по безопасности, чтобы избежать блокировок бота.
  • Открытый API позволяет сторонним разработчикам использовать любые языки программирования для управления ботами.
  • Работать напрямую с серверами Telegram сложно и не всегда рационально: код получается сложным, запутанным и надо самостоятельно реализовывать многие алгоритмы.
  • В качестве альтернативы можно использовать готовые библиотеки на базе Bot API. Существуют библиотеки для разных языков программирования, но авторы и сообщество активно поддерживают только решения для Python и JavaScript.

Похожие статьи