Статьи

Документація Telegram: Bot API: запитання й відповіді

  1. Увага! Якщо ви не знайомі з ботами в Telegram, рекомендується спочатку прочитати ознайомчу статтю...
  2. Як я можу створити бота?
  3. Можна подивитися приклади коду?
  4. Додайте в ботів X!
  5. Які повідомлення може отримувати мій бот?
  6. Чому мій бот не бачить повідомлень від інших ботів?
  7. отримання оновлень
  8. важливо:
  9. Порада:
  10. Опитування завжди видає один і той же результат
  11. Проблема з вебхукамі
  12. Проблема з самозаверенним сертифікатом
  13. Як мені переконатися, що запити йдуть з серверів Telegram?
  14. Як робити запити в HTTP-відповідях до оновлень?
  15. Обробка медіафайлів
  16. Як закачати великий файл?
  17. Як довго зберігається file_id у файлів?
  18. Масове розсилання
  19. Як отримати список всіх передплатників мого бота?
Увага!

Якщо ви не знайомі з ботами в Telegram, рекомендується спочатку прочитати ознайомчу статтю .
Також, можливо, вас зацікавить опис Bot API .

Загальні питання
отримання оновлень
Обробка фото і відео
Масове розсилання

Загальні питання

Як я можу створити бота?

Створення бота для Telegram вкрай просте, однак, вам знадобиться певний досвід в програмуванні. Для роботи вашого бота вам необхідно здійснити первинне налаштування через робота & Commat; BotFather , А потім підключити його до вашого сервера через API .

На жаль, будь-якого способу створити бота без програмування не існує. Тому, якщо ви не розробник, краще пошукайте собі готового бота або замовте його розробку.

Можна подивитися приклади коду?

Ось два бота-зразка, написаних на PHP:

  • Hello Bot : Демонстрація основних можливостей Bot API.
  • Simple Poll bot : Більш складний бот, що підтримує обидва способи отримання оновлень (long-polling і вебхукі).

Багато розробники створюють своїх ботів з відкритим вихідним кодом.
Ми збираємо їх на спеціальній сторінці »

Додайте в ботів X!

API ботів - досить молодий проект. Є ще маса можливостей, які вже розглядаються до реалізації. Поки що адміністрація Telegram спостерігає за тим, як користувачі використовують своїх ботів, щоб зрозуміти, в якому напрямку необхідно розвивати платформу.

Якщо у вас є думки з цього приводу, ви можете висловити їх користувачеві & commat; BotSupport (англійською).

Які повідомлення може отримувати мій бот?

При створенні бота у нього автоматично включається режим приватності, який впливає на отримання повідомлень в групах. Це означає, що ваш бот буде отримувати повідомлення з груп тільки за таких умов:

  • Повідомлення було відповіддю боту або натисканням на його клавіатуру;
  • У повідомленні є @ згадка бота по його імені користувача;
  • У повідомленні міститься загальна команда (напр., / Start) або команда, що служить вашому боту (напр., / Start @ YourBot);
  • Повідомлення є службовим (про зміну назви групи, вихід будь-кого з чату, і т. Д.).

При виключенні режиму приватності, ваш бот буде отримувати всі повідомлення з груп, за винятком:

  • Повідомлень від інших ботів;
  • Команд для інших ботів (напр., / Start @ NotYourBot);
  • Відповідей на повідомлення від інших ботів за винятком випадків, коли в повідомленні міститься @ згадка вашого бота.

Чому мій бот не бачить повідомлень від інших ботів?

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

отримання оновлень

Як можна отримувати оновлення?

На поточний момент є два способи. Ви можете використовувати або long polling , або вебхукі . Зверніть увагу: якщо ви використовуєте вебхукі, метод getUpdates працювати не буде.

Принципова відмінність: при long polling вашому додатку самому потрібно запитувати поновлення у API, а використовуючи вебхукі - сервера Telegram відправлятимуть на ваш сервер кожне оновлення за допомогою HTTPS POST-запиту.

важливо:

Вебхукі можуть працювати тільки через HTTPS, допустимо використання самозаверенного сертифіката. Доступні порти: 443, 80, 88, 8443.

Порада:

У «бойових» умовах рекомендується використовувати вебхукі через більшої надійності.

