Hoe het werkt
- Definieer tools met een schema (welke argumenten de tool accepteert)
- Geef een
endpoint-configuratie op (waar ThunderPhone je API aanroept) — of laat deze weg om toolaanroepen op je organisatie-webhook te ontvangen - Tijdens een gesprek bepaalt de AI op basis van het gesprek wanneer een tool moet worden gebruikt
- ThunderPhone roept je endpoint aan met de toolargumenten
- Je API-respons wordt teruggekoppeld aan de AI om het gesprek voort te zetten
Functietools zijn de route waarbij je je eigen API meebrengt. ThunderPhone
levert ook platformbeheerde tools waarvoor geen endpoint nodig is:
app-koppelingen (HubSpot, Salesforce, Slack,
Google Calendar, Google Sheets, Cal.com),
API-koppelingen en
MCP-servers.
Toolschema
Elke tool volgt deze structuur:Functiedefinitie
Endpointconfiguratie
De
endpoint-configuratie wordt niet naar het AI-model gestuurd — deze wordt alleen door ThunderPhone gebruikt om de toolaanroep uit te voeren.Twee aanroeppaden
Welk verzoek je server ontvangt, hangt af van of de tool eenendpoint heeft:
Beide paden zijn blokkerend — de AI wacht midden in een zin op het
resultaat — met een time-out van 20 s. Houd handlers snel. Een combinatie
is prima: bij een gesprek waarvan de organisatie een webhook-URL heeft, worden
tools met een
endpoint rechtstreeks aangeroepen en vallen de overige terug op
de webhook.
Directe endpointaanroepen
Wanneer de AI een tool met eenendpoint aanroept, stuurt ThunderPhone
een verzoek naar je URL:
Verzoekheaders
endpoint.headers worden altijd woordelijk
opgenomen, plus twee headers met de ThunderPhone-naamruimte:
X-ThunderPhone-Signature— HMAC-SHA256 van de exacte bytes van de verzoekbody, met je webhookgeheim van de organisatie als sleutelX-ThunderPhone-Call-ID— De ID van het huidige gesprek
Content-Type: application/json wordt ingesteld, tenzij je
endpoint.headers dit overschrijven — een aangepaste Content-Type heeft voorrang.
Verzoekbody
VoorPOST / PUT / PATCH bevat de body alleen de argumenten van de
tool (zonder wrapper), canoniek geserialiseerd (gesorteerde sleutels, compacte
scheidingstekens):
GET / DELETE worden de argumenten als queryparameters verstuurd
en is de body leeg — de handtekening wordt dan berekend over de lege
bytestring. Zie
Webhookhandtekeningen verifiëren.
Respons
Retourneer een JSON-respons met het resultaat van de tool:{"data": "<text>"};
time-outs en verbindingsfouten worden als fouten aan de AI gemeld, zodat de
agent zich kan verontschuldigen en verder kan gaan in plaats van vast te lopen.
Dispatch in webhookmodus
Tools zonder eenendpoint worden als ondertekend telephony.tool-
(verzoeken voor telefoongesprekken) of web.tool-verzoek (webverzoeken)
naar de legacy webhook-URL van je organisatie verstuurd. In tegenstelling tot
de auditmeldingen die na uitvoering naar webhookendpoints
worden geleverd, is dit verzoek de uitvoering — je HTTP-respons is het
toolresultaat.
web.tool bevat origin_domain in plaats van from_number /
to_number. Reageer met het toolresultaat als JSON — hetzelfde
responscontract als bij directe endpointaanroepen. Het verzoek wordt, net als
elke andere webhook, met het webhookgeheim van de organisatie over de onbewerkte
body ondertekend.
Geabonneerde webhookendpoints ontvangen daarnaast
na elke uitvoering van een tool (ongeacht via welk pad deze werd uitgevoerd)
een niet-blokkerende
telephony.tool / web.tool-melding, inclusief de
respons van de tool — handig voor audittrails. Zie de
eventcatalogus.Handtekeningverificatie
Directe toolaanroepen worden op dezelfde manier ondertekend als webhooks:- HMAC-SHA256 over de exacte bytes van de requestbody (de canonieke JSON — gesorteerde sleutels, geen extra witruimte)
- Met je webhookgeheim voor de organisatie als sleutel
GET- /DELETE-tools ondertekenen de lege bytestring
Voorbeeld: volledige boekingsflow
Hier is een set tools voor een compleet systeem voor het boeken van afspraken:Best practices
Schrijf duidelijke beschrijvingen
Schrijf duidelijke beschrijvingen
Het veld
description helpt de AI te begrijpen wanneer de tool moet worden gebruikt. Wees specifiek over wat de tool doet en wanneer deze geschikt is.Ga zorgvuldig om met fouten
Ga zorgvuldig om met fouten
Retourneer foutmeldingen die de AI kan begrijpen:
{"error": "No slots available for that date"} in plaats van algemene 500-fouten.Houd reacties beknopt
Houd reacties beknopt
Retourneer alleen wat de AI nodig heeft om het gesprek voort te zetten. Grote payloads vertragen de reactietijden.
Gebruik verplichte velden verstandig
Gebruik verplichte velden verstandig
Markeer velden alleen als
required wanneer dat echt noodzakelijk is. De AI vraagt de gebruiker om verplichte informatie voordat de tool wordt aangeroepen.Gerelateerd
App-koppelingen
Door het platform beheerde tools voor HubSpot, Salesforce, Slack, Google
Calendar, Google Sheets en Cal.com — geen endpoint vereist.
MCP-servers
Koppel een MCP-server en laat de agent de tools ervan aanroepen.
API-koppelingen
Herbruikbare REST-integraties die je aan agenten kunt koppelen.
Webhookhandtekeningen verifiëren
Eén verificatiehulp voor webhooks en toolaanroepen.