language также позволяет выбрать язык сообщения об ошибке.
Быстрый старт
При отправке задачи добавьтеwebhook на верхний уровень тела запроса. Чтобы перевести сообщение об ошибке, добавьте также language:
ваш URL + /callback.
Для других асинхронных задач (видео, аудио и т. д.)
webhook задаётся так же. Параметр language сейчас поддерживается для POST /v1/videos/generations и POST /v1/images/generations; оба поля должны находиться на верхнем уровне тела запроса.Выбор языка сообщения об ошибке
language — необязательный строковый параметр, который влияет только на error.message в уведомлении об ошибке. ID задачи, статус, прогресс, стоимость и URL результата от языка не зависят. Если параметр не указан, возвращается исходное сообщение вышестоящего сервиса или платформы.
- Значения не зависят от регистра, а пробелы по краям автоматически удаляются. Например,
"RU"и" ru "обрабатываются какru. - Используйте двухбуквенные коды из таблицы. Региональные теги, такие как
zh-CN,en-USиpt-BR, не распознаются. - Неподдерживаемое значение не приводит к ошибке отправки задачи; в уведомлении сохраняется исходное сообщение.
- Если исходное сообщение уже написано на целевом языке, оно возвращается без повторного перевода.
- При ошибке перевода возвращается исходное сообщение, а доставка уведомления не задерживается и не отменяется.
При опросе используйте параметр запроса
language конечной точки статуса задачи, чтобы выбрать тот же язык сообщения об ошибке. У Webhook нет строки запроса, поэтому language необходимо указать при отправке задачи.Правила URL
Указанный вамиwebhook — это базовый URL (base), к которому мы автоматически добавляем /callback:
Поэтому на вашем сервере нужна конечная точка, принимающая
POST .../callback.
Что вы получите
Отправляемое содержимое полностью совпадает с тем, что возвращает конечная точка «Получение статуса задачи» — вы можете обрабатывать его той же логикой разбора.Для видеозадач результат находится в
result.videos, а для аудио — в result.audios.В примере ошибки выше используется
"language": "ru". Параметр языка изменяет только error.message; остальные поля остаются прежними.Повторные попытки и дедупликация (важно)
- Повторные попытки: Если ваш сервер не вернёт
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 как можно быстрее, а логику обработки выполняйте асинхронно в фоне.