Przejdź do treści
Automatyzacje i AI

Powiadomienia SMS o zamówieniu: jak wysyłać status przesyłki ze sklepu internetowego

Jak wysyłać SMS o statusie zamówienia ze sklepu: WooCommerce (hook PHP lub n8n), Shopify przez webhook, gotowe szablony do 160 znaków i uwagi o polskich literach.

Zespół smsportalOpublikowano: 8 min czytania
Paczka i trasa dostawy prowadząca do telefonu z powiadomieniem SMS

Powiadomienia SMS o zamówieniu są jedną z najprostszych automatyzacji w sklepie: klient dostaje krótką wiadomość, gdy zamówienie zostało przyjęte, wysłane lub czeka na odbiór. Dzięki smsportal SMS wychodzi z Twojego numeru, więc klient może odpisać na wątpliwości zamiast dzwonić. Ten artykuł pokazuje trzy drogi: kod PHP w WooCommerce, n8n oraz Shopify przez webhook, razem z szablonami mieszczącymi się w 160 znakach.

Jak działa wysyłka SMS po zmianie statusu zamówienia?

Sklep zgłasza zdarzenie („status zmienił się na wysłane”), a Twój kod lub automatyzacja wysyła żądanie POST na /gateway/send-sms. Telefon z Androidem przekazuje SMS operatorowi. Schemat jest ten sam w każdym sklepie, zmienia się tylko miejsce, z którego wychodzi żądanie.

  1. Zdarzenie: zmiana statusu (WooCommerce) lub webhook zamówienia (Shopify).
  2. Przekazanie: hook PHP albo workflow w n8n lub Make.
  3. Wysyłka: POST https://smsportal.app/api/v1/gateway/send-sms z nagłówkiem x-api-key.
  4. Status: webhooki MESSAGE_SENT, MESSAGE_DELIVERED lub MESSAGE_FAILED wracają do sklepu.
Oś czasu jednej wiadomości w aplikacji: kolejka, wysłana, dostarczona

Przed wdrożeniem skonfiguruj bramkę według instrukcji wysyłki SMS przez API: telefon z kartą SIM, klucz API i konto z bezpłatnym planem na start.

Jak napisać SMS o zamówieniu w 160 znakach?

Jedna część SMS-a w alfabecie GSM-7 mieści 160 znaków, a w UCS-2 (gdy w treści jest choć jedna polska litera) tylko 70. Krótkie szablony bez ogonków mieszczą się w jednym SMS-ie, a z ogonkami trzeba pisać ponad dwa razy krócej.

ZdarzenieSzablon bez polskich liter (GSM-7)Znaki
PrzyjęteZamowienie #1234 przyjete. Dziekujemy! Sklep Kowalski53
WysłaneZamowienie #1234 wyslane. Paczka nr 520012345678. Sklep Kowalski64
Do odbioruZamowienie #1234 czeka w punkcie odbioru. Kod: 4821. Sklep Kowalski67
ZwrotZwrot do zamowienia #1234 przyjety. Pieniadze wroca w 14 dni. Sklep Kowalski76

Ta sama treść z ogonkami, np. Zamówienie #1234 wysłane. Paczka nr 520012345678. Sklep Kowalski (64 znaki), mieści się w jednej części UCS-2 (limit 70), ale dłuższe szablony z literami „ą”, „ę”, „ł” przekroczą go i zostaną podzielone na części po 67 znaków. Wybór jest prosty: albo piszesz bez ogonków, albo pilnujesz krótkich tekstów. Licznik znaków i części w aplikacji na telefonie pokazuje to na bieżąco.

Wskazówka: podpisuj SMS nazwą sklepu na końcu. Nie ma nadpisu nadawcy, bo wiadomość wychodzi z numeru telefonu, więc klient poznaje nadawcę po treści. Więcej o tym w artykule o nazwie nadawcy i własnym numerze.

Jak wysłać SMS po zmianie statusu w WooCommerce (kod PHP)?

