Integracje

Wysyłaj odpowiedzi z formularza przez webhooki

Webhooki to uniwersalny sposób YeetForm na wysyłanie danych odpowiedzi gdziekolwiek: do własnego backendu, zadania synchronizacji bazy danych albo innej platformy automatyzacji. Dodaj endpoint HTTPS w zakładce Integracje formularza, a YeetForm wyśle podpisany payload JSON metodą POST przy każdej nowej odpowiedzi, z sekretem, względem którego możesz weryfikować za pomocą HMAC-SHA256. Nieudane dostarczenia są automatycznie ponawiane. Ta strona opisuje dokładny format podpisu, kształt payloadu i harmonogram ponowień, abyś mógł pewnie zbudować odbiornik.

Konfiguracja

1.

Dodaj endpoint

W zakładce Integracje formularza wklej URL swojego endpointu HTTPS pod Webhooks i kliknij Dodaj webhook. YeetForm generuje sekret podpisujący (whsec_...) dla tego endpointu.

2.

Zweryfikuj podpis

Każde dostarczenie niesie nagłówek X-YeetForm-Signature: t=<unix ts>,v1=<hex hmac-sha256 z `${t}.${body}`>. Zweryfikuj go względem surowego ciała żądania, zanim zaufasz payloadowi.

import { createHmac, timingSafeEqual } from "crypto";

function verify(secret, signatureHeader, rawBody) {
  const [tPart, v1Part] = signatureHeader.split(",");
  const timestamp = tPart.split("=")[1];
  const signature = v1Part.split("=")[1];

  const expected = createHmac("sha256", secret)
    .update(`${timestamp}.${rawBody}`)
    .digest("hex");

  const a = Buffer.from(signature, "hex");
  const b = Buffer.from(expected, "hex");
  if (a.length !== b.length) return false;
  return timingSafeEqual(a, b);
}
3.

Odczytaj payload

POST-y są wysyłane przy response.created (oraz webhook.test dla ręcznego przycisku testowego), z id formularza, id odpowiedzi, licznikiem odpowiedzi i odpowiedziami kluczowanymi po id pola, plus tablicą fields z etykietą każdego pola.

{
  "event": "response.created",
  "form_id": "<uuid>",
  "form_title": "Customer Feedback",
  "response_id": "<uuid>",
  "response_count": 42,
  "answers": { "fld_x": "..." },
  "fields": [{ "id": "fld_x", "label": "Your name", "type": "text" }],
  "submitted_at": "2026-09-13T12:00:00.000Z"
}
4.

Obsłuż ponowienia

Odpowiedź inna niż 2xx (lub przekroczenie czasu) uruchamia ponowienie: natychmiast, potem po 30 sekundach, potem po 5 minutach - łącznie 3 próby, zanim YeetForm oznaczy dostarczenie jako nieudane. Przekierowania nie są śledzone, więc skieruj URL bezpośrednio na swój endpoint.

Wskazówki

  • →Etykiety pól są zawarte w tablicy fields payloadu (id, label, type), więc nie musisz na stałe wpisywać id pól po stronie odbiorczej.
  • →Każda odpowiedź ma stabilne response_id - użyj go jako klucza idempotencji, ponieważ ponowione dostarczenie używa tego samego id.
  • →Nieudane dostarczenie jest ponawiane łącznie do 3 razy (natychmiast, 30 s, 5 min), zanim zostanie oznaczone jako nieudane - do zaliczenia sukcesu wymagana jest odpowiedź 2xx, a przekierowania nie są śledzone.

Zbuduj formularz z AI w kilka sekund

Zacznij za darmo

FAQ

Co uruchamia webhook?+
response.created uruchamia się przy każdej nowej odpowiedzi; webhook.test uruchamia się, gdy klikniesz przycisk testowy integracji, dzięki czemu możesz zweryfikować swój endpoint przed uruchomieniem produkcyjnym.
Skąd mam wiedzieć, że żądanie naprawdę pochodzi z YeetForm?+
Zweryfikuj nagłówek X-YeetForm-Signature względem sekretu Twojego endpointu za pomocą HMAC-SHA256 nad `${timestamp}.${rawBody}` - zobacz fragment weryfikacji powyżej.
Co się stanie, jeśli mój endpoint jest niedostępny?+
YeetForm ponawia łącznie do 3 razy: natychmiast, po 30 sekundach, potem po 5 minutach. Jeśli wszystkie trzy zawiodą, dostarczenie zostaje oznaczone jako nieudane i nie jest dalej ponawiane.
Czy mogę dodać niestandardowe nagłówki?+
Tak, konfigurując webhook możesz ustawić niestandardowe nagłówki - są one dołączane, ale własne nagłówki Content-Type i X-YeetForm-* YeetForm zawsze wygrywają w razie konfliktu.