Справочник
Конструктор Sidekick
| Параметр | Тип | Описание |
|---|---|---|
api_keyобязательно | string | Ваш API-ключ (sk_live_…). Создайте его в настройках. настройки → |
platform_idобязательно | string | Публичный ID площадки (plt_…). кабинета площадок → |
base_url | string | Базовый URL API. По умолчанию: "https://sidekick-ads.com". |
timeout | number | Тайм-аут запроса в секундах. По умолчанию: 3.0. |
platform | string | Тип площадки. По умолчанию: "telegram". |
Обязательные поля.
inject()
Единственный метод, который нужно вызывать. Асинхронный, не выбрасывает исключений: при любой ошибке возвращает исходное сообщение и клавиатуру без изменений.
| Параметр | Тип | Описание |
|---|---|---|
user_idобязательно | number | ID пользователя Telegram (ctx.from.id): конечное число. Документация Telegram User → |
messageобязательно | string | Непустой текст ответа LLM, в который нужно добавить рекламу. |
language_codeобязательно | string | Обязателен для API. Сигнатура SDK позволяет его пропустить, но пустое значение приводит к HTTP 400: SDK вернёт исходный ответ без рекламы. Если Telegram не передал язык, используйте язык, выбранный в боте. Документация Telegram User → |
is_premium | bool? | Статус Telegram Premium. При null/None SDK отправляет false. Документация Telegram User → |
keyboard | InlineKeyboardMarkup? | Ваша текущая inline-клавиатура. Python объединяет объекты aiogram/PTB; обычный dict возвращает без изменений. Node.js принимает объект inline_keyboard. |
parse_mode | string? | "HTML", "MarkdownV2" или "Markdown". Сервер экранирует рекламный текст и оформляет ссылку для выбранного режима. |
ad_button_position | "bottom" | "top" | Где добавить строку рекламной кнопки. По умолчанию: "bottom". |
first_name | string? | Необязательное имя пользователя Telegram для профилирования аудитории. До 128 символов. |
user_message | string? | Сообщение пользователя для контекстного подбора, проверки чувствительных тем и профилирования аудитории. До 4096 символов. |
accept_formats | string[]? | Форматы, которые принимает бот: "text", "response", "card", "consent", "quiz". По умолчанию ["text"]. См. раздел «Rich-форматы». |
capabilities | object? | Возможности отображения. Python: rich_messages, callbacks, custom_emoji; Node.js: richMessages, callbacks, customEmoji. Неуказанные флаги считаются false. |
bot_is_admin | bool? | Является ли бот администратором группы. SDK 0.8.0 не отправляет group_id, поэтому для показа с учётом группы нужен HTTP. |
Обязательные поля.
Возвращаемое значение
| Поле | Тип | Описание |
|---|---|---|
message | string | Текст для отправки: исходный ответ или ответ с добавленной рекламой. |
has_ad | bool | Добавлена ли реклама. |
impression_id | string? | ID показа для учёта. |
ad | object? | Объявление с text, formatted_text, button_text и button_url. Python возвращает dict (ad["text"]); Node.js — объект (ad.text) с ключами в camelCase. |
ad.formatted_text | string | Рекламный текст с авторским форматированием, преобразованным в ваш parse_mode. В кампаниях с учётом кликов ссылки заменяются адресом отслеживания. Без авторского форматирования совпадает с ad.text. |
format | string? | Название rich-формата в result.format. Для текстовой рекламы может отсутствовать (Node.js) или быть None (Python). Для отправки rich-сцены проверяйте result.send. |
send | object? | Только rich-форматы: result.send содержит { method, params, ephemeral? }. В HTTP-ответе это ad.send. При отправке rich-сцены отправляйте исходный ответ бота отдельно. |
interact_token | string? | Поле совместимости. Текущий API не возвращает его отдельно: токены интерактивных действий находятся в callback_data с префиксом sk:. |
keyboard | InlineKeyboardMarkup? | Объединённая клавиатура (ваши кнопки + рекламная) или исходная, если рекламы нет. |
fetch()
Получает объявление без отправки текста вашего сообщения. Возвращает отдельные поля, из которых вы сами собираете ответ бота. Асинхронный, не выбрасывает исключений: при любой ошибке возвращает { hasAd: false } (или { has_ad: False } в Python).
from sidekick_ads import Sidekickfrom aiogram.types import InlineKeyboardMarkup, InlineKeyboardButtonsk = Sidekick(api_key="sk_live_xxx", platform_id="plt_xxx")result = await sk.fetch(user_id=message.from_user.id,language_code=message.from_user.language_code or "en",parse_mode="HTML", # Match the parse mode used when sending.)if result.has_ad and result.ad is not None:await message.answer(f"{llm_reply}\n\n{result.ad.ad_text_formatted}",parse_mode="HTML",reply_markup=InlineKeyboardMarkup(inline_keyboard=[[InlineKeyboardButton(text=result.ad.button_text, url=result.ad.button_url,),]]),)else:await message.answer(llm_reply)
Параметры
| Параметр | Тип | Описание |
|---|---|---|
user_idобязательно | number | ID пользователя Telegram (ctx.from.id): конечное число. Документация Telegram User → |
language_codeобязательно | string | Непустой языковой тег IETF. Если Telegram не передал language_code, используйте язык, выбранный в боте. Документация Telegram User → |
is_premium | bool? | Статус Telegram Premium. По умолчанию: false. |
parse_mode | string? | "HTML", "MarkdownV2" или "Markdown". Если указан, ответ содержит поле ad_text_formatted с готовой разметкой. |
accept_formats | string[]? | Форматы, которые умеет отображать бот. По умолчанию ["text"], только текст. Передайте ["text", "image"], чтобы получать и изображения: SDK заранее скачает файл в ad.image_data / ad.imageData для передачи в InputFile. |
Обязательные поля.
Возвращаемое значение (FetchAnyResult)
| Поле | Тип | Описание |
|---|---|---|
has_ad | bool | Получено ли объявление. |
impression_id | string? | ID показа. Null, если has_ad равен false. |
ad | object? | Null, если has_ad равен false. Иначе — объект с полями ниже. |
ad.format | "text" | "image" | Полученный формат. Дополнительные поля изображений перечислены в разделе fetch_image() / fetchImage(). |
ad.ad_text | string | Исходный текст кампании. |
ad.ad_url | string | URL перехода. |
ad.button_text | string | Текст inline-кнопки. |
ad.button_url | string | URL inline-кнопки. В зависимости от кампании — адрес отслеживания или прямая ссылка. Используйте без изменений. |
ad.ad_text_formatted | string? | Присутствует, если в запросе задан parse_mode. Экранированный текст со ссылкой в выбранном режиме разметки. |
fetch() или inject() — используйте inject() для добавления рекламы в сообщение и объединения клавиатуры средствами SDK. Выберите fetch() если ответы LLM могут содержать пользовательские данные (имена, фрагменты запросов), которые вы не хотите передавать на серверы Sidekick.
fetch_image()
Получает рекламу с изображением (фото или анимацией) для отправки отдельно от ответа LLM. Вызывает метод /api/v1/ad/fetch-image . Асинхронный, не выбрасывает исключений: при любой ошибке возвращает { has_ad: False }.
from sidekick_ads import Sidekickfrom aiogram.types import (InlineKeyboardMarkup, InlineKeyboardButton, BufferedInputFile,)sk = Sidekick(api_key="sk_live_xxxxx", platform_id="plt_xxxxx")result = await sk.fetch_image(user_id=message.from_user.id,language_code="en",parse_mode="HTML",)if result.has_ad and result.ad:ad = result.ad# SDK already downloaded the bytes — hand straight to InputFile.media = BufferedInputFile(ad.image_data, filename=ad.image_filename)kb = InlineKeyboardMarkup(inline_keyboard=[[InlineKeyboardButton(text=ad.button_text, url=ad.button_url)]])caption = ad.ad_text_formatted or ad.ad_textif ad.media_type == "animation":await message.answer_animation(media, caption=caption,parse_mode="HTML", reply_markup=kb)else:await message.answer_photo(media, caption=caption,parse_mode="HTML", reply_markup=kb)
Параметры
| Параметр | Тип | Описание |
|---|---|---|
user_idобязательно | number | ID пользователя Telegram (ctx.from.id): конечное число. Документация Telegram User → |
language_codeобязательно | string | Непустой языковой тег IETF. Если Telegram не передал language_code, используйте язык, выбранный в боте. Документация Telegram User → |
is_premium | bool? | Статус Telegram Premium. По умолчанию: false. |
parse_mode | string? | "HTML", "MarkdownV2" или "Markdown". Если указан, ответ содержит ad_text_formatted: подпись со ссылкой на переход в выбранном режиме разметки. |
Обязательные поля.
Возвращаемое значение (FetchImageResult)
| Поле | Тип | Описание |
|---|---|---|
has_ad | bool | Получена ли реклама с изображением. |
impression_id | string? | ID показа. Null, если has_ad равен false. |
ad | object? | Null, если has_ad равен false. Иначе — объект с полями ниже. |
ad.format | "image" | Для этого метода всегда "image". |
ad.ad_text | string | Обычный текст подписи к сообщению Telegram. |
ad.ad_text_formatted | string? | Присутствует, если в запросе задан parse_mode. Подпись со ссылкой на переход в выбранном режиме разметки. Передайте её как подпись Telegram, чтобы текст был кликабельным. |
ad.ad_url | string | URL объявления, совпадает с button_url. Может быть адресом отслеживания или прямой ссылкой. |
ad.button_text | string | Текст inline-кнопки. |
ad.button_url | string | URL inline-кнопки. В зависимости от кампании — адрес отслеживания или прямая ссылка. Используйте без изменений. |
ad.media_type | "photo" | "animation" | Метод отправки медиа в Telegram: sendPhoto или sendAnimation. |
ad.image_url | string | Прямая ссылка на изображение или GIF. Обычно скачивать вручную не нужно — см. image_data ниже. |
ad.image_mime | string | MIME-тип, например "image/jpeg", "image/gif", "video/mp4". |
ad.image_data | bytes | Заранее скачанные байты файла — передайте в BufferedInputFile для aiogram или InputFile для grammY. SDK скачивает файл сам; это позволяет отправить его, даже если загрузчик URL Telegram не может обратиться к хранилищу. |
ad.image_filename | string | Предлагаемое имя файла по MIME-типу, например "ad.jpg". |
Обработка ошибок
inject() не выбрасывает исключений. При любой ошибке — тайм-ауте, сбое сети, 5xx или некорректном JSON — возвращает исходное сообщение и клавиатуру без изменений. Ваш бот продолжает работать.
# On a handled Sidekick request error:result = await sk.inject(user_id=123, message="Hello world", language_code="en")# result.message == "Hello world" (unchanged)# result.has_ad == False# result.keyboard == None (or your original keyboard)
Клавиатуры бота
- •Рекламная кнопка добавляется отдельной строкой и не смешивается с вашими кнопками.
- •Положение задаётся параметром
ad_button_position:"bottom"(по умолчанию) или"top". - •Telegram допускает не более 13 строк клавиатуры. Если их уже 13, рекламная кнопка не добавляется — остаётся только рекламный текст.
- •Ваши существующие кнопки не изменяются и не удаляются.
- •Если сообщение с рекламой превышает 4096 символов, рекламный текст убирается, но кнопка добавляется.