sendGramInvoiceПоддерживается
Расширение StaticGram (в официальном Bot API его нет). Отправляет счёт в GRAM — внутренней валюте StaticGram: те же параметры, что у sendInvoice, но без currency, prices и provider_token, а цена передаётся одним полем amount в GRAM ("1.5", "0,01", 2.5) или nanoton_amount в нанотонах. Под капотом это обычный счёт sendInvoice с currency "TON": оплата, pre_checkout_query, successful_payment, refundGramPayment и баланс бота работают так же. On success, the sent Message is returned.
Метод StaticGram. Цена: ровно одно из amount (GRAM, строка или число, до 9 знаков после запятой, запятая или точка) и nanoton_amount; от 0.01 до 10000 GRAM. Счёт создаётся с currency "TON": в invoice, pre_checkout_query, successful_payment и refunded_payment приходят currency "TON", total_amount в нанотонах и gram_amount — сумма в GRAM строкой ("1.5"). Ошибки: AMOUNT_INVALID (нет цены, обе цены, не число, больше 9 знаков), AMOUNT_TOO_SMALL, AMOUNT_TOO_LARGE, CURRENCY_INVALID (currency не GRAM/TON), PRICES_INVALID (передан prices или label длиннее 64), PAYMENT_PROVIDER_INVALID (передан provider_token). Возврат — refundGramPayment, баланс — getMyGramBalance, вывод — withdrawGramBalance. Подробнее — раздел «Оплата» → «Счета в GRAM».
Параметры
Ошибки
Ошибка приходит как {"ok": false, "error_code": 400, "description": "Bad Request: КОД: пояснение"}, если не указано иное.
| Ошибка | Когда |
|---|---|
AMOUNT_INVALID | нет цены, переданы и amount, и nanoton_amount, не число или больше 9 знаков после запятой |
AMOUNT_TOO_SMALL | меньше 0.01 GRAM (10000000 нанотонов) |
AMOUNT_TOO_LARGE | больше 10 000 GRAM |
CURRENCY_INVALID | передан currency, отличный от GRAM/TON |
PRICES_INVALID | передан prices или label длиннее 64 символов |
PAYMENT_PROVIDER_INVALID | передан provider_token |
… | остальные ошибки как у sendInvoice / createInvoiceLink (INVOICE_TITLE_INVALID и т. п.) |
Пример запроса
curl "https://api.staticgram.top/bot$TOKEN/sendGramInvoice" \
-H "Content-Type: application/json" \
-d '{
"chat_id": 123456789,
"title": "Премиум-доступ",
"description": "30 дней без ограничений",
"payload": "premium-30d-user-123",
"amount": "1.5"
}'from aiogram import Bot
from aiogram.client.session.aiohttp import AiohttpSession
from aiogram.client.telegram import TelegramAPIServer
from aiogram.methods.base import TelegramMethod
from aiogram.types import InlineKeyboardMarkup, Message
# Метода StaticGram нет в aiogram: описываем его сами, bot(...) отправит запрос как обычно.
class SendGramInvoice(TelegramMethod[Message]):
__returning__ = Message
__api_method__ = "sendGramInvoice"
chat_id: int | str
title: str
description: str
payload: str
amount: str | float | None = None # "1.5", "0,01", 2.5
nanoton_amount: int | None = None # или цена в нанотонах
label: str | None = None
photo_url: str | None = None
message_thread_id: int | None = None
reply_markup: InlineKeyboardMarkup | None = None
session = AiohttpSession(api=TelegramAPIServer.from_base("https://api.staticgram.top"))
bot = Bot(TOKEN, session=session)
msg = await bot(SendGramInvoice(
chat_id=123456789, title="Премиум-доступ", description="30 дней без ограничений",
payload="premium-30d-user-123", amount="1.5",
))
print(msg.invoice.total_amount) # 1500000000 (нанотоны), currency == "TON"const res = await fetch(`https://api.staticgram.top/bot${TOKEN}/sendGramInvoice`, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
chat_id: 123456789,
title: "Премиум-доступ",
description: "30 дней без ограничений",
payload: "premium-30d-user-123",
amount: "1.5",
}),
});
const data = await res.json();Ответ (Message)
{
"ok": true,
"result": {
"message_id": 1,
"date": 1790000000,
"chat": {
"id": 1780243423,
"type": "private"
}
}
}