Po zgłoszeniu
Strona Po wysłaniu formularza decyduje, co się dzieje, gdy ktoś się zapisze: wiadomość z podziękowaniem lub inna strona, e-maile, newsletter, konto klienta i webhook do innego systemu. Wszystko oprócz wiadomości z podziękowaniem jest wyłączone, dopóki tego nie włączysz.

- Zakładki języków dla wiadomości z podziękowaniem i treści e-maili.
- Podziękowanie: co widzi odwiedzający po wysłaniu, strona polityki prywatności, reset kiosku i kontrola duplikatów.
- E-maile: e-mail z potwierdzeniem dla odwiedzającego.
- Dzienne podsumowanie: e-mail z podsumowaniem dla zespołu (Dzienne podsumowanie).
- Opcje: newsletter i konto klienta.
- Webhook: zgłoszenia przesyłane do innego systemu.
Jeden przycisk Zapisz na dole zapisuje całą stronę. Odwiedzający najpierw otrzymuje odpowiedź; e-maile, opcje i webhook działają zaraz potem, każde niezależnie. Jeśli któreś z nich zawiedzie, odwiedzający nigdy nie zobaczy błędu: błąd zostaje zapisany w menu Zaawansowane › Logi, w wierszu zaczynającym się od pchscansign.
Podziękowanie
| Ustawienie | Do czego służy |
|---|---|
| Po wysłaniu formularza | Pokaż wiadomość zastępuje formularz wiadomością z podziękowaniem. Otwórz inną stronę otwiera wpisany adres, np. stronę z kodem rabatowym. Kiosk zawsze pokazuje wiadomość. |
| Wiadomość z podziękowaniem | Tekst wyświetlany po udanym zgłoszeniu, osobno dla każdego języka. Napisz, co będzie dalej, np. „Zadzwonimy do Ciebie w ciągu dwóch dni.” |
| Strona do otwarcia | Pełny adres zaczynający się od https://. Dodawane są do niego wartości UTM zgłoszenia, dzięki czemu narzędzia analityczne przypisują wizytę wydarzeniu (Śledzenie za pomocą wartości UTM). |
| Strona polityki prywatności | Strona CMS sklepu, do której link pojawia się pod formularzem (domyślnie Brak). Kiosk otwiera ją w okienku nad formularzem. Wybierz politykę prywatności zawsze, gdy formularz pyta o dane osobowe. |
| Reset kiosku | Liczba sekund, przez które kiosk pokazuje wiadomość z podziękowaniem przed wyświetleniem pustego formularza, od 3 do 120. Po instalacji: 8 sekund. |
| Kontrola duplikatów | Drugie zgłoszenie z tym samym adresem e-mail w ciągu 24 godzin otrzymuje podziękowanie, ale nie jest ponownie zapisywane ani liczone. Włączona dla nowych formularzy (Ogólne); wyłącz ją, jeśli jedna osoba może zapisać kilka osób z tym samym adresem. Wymaga pola używanego jako adres e-mail. |
E-mail z potwierdzeniem
Odwiedzający może otrzymać kopię odpowiedzi zaraz po zgłoszeniu. Włącz E-mail z potwierdzeniem na karcie E-maile; wymaga to pola używanego jako Adres e-mail osoby.
| Ustawienie | Do czego służy |
|---|---|
| Temat e-maila | Temat, osobno dla każdego języka. {form_title} zamienia się w tytuł formularza. Po instalacji: „Twoje zgłoszenie: {form_title}”. |
| Treść e-maila | Tekst nad odpowiedziami, osobno dla każdego języka: kolejne kroki, data wydarzenia, dane kontaktowe. Po instalacji: „Dziękujemy za zgłoszenie. Oto kopia Twoich odpowiedzi.” |

