SMS w Zapierze z własnego numeru: wysyłka i odbiór

Sprawdzone z dokumentacją:

W Zapierze SMS wysyła akcja Webhooks by Zapier → Custom Request: POST https://smsportal.app/api/v1/gateway/send-sms, nagłówki x-api-key i Content-Type: application/json, a w polu Data JSON z recipients i message. Odpowiedzi klientów łapie wyzwalacz Catch Hook. Webhooks by Zapier wymaga planu Professional lub wyższego. Aplikacja „SMSPortal” w katalogu Zapiera to inna firma, nie smsportal.app.

Czego potrzebujesz

  • Zapier w planie Professional, Team albo Enterprise (Webhooks by Zapier nie działa w planie Free).
  • Konto smsportal z podłączonym telefonem z Androidem i kartą SIM.
  • Klucz API z panelu smsportal (Klucze API → Wygeneruj klucz API).
  • Nie wybieraj aplikacji „SMSPortal” z katalogu Zapiera: to osobna firma (smsportal.com) z własnymi kontami. Nasz klucz tam nie zadziała.

Jak wysłać SMS z Zapiera

  1. Dodaj akcję Webhooks by Zapier

    W Zapie dodaj krok akcji, wybierz aplikację Webhooks by Zapier i Action event Custom Request. Custom Request wysyła JSON dokładnie tak, jak go wpiszesz, więc recipients zostaje listą.

  2. Ustaw metodę, adres i nagłówki

    Method POST, URL https://smsportal.app/api/v1/gateway/send-sms. W Headers dodaj dwie pozycje: x-api-key z kluczem z panelu i Content-Type z wartością application/json. Data Pass-Through? zostaw na False.

  3. Wklej JSON w pole Data

    Wklej JSON poniżej. Napisy w nawiasach, np. [1. Phone], usuń i w ich miejsce wstaw pola z poprzednich kroków z listy danych. Numer musi mieć kierunkowy kraju, np. +48600100200. Opcjonalnie dodaj deviceId, simSubscriptionId albo scheduledAt (czas ISO 8601 w przyszłości).

    Pole Data (Custom Request)
    {
      "recipients": ["[1. Phone]"],
      "message": "Dzień dobry [1. Name], potwierdzamy rezerwację na [1. Start Time]. Odpisz, jeśli coś się zmieni."
    }
  4. Przetestuj na własnym numerze

    Wpisz na próbę swój numer i kliknij Test step. Odpowiedź 200 z polem data oznacza, że wiadomość trafiła do kolejki. Status (wysłana, doręczona) zobaczysz w panelu smsportal, a każde wywołanie w Zap history.

Jak odebrać odpowiedź klienta w Zapierze

Gdy telefon odbierze SMS, smsportal wysyła POST z JSON-em na adres webhooka. Catch Hook rozbija go na pola: sender (numer nadawcy), message (treść), receivedAt i webhookEvent. Każde żądanie ma nagłówek X-Signature: HMAC-SHA256 surowego ciała, liczony Twoim sekretem podpisu, zapisany szesnastkowo.

  1. Utwórz Zapa z wyzwalaczem Webhooks by Zapier, Trigger event Catch Hook. Na karcie Test skopiuj adres webhooka.
  2. W panelu smsportal otwórz Webhooki → Utwórz webhook, wklej adres, wpisz sekret podpisu (co najmniej 20 znaków) i zaznacz zdarzenie MESSAGE_RECEIVED.
  3. Wyślij SMS na swój telefon z innego numeru i kliknij Test trigger. Zapier pokaże próbkę z polami sender i message, które zmapujesz w kolejnych krokach.
  4. Opublikuj Zapa. Wyłączony Zap odpowiada na webhooki kodem 404, a smsportal po 3 takich próbach przestaje ponawiać dane zdarzenie.
  5. Do sprawdzenia podpisu potrzebujesz surowego ciała i nagłówków: daje je wyzwalacz Catch Raw Hook (do 2 MB). Skrót HMAC-SHA256 z sekretem policzysz w kroku Code by Zapier i porównasz z nagłówkiem x-signature.
Przykładowe ciało zdarzenia MESSAGE_RECEIVED
{
  "smsId": "6720f0c2a1b2c3d4e5f60718",
  "message": "Potwierdzam wizytę",
  "deviceId": "671f9e10a1b2c3d4e5f60001",
  "webhookSubscriptionId": "671fa001a1b2c3d4e5f60002",
  "webhookEvent": "MESSAGE_RECEIVED",
  "idempotencyKey": "3f1c9a8e-5d2b-4c7a-9e1f-2b6d8c0a4e57",
  "sender": "+48600100200",
  "receivedAt": "2026-10-28T09:41:00.000Z"
}

