Bot API: часто задаваемые вопросы
Если вы незнакомы с ботами в Telegram, рекомендуется сначала прочитать ознакомительную статью.
Также, возможно, вас заинтересует описание Bot API.
Общие вопросы
Как я могу создать бота?
Создание бота для Telegram крайне простое, однако, вам понадобится кое-какой опыт в программировании. Для работы вашего бота вам необходимо осуществить первоначальную настройку через бота @BotFather, а затем подключить его к вашему серверу через API.
К сожалению, какого-либо способа создать бота без программирования не существует. Поэтому, если вы не разработчик, лучше поищите себе готового бота или закажите его разработку.
Можно посмотреть примеры кода?
Вот два бота-образца, написанных на PHP:
- Hello Bot: демонстрация основных возможностей Bot API.
- Simple Poll bot: более сложный бот, поддерживающий оба способа получения обновлений (long-polling и вебхуки).
Примечание
Многие разработчики создают своих ботов с открытым исходным кодом. Мы собираем их на специальной странице.
Добавьте в ботов фичу X!
API ботов — весьма молодой проект. Есть ещё масса возможностей, которые уже рассматриваются к реализации. Пока что администрация Telegram наблюдает за тем, как пользователи используют своих ботов, чтобы понять, в каком направлении необходимо развивать платформу.
Если у вас есть мысли по этому поводу, вы можете высказать их пользователю @BotSupport (на английском).
Какие сообщения может получать мой бот?
При создании бота у него автоматически включается режим приватности, который влияет на получения сообщений в группах. Это значит, что ваш бот будет получать сообщения из групп только при следующих условиях:
- Сообщение было ответом боту или нажатием на его клавиатуру
- В сообщении есть @упоминание бота по его имени пользователя
- В сообщении содержится общая команда (напр., /start ) или команда, предназначающаяся вашему боту (напр., /start@YourBot )
- Сообщение является служебным (о смене названия группы, выходе кого-либо из чата, и т. д.)
При выключении режима приватности, ваш бот будет получать все сообщения из групп, за исключением:
- Сообщений от других ботов
- Команд для других ботов (напр., /start@NotYourBot )
- Ответов на сообщения от других ботов, за исключением случаев, когда в сообщении содержится @упоминание вашего бота.
Почему мой бот не видит сообщений от других ботов?
Диалог двух ботов может привести к нежелательным бесконечным циклам, когда боты отвечают друг другу по кругу. Поэтому было принято решение не давать ботам возможности видеть сообщения от других ботов.
Получение обновлений
Как можно получать обновления?
На текущий момент доступно два способа. Вы можете использовать либо опрос, либо вебхуки. Обратите внимание: если вы используете вебхуки, метод getUpdates работать не будет.
Принципиальное отличие: при опросе вашему приложению самому нужно запрашивать обновления у 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.
У меня проблема с самозаверенным сертификатом
Ознакомьтесь с инструкцией по созданию сертификатов. Если после прочтения у вас остались вопросы, напишите пользователю @BotSupport.
Как мне убедиться, что запросы идут с серверов Telegram?
Для этого включите ваш токен в адрес вебхука, примерно так:
https://example.com/your_token
Так как никто посторонний не знает вашего токена, запросы на этот адрес смогут отсылать только сервера Telegram.
Как делать запросы в HTTP-ответах к обновлениям?
Это возможно при использовании вебхуков. Преимуществом является сокращение числа запросов, недостатком — невозможность получения результата запроса и его статуса.
Всякий раз при получении обновления на вебхук, у вас есть два варианта:

2. Ответить напрямую, указав метод в виде JSON в HTTP-ответе:

