Обратные вызовы
Получайте подписанные межсерверные уведомления и завершенные асинхронные результаты.
Обратные вызовы
Настройте URL-адрес обратного вызова в Профиль → Обратные вызовы и асинхронные результаты. Модель Gate отправляет HTTPS POST запросы на включенные уведомления учетной записи и на завершенные запросы асинхронного вывода.
URL обратного вызова
Используйте общедоступную конечную точку HTTPS. Конечная точка должна прочитать необработанное тело запроса, проверить подпись, идемпотентно обработать событие и вернуть HTTP. 200 как только событие будет принято.
События
Обратные вызовы могут включать в себя:
- завершенные результаты асинхронного вывода;
- уведомления о низком балансе счета при включении;
- Уведомления о лимите расходов API-ключа при включении;
- уведомления о лимите расходов ключевой группы, если они включены.
Асинхронная доставка результатов включается всякий раз, когда настроен URL-адрес обратного вызова. Флажки уведомлений в профиле контролируют только соответствующие оповещения о балансе и лимите.
Формат запроса
POST /model-gate/callback HTTP/1.1
Content-Type: application/json
X-Model-Gate-Signature: t=1710000000,v1=hex_hmac_sha256
Пример полезной нагрузки асинхронного результата:
{
"event":"async.completed",
"request_id":"01J...",
"status":"completed",
"response":{"id":"msg_...","type":"message"}
}
Поля полезной нагрузки можно расширять со временем. Игнорировать неизвестные поля.
Проверка подписи
Заголовок подписи имеет следующий формат:
X-Model-Gate-Signature: t=<unix>,v1=<hmac_sha256>
Вычислить HMAC-SHA256 по точной строке <timestamp>.<raw_body> используя секрет обратного вызова, показанный в профиле. Сравните шестнадцатеричную подпись со сравнением в постоянном времени и отклоните временные метки за пределами принятого вами окна воспроизведения.
Доставка и повторные попытки
Возврат HTTP 200 после благополучного принятия события. Ответы, отличные от 2xx, и сбои соединения могут быть повторены. Поэтому ваша конечная точка должна быть идемпотентной; использовать request_id вместе с event в качестве ключа дедупликации.
Не выполняйте длительную работу до ответа. Поставьте событие в очередь внутри себя, верните 200и обработать его асинхронно.