Skip to main content
Gli strumenti funzione consentono ai tuoi agenti vocali AI di invocare API esterne durante le telefonate. Usali per cercare dati dei clienti, verificare la disponibilità, fissare appuntamenti o eseguire qualsiasi azione supportata dal tuo backend.

Come funziona

  1. Definisci gli strumenti con uno schema (quali argomenti accetta lo strumento)
  2. Fornisci una configurazione endpoint (dove ThunderPhone chiama la tua API) oppure omettila per ricevere le chiamate agli strumenti sul webhook della tua organizzazione
  3. Durante una chiamata, l’AI decide quando usare uno strumento in base alla conversazione
  4. ThunderPhone chiama il tuo endpoint con gli argomenti dello strumento
  5. La risposta della tua API viene restituita all’AI per continuare la conversazione
Gli strumenti funzione sono il percorso per usare le tue API. ThunderPhone offre anche strumenti gestiti dalla piattaforma che non richiedono endpoint: connessioni app (HubSpot, Salesforce, Slack, Google Calendar, Google Sheets, Cal.com), connessioni API e server MCP.

Schema dello strumento

Ogni strumento segue questa struttura:

Definizione della funzione

Configurazione dell’endpoint

La configurazione endpoint non viene inviata al modello AI: viene usata solo da ThunderPhone per eseguire la chiamata allo strumento.

Due modalità di invocazione

La richiesta ricevuta dal tuo server dipende dal fatto che lo strumento abbia un endpoint: Entrambe le modalità sono bloccanti: l’AI attende il risultato a metà frase, con un timeout di 20 s. Mantieni rapidi gli handler. Puoi usarle insieme: in una chiamata la cui organizzazione ha un URL webhook, gli strumenti con un endpoint vengono chiamati direttamente e gli altri usano il webhook come fallback.

Chiamate dirette agli endpoint

Quando l’AI richiama uno strumento con un endpoint, ThunderPhone invia una richiesta al tuo URL:

Intestazioni della richiesta

Le intestazioni personalizzate di endpoint.headers sono sempre incluse testualmente, insieme a due intestazioni nello spazio dei nomi ThunderPhone:
  • X-ThunderPhone-Signature — HMAC-SHA256 dei byte esatti del corpo della richiesta, con chiave il tuo segreto webhook dell’organizzazione
  • X-ThunderPhone-Call-ID — L’ID della chiamata corrente
Content-Type: application/json viene impostato a meno che endpoint.headers non lo sovrascriva — un Content-Type personalizzato ha la precedenza.
La firma usa come chiave il segreto webhook a livello di organizzazione da GET /v1/webhook. Se la tua organizzazione non ha mai configurato il webhook legacy, non esiste alcun segreto e le chiamate degli strumenti includono solo X-ThunderPhone-Call-ID — un gestore che fallisce rigidamente in assenza di firma le rifiuterebbe. Configura il webhook legacy per ottenere un segreto oppure inserisci il tuo segreto condiviso in endpoint.headers.

Corpo della richiesta

Per POST / PUT / PATCH, il corpo contiene solo gli argomenti dello strumento (senza wrapper), serializzati in modo canonico (chiavi ordinate, separatori compatti):
Per GET / DELETE, gli argomenti vengono inviati come parametri di query e il corpo è vuoto — la firma viene quindi calcolata sulla stringa di byte vuota. Vedi Verifica le firme webhook.

Risposta

Restituisci una risposta JSON con il risultato dello strumento:
La risposta viene formattata e fornita all’AI per proseguire la conversazione. Le risposte non JSON vengono racchiuse in {"data": "<text>"}; i timeout e gli errori di connessione vengono segnalati all’AI come errori, così l’agente può scusarsi e proseguire anziché bloccarsi.

Instradamento in modalità webhook

Gli strumenti senza un endpoint vengono instradati all’URL webhook legacy della tua organizzazione come richiesta firmata telephony.tool (chiamate telefoniche) o web.tool (chiamate web). A differenza delle notifiche di audit inviate agli endpoint webhook dopo l’esecuzione, questa richiesta è l’esecuzione — la tua risposta HTTP è il risultato dello strumento.
web.tool include origin_domain invece di from_number / to_number. Rispondi con il risultato dello strumento in formato JSON — lo stesso contratto di risposta delle chiamate dirette agli endpoint. La richiesta è firmata con il segreto webhook dell’organizzazione sul corpo non elaborato, come ogni altro webhook.
Gli endpoint webhook sottoscritti ricevono inoltre una notifica telephony.tool / web.tool non bloccante dopo l’esecuzione di ogni strumento (indipendentemente dal percorso che lo ha eseguito), inclusa la risposta dello strumento — utile per le tracce di audit. Consulta il catalogo degli eventi.

Verifica della firma

Le chiamate dirette agli strumenti sono firmate nello stesso modo dei webhook:
  • HMAC-SHA256 sugli byte esatti del corpo della richiesta (il JSON canonico — chiavi ordinate, nessuno spazio aggiuntivo)
  • Con la chiave segreta webhook della tua organizzazione
  • Gli strumenti GET / DELETE firmano la stringa di byte vuota
Le procedure complete — incluso il caso del corpo vuoto e l’avvertenza sull’assenza di un segreto — sono disponibili in Verifica le firme webhook.

Esempio: flusso di prenotazione completo

Ecco un insieme di strumenti per un sistema completo di prenotazione appuntamenti:

Best practice

Il campo description aiuta l’IA a capire quando usare lo strumento. Specifica chiaramente cosa fa e quando è appropriato usarlo.
Restituisci messaggi di errore che l’IA possa comprendere: {"error": "No slots available for that date"} invece di errori 500 generici.
Restituisci solo ciò di cui l’IA ha bisogno per continuare la conversazione. Payload di grandi dimensioni rallentano i tempi di risposta.
Contrassegna i campi come required solo quando è davvero necessario. L’IA chiederà all’utente le informazioni obbligatorie prima di chiamare lo strumento.

Correlati

Connessioni app

Strumenti gestiti dalla piattaforma per HubSpot, Salesforce, Slack, Google Calendar, Google Sheets e Cal.com — nessun endpoint richiesto.

Server MCP

Collega un server MCP e consenti all’agente di chiamare i suoi strumenti.

Connessioni API

Integrazioni REST riutilizzabili che puoi collegare agli agenti.

Verifica le firme dei webhook

Un unico helper di verifica per webhook e chiamate degli strumenti.