W WooCommerce użyj hooka woocommerce_order_status_changed, który dostaje numer zamówienia, stary status, nowy status i obiekt zamówienia, a w jego funkcji wywołaj wp_remote_post na adres API. To około 30 linii kodu w pliku functions.php motywu potomnego lub w małej wtyczce.

Najpierw dodaj klucz do wp-config.php (nigdy do repozytorium ani motywu):

php
define( 'SMSPORTAL_API_KEY', 'TWÓJ_KLUCZ_API' );

Następnie wklej hook:

php
add_action( 'woocommerce_order_status_changed', function ( $order_id, $from, $to, $order ) {
    $templates = array(
        'processing' => 'Zamowienie #%d przyjete. Dziekujemy! Sklep Kowalski',
        'completed'  => 'Zamowienie #%d wyslane. Sklep Kowalski',
    );
    if ( ! isset( $templates[ $to ] ) ) {
        return;
    }

    // Numer w formacie +48...
    $digits = preg_replace( '/\D/', '', $order->get_billing_phone() );
    if ( strlen( $digits ) === 9 ) {
        $digits = '48' . $digits;
    }
    if ( strlen( $digits ) < 11 ) {
        return;
    }

    $response = wp_remote_post( 'https://smsportal.app/api/v1/gateway/send-sms', array(
        'timeout' => 10,
        'headers' => array(
            'x-api-key'    => SMSPORTAL_API_KEY,
            'Content-Type' => 'application/json',
        ),
        'body'    => wp_json_encode( array(
            'recipients' => array( '+' . $digits ),
            'message'    => sprintf( $templates[ $to ], $order_id ),
        ) ),
    ) );

    if ( is_wp_error( $response ) ) {
        error_log( 'smsportal: ' . $response->get_error_message() );
    }
}, 10, 4 );

Klucze tablicy (processing, completed) to statusy WooCommerce bez prefiksu wc-. Własne statusy dodane wtyczkami też zadziałają po podaniu ich nazwy. Numer przesyłki nie jest standardowym polem WooCommerce: jeśli używasz wtyczki do śledzenia paczek, pobierz go z pola zamówienia, które ta wtyczka zapisuje (nazwa zależy od wtyczki). Dokumentacja WooCommerce opisuje hooki zamówień w katalogu dla deweloperów.

Uwaga: hook wykonuje się przy zapisie zamówienia, więc 10-sekundowy limit czasu spowalnia panel, gdy API jest niedostępne. Przy większym ruchu przenieś wysyłkę do kolejki albo do zewnętrznego workflow (poniżej).

Jak połączyć WooCommerce z SMS bez pisania kodu?

Użyj webhooka WooCommerce z tematem „Order updated” i adresem workflow w n8n lub Make. Workflow filtruje status i wysyła SMS węzłem HTTP, więc zmiana treści nie wymaga edycji sklepu. To lepsza droga, gdy treści zmienia ktoś niebędący programistą.

  1. W WooCommerce: Ustawienia → Zaawansowane → Webhooki → Dodaj. Temat: Order updated, adres: Production URL z węzła Webhook w n8n.
  2. W n8n: węzeł IF sprawdza {{ $json.body.status }}, np. completed.
  3. Węzeł HTTP Request wysyła SMS (ustawienia i gotowy JSON do wklejenia znajdziesz w artykule o SMS w n8n):
json
{
  "recipients": ["{{ $json.body.billing.phone }}"],
  "message": "Zamowienie #{{ $json.body.number }} wyslane. Sklep Kowalski"
}

W n8n jest też gotowy węzeł WooCommerce Trigger, który sam rejestruje webhook w sklepie. Dla Make użyj modułu Webhooks i modułu HTTP zgodnie z artykułem o Make i Zapierze. Pamiętaj, że telefon klienta w WooCommerce bywa bez prefiksu kraju: dodaj w workflow węzeł, który przed wysyłką dopisze +48.

WooCommerce wyłącza webhook po kilku kolejnych nieudanych dostawach, więc po awarii n8n sprawdź jego status w ustawieniach.

Jak wysłać SMS o zamówieniu ze sklepu Shopify?