Опитування завжди видає один і той же результат

метод getUpdates видає 100 останніх непідтверджених оновлень. Щоб підтвердити оновлення, використовуйте параметр offset при виклику getUpdates ось так:

offset = update_id останнього обробленого поновлення + 1

Всі оновлення з update_id меншим або рівним offset будуть відзначені як підтверджені і не будуть більше повертатися сервером.

Проблема з вебхукамі

Якщо ви успішно задали адресу вебхука, але не отримуєте оновлень, переконайтеся, що:

  • SSL-сертифікат вашого вебхука валиден і коректний.
  • При використанні самозаверенного сертифіката, ви передаєте його публічний ключ в поле certificate методу setWebhook . Необхідно завантажувати InputFile, відправка рядки не спрацює.
  • Ваш вебхук працює на одному з допустимих портів: 443, 80, 88 або 8443.

Проблема з самозаверенним сертифікатом

ознайомтеся з інструкцією по створенню сертифікатів . Якщо після прочитання у вас залишилися питання, напишіть користувачеві & Commat; botsupport .

Як мені переконатися, що запити йдуть з серверів Telegram?

Для цього включіть ваш токен на адресу вебхука, приблизно так:

https://example.com/your_token

Так як ніхто сторонній не знає вашого токена, запити на цю адресу зможуть відсилати тільки сервера Telegram.

Як робити запити в HTTP-відповідях до оновлень?

Це можливо при використанні вебхуков. Перевагою є скорочення числа запитів, недоліком - неможливість отримання результату запиту і його статусу.

Всякий раз при отриманні поновлення на вебхук, у вас є два варіанти:

1. Відправити POST-запит до https://api.telegram.org/bot<token>/МЕТОД

org/bot<token>/МЕТОД

2. Відповісти безпосередньо, вказавши метод у вигляді JSON в HTTP-відповіді:

Відповісти безпосередньо, вказавши метод у вигляді JSON в HTTP-відповіді:

Приклад реалізації цієї можливості на PHP можна подивитися тут:
https://github.com/telegram-cis/hello-bot .

Обробка медіафайлів

Як завантажувати файли?

Для цього використовуйте метод getFile .

Цей метод працює тільки для файлів об'ємом до 20 МБ.

Як закачати великий файл?

На поточний момент боти можуть відправляти файли об'ємом до 50 МБ, так що великі файли відправити не вийде. Можливо, це обмеження буде знято в майбутньому.

Як довго зберігається file_id у файлів?

file_id у відправлених вашим ботом файлів будуть видалені після відправлення кількох тисяч файлів.

Для прийнятих файлів file_id можна вважати вічним і незмінним.

Масове розсилання

Який ліміт повідомлень в секунду?

При роботі з окремим чатом, уникайте відправки більше 1 повідомлення в секунду. Звичайно, допустимі невеликі піки, але з часом ви почнете отримувати помилку 429.

При розсилці повідомлень декільком користувачам, API не дозволить відправляти більше 30 повідомлень в секунду. Для подолання цього ліміту вам необхідно розбити відправку на частини з великим інтервалом між собою (близько 8-12 годин).

При роботі з групою обмеження встановлено на 20 повідомлень за хвилину.

Як отримати список всіх передплатників мого бота?

На жаль, поки зробити це вбудованими методами не можна. Можливо, в майбутньому будуть додані пару рядків для управління передплатниками.

Щоб максимально ефективно розсилати повідомлення, вам необхідно розбивати відправку на кілька частин з інтервалом в 8-12 годин. Також неприпустимо відправлення більше 30 повідомлень різним користувачам в секунду - інакше ви будете отримувати помилку 429.

Див. також: Який ліміт повідомлень в секунду?

Коментарі

Як я можу створити бота?
Можна подивитися приклади коду?
Які повідомлення може отримувати мій бот?
Чому мій бот не бачить повідомлень від інших ботів?
Як робити запити в HTTP-відповідях до оновлень?
Як довго зберігається file_id у файлів?
Можна подивитися приклади коду?
Які повідомлення може отримувати мій бот?
Чому мій бот не бачить повідомлень від інших ботів?
Як мені переконатися, що запити йдуть з серверів Telegram?

Новости