Skip to main content
Une intégration d’outil est un endpoint HTTP réutilisable qu’un agent peut invoquer pendant un appel. Vous fournissez à ThunderPhone une description JSON Schema de l’outil ainsi qu’une URL d’endpoint ; l’agent décide quand l’appeler en fonction de la conversation, et ThunderPhone effectue la requête HTTP sortante depuis ses serveurs et renvoie la réponse à l’agent.
Le tableau de bord couvre la plupart des besoins en outils sans cette API : Connexions → Apps connecte Slack, HubSpot, Salesforce, Google Calendar, Google Sheets et Cal.com en quelques clics OAuth ; Connexions → APIs transforme n’importe quelle API HTTP en action d’agent (collez une commande cURL et un assistant IA crée l’outil, avec une fonctionnalité intégrée Tester la requête) ; et Connexions → MCP ajoute des serveurs MCP. Consultez Connexions. Ce guide présente l’API sous-jacente à l’interface APIs.
Ce guide explique de bout en bout la création d’un outil de consultation de la météo.

Anatomie d’un outil

Deux éléments :
  1. Le schéma — une définition de fonction au format OpenAI ({type: "function", function: {name, description, parameters}}) qui indique au LLM ce que fait l’outil et quels arguments il accepte.
  2. L’endpoint — l’URL appelée par les serveurs de ThunderPhone lorsque le LLM décide d’utiliser l’outil. La requête est un POST JSON contenant dans son corps les arguments choisis par le LLM.

1. Choisir une stratégie de stockage

Intégré à l’agent

Attachez un outil ponctuel au tableau tools de l’agent. Simple, mais non réutilisable.

Intégration enregistrée

Stockez l’outil comme intégration réutilisable et associez-le à plusieurs agents. Recommandé pour tout outil utilisé plus d’une fois.
Ce guide utilise la méthode de l’intégration enregistrée.

2. Créer l’intégration

Enregistrez l’id renvoyé (un UUID).
Consacrez un réel effort à la description de l’outil et de chaque paramètre. Le LLM utilise ces chaînes à l’exécution pour décider s’il doit appeler l’outil et comment le faire. Des descriptions vagues entraînent des appels d’outils vagues.

3. Tester l’endpoint dans le sandbox

Avant d’associer l’intégration à un agent, envoyez une requête signée depuis les serveurs de ThunderPhone afin de confirmer la connectivité :
Response
Ce test renforce également les protections SSRF de ThunderPhone : les requêtes vers localhost ou des plages d’adresses IP privées renvoient 400 code=url_not_allowed.

4. Liez l’intégration à un agent

Associez-la via integration_ids lorsque vous créez ou mettez à jour un agent :
Vous pouvez lier plusieurs intégrations à un même agent. Le prompt de l’agent peut les référencer par nom — « utilisez get_weather lorsque l’appelant pose une question sur les conditions météo » — ou les découvrir implicitement à partir des descriptions du schéma.

5. Implémentez le point de terminaison

Lorsque l’agent appelle l’outil, ThunderPhone envoie une requête POST signée à votre endpoint_url :
Votre serveur répond avec du JSON qui est renvoyé au LLM :
Le LLM ingère cette réponse et en communique un résumé naturel à l’appelant.
La signature est calculée sur le corps brut de la requête en utilisant le même secret que votre point de terminaison webhook. Vérifiez-la — les points de terminaison d’outils sont exposés à Internet et soumis aux mêmes risques d’usurpation que les webhooks. Consultez Vérifier les signatures webhook.

6. Testez la boucle

Lancez une session micro avec l’agent et posez la question traitée par votre outil (« Quel temps fait-il à 94110 ? »). La transcription de l’appel affiche le cycle complet :
Vous pouvez récupérer cela via GET /v1/calls/{call_id}/transcript ; le flux d’événements brut (avec le minutage de chaque entrée et les décalages audio) est disponible dans GET /v1/calls/{call_id}/history.

Pièges courants

Le LLM décide en fonction de la description de l’outil. Si la question de l’appelant ne correspond pas à la description, le modèle n’appellera pas l’outil. Précisez la description (ajoutez des synonymes et des formulations fréquentes) ou mentionnez-le explicitement dans le prompt de l’agent (« Lorsque l’ appelant pose une question sur la météo, utilisez get_weather. »).
Les réponses de plus de 6 kB sont tronquées dans l’aperçu de la transcription. Renvoyez uniquement les champs dont le LLM a besoin — pas l’intégralité de votre enregistrement.
Les points de terminaison d’outils ont un délai d’expiration par défaut de 10 secondes. Si vous avez besoin de plus de temps, gérez cela de manière asynchrone : renvoyez {"status": "pending", "request_id": "..."} et exposez le résultat via un appel d’outil distinct.
Chaque PATCH d’intégration crée une nouvelle révision. Consultez GET /v1/integrations/{id}/versions pour voir qui a modifié quoi. Si vous cassez le schéma d’un outil, vous pouvez revenir manuellement en arrière en appliquant par PATCH un ancien instantané.

Prochaines étapes

Référence des intégrations

CRUD, transfert, historique des versions.

Spécification des Function Tools

Grammaire complète du schéma JSON et contrat des endpoints signés.

Vérifier les signatures

Appliquez le modèle de signature des webhooks aux endpoints d’outils.

API de transcription + historique

Examinez l’aller-retour complet d’un appel d’outil.