ThunderPhone 2.0 è arrivato.Attivazione self-service, da 2¢/min.Leggi l’annuncio

Getting Started

ThunderPhone CLI

Accedi, gestisci agenti vocali e chiamate, configura client MCP e crea lo scheletro di progetti dal terminale.

La CLI richiede Node.js 18.18 o versione successiva. Eseguila con npx oppure installala globalmente:

npm install -g thunderphone
thunderphone --help

Accedi

npx thunderphone login
thunderphone whoami --json

Il login stampa un codice di verifica, apre il browser e attende l'autorizzazione. Usa --no-browser su una macchina headless e apri altrove l'URL stampato. Il login del dispositivo richiede l'abilitazione del flusso OAuth per dispositivi dell'API. Una chiave API dell'organizzazione in THUNDERPHONE_API_KEY può inoltre autenticare i comandi e ha precedenza sulle credenziali di login archiviate.

Le credenziali vengono archiviate per profilo in ~/.config/thunderphone/credentials.json con modalità file 0600. XDG_CONFIG_HOME e THUNDERPHONE_CONFIG_DIR sovrascrivono la directory. I token di accesso vengono aggiornati automaticamente e i token di aggiornamento a rotazione vengono salvati atomicamente. Il login non stampa mai i token.

thunderphone login --profile work
thunderphone agents list --profile work --json
thunderphone logout --profile work

THUNDERPHONE_PROFILE imposta il profilo predefinito. Il logout rimuove le credenziali locali; non revoca l'autorizzazione sul server. L'API predefinita è https://api.thunderphone.com. Usa --api-base-url o THUNDERPHONE_API_BASE_URL per un'altra API. Il token di un profilo non può essere inviato a un URL API configurato diverso; accedi a quell'URL con un profilo separato.

Comandi

Ogni comando accetta --json. I dati restituiti correttamente vengono inviati a stdout; gli errori a stderr con un codice di uscita diverso da zero. Senza --json, l'output è una tabella compatta o un elenco di campi. JSON conserva la struttura della risposta API, con i campi delle credenziali oscurati. Il servizio MCP riserva stdout al protocollo MCP.

ComandoScopo
login [--no-browser] [--scope "scopes"]Autorizza tramite un codice dispositivo
logout, whoamiRimuovi le credenziali locali; elenca le organizzazioni accessibili
agents list, agents get IDLeggi gli agenti
agents create --file agent.jsonCrea un agente
agents update ID --file agent.jsonSalva una bozza dell'agente
agents deploy ID, agents delete IDDistribuisci la bozza; elimina un agente
numbers listLeggi i numeri di telefono
numbers provision --country US --area-code 415Attiva un numero statunitense per le chiamate in entrata
numbers assign NUMBER_ID --agent IDAssegna un agente per le chiamate in entrata
sms send TO --from FROM --body TEXT --idempotency-key KEYInvia SMS tramite un numero dell'operatore connesso dal cliente con ripetizione sicura
sms list [--limit N], sms get UUIDElenca o ispeziona i record SMS
call TO --agent ID --from FROM [--wait]Effettua una chiamata in uscita; facoltativamente attendi la relativa trascrizione
calls list [--limit N] [--agent ID]Elenca le chiamate (limite 1–200)
calls get ID, calls transcript IDLeggi una chiamata o la relativa trascrizione
test run AGENT_ID [--scenario ID] --consent-to-chargeEsegui scenari salvati fatturabili usando il canale web
test status RUN_ID [--agent ID]Ispeziona un batch, con dettagli dello scenario quando viene fornito un agente
import VENDOR export.jsonPrepara un'importazione JSON di un fornitore per la revisione
imports get UUID, imports commit UUIDIspeziona un'importazione; conferma gli agenti selezionati dopo la revisione
mcp setup, mcp serveConfigura un client; avvia il bridge stdio
init [directory]Crea la struttura di un progetto

