Тема
Are you an LLM? You can read better optimized documentation at /guide\connect.md for this page in Markdown format
Замена адреса API в коде бота
Чтобы MaxBotStat начал собирать аналитику и работать как зеркало API, в коде вашего бота достаточно поменять один параметр — базовый адрес API.
| Платформа | Было | Стало |
|---|---|---|
| Telegram | https://api.telegram.org | https://api-tg.app.maxbotstat.ru |
| Max | https://platform-api.max.ru | https://api-max.app.maxbotstat.ru |
Все методы остаются прежними — getMe, sendMessage, getUpdates, setWebhook и так далее. Меняется только домен. Ниже — примеры на популярных библиотеках.
Telegraf
Telegraf — самая популярная Telegram-библиотека для Node.js. Параметр называется apiRoot:
js
import { Telegraf } from 'telegraf'
const bot = new Telegraf(process.env.BOT_TOKEN, {
telegram: { apiRoot: 'https://api-tg.app.maxbotstat.ru' },
})
bot.start((ctx) => ctx.reply('Привет!'))
bot.launch()grammy
grammY — современная Telegram-библиотека для Node.js и Deno. Параметр называется apiRoot:
ts
import { Bot } from 'grammy'
const bot = new Bot(process.env.BOT_TOKEN!, {
client: { apiRoot: 'https://api-tg.app.maxbotstat.ru' },
})
bot.command('start', (ctx) => ctx.reply('Привет!'))
bot.start()node-telegram-bot-api
node-telegram-bot-api — старейшая библиотека для Node.js. Параметр называется baseApiUrl:
js
import TelegramBot from 'node-telegram-bot-api'
const bot = new TelegramBot(process.env.BOT_TOKEN, {
polling: true,
baseApiUrl: 'https://api-tg.app.maxbotstat.ru',
})
bot.onText(/\/start/, (msg) => {
bot.sendMessage(msg.chat.id, 'Привет!')
})python-telegram-bot
python-telegram-bot — официальная и самая распространённая библиотека для Python. Параметр называется base_url:
python
from telegram.ext import Application, CommandHandler
async def start(update, context):
await update.message.reply_text("Привет!")
app = (
Application.builder()
.token(os.environ["BOT_TOKEN"])
.base_url("https://api-tg.app.maxbotstat.ru/bot")
.base_file_url("https://api-tg.app.maxbotstat.ru/file/bot")
.build()
)
app.add_handler(CommandHandler("start", start))
app.run_polling()Хвостик /bot обязателен
Здесь библиотека сама добавляет токен и метод после префикса, поэтому в base_url нужно передавать адрес с суффиксом /bot (а в base_file_url — с /file/bot).
aiogram
aiogram — асинхронная Telegram-библиотека для Python. Адрес задаётся через объект TelegramAPIServer:
python
import asyncio
from aiogram import Bot, Dispatcher, types
from aiogram.client.session.aiohttp import AiohttpSession
from aiogram.client.telegram import TelegramAPIServer
API_BASE = "https://api-tg.app.maxbotstat.ru"
session = AiohttpSession(api=TelegramAPIServer.from_base(API_BASE))
bot = Bot(token=os.environ["BOT_TOKEN"], session=session)
dp = Dispatcher()
@dp.message()
async def echo(message: types.Message):
await message.answer("Привет!")
asyncio.run(dp.start_polling(bot))pyTelegramBotAPI (telebot)
pyTelegramBotAPI — простая синхронная библиотека для Python. Адрес задаётся через apihelper.API_URL:
python
import telebot
from telebot import apihelper
apihelper.API_URL = "https://api-tg.app.maxbotstat.ru/bot{0}/{1}"
apihelper.FILE_URL = "https://api-tg.app.maxbotstat.ru/file/bot{0}/{1}"
bot = telebot.TeleBot(os.environ["BOT_TOKEN"])
@bot.message_handler(commands=["start"])
def start(message):
bot.reply_to(message, "Привет!")
bot.infinity_polling()go-telegram-bot-api
Библиотека go-telegram-bot-api для Go. Метод называется SetAPIEndpoint:
go
package main
import (
"log"
"os"
tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5"
)
func main() {
bot, err := tgbotapi.NewBotAPI(os.Getenv("BOT_TOKEN"))
if err != nil { log.Fatal(err) }
bot.SetAPIEndpoint("https://api-tg.app.maxbotstat.ru/bot%s/%s")
upd := tgbotapi.NewUpdate(0)
upd.Timeout = 60
for u := range bot.GetUpdatesChan(upd) {
if u.Message != nil {
msg := tgbotapi.NewMessage(u.Message.Chat.ID, "Привет!")
bot.Send(msg)
}
}
}telebot.v3 (Go, gopkg.in/telebot.v3)
go
package main
import (
"os"
tele "gopkg.in/telebot.v3"
)
func main() {
bot, _ := tele.NewBot(tele.Settings{
Token: os.Getenv("BOT_TOKEN"),
URL: "https://api-tg.app.maxbotstat.ru",
})
bot.Handle("/start", func(c tele.Context) error {
return c.Send("Привет!")
})
bot.Start()
}PHP — telegram-bot-sdk
telegram-bot-sdk для PHP/Laravel. Параметр в конфиге называется base_bot_url:
php
use Telegram\Bot\Api;
$bot = new Api(getenv('BOT_TOKEN'));
$bot->setBaseBotUrl('https://api-tg.app.maxbotstat.ru/bot');
$bot->sendMessage([
'chat_id' => 123456789,
'text' => 'Привет!',
]);cURL и любой HTTP-клиент
Если используете «голые» HTTP-запросы — просто меняйте домен:
bash
# было
curl "https://api.telegram.org/bot$BOT_TOKEN/getMe"
# стало
curl "https://api-tg.app.maxbotstat.ru/bot$BOT_TOKEN/getMe"То же касается fetch, axios, requests, http.Client, Guzzle и любого другого клиента. Все методы и формат запросов идентичны Telegram Bot API.
Max-боты
Для Max-ботов меняется домен https://platform-api.max.ru на https://api-max.app.maxbotstat.ru:
js
const MAX = 'https://api-max.app.maxbotstat.ru'
const r = await fetch(`${MAX}/messages?chat_id=${chatId}`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': process.env.MAX_TOKEN,
},
body: JSON.stringify({ text: 'Привет!' }),
})Что после замены адреса
Сразу после первой команды от пользователя:
- в кабинете в разделе Контакты появится новый собеседник;
- в Диалогах — лента сообщений;
- если в
/startбыл параметрutm_source— в разделе Источники запишется значение.
Никаких дополнительных шагов не требуется — статистика собирается автоматически с каждого запроса вашего бота.
Безопасность
- Все обращения к нашему домену идут по HTTPS (сертификат Let's Encrypt с автообновлением, TLS 1.2 и 1.3).
- Токен бота никуда не сохраняется — он передаётся в адресе так же, как при прямом обращении к Telegram.
- Тела запросов и ответов не попадают в долгосрочное хранилище: мы извлекаем из них факты для аналитики (контакт, текст, идентификатор сообщения) и забываем тело.
Ограничения
- Размер тела запроса — до 50 МБ (как у Telegram).
- Прокси не повторяет запросы при тайм-ауте — повтор делайте в своём клиенте.
- Все ограничения частоты Telegram (30 запросов в секунду на бота, 1 в секунду в один диалог) сохраняются.
Откатиться
Если нужно временно отключить аналитику и работать напрямую с Telegram — просто верните в коде старый адрес https://api.telegram.org. Бот в кабинете при этом сохранится, новые сообщения перестанут поступать. Когда вернёте наш домен — аналитика возобновится.