Il canale telefonia permette a una pipeline betool di rispondere alle chiamate e di effettuarne. Sono supportati audio in tempo reale, trascrizione in streaming, sintesi vocale in streaming e interruzione (barge-in).
Architettura
Dietro le quinte:
- LiveKit gestisce il trasporto audio in tempo reale.
- LiveKit-SIP collega LiveKit al trunk SIP del tuo operatore.
- Un worker dedicato orchestra la chiamata: trascrizione (STT), LLM, sintesi vocale (TTS).
Questo stack viene eseguito come processo separato rispetto al backend principale. Non lo configuri direttamente — l'operatore della tua istanza imposta il bridge SIP.
Fornitori vocali
| Ruolo | Fornitori | Predefinito |
|---|---|---|
| Trascrizione (STT) | Deepgram, faster-whisper (eseguito localmente) | Deepgram |
| Sintesi (TTS) | ElevenLabs, Cartesia, OpenAI, Deepgram Aura | ElevenLabs |
Il catalogo delle voci di ciascun fornitore TTS è consultabile nell'admin, con ascolto di un campione prima di scegliere. L'LLM è quello che preferisci (modello gestito, BYOK o modello privato — vedi Collegare una chiave LLM).
Prerequisiti
- Un trunk SIP presso un operatore.
- Un numero in entrata e / o la possibilità di effettuare chiamate in uscita.
- Un accesso ai fornitori STT / TTS scelti.
Nell'offerta gestita, betool può fornire il trunk SIP e i fornitori vocali per te.
Progettare una pipeline vocale (chiamata in entrata)
Una pipeline vocale inizia con un nodo Start che porta il ricevitore phone_gateway. A ogni turno di parola trascritto, la pipeline riceve in particolare:
user_messageephone.transcript— il turno di parola trascrittophone.call— la chiamata: identificativo, numeri chiamante / chiamato, direzione (inbound/outbound), lineaphone.from— il numero del chiamantephone.caller_timezone— il fuso orario dedotto dal prefisso (vuoto quando il prefisso copre più fusi)
Il testo prodotto dalla pipeline viene letto ad alta voce dal TTS.
Impostazioni del ricevitore
Il ricevitore phone_gateway regola il comportamento della chiamata, senza codice:
- Accoglienza — più varianti del messaggio di benvenuto (una viene estratta a caso), un'accoglienza distinta per le chiamate in uscita, un ritardo prima dell'accoglienza.
- Silenzio — sollecito dopo un silenzio prolungato, poi messaggio di congedo e riaggancio se il silenzio persiste; durata massima della chiamata.
- Interruzione (barge-in) — attiva per impostazione predefinita: il chiamante può interrompere l'agente. Durata e numero minimo di parole perché un'interruzione venga considerata.
- Rilevamento di fine turno — modalità di rilevamento e tempi di fine parlato.
- Filler — frasi di attesa pronunciate quando la risposta tarda, frasi dedicate durante l'esecuzione di un tool, oppure sottofondo di attesa (tastiera, ufficio, musica di attesa). Disattivati per impostazione predefinita.
- Voce — fornitore, modello, lingua e voce STT / TTS, con le regolazioni fini della voce (stabilità, velocità…).
- Qualificazioni della chiamata — un elenco chiuso di codici di esito che l'agente può applicare alla chiamata.
Cosa può fare l'agente durante la chiamata
I tool telefonici sono disponibili per gli agenti di una pipeline che ha phone_gateway a monte:
phone_gateway.transfer_call— trasferire la chiamata a un altro numero (SIP REFER). Il numero viene validato nel formato E.164; il trasferimento avviene dopo che la risposta in corso è stata pronunciata.phone_gateway.hangup_call— riagganciare, dopo il messaggio di congedo.phone_gateway.set_call_disposition— qualificare la chiamata con uno dei codici configurati.
Un agente può anche inviare un SMS durante la chiamata (tool allmysms.send_sms, vedi SMS): su questo canale, il destinatario è bloccato sull'interlocutore della chiamata. Se il numero è nascosto, l'invio viene rifiutato.
Proporre fasce orarie
Il calcolo delle disponibilità (operazione free_slots del nodo compute) produce fasce orarie pronte per essere pronunciate, nel fuso orario del chiamante. Combinato con la lettura del calendario (Google o Microsoft), un agente vocale può enunciare alcune fasce libere e poi fissare l'appuntamento.
Chiamate in uscita
Una pipeline può effettuare una chiamata con il nodo phone_call: ad esempio richiamare un lead appena arriva, oppure ricontattare un elenco.
| Campo | Ruolo |
|---|---|
trunk_id | Linea usata per chiamare |
voice_model | Il modello che conduce la conversazione (il suo Start deve portare il ricevitore phone_gateway) |
to_number | Numero da chiamare (templatable), normalizzato nel formato E.164 |
call_vars | Variabili trasmesse alla conversazione (phone.outbound.vars) — ad esempio il nome, utilizzabile nell'accoglienza in uscita |
allowed_days / allowed_hours / timezone | Finestra oraria autorizzata: fuori finestra, la chiamata non viene effettuata |
max_in_flight / max_per_day | Limiti di chiamate simultanee (3 per impostazione predefinita) e giornaliere (100 per impostazione predefinita) |
output_key | Chiave di uscita (predefinita phone.call_result) |
Garanzie:
- Exactly-once — una riesecuzione non ricompone mai un numero già chiamato.
- Rifiuto prima della composizione se l'organizzazione non ha più crediti.
- Nessuna chiamata in simulazione — il nodo viene ignorato durante un'esecuzione di prova (dry-run).
Il nodo restituisce il controllo non appena la chiamata squilla: ok significa « chiamata avviata », non « risposta ». Per conoscerne l'esito, aggiungi allo Start del modello il ricevitore phone_call_outcome: innesca la pipeline una volta terminata la chiamata, con phone.outcome — risposta o meno (answered, no_answer, rejected, unknown), durata, numero di turni, qualificazione applicata dall'agente.
Buone pratiche
- Mantieni le missioni concise. Il tempo di riflessione conta: un agente che esita per 4 secondi sembra bloccato al telefono. Preferisci modelli veloci tranne che per i turni decisivi.
- Lascia attivo il barge-in. Il chiamante deve poter interrompere l'agente. È l'impostazione predefinita.
- Configura dei filler per i turni che chiamano dei tool: un silenzio lungo inquieta il chiamante.
Costi
Consulta Prezzi. Una chiamata non ha di per sé un prezzo al minuto: viene fatturata in base alle sue componenti — trascrizione (in base alla durata audio), sintesi vocale (in base al numero di caratteri) e LLM (in base ai token, tranne in BYOK).
Limitazioni note
- Il canale telefonico è solo audio. Il video passa da altri componenti (generazione e doppiaggio video con HeyGen), non dalla chiamata.
- Il trasferimento a un operatore umano richiede un trunk SIP che supporti REFER.
- L'agente non può indovinare l'identità del chiamante senza un'integrazione CRM: conosce solo il numero presentato.