B2BB2B LLM

Oddzwonienia

Otrzymuj podpisane, idempotentne zdarzenia serwer-serwer i kompletne wyniki asynchronii.

Oddzwonienia

Skonfiguruj adres URL wywołania zwrotnego w Profil → Wywołania zwrotne i wyniki asynchroniczne. Model Gate wysyła HTTPS POST żądania dotyczące włączonych powiadomień o koncie i zakończone żądania natywnego wnioskowania asynchronicznego. Dostarczanie wywołań zwrotnych jest niezależne od przetwarzania wnioskowań i przebiega przez dedykowaną, trwałą kolejkę procesów roboczych Model Gate.

Adres URL wywołania zwrotnego i bezpieczeństwo ruchu wychodzącego

Użyj publicznie dostępnego punktu końcowego HTTPS. Weryfikacja adresu URL wywołania zwrotnego stanowi granicę bezpieczeństwa ruchu wychodzącego. Loopback, prywatny, łącze lokalne, NAT klasy operatorskiej, dokumentacja/test, multiemisji, nieokreślone i zarezerwowane zakresy adresów IP są odrzucane. Nazwa hosta jest sprawdzana podczas zapisywania i ponownie podczas dostawy; przekierowania są ponownie sprawdzane. Nie kieruj wywołań zwrotnych do usług wewnętrznych ani nie przekierowuj do sieci prywatnych.

Wspólna koperta wydarzenia

Każde wywołanie zwrotne używa tej samej koperty:

{
  "event_id": "01J...",
  "event": "account.balance_low",
  "occurred_at": "2026-08-28T07:00:00Z",
  "data": {}
}

event_id jest stabilny przy każdej ponownej próbie jednego zdarzenia logicznego. Deduplikuj dostawy do event_id; nie wnioskuj o tożsamości, porównując resztę ładunku. occurred_at to UTC RFC3339. Z biegiem czasu ładunki mogą zyskiwać dodatkowe pola, więc konsumenci muszą ignorować nieznane pola.

Każda dostawa zawiera również ten sam identyfikator zdarzenia w X-Model-Gate-Event-ID.

Katalog wydarzeń

account.balance_low

{
  "event_id": "01J...",
  "event": "account.balance_low",
  "occurred_at": "2026-08-28T07:00:00Z",
  "data": {
    "balance": "10.1234567890",
    "threshold": "20.0000000000",
    "currency": "USD"
  }
}

key.spend_limit_threshold_reached

{
  "event_id": "01J...",
  "event": "key.spend_limit_threshold_reached",
  "occurred_at": "2026-08-28T07:00:00Z",
  "data": {
    "key_id": "KEY_PUBLIC_ID",
    "key_name": "Bank integration",
    "usage": "80.1234567890",
    "spend_limit": "100.0000000000",
    "threshold_percent": 80,
    "currency": "USD"
  }
}

group.spend_limit_threshold_reached

Ładunek wykorzystuje group_id, group_name, dokładnie dziesiętny usage, dokładnie dziesiętny spend_limit, liczba całkowita threshold_percent, I currency = "USD".

request.completed

{
  "event_id": "01J...",
  "event": "request.completed",
  "occurred_at": "2026-08-28T07:00:00.123456Z",
  "data": {
    "request_id": "01J...",
    "status": "completed",
    "response_status": 200,
    "response": {"id":"msg_...","type":"message"}
  }
}

response_status dopuszcza wartość null, jeśli nie istnieje żaden stan HTTP upstream. Wyniki asynchronizacji mogą obejmować nieudane/anulowane/wygasłe wyniki data.error.

Wartości finansowe w ładunkach wywołania zwrotnego są dokładnymi ciągami dziesiętnymi; nie są to wartości wyświetlane w zaokrągleniu interfejsu użytkownika.

Alerty progowe są ponownie uzbrajane, gdy monitorowana wartość opuszcza stan progowy. Proces roboczy progu ocenia warunki mniej więcej raz na minutę poza gorącą ścieżką wnioskowania, więc wywołania zwrotne progów nie są sygnałem przekroczenia milisekund w czasie rzeczywistym.

Format żądania

POST /model-gate/callback HTTP/1.1
Content-Type: application/json
X-Model-Gate-Event-ID: 01J...
X-Model-Gate-Signature: t=1710000000,v1=hex_hmac_sha256

Weryfikacja podpisu

Oblicz HMAC-SHA256 dla dokładnego ciągu <timestamp>.<raw_body> używając sekretu wywołania zwrotnego wygenerowanego w profilu. Pełny sekret jest wyświetlany tylko po wygenerowaniu lub obróceniu i jest przechowywany w postaci zaszyfrowanej w stanie spoczynku. Porównuj podpis szesnastkowy w stałym czasie i odrzucaj znaczniki czasu poza zaakceptowanym oknem powtórki. Znacznik czasu HMAC jest specyficzny dla próby dostarczenia; the event_id pozostaje stabilny przy kolejnych próbach.

Dostawa, odpowiedź i ponowne próby

Dowolny HTTP 2xx odpowiedź akceptuje wydarzenie. HTTP 200 z pustym ciałem jest zalecane. Błędy transportu, przekroczenia limitu czasu i każda odpowiedź inna niż 2xx są awariami.

Każde wydarzenie ma co najwyżej Łącznie 6 prób: pierwsza próba plus pięć ponownych prób. Po nieudanych próbach 1–5 następują 5 sekund, 30 sekund, 2 minuty, 10 minut i 1 godzina. Każda próba jest trudna 15 sekund ogólny limit czasu. Po szóstej nieudanej próbie wydarzenie staje się ostateczne failed i nie ma już automatycznego ponawiania próby. Nieaktualne roszczenia pracowników są automatycznie zwracane do trwałej kolejki.

Nie wykonuj długotrwałej pracy przed udzieleniem odpowiedzi. Sprawdź podpis, utrwal/deduplikuj przez event_id, powrót 2xxi przetwarzaj asynchronicznie.

Powiązana dokumentacja