W Shopify subskrybuj webhook zamówień (np. orders/create lub orders/fulfilled) i przekaż go do n8n, które wyśle SMS przez HTTP Request. Shopify nie wysyła SMS-ów z Twojego numeru, więc ten krok robi smsportal. Najprościej użyć węzła Shopify Trigger w n8n.

  1. Shopify Trigger w n8n: zdarzenie Order Created lub Order Fulfilled, po podłączeniu poświadczeń sklepu.
  2. IF (opcjonalnie): wyślij tylko, gdy zamówienie ma numer telefonu ({{ $json.phone }} lub pole w adresie dostawy).
  3. HTTP Request do /gateway/send-sms jak wyżej.

Własny webhook (bez n8n) rejestrujesz przez API Shopify i weryfikujesz podpisem w nagłówku X-Shopify-Hmac-Sha256: dokumentacja webhooków Shopify opisuje tematy zamówień i sposób sprawdzania podpisu. Zwróć uwagę, że telefon klienta nie zawsze jest wymagany w koszyku, więc część zamówień nie wywoła SMS-a.

Czy muszę mieć zgodę klienta na SMS o zamówieniu?

SMS informujący o stanie konkretnego zamówienia jest wiadomością transakcyjną, ale nie wolno dopisywać do niego reklamy ani kuponu bez odrębnej zgody marketingowej. Zasady opisuje Prawo komunikacji elektronicznej i RODO, a praktyczny przegląd daje artykuł o zgodzie na SMS-y marketingowe. To nie jest porada prawna.

Dobre praktyki:

  • zbieraj numer telefonu z informacją, po co go używasz (status zamówienia),
  • nie wysyłaj SMS-ów w nocy: ustaw w workflow okno godzin i użyj pola scheduledAt,
  • zamiast „odpisz STOP” w SMS-ach transakcyjnych podaj kontakt do sklepu.

Jak przetestować powiadomienia przed uruchomieniem w sklepie?

Zrób testowe zamówienie na własny numer i przejdź przez wszystkie statusy, dla których masz szablony. Dopiero potem włącz kod na sklepie produkcyjnym. Najlepiej robić to na kopii sklepu (staging) albo przynajmniej z filtrem, który przepuszcza tylko Twój numer.

  1. Złóż zamówienie z własnym telefonem w polu numeru, najlepiej w formacie bez prefiksu, jak wpisuje klient. Sprawdzisz tym normalizację do +48….
  2. Zmień status w panelu sklepu na każdy ze skonfigurowanych (np. W trakcie realizacji, Zakończone) i po każdej zmianie sprawdź SMS.
  3. Sprawdź w panelu smsportal status wiadomości oraz liczbę części. Treść z polskimi literami ma ich więcej.
  4. Zmień status dwa razy z rzędu na ten sam i upewnij się, że SMS nie wyjdzie podwójnie. Hook uruchamia się przy realnej zmianie, ale wtyczki potrafią zapisywać zamówienie wielokrotnie.
  5. Sprawdź zamówienie bez numeru telefonu: kod powinien je po cichu pominąć.

Hook woocommerce_order_status_changed przyjmuje cztery argumenty (numer zamówienia, stary status, nowy status, obiekt zamówienia), co potwierdza kod klasy WC_Order w repozytorium WooCommerce. Uruchamia się on przy zmianie ze znanego poprzedniego statusu, więc dla świeżo utworzonych zamówień sprawdź na teście, czy SMS „przyjęte” faktycznie wychodzi.

Najczęstsze problemy: dlaczego SMS o zamówieniu nie wychodzi?

Zwykle winny jest zły nagłówek, numer bez prefiksu, wyłączony telefon albo adres webhooka, do którego sklep nie może dotrzeć. Poniżej objawy i naprawa.

