Stabilność

Produkcja wymaga odporności: retry, fallback i czytelna diagnostyka.

Stabilność integracji: szybka odpowiedź, fallback i diagnostyka

IVR API działa w czasie rzeczywistym — webhook jest “na ścieżce rozmowy”. Stabilność to nie tylko “czy działa”, ale czy działa przewidywalnie w godzinach szczytu i w sytuacjach awaryjnych (timeout, błąd zależności, brak odpowiedzi konsultanta).

Fast path: co powinno się wydarzyć w 1–2 sekundy

Najlepszy wzorzec to “szybka decyzja”: odebranie requestu → minimalna logika → Action → koniec. Cięższe rzeczy (np. duże zapytania do systemów) rób przez cache lub etapami.

  • celuj w czas odpowiedzi webhooka < 1–2 s,
  • zależności (CRM/ERP/helpdesk) odpytywane z krótkimi timeoutami,
  • jeśli nie masz danych → wybierz “bezpieczną” ścieżkę (kolejka / komunikat),
  • cache dla najczęstszych lookupów (np. opiekun po numerze, VIP/SLA),
  • unikaj blokowania na operacjach, które nie są krytyczne dla decyzji.

Zasada praktyczna: lepiej odesłać rozmowę do sensownej kolejki niż czekać na “idealną” decyzję i wpaść w timeout.

Fallback: dwie warstwy zabezpieczenia

Fallback planujesz w dwóch miejscach: w panelu (gdy webhook nie odpowie) oraz w kodzie (gdy brakuje danych / zależność nie działa).

  • Fallback w panelu IVR API — co zrobić przy timeout/błędzie wywołania (komunikat / połączenie / kolejka / rozłączenie).
  • Fallback w kodzie — “bezpieczna decyzja” gdy nie masz danych (np. routing do kolejki zamiast do opiekuna).
  • Limit eskalacji — 1–2 próby (plan A/plan B), potem kolejka albo komunikat końcowy.

Jeśli dopinasz routing: Kolejki i routing.

Retry i idempotencja po Twojej stronie

Webhook może zostać ponowiony (albo Twoja aplikacja może dostać kilka zdarzeń w krótkim czasie). Najbezpieczniej traktować logikę jako idempotentną: ten sam event nie powinien tworzyć dwóch ticketów / dwóch leadów.

  • korelacja po UniqueCallId + EventName (i ewentualnie krok z Session),
  • jeśli tworzysz ticket/leada: “upsert”, a nie “insert bez sprawdzania”,
  • unikaj efektów ubocznych przy samym “Connected” (chyba że masz pewność, co robisz).

Diagnostyka: co logować, żeby nie debugować w ciemno

  • UniqueCallId (korelacja end-to-end),
  • Event.EventName i (jeśli dotyczy) Event.EventData,
  • czas odpowiedzi webhooka (ms),
  • zwrócony Action.Type + kluczowe parametry (bez danych wrażliwych),
  • gdy jest błąd: ErrorNo / ErrorMsg (jeśli przychodzą w request).

Minimalny dashboard, który daje efekt: liczba webhooków, percentyle czasu odpowiedzi, liczba timeoutów oraz rozkład CallStatus (Answer/Busy/Noanswer/Error).

Chcesz zamknąć temat bezpieczeństwa?

Stabilność i bezpieczeństwo idą razem: HTTPS, weryfikacja wywołań, kontrola dostępu i ograniczenia ruchu.

Bezpieczeństwo webhooka    Webhook: żądanie