---
title: "Używaj ThunderPhone z n8n"
description: "Zainstaluj węzeł ThunderPhone dla n8n, połącz klucz API serwera i utwórz przepływ pracy uruchamiany za każdym razem, gdy połączenie się kończy."
---

[n8n](https://n8n.io) to narzędzie do automatyzacji przepływów pracy. Pakiet ThunderPhone
dla n8n dodaje dwa węzły:

- **Wyzwalacz ThunderPhone** uruchamia przepływ pracy, gdy połączenie się kończy (**Połączenie
  zakończone**) lub gdy zakończy się uruchomienie oceny połączenia (**Połączenie ocenione**).
- **ThunderPhone** wykonuje połączenia wychodzące, dodaje kontakty do kampanii i
  je uruchamia, pobiera połączenia wraz z ich transkrypcją i nagraniem oraz wyświetla listę
  Twoich agentów i numerów telefonów.

Jest to zweryfikowany węzeł społeczności, dostępny na stronie
[ThunderPhone w n8n](https://n8n.io/integrations/thunderphone/).

## Zainstaluj węzeł

W edytorze n8n kliknij **+**, aby otworzyć panel węzłów, i wyszukaj
**ThunderPhone**. Właściciel instancji może najpierw potrzebować skonfigurować zweryfikowane węzły, zanim
inni użytkownicy będą mogli je dodać.

W samodzielnie hostowanym n8n możesz również zainstalować pakiet według nazwy: otwórz
**Ustawienia > Węzły społeczności** i zainstaluj `n8n-nodes-thunderphone`. Sprawdź ryzyko związane z węzłami społeczności i zasady swojej instancji,
zanim rozpoczniesz instalację.

## Utwórz klucz API serwera

<Steps>
  <Step title="Otwórz kartę Klucze">
    W ThunderPhone przejdź do **Organizacja → Klucze** i kliknij **Utwórz klucz**.
  </Step>
  <Step title="Nadaj mu nazwę">
    Użyj nazwy wskazującej, gdzie znajduje się klucz, na przykład „n8n”.
  </Step>
  <Step title="Skopiuj go teraz">
    Pełny sekret `sk_live_...` jest wyświetlany tylko raz. Skopiuj go przed zamknięciem
    okna dialogowego.
  </Step>
</Steps>

Tylko administrator lub właściciel może utworzyć klucz, a ThunderPhone traktuje żądania
wykonane przy jego użyciu jako pochodzące od tej osoby. Wyzwalacz i operacje na kampaniach
wymagają, aby ta osoba zachowała rolę administratora lub właściciela.
[Utwórz klucz API serwera](/pl/guides/api-keys) opisuje rotację i unieważnianie kluczy.

## Dodaj poświadczenie w n8n

1. W n8n utwórz poświadczenie typu **ThunderPhone API**.
2. Wklej klucz w polu **Klucz API**.
3. Zapisz je i uruchom test poświadczenia. Test odczytuje jedno połączenie z Twojej
   organizacji za pomocą `GET /v1/calls?limit=1`.

## Utwórz pierwszy przepływ pracy

Ten przepływ pracy dodaje wiersz do Arkuszy Google za każdym razem, gdy połączenie się kończy.

<Steps>
  <Step title="Dodaj wyzwalacz">
    Dodaj **wyzwalacz ThunderPhone**, wybierz poświadczenia API ThunderPhone i
    ustaw **Zdarzenie** na **Połączenie zakończone**.
  </Step>
  <Step title="Pobierz połączenie">
    Dodaj węzeł **ThunderPhone**. Ustaw **Zasób** na **Połączenie**, **Operację**
    na **Pobierz** oraz **ID połączenia** na wyrażenie `{{ $json.data.call_id }}`.
    Dane wyjściowe obejmują [rekord połączenia](/api-reference/calls) oraz `transcripts`
    i `recording_url`, czyli krótkotrwały link, który ma wartość `null`, gdy połączenie
    nie ma nagrania.
  </Step>
  <Step title="Dodaj wiersz">
    Dodaj węzeł Arkuszy Google, który dopisuje wiersz, i zmapuj wybrane kolumny
    z danych wyjściowych Pobierz połączenie (zobacz tabelę poniżej).
  </Step>
  <Step title="Aktywuj przepływ pracy">
    Zapisz i aktywuj. Wyzwalacz rejestruje swój produkcyjny adres URL jako punkt
    końcowy webhooka w organizacji ThunderPhone. Dezaktywacja przepływu pracy
    usuwa ten punkt końcowy.
  </Step>
  <Step title="Przetestuj">
    Otwórz agenta w kreatorze, kliknij **Rozmawiaj** i zakończ połączenie. Połączenia
    testowe z kreatora są dostarczane jako `web.complete`, jedno z dwóch zdarzeń
    stojących za Połączenie zakończone, więc przepływ pracy zostanie uruchomiony
    i pojawi się wiersz.
  </Step>
</Steps>

Przydatne kolumny:

| Kolumna | Wyrażenie |
|---|---|
| ID połączenia | `{{ $json.call_id }}` |
| Kierunek | `{{ $json.direction }}` |
| Od | `{{ $json.from_number }}` |
| Do | `{{ $json.to_number }}` |
| Rozpoczęto | `{{ $json.start_time }}` |
| Czas trwania (s) | `{{ $json.duration_seconds }}` |
| Status | `{{ $json.status }}` |
| Powód zakończenia | `{{ $json.end_reason }}` |
| Link do połączenia | `https://app.thunderphone.com/dashboard/call-history/{{ $json.call_id }}` |

Link do połączenia otwiera połączenie w panelu ThunderPhone dla członków
Twojej organizacji wraz z transkrypcją i nagraniem, więc arkusz nie musi
przechowywać żadnego z nich.

Aby mimo to dodać transkrypcję, zmapuj
`{{ $json.transcripts.filter(t => typeof t.content === 'string').map(t => t.role + ': ' + t.content).join('\n') }}`.
Adres URL nagrania wygasa, dlatego przechowuj ID połączenia i ponownie uruchom Pobierz połączenie,
gdy potrzebujesz aktualnego linku. Transkrypcje, podsumowania i nagrania połączeń mogą zawierać
dane osobowe lub informacje o zdrowiu. Wysyłaj je wyłącznie do aplikacji, których Twoja organizacja
może używać do przetwarzania tych danych, na podstawie BAA, gdy dotyczą informacji o zdrowiu,
i zachowuj tylko potrzebne pola.

<Note>
  ThunderPhone dostarcza zdarzenia metodą `POST` na **produkcyjny
  adres URL** wyzwalacza, dlatego instancja n8n musi być dostępna z internetu
  przez HTTPS, a przepływ pracy musi być aktywny. Wyzwalacz weryfikuje
  HMAC `X-ThunderPhone-Signature` przy każdym żądaniu i zwraca `401`
  dla wszystkiego, co niepodpisane lub nieprawidłowe.
</Note>

Wyzwalacz zwraca kompletne zdarzenie: `type`, `event_id` i `data`. Zobacz
[`telephony.complete` / `web.complete`](/pl/webhooks/call-complete) oraz
[`call.graded`](/pl/webhooks/events), aby poznać wszystkie pola. Dostarczanie odbywa się
co najmniej raz, a `event_id` pozostaje taki sam przy ponownych próbach dostarczenia
jednego zdarzenia, dlatego sprawdzaj go przed krokiem, który nie może się powtórzyć.

## Bezpieczne wykonywanie połączeń wychodzących

**Wykonaj połączenie wychodzące** (Zasób **Połączenie wychodzące**, Operacja **Wykonaj**)
przyjmuje:

| Pole | Znaczenie |
|---|---|
| Nazwa lub identyfikator agenta | Zapisany agent. Lista rozwijana zawiera Twoich agentów. |
| Nazwa lub identyfikator numeru telefonu | Numer, z którego wykonywane jest połączenie. Lista rozwijana zawiera tylko numery włączone dla połączeń wychodzących. |
| Numer docelowy | Numer docelowy w formacie E.164, np. `+14155552671`. |
| Zmienne | Obiekt JSON wartości dla symboli zastępczych w prompcie agenta. |
| Klucz idempotencji | Stały identyfikator z rekordu lub zdarzenia nadrzędnego. Wymagany. |

Przypisz **Klucz idempotencji** do identyfikatora z elementu, który spowodował uruchomienie, na przykład identyfikatora rekordu CRM lub `event_id` zdarzenia wyzwalającego. Węzeł wysyła
`n8n:<node ID>:<your value>`, więc:

- Automatyczna ponowna próba lub **Ponów wykonanie** wysyła ten sam klucz, a
  ThunderPhone zwraca pierwotne połączenie z `idempotent_replay: true`
  zamiast ponownie wybierać numer.
- Dwa węzły ThunderPhone zasilane tym samym rekordem wysyłają różne klucze.
- Pusta wartość powoduje błąd przed wysłaniem jakiegokolwiek żądania.

Unikaj znaczników czasu, wartości losowych oraz identyfikatorów wykonań lub przepływów pracy n8n. Nowa
wartość przy ponownej próbie wykonuje drugie rzeczywiste połączenie. Cały klucz może mieć maksymalnie 128
znaków. Ponowne użycie klucza z innym agentem, numerem lub zmiennymi powoduje
konflikt.

**Kampanie.** **Dodaj kontakty** (Zasób **Kampania**) dodaje kontakty do
wersji roboczej kampanii. Przyjmuje identyfikator kampanii oraz tablicę JSON kontaktów. Każdy kontakt wymaga `phone_number`; pozostałe klucze
stają się zmiennymi połączenia. Węzeł kończy się błędem, gdy każdy kontakt zostanie odrzucony, i ustawia
`partial_success: true`, gdy odrzucone zostaną tylko niektóre. **Uruchom** wymaga zaznaczenia pola wyboru
potwierdzającego, że kampania wykonuje rzeczywiste połączenia i wykorzystuje środki ThunderPhone.
Zobacz [Kampanie wychodzące](/pl/guides/outbound-campaigns).

Przed uruchomieniem połączeń przez przepływ pracy:

- Jeśli ThunderPhone prosi Twoją organizację o potwierdzenie, że jej połączenia wychodzące
  są zgodne z TCPA i innymi przepisami dotyczącymi połączeń, administrator musi najpierw zapisać
  to potwierdzenie w panelu.
- Numer, z którego wykonywane jest połączenie, musi być włączony dla połączeń wychodzących. Numery przeniesione
  od własnego operatora kwalifikują się po weryfikacji. Numery ThunderPhone są początkowo
  dostępne tylko dla połączeń przychodzących i mogą zostać zatwierdzone do użytku wychodzącego: administrator składa wniosek
  na stronie Numery telefonów. Zobacz
  [Uzyskaj numer telefonu](/pl/guides/get-a-phone-number).
- Twoja organizacja odpowiada za uzyskanie zgody na połączenie z każdym numerem
  oraz za przestrzeganie obowiązujących przepisów dotyczących połączeń. Zobacz
  [Przepisy dotyczące połączeń wychodzących](/pl/guides/outbound-calling-laws).

## Przykładowe przepływy pracy

- **Kontakty CRM do kampanii.** Dodaj kontakty CRM do wersji roboczej kampanii
  ThunderPhone, a następnie uruchom kampanię, gdy ktoś zatwierdzi listę.
- **Zakończone połączenie do rekordu klienta.** Po zdarzeniu Połączenie zakończone uruchom Pobierz połączenie
  i zapisz transkrypcję oraz link do nagrania w pasującym rekordzie klienta.
- **Niskie oceny do weryfikacji.** Po zdarzeniu Połączenie ocenione filtruj według
  `{{ $json.data.grade.score }}` i kieruj połączenia z niską oceną do kolejki weryfikacji
  z identyfikatorem połączenia i szczegółami oceny. Połączenie może zostać ocenione więcej niż raz,
  a każde zakończone uruchomienie oceniania wyzwala zdarzenie, dlatego zachowuj tylko najnowsze
  `graded_at` dla każdego identyfikatora połączenia.

Transkrypcje, podsumowania i nagrania połączeń mogą zawierać dane osobowe lub informacje o zdrowiu.
Wysyłaj je wyłącznie do aplikacji, których Twoja organizacja może używać do przetwarzania
tych danych, na podstawie umowy BAA, gdy dotyczą one informacji o zdrowiu, i zachowuj tylko
pola, których potrzebujesz.

<Note>
  Wysyłasz te same zdarzenia połączeń do własnego serwera? Zobacz
  [Punkty końcowe webhooków](/pl/webhooks/endpoints).
  [Wykonywanie połączeń wychodzących](/pl/guides/place-outbound-calls) opisuje API używane przez
  Wykonaj połączenie wychodzące.
</Note>
