Zum Hauptinhalt springen

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

  1. Was ist ein Webhook (einfach erklärt)?
  2. Voraussetzungen
  3. Webhook-URL in deinem Tool erstellen
  4. Webhook in Sally anlegen
  5. JSON-Body & Feldbeschreibung des Webhooks
  6. Verbindung prüfen & Logs einsehen
  7. 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.

    info

    Ohne 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.
    info

    Prü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.
Wichtig

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:

  1. Öffne dein Ziel-Tool (z. B. Zapier, Make, n8n, Power Automate, eigenes System).
  2. Lege einen eingehenden Webhook an (oft auch „Listener URL“ oder „Endpoint“ genannt).
  3. Kopiere die generierte Webhook-URL.
Tipp

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

  1. Öffne die Einstellungen.
Sally Einstellungen öffnen

Einstellungen öffnen

  1. Wechsle zu „Integrationen“
  2. Wähle anschließend im Menü Integrationen und klicke im Bereich Deine persönlichen Integrationen auf Integration hinzufügen.
Integrationen aufrufen und neue Integration hinzufügen

Neue Integration hinzufügen

  1. Wähle „Webhook V2“ aus und klicke auf Webhook erstellen.
info

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

Webhook V2 auswählen

  1. Fülle das Webhook-Formular aus.

    Jetzt erscheint ein Formular, das aus fünf Bereichen besteht. Hier wird die Verbindung konfiguriert.

    Webhook Allgemeine Einstellungen

    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.

FeldBeschreibung
Name des WebhooksEin 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 WebhooksDie 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.
AuthentifizierungsmethodeLegt 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 VersionBestimmt die Struktur des JSON-Bodys. Empfehlung: immer die neueste Version wählen, um die vollständigen und aktuellsten Daten zu erhalten.
SpracheLegt 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-BodysLegt 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.

  1. Klicke nun auf "Erstellen".
Webhook erstellen

Webhook speichern

Nach erfolgreichem Speichern erscheint dein Webhook in der Integrationsliste.

Webhook erfolgreich verbunden

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.

JSON in Sally AI kopieren

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:

  1. den kompletten JSON-Body zum Kopieren
  2. 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)

FeldnameTypFormatBeschreibung
directoryIdstring (GUID)PlainEindeutige ID deiner Sally-Organisation. Dient zur Zuordnung, aus welchem Workspace der Webhook stammt.
recordingSummaryIdstring (GUID)PlainEindeutige ID der erstellten Zusammenfassung. Kann genutzt werden, um Daten später erneut abzurufen oder zu matchen.
languageCodestringPlainSprache, 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.
appointmentDatestring (ISO-Datum)PlainDatum und Uhrzeit des Meetings bzw. der Aufnahme.
appointmentSubjectstringPlainTitel oder Betreff des Meetings (aus dem Kalender oder manuell vergeben).
attendeesArrayPlainListe aller Teilnehmer des Meetings.
attendees[].namestringPlainName des Teilnehmers.
attendees[].emailstringPlainE-Mail-Adresse des Teilnehmers.
attendees[].invitationStatusnumberPlainNumerischer 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[].attendenceStatusnumberPlainNumerischer 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.
meetingUrlstringPlainLink zum Online-Meeting (Teams, Zoom, Webex etc.).
meetingPlatformstringPlainPlattform, auf der das Meeting stattfand (webex, msteams, zoom, googlemeet).
summarystringMarkdownKompakte Hauptzusammenfassung des Meetings.
combinedFullSummaryHTMLstring (HTML)HTMLVollständige, formatierte Zusammenfassung in HTML – ideal für CRM, Ticketsysteme oder E-Mails.
topicsArrayPlainVom System erkannte Themen/Abschnitte des Gesprächs.
topics[].summarystringMarkdownKurzbeschreibung des Themas.
topics[].descriptionstringMarkdownDetailliertere Beschreibung des Gesprächsabschnitts.
topics[].startTimeStampnumber (decimal)PlainStartzeitpunkt des Themas in Sekunden (bezogen auf die Aufnahme).
topics[].endTimeStampnumber (decimal)PlainEndzeitpunkt des Themas in Sekunden.
decisionsArrayPlainAlle im Meeting getroffenen Entscheidungen.
decisions[].summarystringMarkdownKurzbeschreibung der Entscheidung.
decisions[].descriptionstringMarkdownDetailbeschreibung der Entscheidung.
decisions[].startTimeStampnumber (decimal)PlainZeitpunkt, an dem die Entscheidung im Meeting erwähnt wurde.
decisions[].endTimeStampnumber (decimal)PlainZeitpunkt, an dem das Thema endete.
tasksArrayPlainVon Sally erkannte Aufgaben/Aktionspunkte.
tasks[].subjectstringMarkdownTitel der Aufgabe.
tasks[].descriptionstringMarkdownBeschreibung oder Kontext.
tasks[].responsiblePersonNamestringPlainZuständige Person für die Aufgabe.
tasks[].responsiblePersonEmailstringPlainE-Mail der zuständigen Person.
tasks[].dueDatestring (ISO-Datum)PlainFä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.
objectionsArrayPlainEinwände oder Bedenken, die während des Meetings erwähnt wurden.
objections[].objectionstringMarkdownFormulierter Einwand.
customInsightsArrayPlainErgebnisse deiner benutzerdefinierten Insights/Prompts.
customInsights[].idstring (GUID)PlainEindeutige ID des benutzerdefinierten Insight-Feldes.
customInsights[].namestringPlainName des Insight-Feldes.
customInsights[].resultstringHTMLDas vom Prompt generierte Ergebnis.
meetingTypeItemsArrayPlainInhalte, die durch deinen Meeting-Typ generiert wurden (z. B. Fragen, Abschnitte, Checks).
meetingTypeItems[].summarystringHTMLKurzbeschreibung des Items.
meetingTypeItems[].descriptionstringHTMLAusführliche Beschreibung des jeweiligen Meetingtyp-Elements.
transcriptPartsArrayPlainJede erkannte Passage des Transkripts – strukturiert nach Sprecher und Zeit.
transcriptParts[].idstring (GUID)PlainEindeutige ID des Transkriptabschnitts.
transcriptParts[].speakerNamestringPlainName des Sprechers.
transcriptParts[].startTimeStampnumber (decimal)PlainStartzeitpunkt der Passage in Sekunden.
transcriptParts[].endTimeStampnumber (decimal)PlainEndzeitpunkt der Passage in Sekunden.
transcriptParts[].textstringPlainGesprochener Inhalt.
transcriptParts[].emphasesstringPlainListe 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[].sortOrdernumber (int)PlainLaufende 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

  1. Gehe in Integrationen.
  2. Suche deinen Webhook unter Deine persönlichen Integrationen.
  3. Klicke auf Logs.
Webhook Logs in Sally mit hervorgehobener Schaltfläche

Logs öffnen

  1. Dort findest du alle Einträge:
Webhook Logübersicht in Sally

Alle Webhook-Anfragen im Überblick

6.3. Wie man einen Logeintrag liest

Ein Eintrag enthält z. B.:

  1. Ausführungszeit
  2. Ziel-Endpunkt (URL)
  3. HTTP-Status (z. B. 202 Accepted = erfolgreich)
  4. Latenz/Dauer
  5. Event (welches Sally-Ereignis den Webhook ausgelöst hat)
  6. Retries (bei Fehlversuchen)
  7. Details zu Anfrage & Antwort
Häufige Statusmeldungen
  • 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.