Руководство
Почему ваш колбэк задачи hiapi не срабатывает и как это исправить
Почему ваш колбэк задачи hiapi не срабатывает
Вы отправили задачу в POST https://api.hiapi.ai/v1/tasks с объектом callback; задача завершилась (при GET /v1/tasks/{taskId} вы видите status: "success"), но ваша точка входа так и не получила уведомление о терминальном состоянии. На ваш сервер не пришёл ни один запрос. Никаких повторных попыток. В логах пусто.
Колбэки hiapi доставляются в виде HTTPS POST между серверами извне вашей сети. Если на этом пути что-то ломается — URL недоступен из публичного интернета, TLS не согласуется, ваш обработчик не возвращает 2xx достаточно быстро, или проверка подписи на вашей стороне отклоняет запрос — то с точки зрения вашего приложения это уведомление «молчит». Хорошая новость: почти всегда это одна из нескольких ошибок конфигурации, и каждую легко проверить.
Распространённые причины (по вероятности)
- URL колбэка недоступен из публичного интернета.
localhost,127.0.0.1, IP внутри вашего VPC или просроченный туннель ngrok — hiapi до них не достучится. - Проблемы с HTTPS / TLS. Самоподписанный сертификат, просроченный сертификат, отсутствие промежуточного сертификата или несовпадение имени хоста. hiapi отправляет POST только на URL, начинающиеся с
https://, и проверяет цепочку сертификатов. - Ваш обработчик не возвращает
2xxв пределах тайм-аута. Если вы同步но выполняете длительные операции (запись в базу данных, скачивание изображений, отправка уведомлений) внутри обработчика колбэка, запрос истечёт по тайм-ауту раньше, чем вы вернёте200. С точки зрения hiapi это неудачная доставка. - Вы никогда не регистрировали Webhook Sign Key, а ваш обработчик отклоняет неподписанные запросы. Если в Settings не сгенерирован ключ подписи, hiapi доставляет тело запроса без заголовка подписи — любое middleware проверки, которое вы написали, сочтёт запрос недействительным и отбросит его.
- При отправке пропущен объект
callback. Он необязателен. Если вы не включили его вPOST /v1/tasks, то и срабатывать нечему. Вместо этого вам придётся опрашиватьGET /v1/tasks/{taskId}. - Задача всё ещё выполняется. Колбэк срабатывает только в терминальном состоянии (
successилиfail). Покаstatusравенqueued,handlingилиarchiving, колбэк ещё не отправляется. - Хост URL колбэка в списке запретов / корпоративный файрвол блокирует исходящий трафик к нему. Менее распространено, но стоит проверить, если вы работаете в строгой периметровой сети.
Как исправить: контрольный список из 7 шагов
- Убедитесь, что задача действительно достигла терминального состояния.
curl -H "Authorization: Bearer $HIAPI_KEY" https://api.hiapi.ai/v1/tasks/tk-hiapi-.... Еслиstatusравенqueuedилиhandling, колбэк ещё не сработал — подождите, не начинайте отладку. - Убедитесь, что вы отправили объект
callback. Перечитайте тело запроса, отправленного вPOST /v1/tasks. Еслиcallbackотсутствует, вот и ответ — добавьте его и отправьте заново, либо перейдите на опрос. - Проверьте URL колбэка из публичного интернета. С любой машины вне вашей сети (телефон с мобильным интернетом, облачный shell, онлайн-инструмент curl) выполните
curl -i -X POST https://your.domain.example/hiapi/callback -d '{}' -H "Content-Type: application/json". Вы должны получить от своего сервера HTTP-ответ2xx. Если получите отказ в соединении, DNS-ошибку или любой ответ не2xx, сначала исправьте это. - Проверьте цепочку TLS-сертификатов.
curl -vI https://your.domain.example/hiapi/callback 2>&1 | grep -i 'ssl\|cert'. ИщитеSSL certificate problem. Если видите эту ошибку, установите полную цепочку сертификатов (листовой + промежуточный) или используйте управляемые сертификаты (Let's Encrypt, CDN, ACM). - Возвращайте
200немедленно, а затем обрабатывайте асинхронно. Внутри вашего обработчика: записать payload в очередь / таблицу, вернуть200 OK, а затем выполнять работу в фоновом worker'е. Не позволяйте ответу блокироваться медленными нисходящими вызовами. - Сгенерируйте Webhook Sign Key и унифицируйте проверку. Перейдите в
/en/dashboard/settings→ Webhook Sign Key → Generate, сохраните ключ. Если ваш обработчик проверяет подпись, используйте сохранённый ключ; если не проверяет, временно отключите проверку, убедитесь в нормальной доставке и затем включите снова. - Проверьте
/en/dashboard/logs. Журнал вызовов покажет запрос и его терминальное состояние. Сопоставитьrequest_idиз журнала вызовов с тем, что фактически получил ваш сервер (если получил), — самый быстрый способ понять, «покинул ли колбэк hiapi» и «дошёл ли колбэк до моего сервера».
Минимальный пример для проверки
Используйте следующее для сквозной проверки вашего API-ключа, пути создания задачи и точки входа колбэка. Выберите быструю модель изображений для smoke-теста; согласно публичной документации, ID моделей включают суффикс возможностей:
curl -X POST https://api.hiapi.ai/v1/tasks \
-H "Authorization: Bearer $HIAPI_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2/text-to-image",
"input": {"prompt": "a cute cat"},
"callback": {"url": "https://your.domain.example/hiapi/callback"}
}'
Вы должны сразу получить JSON-ответ с taskId вида tk-hiapi-.... Затем, как только задача перейдёт в success или fail, следите за логами сервера на наличие входящего POST на /hiapi/callback. Если сам шаг создания задачи возвращает 401 Unauthorized, проблема в ключе — см. Почему hiapi возвращает 429 (и что с этим делать), чтобы понять, как работает механика конверта ошибок hiapi (одна и та же структура hiapi_error применяется ко всем кодам состояния).
Связанные ссылки
- API Keys — проверьте, что ваш ключ действителен и имеет правильные области权限
- Settings — сгенерируйте или обновите ваш Webhook Sign Key
- Call Logs — убедитесь, что hiapi отправил колбэк, и посмотрите статус ответа
- API Reference — полные спецификации
POST /v1/tasksиGET /v1/tasks/{id} - Ограничение скорости hiapi 429 — подробный разбор конверта ошибок для связанных проблем «я получаю статус, но не получаю колбэк»
FAQ
Повторяет ли hiapi неудачные колбэки?
Колбэк считается доставленным только тогда, когда ваша точка входа возвращает ответ 2xx. Если ваш обработчик возвращает 5xx, истекает по тайм-ауту или TLS-рукопожатие не удаётся, считайте колбэк недоставленным. Самый надёжный подход: для любой задачи, отправленной с колбэком, всегда используйте опрос GET /v1/tasks/{taskId} как запасной вариант. Так даже единичный сбой на пути колбэка не приведёт к потере результата.
Можно ли использовать HTTP вместо HTTPS для URL колбэка?
Нет. Принимаются только URL, начинающиеся с https://. Если вы тестируете локально, используйте туннель, который завершает TLS за вас (Cloudflare Tunnel, ngrok, tailscale funnel), и направьте колбэк на публичный HTTPS-эндпоинт.
Почему мой обработчик получил тело запроса, но проверка подписи не прошла? Либо (a) вы сгенерировали Webhook Sign Key после отправки задачи — запрос подписан старым ключом (или без ключа) — поэтому перегенерируйте, сохраните и отправьте новую задачу; либо (b) ваш код проверки строит каноническую строку не так, как hiapi. Запишите точные байты тела запроса, полученного вашим сервером, и повторно выполните HMAC по этим точным байтам без какой-либо повторной JSON-сериализации.
taskId показывает success, но я не получил ни колбэк, ни URL результата.
Повторно запросите GET /v1/tasks/{taskId} и посмотрите массив output. URL в output[*].url имеют ограничение по времени (expireAt); скачивайте немедленно. Доставка колбэка и срок действия URL — две независимые проблемы; даже без колбэка GET-эндпоинт является источником истины.
Я вижу колбэк в /en/dashboard/logs, но мой сервер его не залогировал.
Это указывает на проблему в вашем периметре, а не в hiapi. Частые причины: правила CDN / WAF блокируют POST-запросы без распознаваемого User-Agent вашей команды, allow-list IP на файрволе или обратный прокси, переписывающий путь. Разрешите входящий POST на файрволе и запустите проверку снова.
Считается ли URL колбэка в лимитах скорости моего аккаунта?
Нет. Колбэки — это доставка от hiapi к вам, она не связана с вашим бюджетом скорости POST /v1/tasks.
Похожие статьи
Все статьи →-
Руководство
Как вызвать hailuo-2.3-fast/image-to-video через HiAPI API: практика с curl и Python
Первый рабочий запрос к быстрому и недорогому уровню генерации видео по изображению — от ID модели до загрузки MP4
-
Руководство
Как вызывать hailuo-2.3/text-to-video через API HiAPI: curl, Python и рабочие примеры запросов
-
Руководство
Использование Kandinsky 6.0 Pro для преобразования текста в видео на HiAPI: руководство по curl и Python
Практическая демонстрация с упором на запросы: построение вызова от промпта до видеоклипа, отправка запроса, опрос статуса завершения и скачивание результата