# Webhooks

Используйте Webhooks для получения событий задач и выставления счетов без опроса. Tripo отправляет полезные данные JSON на вашу конечную точку HTTPS при возникновении подписанных событий.

## Настройка

1. Откройте «Настройки», затем Webhooks.
2. Добавьте конечную точку HTTPS, например `https://api.yourapp.com/tripo-webhook`.
3. Выберите типы событий, которые вы хотите получать.
4. Сохраните конечную точку.
5. Скопируйте секрет подписи и надежно сохраните его. Оно отображается только один раз.

## Типы событий

| Событие | Описание |
| --- | --- |
| `task.completed` | Задача завершена успешно. |
| `task.failed` | Задача не выполнена или была отменена. |
| `balance.low` | Баланс счета упал ниже настроенного порога кредитного оповещения. |

## Заголовки запросов

| Заголовок | Описание |
| --- | --- |
| `Tripo-Webhook-Id` | Webhook конечная точка ID. |
| `Tripo-Webhook-Delivery` | Уникальная поставка ID. Используйте его для идемпотентности. |
| `Tripo-Webhook-Event` | Тип события, например `task.completed`. |
| `Tripo-Webhook-Signature` | Подпись HMAC-SHA256 поверх `{timestamp}.{raw_body}`. |
| `Content-Type` | Всегда `application/json`. |

## Проверка

1. Разберите `t` и `v1` из `Tripo-Webhook-Signature`.
2. Вычислите HMAC-SHA256 с секретом подписи над `t + "." + rawBody`.
3. Сравните вычисленный шестнадцатеричный дайджест с `v1`, используя сравнение с постоянным временем.
4. При необходимости отклоняйте временные метки старше пяти минут.

## Лучшие практики

- Быстро верните ответ `2xx`, а затем асинхронно обработайте тяжелую работу.
- Проверьте каждую полезную нагрузку перед изменением состояния приложения.
- Дедупликация событий с помощью `Tripo-Webhook-Delivery`.
- Используйте `balance.low`, чтобы предупредить пользователей до того, как создание задачи завершится сбоем из-за недостаточного количества кредитов.