E-mail zawiera logo i nazwę sklepu, tytuł formularza, Twój tekst, odpowiedzi z pytaniami w brzmieniu, w jakim zostały zadane, kolor przycisku formularza jako akcent oraz wiersz z informacją, dlaczego osoba go otrzymuje. Jest napisany w języku linku, z którego skorzystała osoba, i wysyłany zgodnie z ustawieniami e-mail sklepu.
Dodawanie do newslettera
Dodaj do newslettera zapisuje do newslettera osoby, które zaznaczą pole zgody na newsletter. Wymaga pola e-mail i pola wyboru używanego jako Zgoda na newsletter. Dla każdego zgłoszenia z zaznaczonym polem:
- Jeśli klient sklepu ma ten adres e-mail, jego konto klienta zostaje zapisane do newslettera.
- W przeciwnym razie adres zostaje dodany do subskrybentów modułu PrestaShop Subskrypcja biuletynu (
ps_emailsubscription), jeśli ten moduł jest zainstalowany i aktywny.
Tworzenie konta klienta
Utwórz klienta tworzy konto klienta dla osób, które go nie mają. Wymaga pól używanych jako adres e-mail, imię i nazwisko.
- Gdy żaden zarejestrowany klient sklepu nie ma tego adresu e-mail, moduł tworzy aktywne konto w domyślnej grupie klientów sklepu, z imieniem i nazwiskiem oraz z zapisem do newslettera, jeśli zaznaczono pole zgody na newsletter.
- Konto otrzymuje losowe hasło, którego nikt nie zna, a osoba dostaje e-mail „Twoje konto w sklepie …” z linkiem do ustawienia hasła. Gdy link wygaśnie, osoba korzysta z opcji „Nie pamiętasz hasła?” na stronie logowania.
- Istniejący klient pozostaje bez zmian. Jeśli PrestaShop nie akceptuje imienia lub nazwiska w danych klienta (np. gdy zawiera cyfry), konto nie zostaje utworzone.
Webhook
Webhook przesyła każde zgłoszenie do innego systemu w chwili jego nadejścia: do CRM, Zapiera, Make, n8n lub własnego skryptu.
- Na karcie Webhook w polu Adres wpisz adres podany przez system odbierający. Musi zaczynać się od
https://: dane są osobowe, więc adresy bez szyfrowania są odrzucane. - Kliknij Zapisz. Przy pierwszym adresie tworzony jest Sekret. Użyj przycisków Pokaż i Kopiuj i wpisz sekret w systemie odbierającym, aby mógł sprawdzać podpis.
- Kliknij Wyślij testowe zgłoszenie. Moduł wysyła przykładowe zgłoszenie tego formularza, z jego bieżącymi polami i zmyślonymi wartościami, i pokazuje kod HTTP, którym odpowiedział system odbierający.
Po każdym zgłoszeniu moduł wysyła na ten adres metodą POST jeden dokument JSON i czeka na odpowiedź najwyżej pięć sekund. Status od 200 do 299 oznacza dostarczenie. Przekierowania nie są obsługiwane (wpisz docelowy adres), a adresy w sieciach prywatnych są odrzucane. Nieudana dostawa nie jest ponawiana; karta pokazuje Ostatnia odpowiedź, Ostatni błąd i Błędy z rzędu, a lista kontrolna ostrzega o błędach z ostatnich siedmiu dni. Utwórz nowy sekret przy zapisie zastępuje sekret, jeśli został przez pomyłkę udostępniony: wtedy zaktualizuj też system odbierający.
Dokument wygląda tak (pola odpowiadają polom formularza):
{
"module": "pchscansign",
"version": "1.0.0",
"form": {"id": 1, "title": "Green Building Expo 2026"},
"link": {"code": "K7M2P9XW", "name": "Stand B12 - poster QR", "channel": "qr"},
"lang": "en",
"submitted_at": "2026-10-23T11:42:05+02:00",
"fields": [
{"id": 11, "label": "First name", "role": "firstname", "value": "Anna"},
{"id": 13, "label": "Email", "role": "email", "value": "anna@example.com"},
{"id": 16, "label": "What do you do?", "role": "none", "value": "Installer"},
{"id": 19, "label": "Keep me informed by email", "role": "newsletter_consent", "value": "Yes"}
],
"roles": {"email": "anna@example.com", "firstname": "Anna", "lastname": "Berg",
"phone": "", "company": ""},
"utm": {"source": "scansign", "medium": "qr", "campaign": "green-building-expo-2026"}
}
valueto odpowiedź w postaci wyświetlonej osobie: etykieta wybranej opcji w przypadku listy rozwijanej, tak lub nie w języku linku w przypadku pola wyboru, tekst w przypadku pozostałych typów.rolespowtarza odpowiedzi z pól używanych jako e-mail, imię, nazwisko, telefon i firma, dzięki czemu system odbierający nie zależy od treści pytań.submitted_atto czas zgłoszenia w strefie czasowej sklepu.
Sprawdzanie podpisu
Każde żądanie zawiera nagłówek X-ScanSign-Signature: sha256=, a po nim HMAC-SHA256 surowej treści żądania, obliczony za pomocą sekretu, w zapisie szesnastkowym. Nagłówek X-ScanSign-Event ma wartość signup dla prawdziwego zgłoszenia i test dla przycisku Wyślij testowe zgłoszenie. System odbierający oblicza tę samą wartość z otrzymanej treści i odrzuca żądanie, gdy wartości się różnią. W PHP:
$body = file_get_contents('php://input');
$expected = 'sha256=' . hash_hmac('sha256', $body, $secret);
$given = isset($_SERVER['HTTP_X_SCANSIGN_SIGNATURE']) ? $_SERVER['HTTP_X_SCANSIGN_SIGNATURE'] : '';
if (!hash_equals($expected, $given)) {
http_response_code(401); // nie pochodzi z Twojego sklepu
exit;
}
$signup = json_decode($body, true);
W Node.js, z surową treścią jako obiektem Buffer:
const crypto = require('crypto');
const expected = 'sha256=' + crypto.createHmac('sha256', secret).update(rawBody).digest('hex');
const given = req.get('X-ScanSign-Signature') || '';
const valid = given.length === expected.length
&& crypto.timingSafeEqual(Buffer.from(given), Buffer.from(expected));
Obliczaj podpis z treści dokładnie w otrzymanej postaci, przed jakimkolwiek parsowaniem JSON: treść, która została sparsowana i zapisana ponownie, już się nie zgadza.
Dzienne podsumowanie
Osoby, które oddzwaniają do zainteresowanych, nie potrzebują e-maila o każdym zgłoszeniu. Zamiast tego dzienne podsumowanie wysyła im jeden e-mail dziennie: ile osób zapisało się poprzedniego dnia, przez który link, co odpowiadano, oraz link do listy.
Włączanie
- Otwórz stronę Po wysłaniu formularza.
- Na karcie Dzienne podsumowanie włącz Dzienne podsumowanie.
- W polu Odbiorcy wpisz adresy oddzielone przecinkami, np.
sales@example.com, anna@example.com. - Wybierz Wysyłaj od godziny: godzinę w strefie czasowej sklepu, od której podsumowanie może zostać wysłane (po instalacji 8:00).
- Kliknij Zapisz. Błędny adres zostaje odrzucony, a komunikat go wymienia.
Każdy formularz ma własne podsumowanie, własnych odbiorców i własną godzinę.
Co zawiera podsumowanie

