Webhook verbinden (A–Z-Anleitung)
Mit Webhooks kann Sally Daten sofort an andere Tools senden, sobald etwas passiert - zum Beispiel eine Meeting-Zusammenfassung direkt an deine Automatisierungsplattform, sobald sie fertig ist.
In dieser Anleitung erklären wir Webhooks von Grund auf und zeigen dir ein vollständiges Beispiel.
Schnellnavigation
- Was ist ein Webhook (einfach erklärt)?
- Voraussetzungen
- Webhook-URL in deinem Tool erstellen
- Webhook in Sally anlegen
- JSON-Body & Feldbeschreibung des Webhooks
- Verbindung prüfen & Logs einsehen
- FAQ & Fehlerbehebung
1. Was ist ein Webhook (einfach erklärt)?
Ein Webhook ist im Grunde eine Internetadresse (URL), die dir ein anderes Tool oder System bereitstellt (z. B. Zapier, Make, n8n, Power Automate oder dein eigenes Backend).
Immer wenn in Sally etwas Bestimmtes passiert – z. B. wenn eine Zusammenfassung erstellt wird – sendet Sally automatisch eine Nachricht an diese URL.
Vergleich:
- API (Application Programming Interface) = du fragst aktiv Daten bei einem anderen System an.
- Webhook = das System schickt dir automatisch Daten, wenn etwas passiert.
Typische Anwendungsfälle für Webhooks:
- Zusammenfassungen automatisch an eine Automatisierungsplattform senden.
- Aufgaben automatisch in deinem Workflow anlegen (z. B. in Zapier, Make, n8n oder Power Automate).
- Aktionen im eigenen Backend starten, sobald ein Meeting endet.
2. Voraussetzungen
Damit du Sally mit einem anderen Tool per Webhook verbinden kannst, benötigst du Folgendes:
-
Zugang zum Ziel-Tool, in das Sally Daten senden soll
Beispiel: Zapier, Make, n8n, Power Automate oder ein eigenes System.infoOhne Benutzerkonto im Ziel-Tool kannst du keine Verbindung einrichten.
-
Berechtigung zum Erstellen oder Kopieren einer Webhook-URL
Diese URL wird immer vom Ziel-Tool bereitgestellt.- In Tools wie Zapier, Make, n8n oder Power Automate findest du sie in den Workflow-Einstellungen.
- In einem eigenen System liefert sie in der Regel ein Entwickler.
infoPrüfe, ob deine Benutzerrolle (z. B. „Admin“ oder „Owner“) die Erstellung von Webhooks erlaubt. Wenn nicht, frage deinen Administrator oder Entwickler.
-
Sally-Konto mit Integrationsrechten
- Persönliche Webhooks: Kannst du jederzeit für dein eigenes Konto anlegen.
- Unternehmensweite Webhooks: Nur, wenn deine Rolle Berechtigungen für organisationweite Integrationen hat.
Die Webhook-URL kommt immer vom Ziel-Tool, nicht von Sally.
Ohne diese URL hat Sally keinen Ort, an den Daten gesendet werden können.
3. Webhook-URL in deinem Tool erstellen
Die Schritte unterscheiden sich je nach Tool, aber das Prinzip ist gleich:
- Öffne dein Ziel-Tool (z. B. Zapier, Make, n8n, Power Automate, eigenes System).
- Lege einen eingehenden Webhook an (oft auch „Listener URL“ oder „Endpoint“ genannt).
- Kopiere die generierte Webhook-URL.
Falls du unsicher bist: Suche in der Dokumentation deines Tools nach „Webhook erstellen“ + Toolname.
4. Webhook in Sally anlegen
Sobald du im Ziel-Tool (z. B. Zapier, Make, n8n oder einem eigenen Backend) eine Webhook-URL erstellt hast, kannst du diese nun in Sally hinterlegen. Die neue Webhook-Integration wurde überarbeitet und bietet dir deutlich mehr Kontrolle über Authentifizierung, Header und den Inhalt des Webhook-Bodys.
Schritt-für-Schritt-Anleitung
- Öffne die Einstellungen.
Einstellungen öffnen
- Wechsle zu „Integrationen“
- Wähle anschließend im Menü Integrationen und klicke im Bereich Deine persönlichen Integrationen auf Integration hinzufügen.
Neue Integration hinzufügen
- Wähle „Webhook V2“ aus und klicke auf Webhook erstellen.
Webhook V1 ist eine ältere Version. Bestehende Webhooks, die mit V1 erstellt wurden, bleiben weiterhin aktiv. Neue Webhooks werden automatisch mit Version V2 erstellt.
Webhook V2 auswählen
-
Fülle das Webhook-Formular aus.
Jetzt erscheint ein Formular, das aus fünf Bereichen besteht. Hier wird die Verbindung konfiguriert.
Name und allgemeine Angaben
Die folgende Tabelle zeigt dir alle Einstellungen, die du im Webhook-Formular findest – inklusive Erklärung, wofür jedes Feld gedacht ist und wann du es brauchst.
| Feld | Beschreibung |
|---|---|
| Name des Webhooks | Ein frei wählbarer Anzeigename für die Integration. Hilft dir, den Webhook später schnell zuzuordnen (z. B. „Webhook n8n – Leads“, „Zapier – Tasks“). |
| URL des Webhooks | Die vom Zielsystem bereitgestellte Endpoint-URL, an die Sally die Webhook-Daten sendet. Ohne diese URL kann der Webhook nicht ausgelöst werden. |
| Cookie (optional) | Optionales Feld für Systeme, die Sitzungs-Cookies statt API-Tokens verwenden. Moderne Tools wie Zapier, Make oder n8n benötigen kein Cookie. Wird nur in speziellen internen oder Legacy-Systemen genutzt. |
| Authentifizierungsmethode | Legt fest, wie sich Sally gegenüber dem Zielsystem authentifiziert. Mögliche Optionen: • Keine – Es wird kein Authorization-Header gesendet; ideal für offene Listener oder Test-Endpunkte. • Basic Auth – Sally sendet Nutzername + Passwort als Basic-Auth-Header; häufig bei internen APIs. • Roh (Raw) – Du gibst den gesamten Authorization-Header manuell ein (z. B. Bearer xyz123, ApiKey abc123). • Client-Zertifikat (PFX + Passwort) – Ermöglicht mTLS-Authentifizierung; nur erforderlich, wenn das Ziel explizit ein Client-Zertifikat verlangt. |
| Benutzerdefinierte Header (Custom Headers) | Erlaubt das Hinzufügen beliebiger zusätzlicher Header, z. B. x-api-key, x-tenant-id oder Signaturschlüssel. Wird genutzt, um Anfragen abzusichern oder Workflows zu steuern. |
| HTTP-Body Version | Bestimmt die Struktur des JSON-Bodys. Empfehlung: immer die neueste Version wählen, um die vollständigen und aktuellsten Daten zu erhalten. |
| Sprache | Legt fest, in welcher Sprache die Inhalte generiert werden. Sally nutzt BCP-47 basierend auf ISO 639-1. Es wird z. B. de-DE oder en-US gesendet. |
| Individualisierung des HTTP-Bodys | Legt fest, welche Inhalte Sally im Webhook-Body mitsendet. Jede Kategorie kann einzeln an- oder abgewählt werden. Folgende Elemente stehen zur Auswahl: • Aufgaben – Alle erkannten Tasks inklusive Verantwortlichen und Fälligkeitsdatum. • Benutzerdefinierte Einblicke – Ergebnisse der Custom-Insights (z. B. Checklisten oder individuelle Felder). • Einwände – Erkannte Objections aus dem Gespräch. • Entscheidungen – Alle im Meeting getroffenen Entscheidungen. • Kernpunkte – Wichtige Schlüsselthemen bzw. Hauptaussagen des Meetings. • Meetingtyp-spezifische Elemente – Inhalte, die aus dem gewählten Meetingtyp generiert werden (z. B. Fragenkatalog). • Transkription – Vollständige Transkriptteile inkl. Sprecher, Timecodes und Emphases. • Zusammenfassung – Die generierte Hauptzusammenfassung sowie HTML-Varianten. Durch das Aktivieren/Deaktivieren dieser Felder kannst du exakt steuern, wie umfangreich der Webhook-Body ausfallen soll. |
- Klicke nun auf "Erstellen".
Webhook speichern
Nach erfolgreichem Speichern erscheint dein Webhook in der Integrationsliste.
Der Webhook ist aktiv
5. JSON-Body & Feldbeschreibung des Webhooks
Während du deinen Webhook erstellst, zeigt dir Sally im Bereich „HTTP-Body“ automatisch ein vollständiges JSON-Beispiel an.
Dieses Beispiel repräsentiert genau die Struktur, die Sally später bei jeder Webhook-Auslösung an dein Zielsystem sendet.
Du kannst den JSON-Body bereits während der Einrichtung über den integrierten „Kopieren“-Button direkt übernehmen – z. B. für n8n, Make, Zapier oder zum Testen eines Endpunkts.
Der JSON
Der Body enthält alle erkannten Meeting-Daten, wie Teilnehmer, Themen, Entscheidungen, Aufgaben, Einwände, Meeting-Typ-Informationen und vollständige Transkript-Teile.
Unten findest du:
- den kompletten JSON-Body zum Kopieren
- eine detaillierte Erklärung aller Felder in Tabellenform
5.1. JSON-Beispiel (kopierbar)
{
"directoryId": "00000000-0000-0000-0000-000000000001",
"recordingSummaryId": "00000000-0000-0000-0000-000000000001",
"languageCode": "string",
"appointmentDate": "0000-01-01T00:00:00.000Z",
"appointmentSubject": "string",
"attendees": [
{
"name": "string",
"email": "string",
"invitationStatus": 0,
"attendenceStatus": 0
}
],
"meetingUrl": "string",
"meetingPlatform": "webex|msteams|zoom|googlemeet",
"summary": "string",
"combinedFullSummaryHTML": "string",
"topics": [
{
"summary": "string",
"description": "string",
"startTimeStamp": 0.0,
"endTimeStamp": 0.0
}
],
"decisions": [
{
"summary": "string",
"description": "string",
"startTimeStamp": 0.0,
"endTimeStamp": 0.0
}
],
"tasks": [
{
"subject": "string",
"description": "string",
"responsiblePersonName": "string",
"responsiblePersonEmail": "string",
"dueDate": "0000-01-01T00:00:00.000Z"
}
],
"objections": [
{
"objection": "string"
}
],
"customInsights": [
{
"id": "00000000-0000-0000-0000-000000000001",
"name": "string",
"result": "string"
}
],
"meetingTypeItems": [
{
"summary": "string",
"description": "string"
}
],
"transcriptParts": [
{
"id": "00000000-0000-0000-0000-000000000001",
"speakerName": "string",
"startTimeStamp": 0.0,
"endTimeStamp": 0.0,
"text": "string",
"emphases": "string",
"sortOrder": 0
}
]
}
5.2. Erklärung des JSON-Bodys (alle Felder)
| Feldname | Typ | Format | Beschreibung |
|---|---|---|---|
directoryId | string (GUID) | Plain | Eindeutige ID deiner Sally-Organisation. Dient zur Zuordnung, aus welchem Workspace der Webhook stammt. |
recordingSummaryId | string (GUID) | Plain | Eindeutige ID der erstellten Zusammenfassung. Kann genutzt werden, um Daten später erneut abzurufen oder zu matchen. |
languageCode | string | Plain | Sprache, in der die Zusammenfassung generiert wurde. Sally verwendet BCP-47 Sprachcodes auf Basis von ISO 639-1, z.B. de-DE, en-US, fr-FR. |
appointmentDate | string (ISO-Datum) | Plain | Datum und Uhrzeit des Meetings bzw. der Aufnahme. |
appointmentSubject | string | Plain | Titel oder Betreff des Meetings (aus dem Kalender oder manuell vergeben). |
attendees | Array | Plain | Liste aller Teilnehmer des Meetings. |
attendees[].name | string | Plain | Name des Teilnehmers. |
attendees[].email | string | Plain | E-Mail-Adresse des Teilnehmers. |
attendees[].invitationStatus | number | Plain | Numerischer Einladungsstatus des Teilnehmers. Der Wert zeigt an, wie die Person auf die Kalendereinladung reagiert hat. Mögliche Werte: 10 = Abgelehnt – Die Einladung wurde explizit abgelehnt. 20 = Angenommen – Die Einladung wurde bestätigt. 30 = Vorläufig zugesagt – Der Teilnehmer hat „Vielleicht“ ausgewählt. 40 = Keine Antwort – Es wurde nicht auf die Einladung reagiert. 50 = Organisator – Die Person ist der Ersteller/Organisator des Meetings. 100 = Unbekannt – Der Status konnte nicht bestimmt werden. |
attendees[].attendenceStatus | number | Plain | Numerischer Teilnahme-Status des Teilnehmers. Der Wert zeigt an, ob die Person tatsächlich am Meeting teilgenommen hat. Mögliche Werte: 10 = Nicht teilgenommen – Die Person war eingeladen, aber nicht im Meeting anwesend. 20 = Teilgenommen – Die Person war im Meeting anwesend. 100 = Unbekannt – Die tatsächliche Teilnahme konnte nicht ermittelt werden. |
meetingUrl | string | Plain | Link zum Online-Meeting (Teams, Zoom, Webex etc.). |
meetingPlatform | string | Plain | Plattform, auf der das Meeting stattfand (webex, msteams, zoom, googlemeet). |
summary | string | Markdown | Kompakte Hauptzusammenfassung des Meetings. |
combinedFullSummaryHTML | string (HTML) | HTML | Vollständige, formatierte Zusammenfassung in HTML – ideal für CRM, Ticketsysteme oder E-Mails. |
topics | Array | Plain | Vom System erkannte Themen/Abschnitte des Gesprächs. |
topics[].summary | string | Markdown | Kurzbeschreibung des Themas. |
topics[].description | string | Markdown | Detailliertere Beschreibung des Gesprächsabschnitts. |
topics[].startTimeStamp | number (decimal) | Plain | Startzeitpunkt des Themas in Sekunden (bezogen auf die Aufnahme). |
topics[].endTimeStamp | number (decimal) | Plain | Endzeitpunkt des Themas in Sekunden. |
decisions | Array | Plain | Alle im Meeting getroffenen Entscheidungen. |
decisions[].summary | string | Markdown | Kurzbeschreibung der Entscheidung. |
decisions[].description | string | Markdown | Detailbeschreibung der Entscheidung. |
decisions[].startTimeStamp | number (decimal) | Plain | Zeitpunkt, an dem die Entscheidung im Meeting erwähnt wurde. |
decisions[].endTimeStamp | number (decimal) | Plain | Zeitpunkt, an dem das Thema endete. |
tasks | Array | Plain | Von Sally erkannte Aufgaben/Aktionspunkte. |
tasks[].subject | string | Markdown | Titel der Aufgabe. |
tasks[].description | string | Markdown | Beschreibung oder Kontext. |
tasks[].responsiblePersonName | string | Plain | Zuständige Person für die Aufgabe. |
tasks[].responsiblePersonEmail | string | Plain | E-Mail der zuständigen Person. |
tasks[].dueDate | string (ISO-Datum) | Plain | Fälligkeitsdatum der Aufgabe im ISO-8601-Format. Wird nur gesetzt, wenn Sally ein Datum im Gespräch erkennt. Beispiel: 2025-03-15T00:00:00.000Z. |
objections | Array | Plain | Einwände oder Bedenken, die während des Meetings erwähnt wurden. |
objections[].objection | string | Markdown | Formulierter Einwand. |
customInsights | Array | Plain | Ergebnisse deiner benutzerdefinierten Insights/Prompts. |
customInsights[].id | string (GUID) | Plain | Eindeutige ID des benutzerdefinierten Insight-Feldes. |
customInsights[].name | string | Plain | Name des Insight-Feldes. |
customInsights[].result | string | HTML | Das vom Prompt generierte Ergebnis. |
meetingTypeItems | Array | Plain | Inhalte, die durch deinen Meeting-Typ generiert wurden (z. B. Fragen, Abschnitte, Checks). |
meetingTypeItems[].summary | string | HTML | Kurzbeschreibung des Items. |
meetingTypeItems[].description | string | HTML | Ausführliche Beschreibung des jeweiligen Meetingtyp-Elements. |
transcriptParts | Array | Plain | Jede erkannte Passage des Transkripts – strukturiert nach Sprecher und Zeit. |
transcriptParts[].id | string (GUID) | Plain | Eindeutige ID des Transkriptabschnitts. |
transcriptParts[].speakerName | string | Plain | Name des Sprechers. |
transcriptParts[].startTimeStamp | number (decimal) | Plain | Startzeitpunkt der Passage in Sekunden. |
transcriptParts[].endTimeStamp | number (decimal) | Plain | Endzeitpunkt der Passage in Sekunden. |
transcriptParts[].text | string | Plain | Gesprochener Inhalt. |
transcriptParts[].emphases | string | Plain | Liste erkannter hervorgehobener Wörter innerhalb der Passage. Das Feld enthält ein Array von Objekten, die jeweils das betonte Wort sowie Start- und Endzeitpunkt enthalten. Wenn keine Hervorhebungen erkannt wurden, ist das Array leer. Beispiel: [{"word":"Ja","startTime":104.89,"endTime":104.89},{"word":"nächste","startTime":105.09,"endTime":105.09},{"word":"Seite.","startTime":105.41,"endTime":105.41}] |
transcriptParts[].sortOrder | number (int) | Plain | Laufende Nummer, die die Reihenfolge der Passage im gesamten Transkript angibt. Die Werte sind aufsteigend sortiert: kleinere Zahlen stehen für früher Gesprochenes, größere Zahlen für später Gesprochenes. |
6. Verbindung prüfen & Logs einsehen
6.1. Wofür die Logs da sind (und warum sie wichtig sind)
Die Logs zeigen dir, was Sally wann verschickt hat und wie das Zielsystem reagiert hat.
Sie helfen dir bei:
- Überprüfung, ob Events korrekt gesendet wurden
- Fehlerdiagnose bei falschen URLs oder Berechtigungen
- Kontrolle des Inhalts (Payload)
- Performance-Messung (z. B. Antwortzeiten)
- Nachvollziehbarkeit für Audits
6.2. Wie du Logeinträge in Sally findest
- Gehe in Integrationen.
- Suche deinen Webhook unter Deine persönlichen Integrationen.
- Klicke auf Logs.
Logs öffnen
- Dort findest du alle Einträge:
Alle Webhook-Anfragen im Überblick
6.3. Wie man einen Logeintrag liest
Ein Eintrag enthält z. B.:
- Ausführungszeit
- Ziel-Endpunkt (URL)
- HTTP-Status (z. B.
202 Accepted= erfolgreich) - Latenz/Dauer
- Event (welches Sally-Ereignis den Webhook ausgelöst hat)
- Retries (bei Fehlversuchen)
- Details zu Anfrage & Antwort
- 2xx Erfolg → Ziel hat die Anfrage akzeptiert
- 4xx Client-Fehler → meist falsche Konfiguration (z. B.
401 Unauthorized) - 5xx Server-Fehler → Zielsystem war nicht erreichbar; Sally versucht es erneut
6.4. Typische Fehlerursachen & schnelle Lösungen
- Falsche URL → Logs mit Ziel-URL vergleichen
- Fehlende Authentifizierung → Token oder Header prüfen
- Payload passt nicht → ggf. Version ändern
- Rate-Limiting (429) → weniger Anfragen oder Warteschlangen nutzen
- Zielsystem down (5xx) → Verfügbarkeit prüfen
7. FAQ & Fehlerbehebung
Mein Webhook sendet nichts.
- Prüfe, ob das gewählte Ereignis wirklich eingetreten ist.
- Stelle sicher, dass der Webhook aktiviert ist.
- Sieh in den Logs nach.
Woher bekomme ich die Webhook-URL?
- Immer aus dem Ziel-Tool (z. B. Zapier, Make, n8n, Power Automate).
- Sally erzeugt diese URL nicht.
Welche Version sollte ich wählen?
- Immer Version 3 (Neueste), außer du hast bereits eine Integration mit älteren Versionen laufen.
Wie lange werden Webhook-Protokolle gespeichert?
- Webhook-Protokolle werden aus Sicherheits- und Nachverfolgbarkeitsgründen 90 Tage lang aufbewahrt und anschließend automatisch gelöscht. Eine manuelle Löschung ist nicht erforderlich.







