Быстрый старт
При отправке задачи добавьте полеwebhook в тело запроса:
ваш URL + /callback.
Другие конечные точки асинхронных задач (видео, аудио и т. д.) работают так же — просто добавьте поле
webhook в тело запроса.Правила URL
Указанный вамиwebhook — это базовый URL (base), к которому мы автоматически добавляем /callback:
Ваш webhook | Куда мы фактически отправляем POST |
|---|---|
https://your-server.com | https://your-server.com/callback |
https://your-server.com/api | https://your-server.com/api/callback |
https://your-server.com/api/ | https://your-server.com/api/callback |
POST .../callback.
Что вы получите
Отправляемое содержимое полностью совпадает с тем, что возвращает конечная точка «Получение статуса задачи» — вы можете обрабатывать его той же логикой разбора.Для видеозадач результат находится в
result.videos, а для аудио — в result.audios.Повторные попытки и дедупликация (важно)
- Повторные попытки: Если ваш сервер не вернёт
2xxпримерно за 10 секунд или вернёт5xx, мы автоматически повторим попытку, до 3 раз, с интервалами около 10 с, 30 с и 60 с. Если все 3 попытки неудачны, мы прекращаем (примерно за 2 минуты). - Без повтора: Если ваша конечная точка вернёт
4xx(считается проблемой URL / запроса), мы сразу прекращаем без повторных попыток. - Дедупликация: Обычно задача отправляется только один раз. Но в крайних случаях (например, перезапуск на нашей стороне после отправки, но до подтверждения) вы можете получить повторные отправки. Обязательно выполняйте идемпотентную дедупликацию по
id(task_id), чтобы избежать повторной обработки.
Возвращайте 2xx как можно быстрее
Сначала примите и поставьте в очередь, затем обрабатывайте асинхронно — не заставляйте нас ждать завершения вашей обработки.
Дедуплицируйте по id
Используйте
id (task_id) как ключ идемпотентности, чтобы избежать повторной обработки.Требования к URL обратного вызова
В целях безопасности URL обратного вызова должен соответствовать следующему:| Требование | Описание |
|---|---|
| Публично доступен | Не может быть внутренним / локальным адресом (например, 127.0.0.1, 10.x, 192.168.x будут отклонены) |
| Протокол | http или https (рекомендуется https) |
| Порт | Используйте стандартные порты (80 / 443); нестандартные порты могут блокироваться |
| Домен | Не может указывать на наш собственный сервисный домен |
Частые вопросы
Отправил задачу с 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 как можно быстрее, а логику обработки выполняйте асинхронно в фоне.