> ## Documentation Index
> Fetch the complete documentation index at: https://revolai.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Podmiana telefonów

> Dynamiczna podmiana numerów telefonów w celu atrybucji połączeń — śledź, które kampanie, reklamy i źródła ruchu generują połączenia telefoniczne

## Przegląd

Podmiana telefonów to funkcja **atrybucji połączeń**, która dynamicznie zastępuje numery telefonów na Twojej stronie w zależności od źródła ruchu odwiedzającego. Gdy odwiedzający przychodzi z konkretnej kampanii — Google Ads, Facebook, polecenie od partnera lub dowolny link z tagami UTM — tracker automatycznie podmienia Twój domyślny numer telefonu na dedykowany numer śledzący. Gdy odwiedzający zadzwoni na ten numer, wiesz dokładnie, która kampania doprowadziła do połączenia.

<Frame>
  <img className="block dark:hidden" src="https://mintcdn.com/revolai/fjI-3Zk750dSQkZZ/images/tracker-phone-swap-light.png?fit=max&auto=format&n=fjI-3Zk750dSQkZZ&q=85&s=359656152b148417f413a1d426c423ef" alt="Zakładka Podmiana telefonów" width="2865" height="1554" data-path="images/tracker-phone-swap-light.png" />

  <img className="hidden dark:block" src="https://mintcdn.com/revolai/fjI-3Zk750dSQkZZ/images/tracker-phone-swap-dark.png?fit=max&auto=format&n=fjI-3Zk750dSQkZZ&q=85&s=31a9369607118a114b7a0cb0b371cabf" alt="Zakładka Podmiana telefonów" width="2865" height="1553" data-path="images/tracker-phone-swap-dark.png" />
</Frame>

***

## Jak to działa