Примечание
Пример реализации этой возможности на PHP можно посмотреть в коде HelloBot.
Обработка медиафайлов
Как скачивать файлы?
Для этого используйте метод getFile .
Предупреждение
Этот метод работает только для файлов объёмом до 20 МБ.
Как закачать большой файл?
На текущий момент боты могут отправлять файлы объёмом до 50 МБ, так что крупные файлы отправить не получится. Возможно, это ограничение будет снято в будущем.
Как долго хранится file_id у файлов?
file_id у отправленных вашим ботом файлов будут удалены после отправления нескольких тысяч файлов.
Для принятых файлов file_id можно считать вечным и неизменным.
Массовая рассылка
Каков лимит сообщений в секунду?
При работе с отдельным чатом, избегайте отправки более 1 сообщения в секунду. Конечно, допустимы небольшие пики, но со временем вы начнёте получать ошибку 429.
При рассылке уведомлений нескольким пользователям, API не позволит отправлять более 30 сообщений в секунду. Для преодоления этого лимита вам необходимо разбить отправку на части с большим интервалом между собой (около 8-12 часов).
При работе с группой ограничение установлено на 20 сообщений в минуту.
Как получить список всех подписчиков моего бота?
К сожалению, пока сделать это встроенными методами нельзя. Возможно, в будущем будут добавлены пару строк для управления подписчиками.
Чтобы максимально эффективно рассылать сообщения, вам необходимо разбивать отправку на несколько частей с интервалом в 8-12 часов. Также недопустимо отправление более 30 сообщений разным пользователям в секунду — иначе вы будете получать ошибку 429.
Сайт про Telegram на русском (неофициальный).
Здесь собраны приложения на базе MTProto, переведена некоторая документация с официального сайта, а также работает Webogram.
Как управлять чат-ботами

В этом разделе вы можете управлять чат-ботами: отвязывать страницы, аккаунт канала, обновлять права доступа. А также добавлять новые страницы к подключенному аккаунту или новый аккаунт вместо отвязанного.
Содержание
Перейдите на вкладку «Чат-боты» > «Главная» и нажмите на кнопку «Управление ботами».

Как добавить новый аккаунт или страницу
В этом разделе вы можете подключить чат-бот на дополнительную страницу канала Facebook или подключить чат-бот других каналов.
- Как создать чат-бота и подключить его к Facebook странице;
- Как создать Instagram чат-бота;
- Как создать и подключить Telegram чат-бота;
- Как создать WhatsApp чат-бота.
Как обновить права доступа в Facebook
Если отображаются не все ваши страницы или вы изменяли настройки в аккаунте социальной сети, вам понадобится обновить права перед добавлением новой страницы.
Внизу секции чат-ботов Facebook нажмите «Обновить права доступа».

Авторизуйтесь в аккаунте, который был подключен. Нажмите «Изменить настройки» и выберите cтраницу. Нажмите «Далее».

Выберите какие разрешения давать приложению SendPulse. Нажмите «Готово».

Просмотреть права доступа можно будет также на странице интеграций аккаунта Facebook.
Как отвязать страницу сообщества Facebook
Выберите подключенную страницу. Справа вы увидите выпадающее меню. Выберите опцию «Отвязать».
Обратите внимание: если вы отвяжете страницу сообщества, приветственные и триггерные авторассылки остановятся.
Подписчики продолжат добавляться к вам на страницу через установленный виджет, если вы его не удаляли.
При повторном подключении страницы все настройки и созданные цепочки восстановятся, если вы не отвязывали свой аккаунт ранее. Список подписчиков бота также будет обновлен, включая новых подписчиков.

Появится дополнительное окно, нажмите «Отвязать» еще раз для подтверждения действия.

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

Появится дополнительное окно, нажмите «Отвязать» еще раз для подтверждения действия.

Как обновить права доступа Telegram
Перейдите в раздел «Чат-боты» > «Управление ботами». В списке подключенных ботов найдите нужный чат-бот. В выпадающем списке выберите «Обновить права доступа».

Разрешите сайту открыть приложение Telegram, если нужно.

В открывшемся приложении запустите чат-бота.

После того как права доступа обновлятся, вас перенаправит на страницу управления ботом.
Как отключить и удалить чат-бот Telegram
Перейдите в раздел «Чат-боты» > «Управление ботами». В списке подключенных ботов найдите нужный чат-бот. В выпадающем списке выберите «Отвязать».
Обратите внимание, что все виджеты связанные с ботом будут неактивны, а авторассылки остановлены.

Чтобы удалить чат-бот в выпадающем списке выберите «Удалить».
Обратите внимание, что удаление чат-бота приведет к удалению всех настроек, виджетов и цепочек для данного бота.
Как обновить права доступа Instagram
Перейдите в раздел «Чат-боты» > «Управление ботами». В списке подключенных ботов найдите нужный чат-бот. В выпадающем списке выберите «Обновить права доступа».

Нажмите «Продолжить как …» или войдите в другой аккаунт Facebook, с которым у вас связан чат-бот Instagram.

