REST API

Webhook-уведомления

Передайте callback_url при создании задачи — Agent сам доставит результат на ваш URL, как только задача завершится. Опрос не нужен.

Как включить

Добавьте callback_url (и опционально callback_secret) в тело POST /api/tasks:

{
  "assistant_id": 1,
  "callback_url": "https://yourapp.com/hook",
  "callback_secret": "your-secret",
  "input": [{ "type": "text", "text": "Что такое Laravel?" }]
}

Что приходит

Agent доставляет webhook при любом терминальном статусе (completed или failed). Тело — тот же объект, что отдаёт GET /api/tasks/{uuid}.

POST callback_url
POST https://yourapp.com/hook
X-Task-Uuid: 550e8400-…
X-Signature: <hmac>          # только если задан callback_secret

{
  "uuid": "550e8400-…",
  "status": "completed",
  "turn": { "output": [], "messages": [], "metadata": {  } },
  "error": null,
  "created_at": "…",
  "completed_at": "…"
}

Проверка подписи

Если задан callback_secret, запрос несёт заголовок X-SignatureHMAC-SHA256 от сырого тела запроса. Сверьте его на своей стороне:

php
$body = file_get_contents('php://input');
$expected = hash_hmac('sha256', $body, $secret);

if (! hash_equals($expected, $_SERVER['HTTP_X_SIGNATURE'] ?? '')) {
    http_response_code(401);   // подпись не сошлась — отклонить
    exit;
}

Если callback_secret не указан — заголовок X-Signature не отправляется, проверка не требуется.

Повторные попытки

Доставка идёт через очередь (fire-and-forget), до 5 попыток с экспоненциальным backoff: 10 с, 30 с, 60 с, 120 с. Ваш эндпоинт должен ответить 2xx, иначе попытка считается неуспешной.

Webhook и опрос не взаимоисключающие: даже с callback_url результат всегда доступен через GET /api/tasks/{uuid}.