API уведомления

Вебхуки магазина BOT-T

Настройка: Магазин → категория/товар → API (два поля URL).


Общие правила

ПараметрЗначение
МетодPOST
Content-Typeapplication/x-www-form-urlencoded
КодировкаUTF-8
Повторы (уведомление после оплаты)До 3 попыток с паузой 0,5 с и 1 с при ошибке сети
IP-источникСерверы BOT-T (фиксированный пул; при необходимости уточняйте у поддержки)

Вложенные объекты (category, user, reviews и т.д.) передаются в формате полей с квадратными скобками, (category[id]=10, user[telegram_id]=123). Парсер на вашей стороне должен уметь разбирать такую структуру (или принимать тело как application/x-www-form-urlencoded и восстанавливать дерево).


1. Уведомление после оплаты заказа

Поле в ЛК: «URL вебхука (уведомление после оплаты заказа)».

Когда отправляется: после успешной оплаты заказа — статус заказа переведён в «Оплачен» (ACTIVE, код 1). Товар уже зарезервирован/выдан внутри BOT-T; уведомление уходит асинхронно (очередь).

Условие: у категории/товара включён блок API и указан корректный HTTP(S) URL.

Тело запроса (корневые поля)

ПолеТипОписание
idintID заказа в BOT-T
countintКоличество единиц в заказе
statusintСтатус заказа на момент отправки (обычно 1 — оплачен)
pricestringСумма для отображения (с валютой), например 150.00 ₽
amountintСумма в минимальных единицах валюты (копейки)
discountintСкидка по заказу (минимальные единицы)
created_atstringДата/время создания заказа, Y-m-d H:i:s (часовой пояс бота)
categoryobjectКатегория/товар заказа (см. ниже)
userobject | nullПользователь Telegram (может быть null для гостевых сценариев)
botUserobject | nullПользователь бота (связь с ботом, баланс, ключи)
productobjectВыданный товар в заказе (см. ниже)
reviewsobjectТолько если к заказу привязана заполненная форма обратной связи (см. раздел 3)

Объект product

ПолеТипОписание
typestringТип представления: text, link, pay (до оплаты в других API не приходит в этом вебхуке)
datastringСодержимое: ключи, ссылки, текст, путь к файлу и т.д. — зависит от типа товара

Для заказа с несколькими строками товара в data может быть несколько значений, разделённых переводом строки \n.

Объект category (основные поля)

ПолеТипОписание
idintID записи категории/товара
category_idintID в дереве каталога
parentobject | nullРодительская категория (та же структура) или null
childrenarrayДочерние элементы (если есть)
photoobject | nullФото категории
designobjecttitle, description, instruction, image, template_id, deployed, count, discount, discount_text
priceobjectfull, amount, currency (id, code, letter, code_digital), discount, old_price
settingobjectmin_count, max_count, count, is_ban_coupon, is_change_count, is_block_feedback, is_view_ordered_user, is_check_captcha
typeintЧисловой тип категории (папка, уникальный товар, API+обратная связь и т.д.)
typeObgobjectid, title — расшифровка типа
statusintСтатус категории
is_viewboolПоказывается в витрине
is_hideboolСкрыт
api_idint | nullID настроек API
feedback_idint | nullID формы обратной связи, если привязана
message_notice_idint | nullID уведомления
salesmanobject | nullПродавец (пользователь)

Объект user

ПолеТипОписание
idintID пользователя в BOT-T
telegram_idintTelegram user id
usernamestring@username без @
first_namestringИмя
last_namestringФамилия
linkstringHTML-ссылка или @username для отображения
typestringТип чата: private, group, supergroup, channel

Объект botUser

ПолеТипОписание
idintID пользователя бота
bot_idintID бота
userobject | nullВложенный user
refobject | nullРеферер
moneyintБаланс в минимальных единицах
statusobjectid, title
create_atintUnix-время создания
created_timestringДата создания
update_atintUnix-время обновления
updated_timestringДата обновления
expectationstring | nullСлужебное состояние диалога
secret_user_keystring | nullСекретный ключ (для Web App / API пользователя)

Ожидаемый ответ вашего сервера

Любой HTTP-код 2xx (200–299). Тело ответа не разбирается. При ошибке BOT-T повторит запрос (см. «Повторы»).

Статусы заказа (status)

КодСмысл
0Ожидает оплаты
1Оплачен
4В работе
5Исполнен
6Ожидает исполнителя (услуги)
2Ошибка
7Отменён

В этом вебхуке после оплаты обычно приходит 1.


2. Проверка товара перед выдачей

Поле в ЛК: «URL вебхука (проверка товара перед выдачей клиенту)».

Когда используется: только для типа товара «Уникальный товар». Вызывается до оплаты, в момент создания заказа (резервирование строк со склада): для каждой единицы товара в заказе.

