Подключение библиотек
Любая библиотека для Telegram Bot API, которая позволяет задать адрес сервера, работает со StaticGram. Меняется только base URL: https://api.staticgram.top.
aiogram 3
Адрес задаётся через TelegramAPIServer в сессии бота. Метод from_base сам построит пути для методов и для скачивания файлов.
import asyncio
from aiogram import Bot, Dispatcher, F
from aiogram.client.session.aiohttp import AiohttpSession
from aiogram.client.telegram import TelegramAPIServer
from aiogram.types import Message
TOKEN = "1234567890:AAH..."
session = AiohttpSession(api=TelegramAPIServer.from_base("https://api.staticgram.top"))
bot = Bot(TOKEN, session=session)
dp = Dispatcher()
@dp.message(F.text)
async def echo(message: Message):
await message.answer(f"Вы написали: {message.text}")
async def main():
await dp.start_polling(bot)
asyncio.run(main())python-telegram-bot
Используйте base_url и base_file_url в билдере приложения (v20+). Токен библиотека добавит сама.
from telegram import Update
from telegram.ext import Application, ContextTypes, MessageHandler, filters
app = (
Application.builder()
.token("1234567890:AAH...")
.base_url("https://api.staticgram.top/bot")
.base_file_url("https://api.staticgram.top/file/bot")
.build()
)
async def echo(update: Update, context: ContextTypes.DEFAULT_TYPE):
await update.message.reply_text(update.message.text)
app.add_handler(MessageHandler(filters.TEXT, echo))
app.run_polling()telegraf
import { Telegraf } from "telegraf";
const bot = new Telegraf(process.env.BOT_TOKEN, {
telegram: { apiRoot: "https://api.staticgram.top" },
});
bot.on("text", (ctx) => ctx.reply(`Вы написали: ${ctx.message.text}`));
bot.launch();grammY
import { Bot } from "grammy";
const bot = new Bot(process.env.BOT_TOKEN, {
client: { apiRoot: "https://api.staticgram.top" },
});
bot.on("message:text", (ctx) => ctx.reply(`Вы написали: ${ctx.message.text}`));
bot.start();Чистый HTTP
Библиотека не обязательна: любой HTTP-клиент подойдёт.
curl "https://api.staticgram.top/bot$TOKEN/sendMessage" \
-d chat_id=123456789 \
--data-urlencode "text=Привет из StaticGram"import requests
API = "https://api.staticgram.top/bot" + TOKEN
r = requests.post(f"{API}/sendMessage", json={"chat_id": 123456789, "text": "Привет"})
print(r.json())const API = `https://api.staticgram.top/bot${process.env.BOT_TOKEN}`;
const res = await fetch(`${API}/sendMessage`, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ chat_id: 123456789, text: "Привет" }),
});
console.log(await res.json());Загрузка файлов
Файлы передаются как в Telegram: новым файлом через multipart/form-data, по file_id уже загруженного на сервер StaticGram файла или по HTTPS-ссылке. Внутри sendMediaGroup и InputMedia поддерживается attach://<name>. Подробно: Sending files.
curl "https://api.staticgram.top/bot$TOKEN/sendPhoto" \
-F chat_id=123456789 \
-F photo=@cat.jpg \
-F caption="Кот"Идентификаторы файлов привязаны к серверу. file_id, полученные от api.telegram.org, в StaticGram недействительны: загрузите файл заново.