Быстрый старт
При отправке задачи добавьте полеwebhook в тело запроса:
ваш URL + /callback.
Другие конечные точки асинхронных задач (видео, аудио и т. д.) работают так же — просто добавьте поле
webhook в тело запроса.Правила URL
Указанный вамиwebhook — это базовый URL (base), к которому мы автоматически добавляем /callback:
Поэтому на вашем сервере нужна конечная точка, принимающая
POST .../callback.
Что вы получите
Отправляемое содержимое полностью совпадает с тем, что возвращает конечная точка «Получение статуса задачи» — вы можете обрабатывать его той же логикой разбора.Для видеозадач результат находится в
result.videos, а для аудио — в result.audios.Повторные попытки и дедупликация (важно)
- Повторные попытки: Если ваш сервер не вернёт
2xxпримерно за 10 секунд или вернёт5xx, мы автоматически повторим попытку, до 3 раз, с интервалами около 10 с, 30 с и 60 с. Если все 3 попытки неудачны, мы прекращаем (примерно за 2 минуты). - Без повтора: Если ваша конечная точка вернёт
4xx(считается проблемой URL / запроса), мы сразу прекращаем без повторных попыток. - Дедупликация: Обычно задача отправляется только один раз. Но в крайних случаях (например, перезапуск на нашей стороне после отправки, но до подтверждения) вы можете получить повторные отправки. Обязательно выполняйте идемпотентную дедупликацию по
id(task_id), чтобы избежать повторной обработки.
1
Возвращайте 2xx как можно быстрее
Сначала примите и поставьте в очередь, затем обрабатывайте асинхронно — не заставляйте нас ждать завершения вашей обработки.
2
Дедуплицируйте по id
Используйте
id (task_id) как ключ идемпотентности, чтобы избежать повторной обработки.3
Настройте и проверяйте подпись
В продакшене проверяйте источник запросов обратного вызова и отклоняйте поддельные.
Требования к URL обратного вызова
В целях безопасности URL обратного вызова должен соответствовать следующему:
URL, не отвечающие этим требованиям, отбрасываются (без отправки и без повторов).
Частые вопросы
Отправил задачу с webhook, но не получил уведомление?
Отправил задачу с webhook, но не получил уведомление?
Проверьте по пунктам:
- Задача действительно завершена? Проверьте детали задачи —
statusравенcompleted/failed(во время обработки уведомления не отправляются)? - Ваш URL публично доступен? Можем ли мы достучаться до вашего
/callback? - Порт стандартный (80 / 443)? Нестандартные порты могут блокироваться политиками безопасности.
- Ваш
/callbackвовремя вернул 2xx? При 4xx мы сразу прекращаем. - Используете ли вы
https? Действителен ли сертификат?
Почему url в result — это массив?
Почему url в result — это массив?
Некоторые модели создают несколько изображений за раз, поэтому
images[].url может быть массивом — просто обрабатывайте его как массив.Истекает ли срок действия ссылок результата?
Истекает ли срок действия ссылок результата?
Если в
result есть expires_at (метка времени Unix), это время истечения срока действия ссылки — вовремя перенесите/сохраните её.Отправляете ли вы статус «в обработке»?
Отправляете ли вы статус «в обработке»?
Нет. Мы отправляем уведомление только один раз, когда задача окончательно завершается успехом или ошибкой.
Минимальный пример приёмника
Python
200 как можно быстрее, а логику обработки выполняйте асинхронно в фоне.