Webhook chatbota to punkt końcowy HTTPS, na który platforma chatbota wysyła metodą POST ładunek JSON za każdym razem, gdy coś się dzieje: odwiedzający zaczyna rozmowę, agent kończy odpowiedź, zostaje pozyskany lead. Skieruj ten punkt końcowy na n8n, Make lub Zapier, a wszystko dalej — alerty na Slacku, arkusze, aktualizacje CRM, maile uzupełniające — to automatyzacja, którą już umiesz budować. W SuperCognit rejestrujesz punkt końcowy w panelu, wybierasz zdarzenia, a każde doręczenie jest podpisane i ponawiane. Ten poradnik omawia dostępne zdarzenia, wygląd ładunków, odbiornik w każdym z narzędzi i kilka błędów, przez które po cichu tracisz dane.

Zdarzenia, które możesz subskrybować

Nazwy zdarzeń to publiczny kontrakt: nowe są dodawane, istniejących nigdy się nie przemianowuje, więc automatyzacja zbudowana dziś będzie działać dalej. Te, których używa większość osób:

Zdarzenie
Kiedy się uruchamia
Typowe zastosowanie
conversation.created
Odwiedzający zaczyna nową rozmowę z agentem
Liczenie rozmów według strony lub kanału; start licznika sesji
message.created
Dodano wiadomość, z dowolnej strony
Pełne kopiowanie zapisu rozmów do własnej bazy
message.completed
Agent kończy generowanie odpowiedzi
Przegląd jakości, ocena sentymentu, rozliczanie tokenów
lead.captured
Agent pozyskał zakwalifikowanego leada
Alert na Slacku, wiersz w arkuszu, własny CRM
lead.delivered
Lead dotarł do podłączonego CRM
Potwierdzenie przekazania; uruchamia się później niż captured, po ewentualnym ponowieniu
lead.failed
Zrezygnowano z doręczenia do CRM
Alert dla człowieka — lead nadal jest w panelu i można go wysłać ponownie
payment.completed
Link do płatności wysłany na czacie został opłacony
Realizacja, potwierdzenia, panele przychodów
knowledge.source.failed
Ponowna synchronizacja strony lub dokumentu nie powiodła się
Alert dla osoby odpowiedzialnej za treść
product.published / unpublished
Agent lub serwer MCP zmienił status
Dziennik zmian, strona statusu
channel.disconnected
WhatsApp lub Telegram stracił połączenie
Powiadomienie dyżurnego, zanim zauważą klienci

Punkt końcowy z pustą listą zdarzeń otrzymuje wszystko. Zacznij wąsko — jedno zdarzenie, jeden przepływ — i poszerzaj, gdy pierwszy scenariusz zrobi się nudny.

Jak wygląda ładunek leada

{
  "id": "evt_…",                // stable across retries — dedupe on this
  "event": "lead.captured",
  "version": 1,
  "createdAt": "2026-09-10T09:14:02.000Z",
  "workspaceId": "…",           // a receiver may serve several workspaces
  "data": {
    "leadId": "…",
    "productId": "…",
    "sessionId": "…",
    "agent": "Showroom assistant",
    "contact": { "name": "Ana Silva", "email": "ana@example.com", "phone": null },
    "fields": { "budget": "20k" },
    "consent": true,
    "sourceUrl": "https://acme.com/pricing",
    "status": "pending",
    "crm": { "provider": "pipedrive", "leadId": "…", "url": "…" }
  }
}

Obiekt fields zawiera odpowiedzi kwalifikujące zebrane przez agenta, consent rejestruje, że odwiedzający zgodził się na kontakt, a crm występuje tylko wtedy, gdy podłączony jest CRM. Ładunki tylko zyskują pola; nic, co zmapujesz dziś, nie zniknie.

Zarejestruj punkt końcowy

01

Najpierw utwórz odbiornik

W n8n, Make lub Zapier dodaj wyzwalacz webhook i skopiuj podany adres URL. Musi przyjmować POST i szybko odpowiadać kodem 2xx — powolną pracę wykonuj po odpowiedzi.

02

Dodaj webhook w panelu

W Ustawieniach → Webhooki dodaj punkt końcowy, wklej adres URL i wybierz zdarzenia. Skopiuj sekret podpisu; bez niego nie zbudujesz weryfikacji. Ta sama rejestracja jest dostępna przez REST API dla zespołów, które konfigurują wszystko z kodu.

03

Wyślij test

Rozpocznij rozmowę z własnym agentem albo pozyskaj testowego leada. Obserwuj dziennik doręczeń w panelu: każda próba jest zapisywana ze statusem odpowiedzi zwróconym przez Twój punkt końcowy.

04

Zweryfikuj podpis, zanim zaufasz treści

Każde doręczenie zawiera nagłówek x-supercognit-signature: sha256=, a po nim HMAC-SHA256 surowej treści żądania, z Twoim sekretem jako kluczem. Oblicz go, porównaj w stałym czasie, odrzuć przy niezgodności. Każdy może wysłać POST na publiczny URL; podpisać może tylko platforma.

