Пополнение лимита посетителя
Свяжите запрос на пополнение кредитов из виджета с оплатой на вашем сайте.
Основной раздел: 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. При сетевой ошибке можно безопасно повторить запрос с тем же телом и ключом; новый ключ для той же позиции приведёт к повторному начислению. Начисление меняет только дополнительный остаток выбранного лида и не пополняет кредитный баланс проекта.
После начисления виджет получает обновление по уже открытому соединению в реальном времени, снимает блокировку и обновляет остаток. Дополнительный запрос из браузера и периодический опрос не нужны.