После того как права доступа обновлятся, вас перенаправит на страницу управления ботом.
Как отключить и удалить чат-бот Instagram
Перейдите в раздел «Чат-боты» > «Управление ботами». В списке подключенных ботов найдите нужный чат-бот. В выпадающем списке выберите «Отвязать».
Обратите внимание, что все виджеты связанные с ботом будут неактивны, а авторассылки остановлены.

Чтобы удалить чат-бот в выпадающем списке выберите «Удалить».
Обратите внимание, что удаление чат-бота приведет к удалению всех настроек, виджетов и цепочек для данного бота.
Как удалить WhatsApp бот
Перейдите в раздел «Чат-боты» и выберите ваш бот. Откройте «Настройки бота» и перейдите во вкладку «Общее». Прокрутите вниз страницы и нажмите «Удалить бота».

Подтвердите удаление, поставив галочку напротив «Да, я уверен» и нажмите «Удалить бота».
Обратите внимание, что удаление чат-бота приведет к удалению всех настроек, виджетов и цепочек для данного бота.
Запуск множества телеграм ботов, с возможностью обновления
Я использую модуль python-telegram-bot. Суть в том, что нужно запустить очень много ботов, при этом, с возможностью запустить нового бота, или удалить старого. Простенький пример кода:
from telegram.ext import Updater # будем считать, что это обращение к БД из которой вытаскиваем список токенов tokens = get_tokens() # перебираем токены for token in tokens: # инициализируем текущего бота updater = Updater( token=token ) # запускает пулллинг updater.start_polling()
Таким образом, получается запустить кучку ботов, однако, возникает вопрос: А как их обновлять без полного перезапуска? Абстрактно представляю, что нужно сделать, но не представляю как, особенно в текущем контексте( Кто-то уже делал нечто подобное? Хотелось бы увидеть пример.
Отслеживать
задан 23 мая 2020 в 1:46
3 3 3 бронзовых знака
Поясните, что значит «обновлять без перезапуска»?
23 мая 2020 в 2:18
@RomanKonoval. Имеется в виду, инициализация нового бота, или удаление какого-нибудь существующего, делая всё это на лету, не затрагивая соседних ботов. В текущем примере, чтобы запустились новые боты, необходимо останавливать скрипт и запускать повторно.
23 мая 2020 в 2:38
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Чтобы запустить бота, нужно создать новый объект Updater и вызвать у него метод start_polling . Чтобы остановить бота нужно у объекта Updater вызвать метод stop .
Программа при старте читает список ботов из базы даных и запускает их. Далее, пока пользователь не остановит программу, она должна быть запущена, т.е. ждать сигнала окончания программы.
Нужен какой-то способ сообщать программе, чтобы она запустила нового бота или остановила уже запущенного. Для этого, во-первых, нужно как-то идентифицировать ботов, т.е. для запущеного бота хранить его идентификатор или имя, чтобы можно было на него ссылаться. Во-вторых, нужно хранить все созданные объекты Updater , чтобы их использовать для остановки бота.
Вот схема как это можно сделать:
# bot_infos это список объектов каждый из которых описывает бота # и содержит как минимум token i id бота bot_infos = get_bots_infos_from_db() # тут храним все объекты Updater. ключом служит id бота updaters = <> for bot_info in bot_infos: # инициализируем текущего бота updater = Updater( token=bot_info.token ) # запускает пулллинг updater.start_polling() updaters[bot_info.id] = updater while(True): # command это объект который содержит тип команды и ее параметры # например, для команды new_bot параметры - идентификатор и токен command = read_command_from_console() if (command.type == 'quit'): break if (command.type == 'new_bot'): add_new_bot_to_db(command.params['id'], command.params['token']) updater = Updater(token=command.params['token'])) updater.start_polling() updaters[command.params['id'] = updater if (command.type == 'stop_bot'): updater = updaters[command.params['id']] updater.stop()
Как обновить Телеграм-бота на Heroku?

Эмм.
01. Перейти на dashboard.heroku.com/apps
02. Выбрать вашего бота
03. Далее Deploy
04. Пролистать вниз и
05. Нажать на Deploy Branch
Если чуть выше нажать на Enable Automatic Deploys, то при каждом обновлении бота на гитхабе heroku будет сам разворачивать новую версию у себя.
Ответ написан более трёх лет назад