// Node.js — verify the signature on the RAW body (not the parsed JSON)
import { createHmac, timingSafeEqual } from "node:crypto";

export function verify(rawBody, header, secret) {
  const expected = "sha256=" + createHmac("sha256", secret).update(rawBody).digest("hex");
  return expected.length === header.length && timingSafeEqual(Buffer.from(expected), Buffer.from(header));
}

Odbieranie w każdym narzędziu

n8n

Użyj węzła Webhook z metodą POST i opcją „Respond immediately”. Zaraz po nim dodaj węzeł Code, który zweryfikuje podpis za pomocą powyższego fragmentu — n8n udostępnia surową treść, gdy włączysz to w węźle — a potem rozgałęź przepływ według pola event węzłem Switch. Samodzielnie hostowane n8n pod Twoją własną domeną to najporządniejsza opcja: Twój sekret i Twoje dane zostają u Ciebie.

Make

Utwórz Custom webhook, wykonaj jedno testowe doręczenie, żeby Make poznał strukturę, a potem dodaj router według pola event. Make potrafi obliczyć HMAC w funkcji tekstowej; porównaj go z nagłówkiem przed routerem i zatrzymaj scenariusz przy niezgodności.

Zapier

Użyj Webhooks by Zapier z Catch Hook jako wyzwalaczem. Zapier sam parsuje JSON, co jest wygodne, ale oznacza też, że do weryfikacji potrzebujesz kroku Code odtwarzającego surową treść; jeśli to więcej, niż chcesz, ogranicz Zapa do scenariuszy niskiego ryzyka, takich jak powiadomienia, a zapisy w CRM zostaw natywnej integracji.

Ponowienia i idempotentność

Doręczenia, które nie dostaną odpowiedzi 2xx, są ponawiane do pięciu prób z wykładniczym odstępem — co jedną, dwie, cztery i osiem minut — a każda próba jest zapisywana ze statusem odpowiedzi. Pole id w kopercie pozostaje takie samo we wszystkich próbach i właśnie to pozwala usuwać duplikaty: jeśli Twój punkt końcowy odpowiedział powoli, a ponowienie i tak dotarło, druga kopia ma to samo id i ją pomijasz. Odpowiadaj szybko, zapisz id, pracę wykonaj potem.

Pięć scenariuszy, które zwracają koszt konfiguracji

  • lead.captured → wiadomość na Slacku na kanał sprzedaży z kontaktem, odpowiedziami kwalifikującymi i linkiem do zapisu rozmowy.
  • lead.failed → alert dla osoby odpowiedzialnej za połączenie z CRM, z id leada do ponownego wysłania z panelu.
  • message.completed → dopisanie do arkusza przeglądu, a potem losowe sprawdzenie dziesięciu tygodniowo pod kątem jakości.
  • conversation.created → liczenie według sourceUrl w panelu, żeby widzieć, które strony zaczynają rozmowy.
  • knowledge.source.failed → zgłoszenie do właściciela treści, zanim agent zacznie odpowiadać na podstawie nieaktualnych stron.

„Webhook ChatGPT”: dlaczego to wyszukiwanie nie daje nic przydatnego

Osoby szukające webhooka ChatGPT zwykle mają na myśli jedną z dwóch rzeczy. Jeśli zbudowały własnego GPT, odpowiedź brzmi: GPT może wywołać Twoje API przez akcję, ale nie wysyła Ci zdarzenia, gdy odbywa się rozmowa — nie ma wychodzącego webhooka do subskrypcji. Jeśli same zbudowały bota na OpenAI API, webhook to ich własny kod do napisania. Tak czy inaczej, poszukiwana funkcja to platforma, która emituje zdarzenia o rozmowach i leadach. Tym właśnie jest powyższy katalog zdarzeń.

Błędy, przez które tracisz dane

  • Wykonywanie powolnej pracy przed odpowiedzią. Zapis w CRM trwający dwanaście sekund przekracza limit czasu doręczenia, które jest ponawiane — i masz dwie szanse sprzedaży.
  • Weryfikowanie sparsowanego JSON-a zamiast surowej treści. Ponowna serializacja zmienia bajty; podpis nigdy się nie zgodzi.
  • Subskrybowanie wszystkiego pierwszego dnia. Samo message.created to potrafi być tysiące zdarzeń dziennie; zacznij od tego, na które zareagujesz.
  • Ignorowanie lead.failed. Lead jest bezpieczny w panelu, ale nikt nie wie, że trzeba go wysłać ponownie, dopóki coś mu tego nie powie.

Webhooki to ta część chatbota, której nikt nie widzi, a od której wszyscy zależą. Zarejestruj jeden punkt końcowy, zweryfikuj jeden podpis, zbuduj jeden scenariusz, a reszta Twojego stosu zacznie słyszeć, co robi Twój agent.