---
title: "ThunderPhone mit n8n verwenden"
description: "Installieren Sie den ThunderPhone-Node für n8n, verbinden Sie einen Server-API-Schlüssel und erstellen Sie einen Workflow, der bei jedem Anrufende ausgeführt wird."
---

[n8n](https://n8n.io) ist ein Tool zur Workflow-Automatisierung. Das ThunderPhone-Paket
für n8n fügt zwei Knoten hinzu:

- **ThunderPhone Trigger** startet einen Workflow, wenn ein Anruf endet (**Anruf
  abgeschlossen**) oder ein Anrufbewertungslauf abgeschlossen ist (**Anruf
  bewertet**).
- **ThunderPhone** tätigt ausgehende Anrufe, fügt Kontakte zu Kampagnen hinzu und
  startet sie, ruft Anrufe mit Transkript und Aufzeichnung ab und listet Ihre
  Agenten und Telefonnummern auf.

Es handelt sich um einen verifizierten Community-Knoten, der unter
[ThunderPhone auf n8n](https://n8n.io/integrations/thunderphone/) aufgeführt ist.

## Knoten installieren

Klicken Sie im n8n-Editor auf **+**, um das Knoten-Panel zu öffnen, und suchen Sie
nach **ThunderPhone**. Ein Instanzinhaber muss möglicherweise verifizierte Knoten
einrichten, bevor andere Benutzer sie hinzufügen können.

Bei selbst gehostetem n8n können Sie die Installation auch über den Paketnamen
vornehmen: Öffnen Sie **Einstellungen > Community-Knoten** und installieren Sie `n8n-nodes-thunderphone`. Prüfen Sie die Risiken von Community-Knoten und die Richtlinien Ihrer Instanz,
bevor Sie die Installation vornehmen.

## Server-API-Schlüssel erstellen

<Steps>
  <Step title="Registerkarte „Schlüssel“ öffnen">
    Gehen Sie in ThunderPhone zu **Organisation → Schlüssel** und klicken Sie auf **Schlüssel erstellen**.
  </Step>
  <Step title="Benennen">
    Verwenden Sie einen Namen, der angibt, wo sich der Schlüssel befindet, beispielsweise „n8n“.
  </Step>
  <Step title="Jetzt kopieren">
    Das vollständige Geheimnis `sk_live_...` wird einmal angezeigt. Kopieren Sie es, bevor Sie den
    Dialog schließen.
  </Step>
</Steps>

Nur ein Administrator oder Inhaber kann den Schlüssel erstellen, und ThunderPhone behandelt
Anfragen mit diesem Schlüssel so, als kämen sie von dieser Person. Der Trigger und die Kampagnen-
Vorgänge erfordern, dass diese Person die Rolle als Administrator oder Inhaber behält.
[Server-API-Schlüssel erstellen](/de/guides/api-keys) behandelt Rotation und Widerruf.

## Anmeldedaten in n8n hinzufügen

1. Erstellen Sie in n8n Anmeldedaten vom Typ **ThunderPhone API**.
2. Fügen Sie den Schlüssel in **API-Schlüssel** ein.
3. Speichern Sie ihn und führen Sie den Anmeldedatentest aus. Der Test liest einen Anruf aus Ihrer
   Organisation mit `GET /v1/calls?limit=1`.

## Erstellen Sie einen ersten Workflow

Dieser Workflow fügt jedes Mal, wenn ein Anruf endet, eine Zeile zu einem Google Sheet hinzu.

<Steps>
  <Step title="Trigger hinzufügen">
    Fügen Sie **ThunderPhone Trigger** hinzu, wählen Sie Ihre ThunderPhone-API-Anmeldedaten aus und
    setzen Sie **Event** auf **Call Completed**.
  </Step>
  <Step title="Anruf abrufen">
    Fügen Sie einen **ThunderPhone**-Knoten hinzu. Setzen Sie **Resource** auf **Call**, **Operation**
    auf **Get** und **Call ID** auf den Ausdruck `{{ $json.data.call_id }}`.
    Die Ausgabe ist der [Anrufdatensatz](/api-reference/calls) einschließlich `transcripts`
    und `recording_url`, einem kurzzeitig gültigen Link, der `null` ist, wenn der Anruf
    keine Aufzeichnung hat.
  </Step>
  <Step title="Zeile anhängen">
    Fügen Sie einen Google-Sheets-Knoten hinzu, der eine Zeile anhängt, und ordnen Sie die gewünschten
    Spalten aus der Ausgabe von Get Call zu (siehe Tabelle unten).
  </Step>
  <Step title="Workflow aktivieren">
    Speichern und aktivieren Sie den Workflow. Der Trigger registriert seine Production URL als Webhook-
    Endpunkt in Ihrer ThunderPhone-Organisation. Das Deaktivieren des Workflows löscht diesen Endpunkt.
  </Step>
  <Step title="Testen">
    Öffnen Sie einen Agenten im Builder, klicken Sie auf **Talk** und beenden Sie den Anruf. Builder-
    Testanrufe werden als `web.complete` zugestellt, einem der beiden Ereignisse hinter
    Call Completed, sodass der Workflow ausgeführt wird und eine Zeile erscheint.
  </Step>
</Steps>

Nützliche Spalten:

| Spalte | Ausdruck |
|---|---|
| Anruf-ID | `{{ $json.call_id }}` |
| Richtung | `{{ $json.direction }}` |
| Von | `{{ $json.from_number }}` |
| An | `{{ $json.to_number }}` |
| Gestartet | `{{ $json.start_time }}` |
| Dauer (s) | `{{ $json.duration_seconds }}` |
| Status | `{{ $json.status }}` |
| Grund für Beendigung | `{{ $json.end_reason }}` |
| Anruflink | `https://app.thunderphone.com/dashboard/call-history/{{ $json.call_id }}` |

Der Anruflink öffnet den Anruf im ThunderPhone-Dashboard für Mitglieder
Ihrer Organisation mit Transkript und Aufzeichnung, sodass das Sheet keines
von beiden speichern muss.

Um das Transkript dennoch hinzuzufügen, ordnen Sie
`{{ $json.transcripts.filter(t => typeof t.content === 'string').map(t => t.role + ': ' + t.content).join('\n') }}` zu.
Die Aufzeichnungs-URL läuft ab. Speichern Sie daher die Anruf-ID und führen Sie Get Call erneut aus,
wenn Sie einen neuen Link benötigen. Anruftranskripte, Zusammenfassungen und Aufzeichnungen können
personenbezogene Daten oder Gesundheitsdaten enthalten. Senden Sie sie nur an Apps, die Ihre
Organisation für diese Daten verwenden darf, bei Gesundheitsdaten im Rahmen eines BAA, und
bewahren Sie nur die benötigten Felder auf.

<Note>
  ThunderPhone liefert Ereignisse per `POST` an die **Production
  URL** des Triggers. Ihre n8n-Instanz muss daher über HTTPS aus dem Internet erreichbar sein,
  und der Workflow muss aktiv sein. Der Trigger überprüft bei jeder Anfrage den
  `X-ThunderPhone-Signature`-HMAC und antwortet bei allem Unsigierten oder Ungültigen mit `401`.
</Note>

Der Trigger gibt das vollständige Ereignis aus: `type`, `event_id` und `data`. Siehe
[`telephony.complete` / `web.complete`](/de/webhooks/call-complete) und
[`call.graded`](/de/webhooks/events) für alle Felder. Die Zustellung erfolgt mindestens einmal,
und `event_id` bleibt bei Wiederholungen desselben Ereignisses gleich. Prüfen Sie sie daher vor
einem Schritt, der nicht wiederholt werden darf.

## Ausgehende Anrufe sicher tätigen

**Ausgehenden Anruf tätigen** (Ressource **Ausgehender Anruf**, Vorgang **Tätigen**)
erfordert:

| Feld | Bedeutung |
|---|---|
| Agentenname oder -ID | Ein gespeicherter Agent. Die Auswahlliste führt Ihre Agenten auf. |
| Name oder ID der Telefonnummer | Die Absendernummer. Die Auswahlliste führt nur Nummern auf, die für ausgehende Anrufe aktiviert sind. |
| Zielnummer | Zielnummer im E.164-Format, z. B. `+14155552671`. |
| Variablen | JSON-Objekt mit Werten für Platzhalter im Agenten-Prompt. |
| Idempotenzschlüssel | Eine stabile ID aus dem übergeordneten Datensatz oder Ereignis. Erforderlich. |

Ordnen Sie den **Idempotenzschlüssel** einer ID aus dem Auslöser des Durchlaufs zu, beispielsweise
einer CRM-Datensatz-ID oder der `event_id` des Triggers. Der Node sendet
`n8n:<node ID>:<your value>`, daher gilt:

- Ein automatischer Wiederholungsversuch oder **Ausführung wiederholen** sendet denselben Schlüssel, und
  ThunderPhone gibt den ursprünglichen Anruf mit `idempotent_replay: true`
  zurück, statt erneut zu wählen.
- Zwei ThunderPhone-Nodes, die denselben Datensatz erhalten, senden unterschiedliche Schlüssel.
- Ein leerer Wert schlägt fehl, bevor eine Anfrage gesendet wird.

Vermeiden Sie Zeitstempel, Zufallswerte sowie n8n-Ausführungs- oder Workflow-IDs. Ein neuer
Wert bei einem Wiederholungsversuch tätigt einen zweiten echten Anruf. Der gesamte Schlüssel darf
höchstens 128 Zeichen lang sein. Die Wiederverwendung eines Schlüssels mit einem anderen Agenten,
einer anderen Nummer oder anderen Variablen schlägt mit einem Konflikt fehl.

**Kampagnen.** **Kontakte hinzufügen** (Ressource **Kampagne**) fügt Kontakte zu einer
Entwurfskampagne hinzu. Es erfordert eine Kampagnen-ID und ein JSON-Array mit Kontakten. Jeder Kontakt
benötigt `phone_number`; andere Schlüssel werden zu Anrufvariablen. Der Node schlägt fehl, wenn
jeder Kontakt abgelehnt wird, und setzt `partial_success: true`, wenn nur einige abgelehnt werden. **Starten**
erfordert die Bestätigung per Kontrollkästchen, dass die Kampagne echte Anrufe tätigt und ThunderPhone-
Guthaben ausgibt. Siehe [Ausgehende Kampagnen](/de/guides/outbound-campaigns).

Bevor ein Workflow Anrufe startet:

- Wenn ThunderPhone Ihre Organisation auffordert zu bestätigen, dass ihre ausgehenden Anrufe
  dem TCPA und anderen Anrufgesetzen entsprechen, muss ein Administrator diese
  Bestätigung zuerst im Dashboard hinterlegen.
- Die Absendernummer muss für ausgehende Anrufe aktiviert sein. Telefonnummern, die Sie von
  Ihrem eigenen Anbieter einbringen, können nach der Verifizierung verwendet werden. ThunderPhone-
  Nummern sind zunächst nur für eingehende Anrufe verfügbar und können für ausgehende Nutzung
  freigegeben werden: Ein Administrator beantragt dies auf der Seite Telefonnummern. Siehe
  [Telefonnummer erhalten](/de/guides/get-a-phone-number).
- Ihre Organisation ist dafür verantwortlich, für jeden Anruf die Einwilligung zu haben
  und die geltenden Anrufgesetze einzuhalten. Siehe
  [Gesetze für ausgehende Anrufe](/de/guides/outbound-calling-laws).

## Beispiel-Workflows

- **CRM-Kontakte zu einer Kampagne.** Fügen Sie CRM-Kontakte zu einer ThunderPhone-
  Entwurfskampagne hinzu und starten Sie die Kampagne, sobald jemand die Liste genehmigt.
- **Abgeschlossener Anruf zum Kundendatensatz.** Wenn ein Anruf abgeschlossen ist, führen Sie Anruf abrufen
  aus und speichern Sie Transkript und Aufzeichnungslink im passenden Kundendatensatz.
- **Niedrige Bewertungen zur Überprüfung.** Wenn ein Anruf bewertet wurde, filtern Sie nach
  `{{ $json.data.grade.score }}` und leiten Sie niedrig bewertete Anrufe mit der Anruf-ID
  und den Bewertungsdetails an eine Überprüfungswarteschlange weiter. Ein Anruf kann mehr als einmal
  bewertet werden, und jeder abgeschlossene Bewertungsdurchlauf löst den Trigger aus. Behalten Sie daher
  für jede Anruf-ID nur den neuesten Wert für `graded_at`.

Anruftranskripte, Zusammenfassungen und Aufzeichnungen können personenbezogene Daten oder
Gesundheitsdaten enthalten. Senden Sie sie nur an Apps, die Ihre Organisation für diese Daten verwenden
darf, bei Gesundheitsdaten im Rahmen eines BAA, und bewahren Sie nur die benötigten Felder auf.

<Note>
  Senden Sie dieselben Anrufereignisse stattdessen an Ihren eigenen Server? Siehe
  [Webhook-Endpunkte](/de/webhooks/endpoints).
  [Ausgehende Anrufe tätigen](/de/guides/place-outbound-calls) beschreibt die API hinter
  Ausgehenden Anruf tätigen.
</Note>