Le chiamate in uscita richiedono un numero abilitato alle chiamate in uscita. THUNDERPHONE_FROM_NUMBER può fornire --from. I numeri VoIP del cliente continuano a supportare le chiamate in uscita. I numeri attivati da ThunderPhone iniziano come solo in entrata; un amministratore dell'organizzazione può richiedere le chiamate in uscita dalla pagina Phone Numbers, dove ogni richiesta viene esaminata manualmente. --wait usa per impostazione predefinita un timeout di un'ora; imposta --timeout SECONDS per modificarlo. Un timeout interrompe l'attesa senza terminare la chiamata.

Gli SMS richiedono inoltre un numero abilitato agli SMS nel tuo account Twilio o Telnyx connesso. Non vengono mai inviati da un numero di proprietà di ThunderPhone. Riutilizza una chiave di idempotenza solo quando ritenti con lo stesso identico mittente, destinatario e corpo.

Le importazioni supportano vapi, retell, elevenlabs e bland. Il secondo argomento è un percorso a un'esportazione JSON del fornitore, non un ID remoto del fornitore. L'API prepara una mappatura in modo asincrono; ispezionala con imports get UUID e confermala solo dopo che è pronta e dopo aver esaminato i campi mappati e gli avvisi. Consulta importazioni di agenti.

Configurazione MCP

thunderphone mcp setup --client cursor --api-key-env THUNDERPHONE_API_KEY
thunderphone mcp setup --client codex --scope user --api-key-env THUNDERPHONE_API_KEY
thunderphone mcp setup --client claude-desktop --scope user

Client: claude-code, codex, cursor, vscode, gemini, claude-desktop e windsurf. L'ambito del progetto è quello predefinito. Desktop e Windsurf richiedono l'ambito utente. Ometti --client per rilevare un singolo client dal progetto; il rilevamento ambiguo richiede un'interazione oppure non riesce con istruzioni in una sessione non interattiva. La configurazione stampa il file che ha scritto e conserva i server non correlati. Il JSON esistente deve essere JSON rigoroso valido; i valori TOML di Codex vengono conservati, ma i commenti potrebbero essere riformattati.

La configurazione preferisce HTTP remoto diretto. Con --api-key-env, scrive un riferimento a una variabile, mai la chiave. Senza questa opzione, HTTP diretto si basa sul supporto OAuth del client; non usa il file delle credenziali della CLI. Per riutilizzare le credenziali di thunderphone login in qualsiasi client compatibile con stdio, usa:

{
  "mcpServers": {
    "thunderphone": {
      "command": "npx",
      "args": ["-y", "@thunderphone/mcp"]
    }
  }
}

Il wrapper controlla THUNDERPHONE_API_KEY, poi il profilo CLI corrente (aggiornandolo quando necessario), quindi delega OAuth a mcp-remote. THUNDERPHONE_MCP_URL sovrascrive l'endpoint. Non invia telemetria. La configurazione autonoma è disponibile anche tramite npx -y @thunderphone/mcp setup --client cursor o thunderphone-mcp setup dopo aver installato globalmente @thunderphone/mcp.

Crea un progetto

npx create-thunderphone-agent my-receptionist
npx create-thunderphone-agent my-outbound --template python --agent-type outbound
# Equivalent:
thunderphone init my-receptionist --template node --agent-type receptionist

I modelli sono node e python; i tipi di agente sono receptionist, outbound e custom. L'agente predefinito è un receptionist dentale in inglese/spagnolo con fatti dimostrativi espliciti. I progetti includono agent.json, script di distribuzione, configurazioni MCP per Claude Code, Cursor e VS Code, istruzioni per l'agente, .env.example e un README. La generazione dello scheletro funziona offline e rifiuta di sovrascrivere una directory non vuota.

Modifica i dati aziendali prima della distribuzione. Esporta la chiave API, il numero del chiamante connesso e il destinatario del test come documentato nel README generato. npm run deploy o python deploy.py crea o aggiorna l'agente, distribuisce la sua bozza ed effettua una chiamata di test fatturabile. Gli script usano l'autenticazione con chiave API; la CLI e il wrapper MCP stdio supportano anche l'accesso da dispositivo. Gli script Python richiedono Python 3.9 o versione successiva.