Как перенести бота на pyTelegramBotAPI в MAX

Перенос по библиотекам2 мин чтения

pyTelegramBotAPI, он же telebot, — простая библиотека для ботов на Python с декораторами @bot.message_handler. Адрес API в ней задаётся глобальной настройкой apihelper.

Коротко: замените адрес api.telegram.org на api.bothop.ru. Токен, хендлеры и база остаются прежними, а бот начинает работать в MAX.

Что поменять в коде pyTelegramBotAPI

До создания TeleBot, в самом начале файла с ботом. Зачёркнутая строка — как было, подсвеченная — как станет.

import telebot
Стало: from telebot import apihelper 
Стало: apihelper.API_URL = "https://api.bothop.ru/bot{0}/{1}"Стало: apihelper.FILE_URL = "https://api.bothop.ru/file/bot{0}/{1}"bot = telebot.TeleBot(TOKEN)

Если библиотека ещё не установлена: pip install pyTelegramBotAPI.

Long polling и вебхук

bot.infinity_polling() работает как раньше.

Если бот на вебхуке через bot.set_webhook(url), адрес вебхука останется вашим, а шлюз будет присылать на него события из MAX.

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

Файлы

Для асинхронной версии AsyncTeleBot поменяйте те же адреса в telebot.asyncio_helper.

Что заработает сразу

  • Текст с форматированием, ответы, пересылка, правка и удаление сообщений
  • Inline-кнопки с callback и ссылками, всплывающие уведомления после нажатия
  • Фото, видео, аудио, документы, альбомы, контакты и геоточки
  • Команды /start с меткой из ссылки и меню команд
  • Группы и каналы: участники, администраторы, события входа и выхода

Чего нет в MAX и что сделает шлюз

В TelegramЧто сделает шлюзКак
Клавиатура под полем вводаПокажет те же кнопки под сообщением. Нажатие отправит боту тот же текст, как в TelegramАналог
ОпросыСоберёт опрос на кнопках, сам посчитает голоса и обновит результатАналог
GIF, голосовые, кружкиОтправит как видео и аудиоАналог
Спойлеры и свои эмодзиПокажет как обычный текстАналог
Реакции и кубикПропустит. Бот получит ok: true и не упадётПропуск
Стикеры из TelegramПропустит или заменит на эмодзи, который вы выберетеПропуск
Темы в группахОтправит сообщение в общий чатПропуск
Inline-режим, игры, звёздыВернёт понятную ошибку в формате TelegramОшибка
ПлатежиПеределаем на оплату по ссылке через вашу платёжную систему, например ЮKassa или CloudPaymentsПод ключ
Мини-приложенияКнопка откроет приложение. Само приложение адаптируем под MAXПод ключ

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

  1. Создайте бота в кабинете «MAX для бизнеса» и получите токен.
  2. Добавьте токен в кабинет BotHop: он выдаст токен в формате Telegram.
  3. Поменяйте адрес API в коде pyTelegramBotAPI, как в примере выше, и перезапустите бота.
  4. Напишите боту в MAX /start и пройдите основные сценарии.

Нет своего разработчика? Перенесём бота сами за 4 990 ₽: напишите в Telegram @svintsovyan.

Частые вопросы

Чем это отличается от telebot-maxapi-adapter?

Адаптер работает только с AsyncTeleBot и не поддерживает часть возможностей. Шлюз не трогает код и работает с любой версией библиотеки.

Работает ли `register_next_step_handler`?

Да. Это логика вашего бота, она не зависит от мессенджера.

Как быть с `reply_markup=ReplyKeyboardMarkup`?

В MAX нет клавиатуры под полем ввода. Шлюз покажет те же кнопки под сообщением, и нажатие отправит боту тот же текст.