Skip to main content
Functietools stellen je AI-agenten in staat om tijdens telefoongesprekken externe API’s aan te roepen. Gebruik ze om klantgegevens op te zoeken, beschikbaarheid te controleren, afspraken te boeken of elke actie uit te voeren die je backend ondersteunt.

Hoe het werkt

  1. Definieer tools met een schema (welke argumenten de tool accepteert)
  2. Geef een endpoint-configuratie op (waar ThunderPhone je API aanroept) — of laat deze weg om toolaanroepen op je organisatie-webhook te ontvangen
  3. Tijdens een gesprek bepaalt de AI op basis van het gesprek wanneer een tool moet worden gebruikt
  4. ThunderPhone roept je endpoint aan met de toolargumenten
  5. 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 een endpoint 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 een endpoint aanroept, stuurt ThunderPhone een verzoek naar je URL:

Verzoekheaders

Aangepaste headers uit je 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 sleutel
  • X-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.
De handtekening gebruikt het webhookgeheim op organisatieniveau van GET /v1/webhook als sleutel. Als je organisatie de legacy webhook nooit heeft geconfigureerd, is er geen geheim en bevatten toolaanroepen alleen X-ThunderPhone-Call-ID — een handler die faalt bij een ontbrekende handtekening zou deze weigeren. Configureer de legacy webhook om een geheim te verkrijgen, of plaats je eigen gedeelde geheim in endpoint.headers.

Verzoekbody

Voor POST / PUT / PATCH bevat de body alleen de argumenten van de tool (zonder wrapper), canoniek geserialiseerd (gesorteerde sleutels, compacte scheidingstekens):
Voor 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:
De respons wordt geformatteerd en aan de AI verstrekt om het gesprek voort te zetten. Niet-JSON-responsen worden verpakt als {"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 een endpoint 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
Volledige recepten — inclusief het geval met een lege body en de kanttekening over geen geheim — vind je in Webhookhandtekeningen verifiëren.

Voorbeeld: volledige boekingsflow

Hier is een set tools voor een compleet systeem voor het boeken van afspraken:

Best practices

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.
Retourneer foutmeldingen die de AI kan begrijpen: {"error": "No slots available for that date"} in plaats van algemene 500-fouten.
Retourneer alleen wat de AI nodig heeft om het gesprek voort te zetten. Grote payloads vertragen de reactietijden.
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.