Heilo mit Ihrem CRM verbinden
Acht Schritte, um Heilo mit einem beliebigen CRM zu verbinden — über Zapier, Make oder ein anderes Tool mit Webhook-Unterstützung.
Nach jedem Anruf sendet Heilo eine Benachrichtigung mit den Anrufdetails an eine von Ihnen gewählte Adresse. Diese Anleitung zeigt, wie Sie Heilo über Zapier oder Make mit jedem beliebigen CRM verbinden — ohne Code, in 15–20 Minuten.
Es ist ein universeller Weg, der mit jedem von Zapier oder Make unterstützten CRM funktioniert. Fertige Schritt-für-Schritt-Rezepte für Pipedrive, HubSpot und Zoho CRM finden Sie weiter unten. Ein-Klick-Vorlagen (Zapier/Make) sind noch in Planung — bis dahin führt Sie jedes Rezept manuell durch den letzten Schritt (Speichern in Ihrem CRM).
1Bevor Sie beginnen: Was die Zapier- und Make-Pläne verlangen
Der Trigger „Webhooks by Zapier“ ist eine Premium-App und läuft im Free-Plan nicht: Free bietet 100 Aufgaben pro Monat und zweistufige Zaps, also einen Trigger und eine Aktion. Das Rezept in diesem Leitfaden hat nach dem Trigger mindestens drei Aktionen, Sie brauchen also Professional oder höher; Professional beginnt bei 19,99 USD pro Monat bei jährlicher Zahlung bzw. 29,99 USD bei monatlicher, für 750 Aufgaben. Eine Aufgabe verbraucht nur eine erfolgreiche Aktion — Trigger, Filter und Formatter zählen nicht mit. Zapier-Pläne und -Preise
Make setzt keine Planhürde vor Webhooks — das Modul „Custom webhook“ läuft auch im Free-Plan, der bis zu 1000 Credits pro Monat und zwei aktive Szenarien bietet. Abrechnungseinheit in Make ist der Credit, nicht die Operation; ein Modullauf ist ein Credit, und das Trigger-Modul zählt ebenfalls. Rechnen Sie das nicht in eine Anzahl von Gesprächen um: Öffnen Sie nach dem ersten echten Ereignis die Szenario-Historie und lesen Sie die Credits dieses einen Durchlaufs ab. Make-Pläne und -Preise
Preise und Limits der Anbieter haben wir am 9. September 2026 auf deren eigenen Seiten geprüft. Sie ändern sich ohne unser Zutun — bestätigen Sie sie vor der Entscheidung über die Links oben.
2Einen neuen Zap in Zapier erstellen
Der Trigger „Webhooks by Zapier (Catch Hook)“ erzeugt eine Adresse, an die Heilo Ereignisse sendet.
- Melden Sie sich bei Ihrem Zapier-Dashboard an
- Create Zap → Choose Trigger → „Webhooks by Zapier“
- Event = „Catch Hook“ → Continue
- Zapier zeigt eine Adresse wie https://hooks.zapier.com/hooks/catch/… an — kopieren Sie sie
3Die Adresse als Webhook-Abonnement in Heilo einfügen
Heilo verifiziert die Adresse — Ihr Zapier-Endpunkt antwortet automatisch. Nach der Aktivierung wird jeder Anruf an diese Adresse gesendet.
- Gehen Sie in Heilo zurück zu Einstellungen → Integrationen
- Klicken Sie auf „Abonnement hinzufügen“
- Fügen Sie die Zapier-Adresse in das Feld „Endpunkt-URL“ ein, wählen Sie die Ereignistypen (abgeschlossener Anruf + ausgehender Anrufversuch) und klicken Sie auf „Erstellen + Handshake“
- Der Status sollte auf „Aktiv“ wechseln. Das Signaturgeheimnis zeigen wir nur einmal — speichern Sie es jetzt, auch wenn Sie vorerst bei der Basisvariante bleiben, denn ohne es können Sie die Signatur später nicht prüfen
4Testereignis aus Heilo senden
Das Testereignis trägt genau die Struktur eines echten abgeschlossenen Gesprächs, ein darauf gebautes Mapping funktioniert also weiter. Ein Vorbehalt: Der Aufnahme-Link in diesem Ereignis ist ein Beispiel, keine Datei — ihn zu öffnen beweist nicht, dass echtes Audio erreichbar sein wird.
- Klicken Sie in Heilo auf das Symbol „Test“ neben Ihrem Abonnement
- Das Ereignis läuft durch dieselbe Zustellwarteschlange wie jedes andere — nimmt der Empfänger es nicht an, sehen Sie das in der Zustellhistorie in Heilo
5Die vollständige Datenstruktur auslesen
Zapier bietet nur Felder an, die es tatsächlich gesehen hat. Deshalb lesen Sie die Struktur nach dem Senden des Tests aus, nicht davor — sonst erscheint die Hälfte der Felder gar nicht in der Liste.
- Gehen Sie in Zapier zum Trigger-Schritt zurück und führen Sie „Test trigger“ aus
- Prüfen Sie, dass Sie die Gesprächsdaten sehen: Anrufernummer, Name, Zusammenfassung und Aufnahme-Link
- Continue → weiter zum Aktionsschritt (Ihr CRM)
6Das Speichern in Ihrem CRM einrichten
Fügen Sie in Ihrem Tool (Zapier oder Make) Aktionen für Ihr CRM hinzu — zum Beispiel Pipedrive, Zoho CRM, Notion oder Airtable. Für Vertriebsabläufe sind das in der Regel drei Schritte: (1) einen Kontakt anhand der Telefonnummer finden oder erstellen, (2) einen Lead/Deal erstellen oder aktualisieren, (3) eine Aktivität, Aufgabe oder Notiz anhängen.
Bevor Sie die Automatisierung veröffentlichen, setzen Sie einen Filter auf das Feld event_type. Lassen Sie den gewählten Geschäftstyp durch und weisen Sie webhook.test sowie die Adressbestätigung ab — sonst legen Ihre eigenen Tests Datensätze im CRM an. Während des Mappings dürfen Sie den Test durchlassen; vor der Veröffentlichung müssen Sie ihn abschneiden. Wo genau der Filter für jedes der drei Rezepte sitzt, steht im Rezeptabschnitt weiter unten.
| Heilo-Feld | CRM-Zuordnung |
|---|---|
| data.call_id | ID-/Referenzfeld |
| data.customer_phone_e164 | Kontakttelefon („Phone“ / „Primary Phone“) |
| data.transcript_processed.caller_name | Kontaktname (falls von Heilo erkannt) |
| data.transcript_processed.summary | Notiztext oder Aktivitätsbeschreibung |
| data.transcript_processed.service_needed | Aktivitätsbetreff oder Deal-Titel |
| data.transcript_processed.subject | Lead-/Deal-Titel (bester Fallback für service_needed) |
| data.transcript_processed.lead_score | Priorität, Label oder Qualifizierungsfilter |
| data.transcript_processed.preferred_date | Fälligkeitsdatum für die Nachverfolgung oder erwartetes Abschlussdatum |
| data.transcript_processed.client_city | Kontaktstadt / Adressfeld |
| data.transcript_processed.client_address | Straßenadresse des Kontakts |
| data.transcript_processed.services_match | Ob die Anfrage zu Ihrem Angebot passt (true/false) — zur Qualifizierung |
| data.transcript_processed.additional_details | Zusätzliche Details aus dem Anruf → Notiz / Beschreibung |
| data.recording_url | Ein URL-Feld (z. B. „Recording link“) |
| data.duration | Aktivitätsdauer (in Sekunden) |
Das Feld data.outbound_lifecycle erscheint nur in den Ereignissen call.outbound.attempted und call.failed — in call.completed ist es nicht enthalten.
7Automatisierung veröffentlichen
Bis hierher lief alles im Bearbeitungsmodus und nichts reagierte auf echte Gespräche. Schalten Sie die Automatisierung in Ihrem Tool ein — in Zapier veröffentlichen Sie den Zap, in Make schalten Sie das Szenario ein. Stellen Sie vorher sicher, dass der Filter aus dem vorigen Schritt gespeichert ist: Ohne ihn legt auch das nächste Testereignis etwas im CRM an.
8Ein echtes Gespräch im CRM prüfen
Der letzte Schritt ist keine Formalität. Ein Testereignis beweist, dass die Leitung steht, nicht dass der Datensatz dort gelandet ist, wo er hingehört. Führen Sie ein echtes Gespräch, warten Sie sein Ende ab und öffnen Sie den Kontakt im CRM. Prüfen Sie drei Dinge: Die Aktivität existiert und es gibt genau eine, sie trägt die Heilo Call ID, und die Zusammenfassung entspricht dem, was tatsächlich gesagt wurde. Erst das ist die Abnahme.
Rezepte für bestimmte CRMs
Nachfolgend finden Sie CRM-spezifische Konfigurationen. Der generische Webhook liefert Ihnen die Anrufdaten; dieser Abschnitt zeigt, wie Sie daraus einen Kontakt, Lead/Deal und eine Aktivität in einem bestimmten CRM erstellen.
Pipedrive: Kontakt + Lead/Deal + Aktivität
Zielergebnis: Nach einem abgeschlossenen Anruf findet oder erstellt Pipedrive eine Person, erstellt einen Vertriebs-Lead/-Deal und hängt eine Aktivität mit der Zusammenfassung und dem Aufzeichnungslink an.
Verwenden Sie Lead, wenn Anrufe zur Qualifizierung zunächst im Leads Inbox landen sollen. Verwenden Sie Deal, wenn jeder qualifizierte Anruf sofort in die Pipeline gelangen soll.
Zapier
- Trigger: Webhooks by Zapier → Catch Hook. Belassen Sie das Heilo-Abonnement im permissiven Modus.
- Filter by Zapier: event_type = call.completed zulassen; während der Einrichtung auch webhook.test zulassen (oder nach data._test = true filtern).
- Pipedrive → Find or Create Person. Suchen Sie nach Phone Numbers = data.customer_phone_e164 und setzen Sie Person Name aus caller_name oder der Telefonnummer.
- Pipedrive → Search Activities über Ihr Feld Heilo Call ID = data.call_id. Dieser Schritt entscheidet, ob Sie unten aktualisieren oder anlegen; ohne ihn fügt ein erneuter Versuch eine zweite Aktivität zum selben Gespräch hinzu.
- Aktivität gefunden → Update Activity; nichts gefunden → Create Activity, an die Person gehängt. In beiden Fällen schreiben Sie Heilo Call ID = data.call_id sowie summary, recording_url und transcript_original. Hier wird kein Deal angelegt — die Regel für Chancen steht in einem eigenen Abschnitt weiter unten.
Make
- Trigger: Webhooks → Custom webhook. Das Szenario muss aktiv sein und ausgeführt werden, wenn Daten eintreffen.
- Fügen Sie nach dem Webhook einen Filter hinzu: event_type = call.completed; während der Zuordnung von Testdaten auch webhook.test zulassen (oder nach data._test = true filtern).
- Pipedrive CRM → Search Persons nach data.customer_phone_e164. Wenn es kein Ergebnis gibt, erstellen Sie eine Person mit dieser Telefonnummer und caller_name oder der Telefonnummer als Name.
- Pipedrive CRM → Search Activities über Ihr Feld Heilo Call ID = data.call_id. Stellen Sie das Szenario auf sequenzielle Verarbeitung, damit zwei parallele Durchläufe sich bei dieser Suche nicht überholen.
- Router: Aktivität vorhanden → Update an Activity; nicht vorhanden → Create an Activity, an die Person gehängt. Schreiben Sie Heilo Call ID = data.call_id, summary und recording_url. Dieses Rezept legt keine Chance an.
| Heilo-Feld | Pipedrive-Feld / -Aktion | Verwendung |
|---|---|---|
| event_type | Filter / Router | Verarbeiten Sie call.completed; verwenden Sie webhook.test nur für die Feldzuordnung. |
| data.customer_phone_e164 | Person → Phone Numbers | Primäres Feld für Kontaktsuche und Deduplizierung. |
| data.transcript_processed.caller_name | Person → Person Name | Wenn leer, verwenden Sie die Telefonnummer als sicheren Fallback-Namen. |
| data.transcript_processed.subject | Lead/Deal → Title | Bester Opportunity-Titel; greifen Sie ersatzweise auf service_needed zurück. |
| data.transcript_processed.service_needed | Lead/Deal → Title oder benutzerdefiniertes Feld | Anfragekategorie; nützlich für Pipeline-Routing oder Labels. |
| data.transcript_processed.summary | Activity/Note → Note oder Public Description | Kurze Anrufbeschreibung, sichtbar an der Opportunity. |
| data.transcript_processed.lead_score | Lead label / priority / filter | Erstellen Sie beispielsweise einen Lead/Deal nur ab 7/10 oder leiten Sie niedrigere Bewertungen zur Prüfung weiter. |
| data.transcript_processed.preferred_date | Erwartetes Abschlussdatum oder Fälligkeitsdatum der Aktivität | Verwenden Sie dies, wenn der Kunde einen Termin oder ein bevorzugtes Nachverfolgungsdatum genannt hat. |
| data.transcript_processed.client_city | Person → Address (Stadt) oder benutzerdefiniertes Feld | Stadt des Kunden; praktisch für Segmentierung oder eine regionale Pipeline. |
| data.transcript_processed.client_address | Person/Organization → Address | Füllen Sie die Adresse der Person/Organisation aus, wenn der Anrufer sie angegeben hat. |
| data.transcript_processed.services_match | Filter / Lead label | false = Anfrage außerhalb Ihres Angebots; überspringen Sie den Deal oder markieren Sie ihn zur Ablehnung. |
| data.transcript_processed.additional_details | Activity/Note → Note | Zusätzliche Details aus dem Anruf; hängen Sie sie an den Aktivitätstext an. |
| data.recording_url | Activity/Note → Recording link | Wiedergabelink; funktioniert möglicherweise nicht mehr, nachdem der Anruf aufgrund der DSGVO-Aufbewahrung gelöscht wurde. |
| data.call_id | Custom field → Heilo Call ID | Idempotenzschlüssel. Verhindert einen zweiten CRM-Datensatz für denselben Anruf. |
| data.duration | Activity duration | Heilo sendet Sekunden; konvertieren Sie diese, falls Ihr Pipedrive-Feld ein Zeitformat erwartet. |
Bedingungen für die korrekte Zuordnung
- Aktivieren Sie beim Bestätigen der Adresse nicht den strikten Modus — Webhooks von Zapier und Make bestätigen den Empfang, senden das Challenge-Feld aber nicht zurück. Das betrifft nur die einmalige Adressbestätigung, nicht die Signatur bei normalen Zustellungen.
- Mischen Sie Ereignistypen nicht ohne Filter: call.outbound.attempted enthält weder das vollständige Transkript noch die Aufzeichnung.
- Legen Sie in Pipedrive ein eigenes Feld Heilo Call ID an und schreiben Sie data.call_id hinein. Danach suchen Sie vor jedem Schreiben — ohne dieses Feld gibt es nichts, wogegen dedupliziert werden könnte.
- Unterdrückte Nummer oder gar keine Nummer: Legen Sie daraus keine Person an. Leiten Sie das Ereignis zur manuellen Bearbeitung, sonst landen alle solchen Gespräche auf einem erfundenen Kontakt.
HubSpot: Kontakt + Deal + Notiz
Zielergebnis: Nach einem abgeschlossenen Anruf findet oder erstellt HubSpot einen Kontakt anhand der Telefonnummer, erstellt einen Deal und protokolliert eine Notiz mit der Zusammenfassung und dem Aufzeichnungslink.
Deduplizierungsfalle: Die Zapier-Aktion Create or Update Contact gleicht bestehende Kontakte ausschließlich über die E-Mail-Adresse ab. Heilo-Ereignisse enthalten eine Telefonnummer und oft keine E-Mail — diese Aktion erzeugt daher bei jedem Anruf einen doppelten Kontakt. Suchen Sie immer zuerst über die Telefon-Property und erstellen Sie einen Kontakt nur, wenn die Suche nichts findet.
Zapier
- Trigger: Webhooks by Zapier → Catch Hook. Belassen Sie das Heilo-Abonnement im permissiven Modus.
- Filter by Zapier: event_type = call.completed zulassen; während der Einrichtung auch webhook.test zulassen (oder nach data._test = true filtern).
- HubSpot → Find Contact. Setzen Sie die Such-Property auf Phone Number und ordnen Sie data.customer_phone_e164 zu; aktivieren Sie die Option, den Kontakt bei fehlendem Treffer zu erstellen, mit caller_name oder der Telefonnummer als Name. Verwenden Sie hier nicht Create or Update Contact — diese Aktion gleicht über E-Mail ab.
- HubSpot → Find Engagement über Ihre Eigenschaft Heilo Call ID = data.call_id. Aktivieren Sie hier kein Anlegen-falls-fehlt; darüber entscheidet der nächste Schritt.
- Notiz gefunden → aktualisieren; nichts gefunden → Create Engagement (Typ Note), mit dem Kontakt verknüpft. Schreiben Sie Heilo Call ID = data.call_id sowie summary, recording_url und transcript_original. Create Deal gehört nicht zum Standardrezept.
Make
- Trigger: Webhooks → Custom webhook. Das Szenario muss aktiv sein und ausgeführt werden, wenn Daten eintreffen.
- Fügen Sie nach dem Webhook einen Filter hinzu: event_type = call.completed; während der Zuordnung von Testdaten auch webhook.test zulassen (oder nach data._test = true filtern).
- HubSpot CRM → Search for Contacts über die Telefon-Property = data.customer_phone_e164. Wenn es kein Ergebnis gibt, erstellen Sie den Kontakt mit Create a Contact (diese Telefonnummer plus caller_name oder die Telefonnummer als Name).
- HubSpot CRM → Search for Engagements über die Eigenschaft Heilo Call ID = data.call_id. Stellen Sie das Szenario auf sequenzielle Verarbeitung.
- Router: Notiz vorhanden → aktualisieren; nicht vorhanden → Create an Engagement (Typ Note), mit dem Kontakt verknüpft. Schreiben Sie Heilo Call ID = data.call_id, summary und recording_url. Dieses Rezept legt keinen Deal an.
| Heilo-Feld | HubSpot-Feld / -Aktion | Verwendung |
|---|---|---|
| event_type | Filter / Router | Verarbeiten Sie call.completed; verwenden Sie webhook.test nur für die Feldzuordnung. |
| data.customer_phone_e164 | Contact → Phone Number | Primärer Suchschlüssel. Speichern Sie Telefonnummern in HubSpot im E.164-Format — die Telefonsuche vergleicht exakte Werte, keine Formatvarianten. |
| data.transcript_processed.caller_name | Contact → First Name / Last Name | Wenn leer, verwenden Sie die Telefonnummer als sicheren Fallback-Namen. |
| data.transcript_processed.subject | Deal → Deal Name | Bester Opportunity-Titel; greifen Sie ersatzweise auf service_needed zurück. |
| data.transcript_processed.service_needed | Deal → Deal Name oder Custom Property | Anfragekategorie; nützlich für Pipeline-Routing oder Labels. |
| data.transcript_processed.summary | Note → Note body | Kurze Anrufbeschreibung, sichtbar an der Opportunity. |
| data.transcript_processed.lead_score | Custom property / filter | Erstellen Sie beispielsweise einen Lead/Deal nur ab 7/10 oder leiten Sie niedrigere Bewertungen zur Prüfung weiter. |
| data.transcript_processed.preferred_date | Deal → Close Date oder Fälligkeitsdatum der Aufgabe | Verwenden Sie dies, wenn der Kunde einen Termin oder ein bevorzugtes Nachverfolgungsdatum genannt hat. |
| data.transcript_processed.client_city | Contact → City | Stadt des Kunden; praktisch für Segmentierung oder eine regionale Pipeline. |
| data.transcript_processed.client_address | Contact → Street Address | Füllen Sie die Adresse der Person/Organisation aus, wenn der Anrufer sie angegeben hat. |
| data.transcript_processed.services_match | Filter / deal tag | false = Anfrage außerhalb Ihres Angebots; überspringen Sie den Deal oder markieren Sie ihn zur Ablehnung. |
| data.transcript_processed.additional_details | Note → Note body | Zusätzliche Details aus dem Anruf; hängen Sie sie an den Aktivitätstext an. |
| data.recording_url | Note → Recording link | Wiedergabelink; funktioniert möglicherweise nicht mehr, nachdem der Anruf aufgrund der DSGVO-Aufbewahrung gelöscht wurde. |
| data.call_id | Custom property → Heilo Call ID | Idempotenzschlüssel. Verhindert einen zweiten CRM-Datensatz für denselben Anruf. |
| data.duration | Custom Property oder Notiz | Heilo sendet Sekunden; konvertieren Sie diese, falls Ihre HubSpot-Property ein anderes Format erwartet. |
Bedingungen für die korrekte Zuordnung
- Aktivieren Sie beim Bestätigen der Adresse nicht den strikten Modus — Webhooks von Zapier und Make bestätigen den Empfang, senden das Challenge-Feld aber nicht zurück. Das betrifft nur die einmalige Adressbestätigung, nicht die Signatur bei normalen Zustellungen.
- Mischen Sie Ereignistypen nicht ohne Filter: call.outbound.attempted enthält weder das vollständige Transkript noch die Aufzeichnung.
- Verlassen Sie sich beim Abgleich nicht auf Create or Update Contact — diese Aktion dedupliziert ausschließlich über E-Mail; führen Sie immer zuerst die Telefonsuche aus.
- Fügen Sie eine benutzerdefinierte HubSpot-Property namens Heilo Call ID hinzu und speichern Sie dort data.call_id, um Duplikate zu vermeiden.
- Unterdrückte Nummer oder gar keine Nummer: Legen Sie daraus keine Person an. Leiten Sie das Ereignis zur manuellen Bearbeitung, sonst landen alle solchen Gespräche auf einem erfundenen Kontakt.
Zoho CRM: Kontakt + Deal + Notiz
Zielergebnis: Nach einem abgeschlossenen Anruf findet oder erstellt Zoho CRM einen Kontakt anhand der Telefonnummer, erstellt einen Deal und hängt eine Notiz mit der Zusammenfassung und dem Aufzeichnungslink an.
Suchen Sie Kontakte über das Feld Phone (oder Mobile, wenn Sie die Nummern dort speichern). Heilo sendet data.customer_phone_e164 im E.164-Format — halten Sie die Nummern in Zoho im selben Format, sonst findet die Suche nichts.
Zapier
- Trigger: Webhooks by Zapier → Catch Hook. Belassen Sie das Heilo-Abonnement im permissiven Modus.
- Filter by Zapier: event_type = call.completed zulassen; während der Einrichtung auch webhook.test zulassen (oder nach data._test = true filtern).
- Zoho CRM → Find Module Entry im Modul Contacts, mit Suche über das Feld Phone = data.customer_phone_e164; aktivieren Sie die Option, den Eintrag bei fehlendem Treffer zu erstellen. Zoho verlangt Last Name — verwenden Sie caller_name oder die Telefonnummer.
- Zoho CRM → Find Module Entry im Modul Notes, Suche über Ihr Feld Heilo Call ID = data.call_id. Aktivieren Sie kein Anlegen-falls-fehlt.
- Notiz gefunden → Note Content aktualisieren; nichts gefunden → Create Module Entry im Modul Notes, mit dem Kontakt verknüpft. Schreiben Sie Heilo Call ID = data.call_id sowie summary, recording_url und transcript_original. Das Modul Deals rührt das Standardrezept nicht an.
Make
- Trigger: Webhooks → Custom webhook. Das Szenario muss aktiv sein und ausgeführt werden, wenn Daten eintreffen.
- Fügen Sie nach dem Webhook einen Filter hinzu: event_type = call.completed; während der Zuordnung von Testdaten auch webhook.test zulassen (oder nach data._test = true filtern).
- Zoho CRM → Search Objects im Modul Contacts mit dem Kriterium Phone = data.customer_phone_e164. Wenn es kein Ergebnis gibt, erstellen Sie den Kontakt mit Create an Object (Last Name aus caller_name oder der Telefonnummer).
- Zoho CRM → Search Objects im Modul Notes mit dem Kriterium Heilo Call ID = data.call_id. Stellen Sie das Szenario auf sequenzielle Verarbeitung.
- Router: Notiz vorhanden → aktualisieren; nicht vorhanden → Create an Object im Modul Notes, mit dem Kontakt verknüpft. Schreiben Sie Heilo Call ID = data.call_id, summary und recording_url. Dieses Rezept legt keine Chance an.
| Heilo-Feld | Zoho-CRM-Feld / -Aktion | Verwendung |
|---|---|---|
| event_type | Filter / Router | Verarbeiten Sie call.completed; verwenden Sie webhook.test nur für die Feldzuordnung. |
| data.customer_phone_e164 | Contact → Phone | Primärer Suchschlüssel. Suchen Sie über das Feld Phone (oder Mobile) und halten Sie auf beiden Seiten ein einheitliches Nummernformat — die Suche vergleicht exakte Werte. |
| data.transcript_processed.caller_name | Contact → Last Name | Zoho verlangt Last Name; wenn caller_name leer ist, verwenden Sie die Telefonnummer als sicheren Fallback-Namen. |
| data.transcript_processed.subject | Deal → Deal Name | Bester Opportunity-Titel; greifen Sie ersatzweise auf service_needed zurück. |
| data.transcript_processed.service_needed | Deal → Deal Name oder benutzerdefiniertes Feld | Anfragekategorie; nützlich für Pipeline-Routing oder Labels. |
| data.transcript_processed.summary | Note → Note Content | Kurze Anrufbeschreibung, sichtbar an der Opportunity. |
| data.transcript_processed.lead_score | Custom field / filter | Erstellen Sie beispielsweise einen Lead/Deal nur ab 7/10 oder leiten Sie niedrigere Bewertungen zur Prüfung weiter. |
| data.transcript_processed.preferred_date | Deal → Closing Date oder Fälligkeitsdatum der Aufgabe | Verwenden Sie dies, wenn der Kunde einen Termin oder ein bevorzugtes Nachverfolgungsdatum genannt hat. |
| data.transcript_processed.client_city | Contact → Mailing City | Stadt des Kunden; praktisch für Segmentierung oder eine regionale Pipeline. |
| data.transcript_processed.client_address | Contact → Mailing Street | Füllen Sie die Adresse der Person/Organisation aus, wenn der Anrufer sie angegeben hat. |
| data.transcript_processed.services_match | Filter / tag | false = Anfrage außerhalb Ihres Angebots; überspringen Sie den Deal oder markieren Sie ihn zur Ablehnung. |
| data.transcript_processed.additional_details | Note → Note Content | Zusätzliche Details aus dem Anruf; hängen Sie sie an den Aktivitätstext an. |
| data.recording_url | Note → Note Content (Link) | Wiedergabelink; funktioniert möglicherweise nicht mehr, nachdem der Anruf aufgrund der DSGVO-Aufbewahrung gelöscht wurde. |
| data.call_id | Custom field → Heilo Call ID | Idempotenzschlüssel. Verhindert einen zweiten CRM-Datensatz für denselben Anruf. |
| data.duration | Benutzerdefiniertes Feld oder Notiz | Heilo sendet Sekunden; konvertieren Sie diese, falls Ihr Zoho-CRM-Feld ein anderes Format erwartet. |
Bedingungen für die korrekte Zuordnung
- Aktivieren Sie beim Bestätigen der Adresse nicht den strikten Modus — Webhooks von Zapier und Make bestätigen den Empfang, senden das Challenge-Feld aber nicht zurück. Das betrifft nur die einmalige Adressbestätigung, nicht die Signatur bei normalen Zustellungen.
- Mischen Sie Ereignistypen nicht ohne Filter: call.outbound.attempted enthält weder das vollständige Transkript noch die Aufzeichnung.
- Fügen Sie ein benutzerdefiniertes Zoho-CRM-Feld namens Heilo Call ID hinzu und speichern Sie dort data.call_id, um Duplikate zu vermeiden.
- Zoho lehnt Datensätze mit fehlenden Pflichtfeldern ab: Contacts benötigt Last Name, Deals mindestens Deal Name und Stage (je nach Layout auch Closing Date) — hinterlegen Sie dafür sichere Fallbacks.
- Unterdrückte Nummer oder gar keine Nummer: Legen Sie daraus keine Person an. Leiten Sie das Ereignis zur manuellen Bearbeitung, sonst landen alle solchen Gespräche auf einem erfundenen Kontakt.
Drei verschiedene Schlüssel — nicht vermischen
event_id identifiziert eine einzelne Benachrichtigung. Dasselbe Gespräch kann mehrere Benachrichtigungen senden, und dieselbe Benachrichtigung kann bei einem erneuten Versuch zweimal ankommen. Speichern Sie event_id, um eine Wiederholung zu erkennen.
call_id identifiziert das Gespräch, also die Aktivität im CRM. Ein Gespräch ist eine Aktivität, unabhängig davon, wie viele Benachrichtigungen dazu eingingen. Das ist der Schlüssel, nach dem Sie vor dem Schreiben suchen.
Die Telefonnummer bzw. die Kontakt-ID im CRM identifiziert die Person. Achten Sie auf drei Fälle: Eine unterdrückte Nummer kommt als literaler Wert an, nicht als Nummer; es kann gar keine Nummer geben; und zu einer Nummer können zwei Kontakte passen. In keinem davon sollten Sie aus diesem Wert einen Kontakt anlegen — leiten Sie das Ereignis zur manuellen Bearbeitung, sonst laufen alle Gespräche mit unterdrückter Nummer in einem erfundenen Kontakt zusammen.
Eine Verkaufschance — eine bewusste Ergänzung, kein Standardschritt
Das Standardrezept legt keine Verkaufschance an, weil nicht jedes Gespräch eine ist und ein bedingungsloses „Deal anlegen“ die Pipeline unter einem Deal pro Gespräch begräbt. Wenn Sie sie anlegen wollen, machen Sie eine Regel daraus: Suchen Sie zuerst eine offene Chance für diesen Kontakt und hängen Sie die Aktivität daran; legen Sie eine neue nur an, wenn es keine gibt. Passen mehrere offene Chancen, raten Sie nicht — hängen Sie die Aktivität an den Kontakt und überlassen Sie die Wahl einem Menschen.
Wiederholungen, Teilfehler und unbekannte Ergebnisse
Heilo wiederholt eine fehlgeschlagene Zustellung fünfmal, im Abstand von 2 Minuten, 5 Minuten, 30 Minuten und 2 Stunden. Wir garantieren keine Reihenfolge: Ein Aufnahme-Ereignis kann vor dem Gesprächsende-Ereignis eintreffen. Das Rezept muss das aushalten, statt anzunehmen, dass das zuerst Gesendete zuerst ankam.
Die Deduplizierung muss jeden Aufruf abdecken, der einen Datensatz anlegt, nicht nur den ersten. Das Muster „Flag prüfen, anlegen, Flag schreiben“ genügt nicht: Zwei parallele Durchläufe lesen beide das Flag, bevor einer es schreibt, und Sie erhalten zwei Datensätze. Hat Ihr CRM einen eindeutigen Schlüssel oder ein Upsert auf Heilo Call ID, nutzen Sie das. Sonst stellen Sie das Szenario auf sequenzielle Verarbeitung und suchen vor jedem Schreiben.
Ein Timeout nach dem Senden einer anlegenden Anfrage bedeutet nicht, dass der Datensatz nicht angelegt wurde — es bedeutet, dass Sie es nicht wissen. Wiederholen Sie das Anlegen dann nicht. Lesen Sie zuerst den Stand über die Heilo Call ID und entscheiden Sie danach. Dasselbe gilt für einen Fehler auf halbem Weg: Wurde der Kontakt angelegt, die Notiz aber nicht, soll der erneute Versuch die Notiz ergänzen, nicht einen zweiten Kontakt anlegen.
Vollständige Datenstruktur (Referenz)
Jede Benachrichtigung hat dieselbe Struktur. Die Felder in „data“ hängen vom Ereignistyp ab — ein abgeschlossenes Gespräch enthält etwa das aufbereitete Transkript. Heilo signiert jede Zustellung mit dem Header Heilo-Signature (HMAC-SHA256 über den rohen Anfragetext), aber eine Signatur bewirkt nichts, solange der Empfänger sie nicht prüft. Der Catch Hook in Zapier und der Custom webhook in Make nehmen die Anfrage ohne Prüfung an — was das praktisch bedeutet, steht im Abschnitt zu den zwei Sicherheitsvarianten.
{
"api_version": "2026-06-15",
"event_id": "<uuid>",
"event_type": "call.completed",
"resource_id": "<call_id>",
"created_at": "2026-06-03T12:34:56Z",
"data": {
"call_id": "...",
"direction": "inbound",
"caller_phone": "+48600100200",
"customer_phone_e164": "+48600100200",
"customer_phone_national": "600 100 200",
"company_phone_e164": "+48222630000",
"call_created_at": "2026-06-03T12:30:11Z",
"app_url": "https://www.heilo.io/calls/3fa85f64-5717-4562-b3fc-2c963f66afa6",
"duration": 87,
"recording_url": "https://heilo.io/api/v1/calls/.../recording.mp3?token=...",
"transcript_processed": {
"caller_name": "Jan Kowalski",
"client_address": "ul. Przykladowa 10",
"client_city": "Warszawa",
"summary": "...",
"service_needed": "Tynki gipsowe w mieszkaniu 65m2",
"subject": "Wycena tynkow - Warszawa, 65m2",
"lead_score": 7,
"preferred_date": "2026-06-10",
"services_match": true,
"additional_details": "Klient wspomnial o terminie do konca czerwca."
},
"transcript_original": "..."
}
}Häufige Probleme
- Verifizierung (Handshake) nach dem Hinzufügen des Abonnements fehlgeschlagen
- Ihre Adresse hat nicht innerhalb von 10 Sekunden bestätigt. In Zapier geschieht dies automatisch; in Make muss das Szenario eingeschaltet sein (und im strikten Modus benötigen Sie zusätzlich ein „Webhook response“-Modul). Prüfen Sie außerdem, ob die Adresse keine Leerzeichen oder „&“-Zeichen enthält, korrigieren Sie sie und klicken Sie dann beim pausierten Abonnement auf „Erneut verifizieren“.
- In meinem CRM werden doppelte Kontakte erstellt
- Connector-Tools normalisieren Telefonformate nicht — „+48 600 100 200“ und „+48600100200“ sehen aus wie zwei verschiedene Nummern. Heilo sendet die Nummer bereits im E.164-Format (das Feld customer_phone_e164), verwenden Sie also dieses zur Kontaktsuche. In Zapier können Sie vor der Suche auch einen Schritt „Formatter → Phone Number → E.164“ hinzufügen.
- Der Aufzeichnungslink funktioniert nach einer Weile nicht mehr
- Ein Aufnahme-Link ist ab dem Erzeugen 7 Tage gültig und kann früher aufhören zu funktionieren. Ein abgelaufenes Token antwortet mit 403, eine gelöschte Aufnahme mit 410. Ein erneutes Senden desselben Ereignisses erneuert den Link nicht, weil es dieselbe Adresse trägt. Brauchen Sie die Aufnahme später, öffnen Sie das Gespräch nach der Anmeldung in Heilo. Wenn Sie die Datei ins CRM kopieren, behandeln Sie auch die Ereignisse call.deletion_scheduled und call.recording.deleted — das Ablaufen des Links löscht die Kopie bei Ihnen nicht.
- Eine Meldung über das Überschreiten des Operationslimits
- Ein Heilo-Gespräch sind im Tool meist einige Schritte: Kontakt finden, Aktivität anlegen oder aktualisieren. Rechnen Sie das nicht in eine allgemeine Anzahl von Gesprächen um — öffnen Sie nach dem ersten echten Ereignis die Historie Ihres Zaps oder Szenarios und lesen Sie ab, wie viele Aufgaben oder Credits dieser eine Durchlauf verbraucht hat. So viel kostet bei Ihnen jedes weitere Gespräch.
Roadmap (v1.1+)
Was wir für kommende Releases planen. Diese Liste ist keine Garantie — die Prioritäten richten sich nach Ihrem Feedback.
- Spezielle Rezepte für weitere CRMs: Salesforce, Bitrix24, Livespace
- Ein-Klick-Vorlagen (Zapier/Make) für die beliebtesten CRMs
- Regeln für Deduplizierung und Feldzuordnung zum Kopieren und Einfügen
- Weitere Ereignistypen zum Zuordnen (z. B. Projekt- und Aufgaben-Ereignisse, sms.received)
Fehlt Ihr CRM oder Szenario? Schreiben Sie an support@heilo.io — wir priorisieren nach tatsächlichem Bedarf.
Schlüssel und Webhooks im Panel verwalten
Nach der Anmeldung generieren Sie API-Schlüssel, fügen Webhook-Abonnements hinzu und sehen das Zustellungsprotokoll ein.