Gotowe scenariusze

  • Rezerwacja w Calendly: potwierdzenie i przypomnienie

    Calendly → Invitee Created uruchamia Zapa, a Custom Request od razu wysyła potwierdzenie na numer z pytania o telefon. Drugi Custom Request z scheduledAt ustawia przypomnienie: godzinę spotkania cofnij o 24 godziny w Formatter (Date / Time → Add/Subtract Time) i zapisz w formacie ISO 8601. Dla rezerwacji bliżej niż 24 godziny dodaj Filter, bo czas z przeszłości API odrzuci.

  • Nowe zgłoszenie z formularza dostaje SMS

    Typeform → New Entry albo Google Forms → New Form Response, potem Custom Request z treścią potwierdzenia. Pole telefonu w formularzu musi zbierać numer z kierunkowym kraju.

  • Odpowiedzi klientów w arkuszu

    Catch Hook z MESSAGE_RECEIVED, potem Google Sheets → Create Spreadsheet Row z kolumnami sender, message i receivedAt. Zespół widzi wszystkie odpowiedzi w jednym miejscu, a ten sam krok możesz zamienić na notatkę w CRM.

Błędy i rozwiązania

Custom Request zwraca 401
Przyczyna: Nagłówek Authorization zamiast x-api-key, zły klucz albo spacja w wartości.
Co zrobić: W Headers wpisz nazwę dokładnie x-api-key, a w wartości sam klucz z panelu, bez spacji na początku i końcu.
400 Invalid recipients
Przyczyna: Użyta akcja POST z polami klucz–wartość: Zapier wysyła wtedy numer jako tekst, a API oczekuje listy.
Co zrobić: Użyj akcji Custom Request z surowym JSON-em w polu Data: "recipients": ["+48600100200"].
400 tylko przy niektórych wiadomościach
Przyczyna: Zmapowana treść zawiera cudzysłów albo znak nowej linii. Custom Request nie zabezpiecza takich znaków, więc JSON jest niepoprawny.
Co zrobić: Przed wysyłką usuń te znaki krokiem Formatter (Text → Replace) albo nie mapuj do treści wolnego tekstu od klienta.
400 scheduledAt must be a future date
Przyczyna: Wyliczony czas przypomnienia jest już w przeszłości, np. rezerwacja na dziś.
Co zrobić: Dodaj Filter, który przepuszcza tylko spotkania dalsze niż 24 godziny, albo wysyłaj takie przypomnienie bez scheduledAt.
Catch Hook nic nie dostaje
Przyczyna: Zap jest wyłączony (Zapier odpowiada 404) albo w panelu jest inny adres. smsportal przestaje ponawiać po 3 próbach z błędem 4xx, a subskrypcję, która ciągle zawodzi, wstrzymuje.
Co zrobić: Opublikuj Zapa, sprawdź adres w panelu smsportal (Webhooki) i stan subskrypcji.
429 przy wysyłce
Przyczyna: Wyczerpany limit SMS-ów w pakiecie.
Co zrobić: Treść odpowiedzi mówi, który limit się skończył. Sprawdź licznik w panelu albo zmień pakiet w Cenniku.

Najczęstsze pytania

Czy aplikacja SMSPortal w Zapierze to smsportal.app?

Nie. „SMSPortal” w katalogu Zapiera to inna firma (smsportal.com), która wysyła SMS-y przez własną bramkę i rozlicza każdą wiadomość. smsportal.app nie ma aplikacji w Zapierze: łączysz się przez Webhooks by Zapier, a SMS wychodzi z Twojego telefonu.

Czy zadziała w darmowym planie Zapiera?

Nie. Webhooks by Zapier i API by Zapier są dostępne w planach Professional, Team i Enterprise. Jeśli chcesz zacząć bez opłat, użyj Make (moduł HTTP) albo n8n.

Ile tasków zużywa jeden SMS?

Jeden: task to każda udana akcja, a wyzwalacze, filtry i kroki zakończone błędem się nie liczą. smsportal nie pobiera opłat za pojedynczy SMS: płacisz abonament karty SIM u operatora.

Jak ukryć klucz API przed innymi osobami z dostępem do Zapa?

Klucz w Headers widzi każdy, kto edytuje Zapa. API by Zapier (wersja beta) trzyma go w połączeniu: Authentication type `Static Headers (API key)`, w Headers `x-api-key: TWOJ_KLUCZ`, Domain filter `smsportal.app`. Potem akcja API Request z tym samym adresem i JSON-em w polu Body.

Czy Zapier wie, że SMS został doręczony?

Odpowiedź Custom Request mówi tylko, że wiadomość przyjęto do kolejki. O wysłaniu i doręczeniu informują zdarzenia `MESSAGE_SENT` i `MESSAGE_DELIVERED`, które odbierzesz osobnym Catch Hook.

Ile SMS-ów mogę wysłać naraz?

Telefon wysyła z przerwą między wiadomościami (domyślnie 5 sekund, czyli około 720 na godzinę z jednego telefonu). To rozwiązanie do potwierdzeń, przypomnień i odpowiedzi, nie do kampanii marketingowych.

Źródła

  1. Zapier: Send webhooks in Zap workflows
  2. Zapier: Trigger Zap workflows from webhooks
  3. Zapier: How to get started with API by Zapier
  4. Zapier: How is task usage measured
  5. Zapier: aplikacja SMSPortal (inna firma)
  6. smsportal: dokumentacja API

Więcej w poradnikach

Wyślij pierwszego SMS-a jeszcze dziś

Załóż darmowe konto, podłącz telefon i sprawdź, jak klienci reagują na wiadomości z Twojego numeru.