- Formularz, dzień, liczba zgłoszeń i liczba otwarć.
- Według linku: każdy link z kanałem, kampanią, otwarciami i zgłoszeniami. Usunięty link zachowuje nazwę z dopiskiem „(usunięty)”.
- Według odpowiedzi: liczby odpowiedzi na każde pytanie typu lista rozwijana i pole wyboru.
- Otwórz zgłoszenia z tego dnia: link do strony Zgłoszenia formularza, przefiltrowanej według tego dnia. Jeśli panel administracyjny poprosi o zalogowanie lub pokaże stronę o nieprawidłowym tokenie, zaloguj się lub potwierdź, a lista się otworzy.
Podsumowanie jest pisane w domyślnym języku sklepu. Jest wysyłane tylko za dzień, w którym były zgłoszenia: za spokojny dzień nic nie jest wysyłane.
Kiedy jest wysyłane
Podsumowanie danego dnia jest wysyłane następnego dnia, od godziny ustawionej w polu Wysyłaj od godziny, w pierwszym z tych momentów:
- Ktoś korzysta z panelu administracyjnego. Moduł sprawdza to najwyżej co 15 minut, gdy pracownicy korzystają z panelu. Nie wymaga to konfiguracji, ale w dniu, w którym nikt nie otwiera panelu administracyjnego, podsumowanie czeka.
- Zostaje wywołany adres crona. Przy zadaniu cron uruchamianym co 15 minut podsumowanie wychodzi o wybranej godzinie (Zadania zaplanowane).
Podsumowanie nigdy nie jest wysyłane ze strony odwiedzającego, więc e-mail nigdy nie spowalnia zgłoszenia. Jeśli jakieś dni zostały pominięte, np. w weekend bez korzystania z panelu administracyjnego, kolejne uruchomienie wysyła podsumowanie każdego pominiętego dnia, w którym były zgłoszenia: jeden e-mail na dzień i maksymalnie siedem dni w jednym uruchomieniu. Wysłane podsumowanie nie jest wysyłane ponownie, także po kliknięciu Uruchom teraz.
Wiersz stanu pokazuje, kiedy ostatnio uruchomiono podsumowanie, a lista kontrolna ostrzega, gdy podsumowania są należne, ale żadne nie zostało uruchomione w ciągu 36 godzin (Lista kontrolna).