Verbind Heilo met uw CRM
Acht stappen om Heilo met elk CRM te verbinden — via Zapier, Make of een andere tool die webhooks ondersteunt.
Na elk gesprek stuurt Heilo een melding met de gespreksgegevens naar een adres dat u kiest. Deze handleiding laat zien hoe u Heilo met elk CRM verbindt via Zapier of Make — zonder code, in 15–20 minuten.
Het is een universele route die werkt met elk CRM dat door Zapier of Make wordt ondersteund. Stap-voor-stap-recepten voor Pipedrive, HubSpot en Zoho CRM vindt u hieronder. One-click-sjablonen (Zapier/Make) staan nog op de roadmap — tot die tijd begeleidt elk recept u handmatig door de laatste stap (opslaan in uw CRM).
1Voor je begint: wat de abonnementen van Zapier en Make vereisen
De trigger „Webhooks by Zapier” is een premium-app en draait niet op het Free-abonnement: Free geeft 100 taken per maand en tweestaps-Zaps, oftewel één trigger en één actie. Het recept in deze handleiding heeft na de trigger minstens drie acties, dus je hebt Professional of hoger nodig; Professional begint bij $19,99 per maand bij jaarlijkse betaling, of $29,99 bij maandelijkse, voor 750 taken. Alleen een geslaagde actie verbruikt een taak — de trigger, Filter en Formatter tellen niet mee. Zapier-abonnementen en -prijzen
Make legt geen abonnementsdrempel voor webhooks — de module „Custom webhook” draait ook op het Free-abonnement, dat tot 1000 credits per maand en twee actieve scenario's geeft. De rekeneenheid in Make is de credit, niet de operatie; één modulerun is één credit, en de triggermodule telt ook mee. Reken dat niet om naar een aantal gesprekken: open na het eerste echte event de scenariogeschiedenis en lees de credits af die die ene run verbruikte. Make-abonnementen en -prijzen
We hebben de prijzen en limieten van de leveranciers op 9 september 2026 op hun eigen pagina's gecontroleerd. Ze veranderen buiten ons om, dus bevestig ze via de links hierboven voordat je beslist.
2Maak een nieuwe Zap in Zapier
De “Webhooks by Zapier (Catch Hook)”-trigger genereert een adres waar Heilo events naartoe stuurt.
- Meld u aan bij uw Zapier-dashboard
- Create Zap → Choose Trigger → “Webhooks by Zapier”
- Event = “Catch Hook” → Continue
- Zapier toont een adres zoals https://hooks.zapier.com/hooks/catch/… — kopieer het
3Plak het adres in Heilo als webhook-abonnement
Heilo verifieert het adres — uw Zapier-endpoint reageert automatisch. Na activering wordt elk gesprek naar dit adres gestuurd.
- Ga terug naar Instellingen → Integraties in Heilo
- Klik op “Abonnement toevoegen”
- Plak het Zapier-adres in het veld “Endpoint-URL”, kies de eventtypes (afgerond gesprek + uitgaande belpoging) en klik op “Aanmaken + handshake”
- De status hoort te veranderen in „Actief”. Het ondertekeningsgeheim tonen we maar één keer — sla het nu op, ook als je voorlopig bij de basisvariant blijft, want zonder dat kun je de handtekening later niet controleren
4Stuur een testevent vanuit Heilo
Het testevent draagt precies de structuur van een echt afgerond gesprek, dus een mapping die je erop bouwt blijft daarna werken. Eén kanttekening: de opnamelink in dit event is een voorbeeld, geen bestand — hem openen bewijst niet dat echte audio bereikbaar zal zijn.
- Klik in Heilo op het “Test”-icoon naast uw abonnement
- Het event gaat door dezelfde bezorgwachtrij als elk ander — weigert de ontvanger het, dan zie je dat in de bezorggeschiedenis in Heilo
5Lees de volledige datastructuur
Zapier biedt alleen velden aan die het daadwerkelijk heeft gezien. Daarom lees je de structuur ná het versturen van de test, niet ervoor — anders verschijnt de helft van de velden niet in de lijst.
- Ga in Zapier terug naar de triggerstap en voer „Test trigger” uit
- Controleer of je de gespreksgegevens ziet: nummer van de beller, naam, samenvatting en de opnamelink
- Continue → ga door naar de actiestap (jouw CRM)
6Stel het opslaan in uw CRM in
Voeg in uw hulpmiddel (Zapier of Make) acties toe voor uw CRM — bijvoorbeeld Pipedrive, Zoho CRM, Notion of Airtable. Voor verkoopworkflows zijn dat meestal drie stappen: (1) een contact vinden of aanmaken op basis van het telefoonnummer, (2) een lead/deal aanmaken of bijwerken, (3) een activiteit, taak of notitie koppelen.
Zet vóór het publiceren van de automatisering een filter op het veld event_type. Laat het gekozen zakelijke type door en weiger webhook.test en de adresbevestiging — anders maken je eigen tests records aan in het CRM. Tijdens het mappen mag je de test doorlaten; vóór publicatie moet je hem afsnijden. Waar het filter precies hoort bij elk van de drie recepten staat in de receptensectie hieronder.
| Heilo-veld | Koppelen aan CRM |
|---|---|
| data.call_id | ID-/referentieveld |
| data.customer_phone_e164 | Contacttelefoon (“Phone” / “Primary Phone”) |
| data.transcript_processed.caller_name | Contactnaam (als Heilo deze heeft gedetecteerd) |
| data.transcript_processed.summary | Notitietekst of activiteitsomschrijving |
| data.transcript_processed.service_needed | Activiteitsonderwerp of dealtitel |
| data.transcript_processed.subject | Lead-/dealtitel (beste fallback voor service_needed) |
| data.transcript_processed.lead_score | Prioriteit, label of kwalificatiefilter |
| data.transcript_processed.preferred_date | Vervaldatum voor opvolging of verwachte sluitingsdatum |
| data.transcript_processed.client_city | Contactveld stad / adres |
| data.transcript_processed.client_address | Straatadres van contact |
| data.transcript_processed.services_match | Of de aanvraag aansluit op uw aanbod (true/false) — voor kwalificatie |
| data.transcript_processed.additional_details | Extra details uit het gesprek → notitie / omschrijving |
| data.recording_url | Een URL-veld (bijv. “Opnamekoppeling”) |
| data.duration | Activiteitsduur (in seconden) |
Het veld data.outbound_lifecycle verschijnt alleen in de gebeurtenissen call.outbound.attempted en call.failed — het zit niet in call.completed.
7Publiceer de automatisering
Tot nu toe gebeurde alles in bewerkmodus en reageerde niets op echte gesprekken. Zet de automatisering aan in je tool — in Zapier publiceer je de Zap, in Make schakel je het scenario in. Zorg er eerst voor dat het filter uit de vorige stap is opgeslagen: publiceren zonder dat filter betekent dat het volgende testevent ook iets in het CRM aanmaakt.
8Controleer een echt gesprek in je CRM
De laatste stap is geen formaliteit. Een testevent bewijst dat de draad is aangesloten, niet dat het record terechtkwam waar het hoort. Neem of voer één echt gesprek, wacht tot het klaar is en open het contact in je CRM. Controleer drie dingen: de activiteit bestaat en er is er precies één, ze draagt het Heilo Call ID, en de samenvatting komt overeen met wat er werkelijk is gezegd. Pas dat is de oplevering.
Recepten voor specifieke CRM's
Hieronder staan CRM-specifieke configuraties. De generieke webhook levert u de gespreksgegevens; dit onderdeel laat zien hoe u die omzet in een contact, lead/deal en activiteit in een specifiek CRM.
Pipedrive: contact + lead/deal + activiteit
Beoogd resultaat: na een afgerond gesprek vindt of maakt Pipedrive een persoon aan, maakt een verkooplead/-deal aan en koppelt een activiteit met de samenvatting en de opnamekoppeling.
Gebruik Lead als gesprekken eerst in de Leads Inbox terecht moeten komen voor kwalificatie. Gebruik Deal als elk gekwalificeerd gesprek direct in de pipeline moet komen.
Zapier
- Trigger: Webhooks by Zapier → Catch Hook. Houd het Heilo-abonnement in permissieve modus.
- Filter by Zapier: sta event_type = call.completed toe; tijdens de installatie ook webhook.test toestaan (of filter op data._test = true).
- Pipedrive → Find or Create Person. Zoek op Phone Numbers = data.customer_phone_e164 en stel Person Name in op caller_name of het telefoonnummer.
- Pipedrive → Search Activities op je veld Heilo Call ID = data.call_id. Deze stap bepaalt of je hieronder bijwerkt of aanmaakt; zonder deze stap voegt een herhaling een tweede activiteit toe voor hetzelfde gesprek.
- Activiteit gevonden → Update Activity; niets gevonden → Create Activity gekoppeld aan de persoon. Schrijf in beide gevallen Heilo Call ID = data.call_id plus summary, recording_url en transcript_original. Hier wordt geen deal aangemaakt — de regel voor kansen staat in een eigen sectie hieronder.
Make
- Trigger: Webhooks → Custom webhook. Het scenario moet actief zijn en draaien zodra er gegevens binnenkomen.
- Voeg een filter toe na de webhook: event_type = call.completed; sta tijdens het mappen van testgegevens ook webhook.test toe (of filter op data._test = true).
- Pipedrive CRM → Search Persons op data.customer_phone_e164. Als er geen resultaat is, maak dan een Person aan met dat telefoonnummer en caller_name of het telefoonnummer als naam.
- Pipedrive CRM → Search Activities op je veld Heilo Call ID = data.call_id. Zet het scenario op één-voor-één verwerken, zodat twee parallelle runs elkaar niet passeren bij deze zoekactie.
- Router: activiteit bestaat → Update an Activity; bestaat niet → Create an Activity gekoppeld aan de persoon. Schrijf Heilo Call ID = data.call_id, summary en recording_url. Dit recept maakt geen kans aan.
| Heilo-veld | Pipedrive-veld / -actie | Gebruik |
|---|---|---|
| event_type | Filter / Router | Verwerk call.completed; gebruik webhook.test alleen voor het mappen van velden. |
| data.customer_phone_e164 | Person → Phone Numbers | Primair veld voor het opzoeken en ontdubbelen van contacten. |
| data.transcript_processed.caller_name | Person → Person Name | Als dit leeg is, gebruik dan het telefoonnummer als veilige fallbacknaam. |
| data.transcript_processed.subject | Lead/Deal → Title | Beste titel voor de kans; val terug op service_needed. |
| data.transcript_processed.service_needed | Lead/Deal → Titel of aangepast veld | Categorie van de aanvraag; handig voor pipeline-routering of labels. |
| data.transcript_processed.summary | Activiteit/Notitie → Note of Public Description | Korte gespreksomschrijving die zichtbaar is op de kans. |
| data.transcript_processed.lead_score | Lead label / priority / filter | Maak bijvoorbeeld alleen een lead/deal aan vanaf 7/10 of stuur lagere scores ter beoordeling. |
| data.transcript_processed.preferred_date | Verwachte sluitingsdatum of vervaldatum van de activiteit | Gebruiken wanneer de klant een deadline of gewenste opvolgdatum noemde. |
| data.transcript_processed.client_city | Person → Address (stad) of aangepast veld | Stad van de klant; handig voor segmentatie of een regionale pipeline. |
| data.transcript_processed.client_address | Person/Organization → Address | Vul het persoons-/organisatieadres in wanneer de beller dit heeft opgegeven. |
| data.transcript_processed.services_match | Filter / Lead label | false = aanvraag buiten uw aanbod; sla de deal over of markeer hem voor afwijzing. |
| data.transcript_processed.additional_details | Activity/Note → Note | Extra details uit het gesprek; voeg ze toe aan de activiteitstekst. |
| data.recording_url | Activity/Note → Recording link | Afspeelkoppeling; kan stoppen met werken nadat het gesprek is verwijderd in het kader van de AVG-bewaartermijn. |
| data.call_id | Custom field → Heilo Call ID | Idempotentiesleutel. Voorkomt een tweede CRM-record voor hetzelfde gesprek. |
| data.duration | Activity duration | Heilo stuurt seconden; converteer dit als uw Pipedrive-veld een tijdformaat verwacht. |
Voorwaarden voor een correcte koppeling
- Zet bij het bevestigen van het adres de strikte modus niet aan — webhooks van Zapier en Make bevestigen ontvangst maar sturen het challenge-veld niet terug. Dit geldt alleen voor de eenmalige adresbevestiging, niet voor de handtekening bij gewone bezorgingen.
- Meng eventtypes niet zonder filter: call.outbound.attempted bevat niet het volledige transcript of de opname.
- Maak in Pipedrive een eigen veld Heilo Call ID aan en schrijf daar data.call_id in. Daarop zoek je voor elke schrijfactie — zonder dat veld valt er niets te dedupliceren.
- Afgeschermd nummer of helemaal geen nummer: maak daar geen persoon van. Stuur het event naar handmatige verwerking, anders belanden al zulke gesprekken op één fictief contact.
HubSpot: contact + deal + notitie
Beoogd resultaat: na een afgerond gesprek vindt of maakt HubSpot een contact aan op basis van het telefoonnummer, maakt een deal aan en logt een notitie met de samenvatting en de opnamekoppeling.
Ontdubbelingsvalkuil: de Zapier-actie Create or Update Contact koppelt bestaande contacten uitsluitend op e-mailadres. Heilo-events bevatten een telefoonnummer en vaak geen e-mailadres, waardoor die actie bij elk gesprek een duplicaatcontact aanmaakt. Zoek altijd eerst op de telefoonproperty en maak alleen een contact aan wanneer de zoekopdracht niets vindt.
Zapier
- Trigger: Webhooks by Zapier → Catch Hook. Houd het Heilo-abonnement in permissieve modus.
- Filter by Zapier: sta event_type = call.completed toe; tijdens de installatie ook webhook.test toestaan (of filter op data._test = true).
- HubSpot → Find Contact. Stel de zoekproperty in op Phone Number en wijs data.customer_phone_e164 toe; schakel de optie in om het contact aan te maken als er niets wordt gevonden, met caller_name of het telefoonnummer als naam. Gebruik hier geen Create or Update Contact — die actie koppelt op e-mailadres.
- HubSpot → Find Engagement op je property Heilo Call ID = data.call_id. Zet hier geen aanmaken-indien-afwezig aan; dat bepaalt de volgende stap.
- Notitie gevonden → werk hem bij; niets gevonden → Create Engagement (type Note) gekoppeld aan het contact. Schrijf Heilo Call ID = data.call_id plus summary, recording_url en transcript_original. Create Deal hoort niet bij het standaardrecept.
Make
- Trigger: Webhooks → Custom webhook. Het scenario moet actief zijn en draaien zodra er gegevens binnenkomen.
- Voeg een filter toe na de webhook: event_type = call.completed; sta tijdens het mappen van testgegevens ook webhook.test toe (of filter op data._test = true).
- HubSpot CRM → Search for Contacts op de telefoonproperty = data.customer_phone_e164. Als er geen resultaat is, maak het contact dan aan met Create a Contact (dat telefoonnummer plus caller_name of het nummer als naam).
- HubSpot CRM → Search for Engagements op de property Heilo Call ID = data.call_id. Zet het scenario op één-voor-één verwerken.
- Router: de notitie bestaat → werk hem bij; bestaat niet → Create an Engagement (type Note) gekoppeld aan het contact. Schrijf Heilo Call ID = data.call_id, summary en recording_url. Dit recept maakt geen deal aan.
| Heilo-veld | HubSpot-veld / -actie | Gebruik |
|---|---|---|
| event_type | Filter / Router | Verwerk call.completed; gebruik webhook.test alleen voor het mappen van velden. |
| data.customer_phone_e164 | Contact → Phone Number | Primaire zoeksleutel. Sla telefoonnummers in HubSpot op in E.164-formaat — de telefoonzoekopdracht vergelijkt exacte waarden, geen formaatvarianten. |
| data.transcript_processed.caller_name | Contact → First Name / Last Name | Als dit leeg is, gebruik dan het telefoonnummer als veilige fallbacknaam. |
| data.transcript_processed.subject | Deal → Deal Name | Beste titel voor de kans; val terug op service_needed. |
| data.transcript_processed.service_needed | Deal → Deal Name of aangepaste property | Categorie van de aanvraag; handig voor pipeline-routering of labels. |
| data.transcript_processed.summary | Note → Note body | Korte gespreksomschrijving die zichtbaar is op de kans. |
| data.transcript_processed.lead_score | Custom property / filter | Maak bijvoorbeeld alleen een lead/deal aan vanaf 7/10 of stuur lagere scores ter beoordeling. |
| data.transcript_processed.preferred_date | Deal → Close Date of vervaldatum van de taak | Gebruiken wanneer de klant een deadline of gewenste opvolgdatum noemde. |
| data.transcript_processed.client_city | Contact → City | Stad van de klant; handig voor segmentatie of een regionale pipeline. |
| data.transcript_processed.client_address | Contact → Street Address | Vul het persoons-/organisatieadres in wanneer de beller dit heeft opgegeven. |
| data.transcript_processed.services_match | Filter / deal tag | false = aanvraag buiten uw aanbod; sla de deal over of markeer hem voor afwijzing. |
| data.transcript_processed.additional_details | Note → Note body | Extra details uit het gesprek; voeg ze toe aan de activiteitstekst. |
| data.recording_url | Note → Recording link | Afspeelkoppeling; kan stoppen met werken nadat het gesprek is verwijderd in het kader van de AVG-bewaartermijn. |
| data.call_id | Custom property → Heilo Call ID | Idempotentiesleutel. Voorkomt een tweede CRM-record voor hetzelfde gesprek. |
| data.duration | Aangepaste property of notitie | Heilo stuurt seconden; converteer dit als uw HubSpot-property een ander formaat verwacht. |
Voorwaarden voor een correcte koppeling
- Zet bij het bevestigen van het adres de strikte modus niet aan — webhooks van Zapier en Make bevestigen ontvangst maar sturen het challenge-veld niet terug. Dit geldt alleen voor de eenmalige adresbevestiging, niet voor de handtekening bij gewone bezorgingen.
- Meng eventtypes niet zonder filter: call.outbound.attempted bevat niet het volledige transcript of de opname.
- Vertrouw voor het koppelen niet op Create or Update Contact — die actie ontdubbelt uitsluitend op e-mailadres; voer altijd eerst de telefoonzoekopdracht uit.
- Voeg een aangepaste HubSpot-property met de naam Heilo Call ID toe (tekst van één regel) en sla data.call_id daar op om duplicaten te voorkomen.
- Afgeschermd nummer of helemaal geen nummer: maak daar geen persoon van. Stuur het event naar handmatige verwerking, anders belanden al zulke gesprekken op één fictief contact.
Zoho CRM: contact + deal + notitie
Beoogd resultaat: na een afgerond gesprek vindt of maakt Zoho CRM een contact aan op basis van het telefoonnummer, maakt een deal aan en koppelt een notitie met de samenvatting en de opnamekoppeling.
Zoek contacten op het veld Phone (of Mobile, als u de nummers daar opslaat). Heilo stuurt data.customer_phone_e164 in E.164-formaat — houd de nummers in Zoho in hetzelfde formaat, anders vindt de zoekopdracht niets.
Zapier
- Trigger: Webhooks by Zapier → Catch Hook. Houd het Heilo-abonnement in permissieve modus.
- Filter by Zapier: sta event_type = call.completed toe; tijdens de installatie ook webhook.test toestaan (of filter op data._test = true).
- Zoho CRM → Find Module Entry in de module Contacts, met zoeken op het veld Phone = data.customer_phone_e164; schakel de optie in om de entry aan te maken als er niets wordt gevonden. Zoho vereist Last Name — gebruik caller_name of het telefoonnummer.
- Zoho CRM → Find Module Entry in de module Notes, zoekend op je veld Heilo Call ID = data.call_id. Zet aanmaken-indien-afwezig niet aan.
- Notitie gevonden → werk Note Content bij; niets gevonden → Create Module Entry in de module Notes, gekoppeld aan het contact. Schrijf Heilo Call ID = data.call_id plus summary, recording_url en transcript_original. Het standaardrecept raakt de module Deals niet aan.
Make
- Trigger: Webhooks → Custom webhook. Het scenario moet actief zijn en draaien zodra er gegevens binnenkomen.
- Voeg een filter toe na de webhook: event_type = call.completed; sta tijdens het mappen van testgegevens ook webhook.test toe (of filter op data._test = true).
- Zoho CRM → Search Objects in de module Contacts met het criterium Phone = data.customer_phone_e164. Als er geen resultaat is, maak het contact dan aan met Create an Object (Last Name uit caller_name of het telefoonnummer).
- Zoho CRM → Search Objects in de module Notes met het criterium Heilo Call ID = data.call_id. Zet het scenario op één-voor-één verwerken.
- Router: de notitie bestaat → werk hem bij; bestaat niet → Create an Object in de module Notes, gekoppeld aan het contact. Schrijf Heilo Call ID = data.call_id, summary en recording_url. Dit recept maakt geen kans aan.
| Heilo-veld | Zoho CRM-veld / -actie | Gebruik |
|---|---|---|
| event_type | Filter / Router | Verwerk call.completed; gebruik webhook.test alleen voor het mappen van velden. |
| data.customer_phone_e164 | Contact → Phone | Primaire zoeksleutel. Zoek op het veld Phone (of Mobile) en houd aan beide kanten één nummerformaat aan — de zoekopdracht vergelijkt exacte waarden. |
| data.transcript_processed.caller_name | Contact → Last Name | Zoho vereist Last Name; als caller_name leeg is, gebruik dan het telefoonnummer als veilige fallbacknaam. |
| data.transcript_processed.subject | Deal → Deal Name | Beste titel voor de kans; val terug op service_needed. |
| data.transcript_processed.service_needed | Deal → Deal Name of aangepast veld | Categorie van de aanvraag; handig voor pipeline-routering of labels. |
| data.transcript_processed.summary | Note → Note Content | Korte gespreksomschrijving die zichtbaar is op de kans. |
| data.transcript_processed.lead_score | Custom field / filter | Maak bijvoorbeeld alleen een lead/deal aan vanaf 7/10 of stuur lagere scores ter beoordeling. |
| data.transcript_processed.preferred_date | Deal → Closing Date of vervaldatum van de taak | Gebruiken wanneer de klant een deadline of gewenste opvolgdatum noemde. |
| data.transcript_processed.client_city | Contact → Mailing City | Stad van de klant; handig voor segmentatie of een regionale pipeline. |
| data.transcript_processed.client_address | Contact → Mailing Street | Vul het persoons-/organisatieadres in wanneer de beller dit heeft opgegeven. |
| data.transcript_processed.services_match | Filter / tag | false = aanvraag buiten uw aanbod; sla de deal over of markeer hem voor afwijzing. |
| data.transcript_processed.additional_details | Note → Note Content | Extra details uit het gesprek; voeg ze toe aan de activiteitstekst. |
| data.recording_url | Note → Note Content (link) | Afspeelkoppeling; kan stoppen met werken nadat het gesprek is verwijderd in het kader van de AVG-bewaartermijn. |
| data.call_id | Custom field → Heilo Call ID | Idempotentiesleutel. Voorkomt een tweede CRM-record voor hetzelfde gesprek. |
| data.duration | Aangepast veld of notitie | Heilo stuurt seconden; converteer dit als uw Zoho CRM-veld een ander formaat verwacht. |
Voorwaarden voor een correcte koppeling
- Zet bij het bevestigen van het adres de strikte modus niet aan — webhooks van Zapier en Make bevestigen ontvangst maar sturen het challenge-veld niet terug. Dit geldt alleen voor de eenmalige adresbevestiging, niet voor de handtekening bij gewone bezorgingen.
- Meng eventtypes niet zonder filter: call.outbound.attempted bevat niet het volledige transcript of de opname.
- Voeg een aangepast Zoho CRM-veld met de naam Heilo Call ID toe en sla data.call_id daar op om duplicaten te voorkomen.
- Zoho weigert records waarbij verplichte velden ontbreken: Contacts vereist Last Name en Deals minimaal Deal Name en Stage (afhankelijk van uw lay-out ook Closing Date) — stel voor elk een veilige fallback in.
- Afgeschermd nummer of helemaal geen nummer: maak daar geen persoon van. Stuur het event naar handmatige verwerking, anders belanden al zulke gesprekken op één fictief contact.
Drie verschillende sleutels — haal ze niet door elkaar
event_id identificeert één specifieke melding. Hetzelfde gesprek kan meerdere meldingen sturen, en dezelfde melding kan bij een herhaalpoging twee keer aankomen. Sla event_id op om een herhaling te herkennen.
call_id identificeert het gesprek, oftewel de activiteit in je CRM. Eén gesprek is één activiteit, ongeacht hoeveel meldingen erover binnenkwamen. Dit is de sleutel waarop je zoekt voordat je schrijft.
Het telefoonnummer, of de contact-id in je CRM, identificeert de persoon. Let op drie gevallen: een afgeschermd nummer komt binnen als letterlijke waarde in plaats van een nummer; er kan helemaal geen nummer zijn; en twee contacten kunnen op één nummer matchen. Maak in geen van die gevallen een contact uit die waarde aan — stuur het event naar handmatige verwerking, anders lopen alle gesprekken met afgeschermd nummer samen in één fictief contact.
Een verkoopkans — een bewuste toevoeging, geen standaardstap
Het standaardrecept maakt geen verkoopkans aan, want niet elk gesprek is er een en een onvoorwaardelijk „deal aanmaken” bedelft de pijplijn onder één deal per gesprek. Wil je ze wel aanmaken, maak er dan een regel van: zoek eerst een open kans voor dat contact en hang de activiteit daaraan; maak alleen een nieuwe aan als die er niet is. Passen er meerdere open kansen, gok dan niet — hang de activiteit aan het contact en laat de keuze aan een mens.
Herhalingen, gedeeltelijke fouten en onbekende uitkomsten
Heilo probeert een mislukte bezorging vijf keer opnieuw, met tussenpozen van 2 minuten, 5 minuten, 30 minuten en 2 uur. We garanderen geen volgorde: een opname-event kan vóór het gesprek-afgerond-event aankomen. Het recept moet daartegen bestand zijn in plaats van aan te nemen dat het eerst verstuurde als eerste aankwam.
Deduplicatie moet elke aanroep dekken die een record aanmaakt, niet alleen de eerste. Het patroon „controleer een vlag, maak aan, schrijf de vlag” volstaat niet: twee parallelle runs lezen beide de vlag voordat één hem schrijft, en je krijgt twee records. Heeft je CRM een unieke sleutel of een upsert op Heilo Call ID, gebruik die dan. Zo niet, zet het scenario dan op één-voor-één verwerken en zoek voor elke schrijfactie.
Een time-out na het versturen van een verzoek dat een record aanmaakt betekent niet dat het record niet is aangemaakt — het betekent dat je het niet weet. Herhaal de aanmaak dan niet. Lees eerst de stand terug via Heilo Call ID en beslis op basis daarvan. Hetzelfde geldt voor een fout halverwege: is het contact aangemaakt en de notitie niet, dan moet de herhaling de notitie toevoegen, geen tweede contact.
Volledige datastructuur (referentie)
Elke melding heeft dezelfde structuur. De velden in „data” hangen af van het gebeurtenistype — een afgerond gesprek bevat bijvoorbeeld het verwerkte transcript. Heilo ondertekent elke bezorging met de header Heilo-Signature (HMAC-SHA256 over de ruwe body van het verzoek), maar een handtekening doet niets zolang de ontvanger hem niet controleert. De Catch Hook in Zapier en de Custom webhook in Make accepteren het verzoek zonder controle — wat dat in de praktijk betekent, staat in de sectie over de twee beveiligingsvarianten.
{
"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": "..."
}
}Veelvoorkomende problemen
- Verificatie (handshake) mislukt na het toevoegen van het abonnement
- Uw adres bevestigde niet binnen 10 seconden. In Zapier gebeurt dit automatisch; in Make moet het scenario ingeschakeld zijn (en in strict-modus heeft u ook een “Webhook response”-module nodig). Controleer ook of het adres geen spaties of “&”-tekens bevat, corrigeer het en klik vervolgens op “Opnieuw verifiëren” bij het gepauzeerde abonnement.
- Er worden dubbele contacten aangemaakt in mijn CRM
- Connectortools normaliseren telefoonformaten niet — “+48 600 100 200” en “+48600100200” lijken twee verschillende nummers. Heilo stuurt het nummer al in E.164-formaat (het veld customer_phone_e164), dus gebruik dat om het contact op te zoeken. In Zapier kunt u ook een “Formatter → Phone Number → E.164”-stap toevoegen vóór het opzoeken.
- De opnamekoppeling stopt na een tijdje met werken
- Een opnamelink is 7 dagen geldig vanaf het moment van aanmaken en kan eerder stoppen met werken. Een verlopen token antwoordt met 403; een verwijderde opname met 410. Hetzelfde event opnieuw versturen vernieuwt de link niet, want het draagt hetzelfde adres. Heb je de opname later nodig, open het gesprek dan in Heilo na inloggen. Kopieer je het bestand naar je CRM, handel dan ook de events call.deletion_scheduled en call.recording.deleted af — het verlopen van de link verwijdert de kopie die je al hebt niet.
- Een melding over het overschrijden van de bewerkingslimiet
- Één Heilo-gesprek is in de tool meestal een paar stappen: contact zoeken, activiteit aanmaken of bijwerken. Reken dat niet om naar een universeel aantal gesprekken — open na het eerste echte event de geschiedenis van je Zap of scenario en lees af hoeveel taken of credits die ene run verbruikte. Zoveel kost bij jou elk volgend gesprek.
Roadmap (v1.1+)
Wat we plannen voor komende releases. Deze lijst is geen garantie — prioriteiten volgen uw feedback.
- Specifieke recepten voor meer CRM's: Salesforce, Bitrix24, Livespace
- One-click-sjablonen (Zapier/Make) voor de populairste CRM's
- Kopieer-plakregels voor ontdubbeling en veldmapping
- Meer eventtypes om te mappen (bijv. project- en taakevents, sms.received)
Mist u uw CRM of scenario? Mail support@heilo.io — we geven prioriteit op basis van werkelijke behoefte.
Beheer sleutels en webhooks in het paneel
Na het inloggen genereert u API-sleutels, voegt u webhook-abonnementen toe en bekijkt u het verzendlogboek.