ObjawPrzyczynaCo zrobić
401 w loguNagłówek Authorization zamiast x-api-keyW wp_remote_post ustaw 'x-api-key' => SMSPORTAL_API_KEY
SMS nie dochodzi, odpowiedź 400Numer klienta bez +48 (np. 600 100 200)Normalizuj do E.164: usuń spacje i myślniki, dopisz +48 dla 9 cyfr. Kod z artykułu to robi
SMS „w kolejce” długoTelefon z bramką jest offlineSprawdź zasięg, internet i zasilanie. Wiadomości czekają do 72 godzin
Webhook sklepu nie dociera do n8nAdres nie jest publicznym HTTPS lub użyto adresu testowegoWklej w WooCommerce lub Shopify adres produkcyjny workflow i włącz go. Adres testowy n8n działa tylko, gdy edytor nasłuchuje
Webhook WooCommerce przestał działaćPo kilku kolejnych nieudanych dostawach sklep sam wyłącza webhookNapraw odbiorcę i włącz webhook ponownie w ustawieniach. Logi: WooCommerce → Status → Logs
SMS wychodzi w dwóch częściachPolskie litery zmieniły kodowanie na UCS-2 (limit 70 znaków)Pisz szablony bez ogonków lub skróć je. Licznik w aplikacji pokazuje części

Gdy podejrzewasz kod PHP, sprawdź error_log serwera: hook z artykułu zapisuje tam błędy połączenia z API.

Kiedy własny telefon wystarcza do sklepu, a kiedy nie?

Telefon jako bramka obsłuży powiadomienia z małego i średniego sklepu: dziesiątki lub kilkaset wiadomości dziennie. Wysyła SMS-y w odstępach (domyślnie 5 sekund, ok. 720 na godzinę z jednego telefonu), więc nagłe piki, np. po wyprzedaży, rozkładają się w czasie. Przy dużym ruchu dodaj kolejne urządzenia lub wybierz hurtowego dostawcę (zob. ile kosztuje wysyłka SMS).

Telefon musi mieć zasięg, internet i zasilanie. Gdy jest offline, wiadomości czekają do 72 godzin, po czym wygasają, więc pilne kody (np. odbioru paczki) opatrz krótkim terminem ważności.

Następny krok

Załóż bezpłatne konto smsportal, podłącz telefon i wyślij testowy SMS ręcznie. Gdy to działa, wklej hook PHP lub workflow n8n i zmień status testowego zamówienia. Pola żądania opisuje dokumentacja API, a plany znajdziesz w cenniku. Podobny schemat działa przy przypomnieniach o wizycie.

Najczęściej zadawane pytania

Jak wysłać SMS o zmianie statusu zamówienia w WooCommerce?

Podłącz hook woocommerce_order_status_changed i w jego funkcji wyślij żądanie POST na https://smsportal.app/api/v1/gateway/send-sms z nagłówkiem x-api-key. Alternatywą jest webhook WooCommerce z tematem „Order updated” kierowany do n8n lub Make, bez pisania kodu w sklepie.

Czy do SMS-ów o zamówieniu potrzebuję zgody klienta?

SMS stricte informacyjny o realizowanym zamówieniu to wiadomość transakcyjna, ale reklamy i promocje wymagają odrębnej zgody marketingowej. Nie mieszaj ich w jednym SMS-ie. To nie jest porada prawna, więc sprawdź zasady w artykule o zgodach i RODO.

Ile znaków może mieć SMS o statusie zamówienia?

160 znaków w jednej części, jeśli używasz tylko znaków alfabetu GSM-7, czyli bez polskich liter. Jedna litera z ogonkiem przełącza wiadomość na UCS-2 i limit spada do 70 znaków. Dłuższa treść zostanie podzielona na kilka części.

Czy SMS może zawierać numer przesyłki i link do śledzenia?

Tak, o ile mieści się w limicie znaków. Numer paczki i krótki link wystarczą, a długie adresy śledzenia skracaj. Link w SMS-ie zawsze prowadź do domeny sklepu lub przewoźnika, żeby klient nie wziął go za oszustwo.

Co jeśli telefon z bramką jest wyłączony, gdy wpada zamówienie?

Wiadomość czeka w kolejce do 72 godzin i wyjdzie po powrocie telefonu do sieci. Po tym czasie wygasa. Do statusów zamówień to zwykle wystarcza, a stan telefonu sprawdzisz w panelu i w aplikacji.

Wyślij pierwszego SMS-a jeszcze dziś

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