enВойти в Senler

Пополнение лимита посетителя

Свяжите запрос на пополнение кредитов из виджета с оплатой на вашем сайте.

Основной раздел: Public API и события.

Запрос на пополнение лимита

Если в настройках канала включено «Предлагать оплатить лимит», кнопка «Пополнить» отправляет iframe служебное сообщение скрипту-загрузчику. Скрипт проверяет origin, источник iframe и канал, а затем создаёт на window событие senler-widget:credit-purchase-requested:

const expectedChannelId = "xxx";

window.addEventListener("senler-widget:credit-purchase-requested", (event) => {
  if (event.detail.channel_id !== expectedChannelId) return;

  openCreditPayment({
    channelId: event.detail.channel_id,
    leadId: event.detail.lead_id,
  });
});

В event.detail находятся проверенные channel_id и lead_id. Событие только сообщает о намерении пользователя: оно не проводит оплату и не меняет кредитный остаток. Сайт всё равно должен убедиться, что channel_id относится к его интеграции, и открыть собственную форму оплаты.

Начисление после оплаты

После подтверждённой оплаты сервер сайта должен начислить купленные кредиты лиду отдельным запросом к API Senler:

POST /api/projects/{projectId}/leads/{leadId}/credits
Authorization: Bearer senler_sk_...
Content-Type: application/json

{
  "credits": 50000,
  "type": "purchase",
  "reason": "Оплата заказа shop-order-123",
  "idempotency_key": "widget-credit-purchase:shop-order-123"
}

В путь запроса подставьте projectId проекта, а leadId возьмите из события. Перед открытием оплаты проверьте, что event.detail.channel_id совпадает с каналом этой интеграции. Проектный API-ключ должен принадлежать тому же проекту и иметь право can_manage_leads. Храните ключ только на сервере: не помещайте его в конфигурацию скрипта-загрузчика, JavaScript страницы или сетевые запросы браузера.

Поле credits принимает целое количество минимальных кредитных единиц: один показываемый пользователю кредит равен 10 000 единиц, поэтому 50 000 начисляет 5 кредитов. Цена и состав заказа остаются данными сайта и в этот запрос не передаются.

Для одной оплаченной позиции всегда повторяйте один стабильный idempotency_key. При сетевой ошибке можно безопасно повторить запрос с тем же телом и ключом; новый ключ для той же позиции приведёт к повторному начислению. Начисление меняет только дополнительный остаток выбранного лида и не пополняет кредитный баланс проекта.

После начисления виджет получает обновление по уже открытому соединению в реальном времени, снимает блокировку и обновляет остаток. Дополнительный запрос из браузера и периодический опрос не нужны.