<Steps>
  <Step title="Skonfiguruj podmianę telefonu w kampanii">
    Otwórz kampanię i ustaw **Oryginalny telefon** (numer na Twojej stronie) oraz **Telefon zastępczy** (numer śledzący przypisany do tej kampanii). Zobacz [Kampanie — Podmiana telefonów](/widget/campaigns#phone-swap) po szczegóły konfiguracji.
  </Step>

  <Step title="Odwiedzający trafia na Twoją stronę">
    Odwiedzający klika link kampanii (z parametrami UTM) i skrypt trackera się ładuje. Tracker pobiera aktywne reguły podmiany telefonów z serwera.
  </Step>

  <Step title="Dopasowanie UTM">
    Tracker sprawdza parametry UTM odwiedzającego z każdą regułą. Wszystkie niepuste pola dopasowania (utm\_source, utm\_medium, utm\_campaign, rvl\_ref) muszą pasować dokładnie. Pierwsza pasująca reguła wygrywa.
  </Step>

  <Step title="Numer jest zastępowany">
    Tracker znajduje wszystkie wystąpienia oryginalnego numeru na stronie — w linkach `tel:`, w tekście z atrybutem `data-revol-phone` — i zastępuje je numerem śledzącym. Podmiana zachowuje formatowanie oryginalnego numeru.
  </Step>

  <Step title="Zdarzenie jest rejestrowane">
    Zdarzenie `phone_swap` jest rejestrowane z oryginalnymi i zastępczymi numerami. To zdarzenie pojawia się w Dzienniku aktywności i tabeli Wydajność kampanii.
  </Step>

  <Step title="Odwiedzający dzwoni">
    Odwiedzający dzwoni na numer śledzący. Widzisz połączenie przypisane do konkretnej kampanii — bez zgadywania.
  </Step>
</Steps>

***

## Zakładka Podmiana telefonów

Zakładka Podmiana telefonów pokazuje wszystkie aktywne reguły podmiany telefonów z Twoich kampanii w jednej tabeli:

| Kolumna               | Opis                                                                       |
| --------------------- | -------------------------------------------------------------------------- |
| **Kampania**          | Nazwa kampanii z warunkami UTM (źródło, medium itp.) wyświetlonymi poniżej |
| **Podmiana telefonu** | Oryginalny numer → Numer zastępczy                                         |
| **Status**            | Aktywny lub nieaktywny                                                     |

Ta zakładka jest **podsumowaniem tylko do odczytu** — aby dodać lub edytować reguły podmiany telefonów, otwórz kampanię w zakładce [Kampanie](/widget/campaigns) i skonfiguruj sekcję Podmiana telefonów.

***

## Dodawanie numerów telefonów na stronie

Tracker zastępuje numery telefonów na dwa sposoby:

### 1. Linki tel (automatyczne)

Każdy link `<a href="tel:...">` na stronie jest automatycznie wykrywany. Jeśli href pasuje do oryginalnego numeru z reguły, jest podmieniany — zarówno atrybut `href`, jak i widoczny tekst.

```html theme={null}
<!-- Przed podmianą -->
<a href="tel:+380441234567">+380 (44) 123-45-67</a>

<!-- Po podmianie (odwiedzający z kampanii Google Ads) -->
<a href="tel:+380449876543">+380 (44) 987-65-43</a>
```

Nie są potrzebne żadne dodatkowe atrybuty — tracker automatycznie znajduje linki `tel:`.

### 2. Atrybut data (jawny)

Dla numerów telefonów, które nie są w linkach `tel:` (zwykły tekst, span, div), dodaj atrybut `data-revol-phone`:

```html theme={null}
<!-- Telefon w span -->
<span data-revol-phone>+380441234567</span>

<!-- Telefon w div -->
<div class="contact-phone" data-revol-phone>+380 44 123 45 67</div>
```

Elementy z `data-revol-phone` są ukryte (`visibility: hidden`) do momentu zakończenia podmiany, zapobiegając migotaniu oryginalnego numeru.

<Tip>
  Użyj `data-revol-phone` dla wszystkich numerów telefonów, które chcesz podmieniać — nawet jeśli są wewnątrz linków `tel:`. Daje to trackerowi jawną kontrolę i zapobiega migotaniu.
</Tip>

***

## Zachowanie formatowania

Tracker zachowuje formatowanie oryginalnego numeru przy zastępowaniu. Jeśli oryginalny i zastępczy numer mają taką samą liczbę cyfr, zastępczy jest formatowany według wzorca oryginału:

| Oryginał              | Zastępczy (surowy) | Wynik                 |
| --------------------- | ------------------ | --------------------- |
| `+380 (44) 123-45-67` | `+380949876543`    | `+380 (94) 987-65-43` |
| `044 123 45 67`       | `0949876543`       | `094 987 65 43`       |
| `+380441234567`       | `+380949876543`    | `+380949876543`       |

Jeśli liczba cyfr się różni, zastępczy numer jest wstawiany bez formatowania.

***

## Obsługa SPA

Moduł podmiany telefonów używa **MutationObserver** do obserwacji dynamicznie dodawanych elementów. Jeśli Twoja strona jest zbudowana w React, Vue, Angular lub innym frameworku renderującym treść po załadowaniu strony — tracker wykrywa nowe elementy telefonów, gdy pojawiają się w DOM, i podmienia je automatycznie.

Observer obserwuje całe body dokumentu pod kątem:

* Nowych linków `<a href="tel:...">`
* Nowych elementów z atrybutem `data-revol-phone`

Observer rozłącza się przy opuszczaniu strony, aby zapobiec wyciekom pamięci.

***

## Reguły dopasowywania

Reguły podmiany telefonów wywodzą się z kampanii. Każda kampania z ustawionym zarówno **Oryginalnym telefonem**, jak i **Telefonem zastępczym** tworzy regułę.

### Jak działa dopasowywanie

Tracker sprawdza parametry UTM odwiedzającego z polami dopasowania reguły. **Wszystkie niepuste pola muszą pasować dokładnie** (logika AND):

```
Reguła: { utm_source: "google", utm_medium: "cpc" }

✓ Odwiedzający z utm_source=google, utm_medium=cpc        → PASUJE
✗ Odwiedzający z utm_source=google, utm_medium=organic     → NIE PASUJE
✗ Odwiedzający z utm_source=facebook, utm_medium=cpc       → NIE PASUJE
```

Jeśli kampania ma ustawiony `utm_source`, ale `utm_medium` jest pusty — musi pasować tylko źródło. Puste pola są ignorowane przy dopasowywaniu.

### Priorytet

Jeśli wiele kampanii pasuje do parametrów UTM odwiedzającego, używana jest **pierwsza pasująca reguła**. Reguły są zwracane w kolejności utworzenia.

***

## Zdarzenia podmiany telefonów

Każda podmiana telefonu generuje zdarzenie `phone_swap`, śledzone raz na sesję odwiedzającego. Zdarzenie zawiera:

```json theme={null}
{
  "from": "+380441234567",
  "to": "+380949876543"
}
```

Zdarzenia podmiany telefonów pojawiają się w:

* **Dzienniku aktywności** — jako typ zdarzenia `phone_swap` z danymi from/to
* Tabeli **Wydajność kampanii** — w kolumnie **Podmiany telefonów**
* **Szczegółach sesji** — na osi czasu zdarzeń sesji odwiedzającego

***

## Przypadki użycia

<AccordionGroup>
  <Accordion title="Śledzenie połączeń z Google Ads">
    Utwórz kampanię z `utm_source=google`, `utm_medium=cpc`. Ustaw oryginalny telefon na główny numer firmowy, a zastępczy na dedykowany numer śledzący. Każde połączenie od odwiedzających z Google Ads jest przypisane do tej kampanii.

    **Wynik:** Widzisz dokładnie, ile połączeń generują Twoje wydatki na Google Ads — w tym samym panelu co rozmowy czatowe, wysyłki formularzy i odsłony stron.
  </Accordion>

  <Accordion title="Atrybucja wielokanałowa">
    Utwórz osobne kampanie dla każdego źródła ruchu — Google, Facebook, Instagram, newsletter e-mailowy — każdą z własnym numerem śledzącym. Ten sam oryginalny numer na stronie jest zastępowany innym numerem w zależności od tego, skąd przybył odwiedzający.

    | Kampania     | Źródło             | Numer śledzący   |
    | ------------ | ------------------ | ---------------- |
    | Google Brand | google / cpc       | +380 44 111 1111 |
    | Facebook Ads | facebook / paid    | +380 44 222 2222 |
    | Newsletter   | newsletter / email | +380 44 333 3333 |
    | Organic      | — (bez podmiany)   | Oryginalny numer |
  </Accordion>

  <Accordion title="Marketing offline (druk, billboardy)">
    Utwórz kampanię dla reklam drukowanych z unikalnym parametrem `rvl_ref`. Dodaj dedykowany numer telefonu. Gdy ktoś zadzwoni na numer z ulotki — wiesz, że pochodzi z druku, nie z internetu. Połącz z [kodem QR](/widget/campaigns#qr-code) do cyfrowego śledzenia tego samego materiału.
  </Accordion>

  <Accordion title="Śledzenie partnerów i poleceń">
    Daj każdemu partnerowi polecającemu własną kampanię z `rvl_ref=partner_name` i dedykowanym numerem śledzącym. Śledź dokładnie, ile połączeń generuje każdy partner — obok sesji, odsłon stron i rozmów z AI.
  </Accordion>

  <Accordion title="Testy A/B stron docelowych">
    Utwórz dwie kampanie z tym samym źródłem, ale różnymi wartościami `utm_content` (np. `landing-v1` vs `landing-v2`), każda z innym numerem śledzącym. Porównaj liczbę połączeń między wariantami stron docelowych.
  </Accordion>
</AccordionGroup>

***

## Integracja SIP

Podmiana telefonów staje się znacznie potężniejsza w połączeniu z **integracją numerów SIP (VoIP)**. Gdy używasz numerów śledzących SIP jako zastępczych, cały cykl życia połączenia jest rejestrowany w Revol:

<Steps>
  <Step title="Odwiedzający widzi numer śledzący SIP">
    Tracker podmienia Twój oryginalny numer na numer śledzący połączony z SIP dla odwiedzających z konkretnej kampanii.
  </Step>

  <Step title="Odwiedzający dzwoni na numer SIP">
    Połączenie jest kierowane przez Twojego dostawcę VoIP (Binotel, Twilio itp.) i łączone z Twoim zespołem.
  </Step>

  <Step title="Połączenie jest nagrywane i analizowane">
    Z aktywną integracją VoIP połączenie jest nagrywane, transkrybowane i powiązane z sesją odwiedzającego. Widzisz pełną podróż: którą reklamę kliknął, jakie strony przeglądał i co powiedział podczas rozmowy.
  </Step>

  <Step title="AI analizuje rozmowę">
    Jeśli Twój agent AI jest skonfigurowany dla kanału integracji, może analizować transkrypcję rozmowy — zidentyfikować intencję odwiedzającego, wyekstrahować dane leada, ocenić jakość rozmowy, a nawet zasugerować działania następcze.
  </Step>
</Steps>

### Co otrzymujesz

Z połączeniem Podmiany telefonów + integracji SIP masz **kompletny pipeline atrybucji połączeń**:

| Punkt danych                                                 | Źródło                                         |
| ------------------------------------------------------------ | ---------------------------------------------- |
| **Która kampania** przyciągnęła odwiedzającego               | Parametry UTM → Dopasowanie kampanii           |
| **Które strony** odwiedzający przeglądał przed zadzwonieniem | Przepływ stron sesji                           |
| **Jak długo** przebywał na stronie                           | Czas trwania sesji                             |
| **Co powiedział** podczas rozmowy                            | Nagranie rozmowy VoIP + transkrypcja           |
| **Jakość leada** i intencja                                  | Analiza AI rozmowy                             |
| **Na który numer śledzący** zadzwonił                        | Dane zdarzenia podmiany telefonu               |
| **Koszt za połączenie** (jeśli znany wydatek na reklamy)     | Atrybucja kampanii + dane platformy reklamowej |

<Tip>
  Tworzy to zamkniętą pętlę zwrotną: widzisz, że kliknięcie Google Ads doprowadziło do 3 odsłon stron, 45-sekundowego przeglądania, połączenia telefonicznego, w którym odwiedzający pytał o ceny, a AI oceniło go jako leada o wysokim zamiarze zakupowym — wszystko na jednej osi czasu sesji.
</Tip>

***

## Najlepsze praktyki

<AccordionGroup>
  <Accordion title="Używaj dedykowanych numerów na kampanię">
    Nie używaj tego samego numeru śledzącego w wielu kampaniach — to niweczy cel atrybucji. Każda kampania powinna mieć unikalny numer zastępczy.
  </Accordion>

  <Accordion title="Dodaj data-revol-phone do wszystkich elementów z telefonem">
    Nawet jeśli używasz linków `tel:` (które są wykrywane automatycznie), dodanie `data-revol-phone` zapobiega migotaniu oryginalnego numeru przed zakończeniem podmiany.
  </Accordion>

  <Accordion title="Zachowaj spójność oryginalnego numeru">
    Używaj tego samego oryginalnego numeru telefonu we wszystkich kampaniach. Tracker szuka tego dokładnego numeru na stronie — jeśli Twoja strona wyświetla różne numery w różnych sekcjach, utwórz osobne reguły podmiany dla każdego.
  </Accordion>

  <Accordion title="Testuj z parametrami UTM">
    Po skonfigurowaniu reguły podmiany telefonu odwiedź swoją stronę z pasującymi parametrami UTM (np. `?utm_source=google&utm_medium=cpc`) i sprawdź, czy numer się zmienia. Sprawdź Dziennik aktywności pod kątem zdarzenia `phone_swap`.
  </Accordion>
</AccordionGroup>

***

## Szczegóły techniczne

| Szczegół                     | Wartość                                                                      |
| ---------------------------- | ---------------------------------------------------------------------------- |
| **Moduł**                    | `tracker/modules/phone-swap.js` — leniwie ładowany tylko gdy istnieją reguły |
| **Dopasowywanie**            | Dokładne dopasowanie wszystkich niepustych pól UTM (logika AND)              |
| **Wykrywanie**               | Linki `<a href="tel:...">` + elementy `[data-revol-phone]`                   |
| **Obsługa SPA**              | MutationObserver na `document.body` (childList + subtree)                    |
| **Zapobieganie migotaniu**   | CSS `visibility: hidden` na `[data-revol-phone]` do momentu podmiany         |
| **Śledzenie zdarzeń**        | Jedno zdarzenie `phone_swap` na sesję (tylko pierwsza podmiana)              |
| **Odświeżanie konfiguracji** | Co 5 minut poprzez odpytywanie konfiguracji w tle                            |
| **Normalizacja numerów**     | Usuwa spacje, myślniki, nawiasy, kropki przed porównaniem                    |