Не используется для типов «API + обратная связь», «Неуникальный», «Файл», «Услуга» и др.

Запрос

ПараметрЗначение
МетодPOST
Content-Typeapplication/x-www-form-urlencoded
Телоодно поле
ПолеТипОписание
productstringОдна строка склада (ключ, логин:пароль, код и т.д.)

Логика на стороне BOT-T

  1. Берётся одна свободная строка товара.
  2. POST на ваш URL с product.
  3. Разбор JSON-ответа.
  4. success: false — строка снимается с продажи, берётся следующая (цикл для count заказа).
  5. success: true — строка закрепляется за заказом, переход к следующей единице.
  6. HTTP ≠ 200 или невалидный JSON — заказ не создаётся, покупателю ошибка.

Ожидаемый ответ

ПараметрЗначение
HTTP200
Content-Typeapplication/json (рекомендуется)
ТелоJSON-объект с полем success
{"success": true}

или

{"success": false}
successДействие BOT-T
trueСтрока валидна, используется в заказе
falseСтрока удаляется из продажи, подбирается другая
отсутствует / не JSON / HTTP ≠ 200Ошибка, заказ не оформляется

3. Оплата заказа в категории «API + обратная связь»

Тип категории в магазине: обработка на внешнем сервере (в ЛК: «API + обратная связь»).

Сценарий

  1. Покупатель заполняет форму обратной связи, привязанную к товару (feedback_id в категории).
  2. Оформляется и оплачивается заказ (Telegram, баланс, внешняя оплата через API магазина и т.д.).
  3. После успешной оплаты BOT-T отправляет тот же вебхук, что в разделе 1 («уведомление после оплаты»), на URL из поля create.

Отличие от обычного магазина

Дополнительно передаётся поле reviews — объект с ответами пользователя на форму обратной связи, если заявка привязана к заказу.

Структура reviews:

ПолеТипОписание
idintID заявки (ответа на форму)
feedback_idintID формы обратной связи
answerstringСводный текст: все вопросы и ответы одной строкой
created_timestringНачало заполнения, Y-m-d H:i
notice_timestring | nullВремя напоминания
deleted_timestringПланируемое удаление заявки
statusobjectid, title — статус заявки (0 в процессе, 1 не прочитан, 2 прочитан, 3 отвечен)
itemsarrayДетализация по каждому вопросу (см. ниже)
datastring | nullСпец. данные формы (JSON-строка, напр. order_id для доставки)
adminAnswerobject | nullОтвет администратора (сообщение), если уже есть
userobjectКто заполнил форму
bot_idintID бота

Элемент items[]

ПолеТипОписание
idintID поля формы
typeintТип вопроса: 1 — ввод текста, 2 — файл, 3 — выбор, 4 — развилка
answer_idintID заявки
main_inputobjectМетаданные вопроса (текст, настройки)
inputobjectДля типа 1: id, answer (текст ответа)
fileobjectДля типа 2: массив files[] с id, file, type, link (ссылка на скачивание)
selectobjectДля типа 3: выбранные options[]
crossroadobjectДля типа 4: выбранная ветка

Поле product в корне заказа для этого типа обычно содержит настройки API (ключи, URL внешнего сервиса в формате ключ:значение построчно), а не готовый ключ для покупателя — выдача часто выполняется вашим сервером по данным из reviews и product.

Ожидаемый ответ

Как в разделе 1: HTTP 2xx, тело не проверяется.


Порядок вызовов (уникальный товар + API)

sequenceDiagram
    participant U as Покупатель
    participant BT as BOT-T
    participant You as Ваш сервер

    U->>BT: Создать заказ
    loop На каждую единицу count
        BT->>You: POST проверка product
        You-->>BT: {"success": true/false}
    end
    U->>BT: Оплата
    BT->>You: POST уведомление заказ (раздел 1)
    You-->>BT: HTTP 2xx

Для «API + обратная связь» шаг «проверка product» обычно не выполняется; после оплаты — вебхук раздела 1 + reviews.


Безопасность (рекомендации)

  • Принимайте запросы только по HTTPS.
  • Проверяйте источник (IP, секрет в query/path, подпись — реализуете на своей стороне; BOT-T секрет в URL по умолчанию не добавляет).
  • Не логируйте secret_user_key и содержимое product в открытые логи.
  • Обрабатывайте вебхук идемпотентно: повторная доставка с тем же id заказа возможна.

Связанные API (не вебхуки)

ДействиеКто вызываетОписание
POST /v1/shop/order/success-orderВаш backendВручную засчитать оплату (внешний эквайринг)
POST /v1/shoppublic/order/get-productСайт покупателяВыдача товара по orderKey после оплаты