Wdróż widget Meetlead
Skonfiguruj witrynę, osadź skrypt i bezpiecznie połącz anonimowe wizyty z kontami zalogowanych klientów.
Szybki start
Integracja w czterech krokach
To minimalna ścieżka od pustej konfiguracji do pierwszej testowej rozmowy.
- 01Utwórz witrynę
Otrzymasz osobny
clientIddla tej konfiguracji. - 02Dodaj domeny
Wpisz każdy dokładny host, na którym działa widget.
- 03Wklej skrypt
Dodaj jeden tag do kodu strony lub głównego layoutu.
- 04Wyślij wiadomość
Potwierdź, że rozmowa pojawia się w Skrzynce Meetlead.
Konfiguracja
Konfiguracja witryny
Witryna określa domeny, wygląd, reguły i kontekst danych odwiedzających.
- Otwórz Ustawienia → Witryny
Wybierz istniejącą witrynę albo utwórz nową dla serwisu, na którym instalujesz widget.
- Dodaj dozwolone domeny
Wpisuj dokładne hosty bez ścieżek.
sklep.pliwww.sklep.pldodaj osobno. Wildcardy nie są obsługiwane. - Skopiuj clientId
Każda witryna ma własny publiczny identyfikator. Nie używaj clientId innej witryny, bo dane trafią do niewłaściwego kontekstu.
Dodaj również host środowiska staging. W produkcji usuń domeny, których nie używasz.
Osadzenie
Instalacja widgetu
Wklej skrypt w sekcji <head>. Atrybut async sprawia, że widget nie blokuje renderowania treści.
<script
src="https://widget.meetlead.eu/widget.js"
data-client-id="TWÓJ_CLIENT_ID"
async
></script>TWÓJ_CLIENT_ID wartością skopiowaną z wybranej witryny. clientId jest publiczny — nie jest sekretem.WordPressbez modyfikowania widgetu
Dodaj bazowy snippet przez narzędzie do kodu w nagłówku albo w pliku header.php motywu potomnego, przed </head>. Po zmianie wyczyść cache strony.
React / Vue / inne SPAnajprostsza ścieżka
Dodaj bazowy snippet raz w głównym pliku HTML aplikacji. Nie montuj go ponownie przy każdej zmianie routingu.
Next.jsApp Router i Pages Router
import Script from 'next/script';
export default function RootLayout({ children }) {
return (
<html lang="pl">
<body>
{children}
<Script
src="https://widget.meetlead.eu/widget.js"
data-client-id="TWÓJ_CLIENT_ID"
strategy="afterInteractive"
/>
</body>
</html>
);
}import Script from 'next/script';
import type { AppProps } from 'next/app';
export default function App({ Component, pageProps }: AppProps) {
return (
<>
<Component {...pageProps} />
<Script
src="https://widget.meetlead.eu/widget.js"
data-client-id="TWÓJ_CLIENT_ID"
strategy="afterInteractive"
/>
</>
);
}Sprawdź uruchomienie
- odśwież stronę bez aktywnego blokowania cache,
- sprawdź, czy launcher Meetlead pojawił się w wybranej pozycji,
- w narzędziach deweloperskich potwierdź pobranie
widget.js, - wyślij testową wiadomość i sprawdź rozmowę w Skrzynce.
Klienci
Połącz wizytę z klientem
Po zalogowaniu lub rejestracji wywołaj meetlead.identify(). Podpisany userId łączy kolejne wizyty, rozmowy i zdarzenia w jednym profilu.
HMAC generuj wyłącznie na swoim backendzie. Frontend otrzymuje gotowe userId i userHash.
Krok 1. Wygeneruj podpis na backendzie
Skopiuj sekret przestrzeni z Ustawienia → Witryny → Bezpieczeństwo tożsamości i zapisz go w zmiennej środowiskowej backendu.
import { createHmac } from 'node:crypto';
const secret = process.env.MEETLEAD_IDENTITY_SECRET;
if (!secret) throw new Error('Brak sekretu Meetlead');
const userId = String(user.id).trim().normalize('NFC');
const userHash = createHmac('sha256', secret)
.update(userId, 'utf8')
.digest('hex');
return { userId, userHash };Krok 2. Przekaż tożsamość w przeglądarce
Wywołaj integrację po ustaleniu zalogowanego użytkownika. Ten wariant działa również wtedy, gdy asynchroniczny skrypt widgetu jeszcze się ładuje.
(() => {
const identity = {
userId: currentUser.userId,
userHash: currentUser.userHash,
email: currentUser.email,
name: currentUser.name,
phone: currentUser.phone,
company: currentUser.company,
attributes: { plan: currentUser.plan }
};
const meetlead = window.meetlead || (window.meetlead = { q: [] });
if (typeof meetlead.identify === 'function') {
meetlead.identify(identity);
} else {
meetlead.q.push(['identify', identity]);
}
})();| Pole | Wymaganie | Zastosowanie |
|---|---|---|
email | e-mail lub userId | kontakt i wyszukiwanie klienta |
userId | e-mail lub userId | stabilny identyfikator z Twojego systemu |
userHash | wymagany do scalania userId | bezpieczne łączenie klienta między wizytami i witrynami |
name, phone, company | opcjonalne | dane widoczne przy profilu i rozmowie |
attributes | opcjonalne | do 20 własnych atrybutów tekstowych, liczbowych lub logicznych |
Wylogowanie użytkownika
Po wylogowaniu z Twojej aplikacji wyczyść również tożsamość Meetlead. Następna osoba korzystająca z tej samej przeglądarki otrzyma nową sesję odwiedzającego.
(() => {
const meetlead = window.meetlead || (window.meetlead = { q: [] });
if (typeof meetlead.logout === 'function') {
meetlead.logout();
} else {
meetlead.q.push(['logout']);
}
})();Architektura
Wiele witryn, jeden klient
Każda witryna ma własny clientId, domeny, konfigurację widgetu i odseparowane dane operacyjne.
- używaj clientId odpowiadającego domenie, na której działa skrypt,
- ten sam podpisany userId może połączyć klienta między witrynami jednej przestrzeni,
- stan widgetu i sesja odwiedzającego są przechowywane osobno dla każdego clientId.
Wyniki
Cele i ocena obsługi
Te integracje są opcjonalne. Cel zapisuj po wyniku biznesowym, a CSAT wyłącznie po świadomym wysłaniu oceny przez klienta.
// Cel musi być wcześniej utworzony i aktywny w Meetlead.
(() => {
const meetlead = window.meetlead || (window.meetlead = { q: [] });
const goalOptions = { value: 249, currency: 'PLN' };
if (typeof meetlead.goal === 'function') {
meetlead.goal('purchase', goalOptions);
} else {
meetlead.q.push(['goal', 'purchase', goalOptions]);
}
})();Klucz celu używa małych liter, cyfr oraz znaków ., _ i -. Waluta ma trzyznakowy kod, np. PLN lub EUR.
Ocena obsługi po rozmowie
Podłącz funkcję do formularza oceny. Nie wywołuj jej automatycznie przy zakupie, wyświetleniu strony ani zakończeniu rozmowy.
function submitMeetleadCsat(score, comment) {
const meetlead = window.meetlead || (window.meetlead = { q: [] });
if (typeof meetlead.csat === 'function') {
meetlead.csat(score, comment);
} else {
meetlead.q.push(['csat', score, comment]);
}
}
// Wywołaj dopiero po świadomym wysłaniu oceny 1–5 przez klienta.
// submitMeetleadCsat(customerScore, customerComment);Produkcja
Prywatność i bezpieczeństwo
Dopasuj rejestrowanie zachowania, sposób uruchamiania widgetu i politykę CSP do zasad obowiązujących w Twoim serwisie.
W Widget Studio ustaw selektory pól i obszarów, które mają być maskowane lub wyłączone z nagrań.
Opisz zakres działania Meetlead oraz dane, które przekazujesz przez formularze i identify().
Jeśli konfiguracja wymaga zgody, załaduj skrypt dopiero po jej uzyskaniu w używanym CMP.
Content Security Policy
Jeśli serwis używa CSP, dodaj źródła Meetlead do istniejących dyrektyw. Nie zastępuj całej swojej polityki gotowym nagłówkiem.
| Dyrektywa | Źródła Meetlead | Zastosowanie |
|---|---|---|
script-src | https://widget.meetlead.eu | plik widget.js |
connect-src | https://api.meetlead.eu wss://api.meetlead.eu | konfiguracja i połączenie realtime |
font-src | https://meetlead.eu | fonty interfejsu widgetu |
Widget umieszcza swój arkusz CSS w Shadow DOM. Polityka blokująca style inline może zatrzymać renderowanie interfejsu. Nie dodawaj szerokiego 'unsafe-inline' bez analizy — najpierw przetestuj integrację w trybie Report-Only i dopasuj politykę bezpieczeństwa swojego serwisu.
img-src.Checklista przed publikacją
- Produkcyjny host znajduje się na liście dozwolonych domen.
- Skrypt używa clientId właściwej witryny.
- Sekret HMAC pozostaje wyłącznie po stronie backendu.
- Pola wrażliwe są zamaskowane lub wyłączone z nagrań.
- Testowa rozmowa i identyfikacja są widoczne w panelu.
Pomoc
Najczęstsze problemy
Zacznij od komunikatów w konsoli przeglądarki i ustawień wybranej witryny.
Widget nie pojawia się na stronie
Sprawdź, czy skrypt pobrał się bez błędu, czy ma poprawny clientId oraz czy widget jest włączony w Widget Studio.
Konsola zgłasza niedozwoloną domenę
Dodaj dokładny host bieżącej strony do witryny. Hosty z www i bez www są różnymi wpisami.
Klient nie łączy się między witrynami
Zweryfikuj, czy obie witryny należą do tej samej przestrzeni, przekazują identyczny znormalizowany userId i poprawny HMAC z aktualnego sekretu.
Po zmianie kodu nadal działa stara wersja
Wyczyść cache aplikacji, CDN lub wtyczki optymalizacyjnej. Potem wykonaj pełne odświeżenie i sprawdź źródło dokumentu.
Potrzebujesz drugiej pary oczu?
Sprawdzimy domeny, instalację, identyfikację i pierwszą testową rozmowę.