Перейти к содержимому
Разделы документации
SDKNode.js

Rich-форматы

Интеграция

С SDK достаточно трёх действий: укажите форматы в inject(). Для эфемерных сообщений в группах используйте инструкцию по отправке через HTTP.

bot.ts
// Use in place of the ordinary handler; bot and sk are initialized.
bot.use(sk.callbacks({
onError: () => console.error("Ad interaction failed"),
}));
bot.on("message:text", async (ctx) => {
if (ctx.chat.type !== "private") return;
const reply = await getLlmResponse(ctx.message.text); // Return plain text.
const result = await sk.inject({
userId: ctx.from.id,
message: reply,
languageCode: ctx.from.language_code || "en",
acceptFormats: ["text", "response", "card", "consent", "quiz"],
capabilities: {
richMessages: true,
callbacks: true,
customEmoji: false,
},
});
if (result.send) {
await ctx.reply(reply);
// If rich delivery fails, send only the ad as text.
const adOnly = {
...result,
message: "Ad\n" + (result.ad?.text ?? ""),
};
const raw = ctx.api.raw as unknown as Record<
string, (params: Record<string, unknown>) => Promise<unknown>
>;
const delivered = await sk.send(
(method, params) => raw[method](params),
ctx.chat.id,
adOnly,
);
if (delivered === null) {
console.error("Ad delivery failed");
}
} else {
await ctx.reply(result.message, {
reply_markup: result.keyboard ?? undefined,
});
}
});

Требования к клиентам

  • Rich-блоки отображаются в клиентах Telegram, выпущенных 25.08.2026 или позже. В старых клиентах часть блоков может не отображаться, но текст и обычная кнопка reply_markup (сервер всегда дублирует её) остаются видны.
  • Логотипы брендов в виде пользовательских эмодзи отображаются, только если у владельца бота есть Telegram Premium. Указывайте capabilities.custom_emoji с учётом этого. Иначе вместо логотипа будет название бренда жирным шрифтом.
  • Группы: интерактивные сцены после нажатия видны только нажавшему пользователю. Первая сцена отправляется так же, только если бот — администратор чата (bot_is_admin: true); иначе отправляется обычное сообщение. Telegram разрешает отправку ephemeral-сообщений без предварительного действия пользователя только ботам-администраторам.