← Blog

Wysyłka SMS w n8n bez kodu. HTTP Request node + webhook DLR

Zespół Przypominamy.com · 18 maja 2026 · 8 min czytania

n8n to self-hosted alternatywa dla Zapiera i Make — pozwala automatyzować przepływy między aplikacjami bez kodu. W tym przewodniku pokazujemy, jak zintegrować Przypominamy.com z n8n używając wyłącznie wbudowanego HTTP Request node. Bez instalowania community nodes, bez wychodzenia poza standardowy n8n.

Co znajdziesz: konfiguracja Credentials dla Bearer token, wysyłka SMS przez HTTP Request, obsługa rate-limit, odbiór webhooków DLR i incoming SMS, dwa pełne workflowy (formularz → SMS i Stripe → potwierdzenie SMS).

1. Po co n8n do SMS?

Trzy typowe scenariusze, gdy automatyzacja SMS w n8n ma sens:

2. Konfiguracja Credentials

Najpierw zapisz token API jako Credentials w n8n. To pozwala używać go w wielu workflowach bez wpisywania na sztywno:

  1. W n8n: Settings → Credentials → Create New.
  2. Wybierz typ: "HTTP Header Auth".
  3. Nazwa: Przypominamy API.
  4. Header Name: Authorization.
  5. Header Value: Bearer pk_live_a1b2c3d4... (Twój token z panelu klienta).
  6. Save.

n8n szyfruje wartość w bazie i nigdy nie pokazuje jej w JSON-ie workflow ani w logach. Nawet jeśli wyeksportujesz workflow, token tam nie pojedzie.

3. HTTP Request node — pojedynczy SMS

Dodaj nowy workflow i pierwszy node: HTTP Request. Konfiguracja:

ParametrWartość
MethodPOST
URLhttps://api.przypominamy.com/v1/sms
AuthenticationGeneric Credential Type → HTTP Header Auth → "Przypominamy API"
Send HeadersON → Content-Type: application/json
Send BodyON → Body Content Type: JSON
JSON Bodypatrz niżej

JSON Body:

{
  "to": "+48600123456",
  "message": "Cześć! Przypomnienie o wizycie jutro o 14:00.",
  "from": "FIRMA",
  "idx": "n8n-workflow-{{$workflow.id}}-{{$execution.id}}"
}

Zwróć uwagę na idx — n8n udostępnia $workflow.id i $execution.id, więc każdy SMS dostaje unikalny identyfikator. Przyda się w webhookach DLR (sekcja 6).

Kliknij Execute Node — w odpowiedzi zobaczysz {"success": true, "data": {...}} z message_id.

4. Workflow #1: formularz → SMS

Przykład praktyczny: użytkownik wypełnia formularz na stronie (np. Tally, Typeform, n8n Form Trigger) — automatycznie dostaje SMS z potwierdzeniem.

Form TriggerSetHTTP Request
(SMS)

Form Trigger (built-in trigger n8n) — definiujesz pola: imie, telefon, godzina.

Set node — normalizuje numer telefonu (dodaje +48 jeśli brakuje):

// Function w Set node, pole "phone_normalized"
{{ $json.telefon.startsWith('+') ? $json.telefon : '+48' + $json.telefon.replace(/\s/g, '') }}

HTTP Request — wysyłka SMS z dynamicznymi polami:

{
  "to": "{{ $node['Set'].json.phone_normalized }}",
  "message": "Cześć {{ $node['Form Trigger'].json.imie }}, wizyta {{ $node['Form Trigger'].json.godzina }} potwierdzona. Pozdrawiamy!",
  "from": "FIRMA",
  "idx": "form-{{ $execution.id }}"
}

Po aktywacji workflow każda osoba wypełniająca formularz automatycznie dostaje SMS — bez Twojej ingerencji.

5. Workflow #2: Stripe → SMS po zakupie

Bardziej zaawansowany przykład: klient płaci w Stripe — Twój sklep wysyła SMS z potwierdzeniem i numerem zamówienia.

Stripe Trigger
(checkout.completed)
IF
(amount > 0)
HTTP Request
(SMS)

Stripe Trigger — wybierz event checkout.session.completed. n8n dostaje pełen webhook payload z numerem klienta, kwotą, ID zamówienia.

IF node — filtruj tylko płatności na żywo (nie testowe):

// Condition
{{ $json.data.object.livemode }} === true
AND
{{ $json.data.object.amount_total }} > 0

HTTP Request — wysyłka SMS z numerem zamówienia:

{
  "to": "{{ $json.data.object.customer_details.phone }}",
  "message": "Dziękujemy za zamówienie #{{ $json.data.object.id }}. Kwota: {{ ($json.data.object.amount_total / 100).toFixed(2) }} {{ $json.data.object.currency.toUpperCase() }}. Status: opłacone ✓",
  "from": "TWOJSKLEP",
  "idx": "stripe-{{ $json.data.object.id }}"
}

Pole idx używa pełnego Stripe Session ID — w razie potrzeby łatwo skorelujesz SMS z transakcją w bazie.

6. Webhook DLR — czy SMS dotarł?

Chcesz wiedzieć, czy SMS o zamówieniu faktycznie dotarł do klienta? Webhook DLR rozwiązuje to bezpośrednio w n8n:

  1. Stwórz nowy workflow z node'em Webhook (built-in trigger).
  2. Method: POST, Path: /przypominamy-dlr.
  3. Klik Listen for Test Event — n8n pokaże Production URL, np. https://n8n.twojadomena.pl/webhook/przypominamy-dlr.
  4. Skopiuj URL i wklej w panelu klienta Przypominamy.com jako webhook_url.
  5. Aktywuj workflow.

Każda zmiana statusu SMS-a (queued → sent → delivered) wyzwala workflow. Payload jest dostępny jako $json:

{
  "event": "delivery_report",
  "message_id": "msg_abc123",
  "to": "+48600123456",
  "status": "delivered",
  "sent_at": "2026-05-18T10:30:00.000Z",
  "done_at": "2026-05-18T10:30:04.000Z",
  "idx": "stripe-cs_test_xyz"
}

Dodaj kolejne nody: zapis do bazy (Postgres node), Slack notification gdy status === "failed", retry przez VMS (połączenie głosowe) gdy SMS nie dotrze.

7. Rate limit — jak nie wykosić limitu 100/min

Domyślny limit Przypominamy.com to 100 żądań na minutę. W n8n masz dwa sposoby:

Wait node między SMS-ami

Dla małych volumenów (poniżej 100 SMS w workflow) wystarczy Wait node z parametrem amount: 700, unit: milliseconds — daje 85 req/min, z marginesem.

SplitInBatches dla większych wolumenów

Dla 100+ SMS-ów:

Lista numerówSplitInBatches
(batchSize: 50)
HTTP RequestWait (35s)

50 SMS-ów co 35 sekund daje ~85 SMS/min — bezpiecznie pod limitem.

8. Obsługa błędów

HTTP Request node w n8n zwraca kod HTTP i payload. Dodaj Error Trigger lub IF node sprawdzający {{ $json.success === true }}:

KodCo zrobić w n8n
401Slack alert do adminów — token wygasł
402Slack alert + pauza workflow — brak środków
422Loguj do Postgres jako "invalid payload" — nie ponawiaj
429Wait node + retry (use Continue On Fail w HTTP Request)
5xxRetry 3x z Wait, potem alert

W ustawieniach HTTP Request node włącz Continue On Fail i Retry On Fail (3 próby, wait 60s) — najprostsza obrona przed transient errors.

9. Przykład gotowego workflow do importu

Możesz zaimportować ten przykład bezpośrednio do n8n: Workflow → Import from File. Najpierw skontaktuj się z nami ([email protected]) — przygotowujemy dedykowany pakiet workflow templates dla popularnych use cases (przypomnienia o wizytach, potwierdzenia zamówień, 2FA).

FAQ

Czy do wysyłki SMS w n8n potrzebuję dedykowanego node'a?

Nie. Standardowy HTTP Request node wystarczy. To samo dotyczy odbioru webhooków DLR — używasz wbudowanego Webhook node.

Czy n8n self-hosted obsługuje wysyłkę SMS przez API?

Tak. Self-hosted n8n (Docker, Kubernetes) obsługuje pełen zakres HTTP Request node. Możesz wysyłać SMS-y i odbierać webhooki bez ograniczeń.

Jak zabezpieczyć token API w n8n?

Twórz osobne Credentials w n8n (Settings → Credentials → New) typu HTTP Header Auth. n8n szyfruje tokeny w bazie. Nie wpisuj tokenu bezpośrednio w body — zawsze przez Credentials.

Jak obsłużyć rate limit 100 req/min w n8n?

Dodaj Wait node między HTTP Request (600-700ms = ~85-100/min). Lub SplitInBatches z batchSize=50 i Wait 35s. Dla większej skali — Queue Mode z workerami.

Czy webhooki DLR są kompatybilne z n8n Webhook node?

Tak — POST application/json. Pamiętaj że n8n w trybie self-hosted musi być publicznie dostępne (tunel, ngrok, reverse proxy).

Chcesz dedykowany community node n8n?

Pracujemy nad oficjalnym node'em Przypominamy.com dla n8n marketplace. Zarejestruj się — damy znać gdy będzie gotowy.

Załóż konto