Server MCP di VoiceBooker
Il server MCP (Model Context Protocol) di VoiceBooker consente a un client AI compatibile di gestire le risorse VoiceBooker dell’utente autenticato. Puoi ispezionare e modificare bot e stage, configurare account SIP e analizzare la cronologia delle chiamate senza creare un’integrazione REST separata.
Collegare il server
Il server utilizza MCP Streamable HTTP ed è disponibile all’indirizzo:
https://voicebooker.de/app/api/v1/mcpOgni richiesta deve includere un token API VoiceBooker nell’header X-API-TOKEN:
X-API-TOKEN: <il-tuo-token-api>Il token determina il contesto aziendale; le risorse di altre aziende non possono essere lette o modificate. Condividi il token solo con il client MCP necessario e non inserirlo in configurazioni condivise.
Esempio di configurazione JSON:
{
"mcpServers": {
"voicebooker": {
"url": "https://voicebooker.de/app/api/v1/mcp",
"headers": { "X-API-TOKEN": "<il-tuo-token-api>" }
}
}
}A seconda del client, il campo può chiamarsi headers, httpHeaders oppure essere fornito tramite una variabile d’ambiente. Ricollega il client dopo aver salvato la configurazione per consentire la scoperta automatica degli strumenti.
Utilizzo
I campi ID delle risorse usano camelCase negli schemi e nelle risposte MCP: botId, stageId, botStageId, sharedBotId e callSessionId.
Il server restituisce gli ID delle risorse. Riutilizzali esattamente come vengono restituiti. Per ispezionare un bot, usa list_bots, poi list_stages con il suo ID: gli stage contengono prompt, strumenti, funzioni e comportamento effettivo. Leggi tutti gli stage prima di modificare il bot.
Per analizzare una conversazione, usa prima list_call_history, quindi get_trace_conversation con l’ID della sessione restituito. Il trace include turni, stato, stack e chiamate a funzioni o webhook.
Strumenti disponibili
Bot e stage
| Strumento | Funzione |
|---|---|
list_bots | Elenca i contenitori bot. |
create_bot | Crea un contenitore con uno stage Welcome. name è obbligatorio; settings, initial_state, wizard ed editable_keys sono opzionali. |
update_bot | Modifica i metadati senza sostituire il comportamento degli stage. botId è obbligatorio. |
get_bot_definition | Restituisce la definizione completa del bot, inclusi stage, prompt, tool, funzioni e metadati del flusso. botId è obbligatorio. |
update_bot_definition | Sostituisce la definizione completa del bot dopo la validazione. botId e definition sono obbligatori; expectedVersion evita sovrascritture e dryRun: true valida senza salvare. |
delete_bot | Elimina o nasconde un bot; i bot con stage vengono nascosti. |
list_bot_snapshots | Elenca gli snapshot versionati di un bot, dal più recente. botId è obbligatorio. |
create_bot_snapshot | Salva la definizione e gli stage attuali come nuova versione. botId è obbligatorio; message è opzionale. |
restore_bot_snapshot | Ripristina uno snapshot creando prima un backup automatico. botId e snapshotId sono obbligatori. |
diff_bot_snapshots | Confronta le definizioni complete di due snapshot. botId, fromSnapshotId e toSnapshotId sono obbligatori. |
list_stages | Elenca tutti gli stage ordinati di un bot. botId è obbligatorio. |
create_stage | Crea uno stage collegato a un bot. botId e name sono obbligatori. |
update_stage | Modifica uno stage e la sua configurazione per bot. botId e stageId sono obbligatori. |
delete_stage | Rimuove uno stage dal flusso. botId e stageId sono obbligatori. |
prompt e tools hanno ciascuno una propria modalità di esecuzione. I flag settings.promptExec e settings.toolsExec sono indipendenti e si applicano solo al campo corrispondente:
- Se
promptExecè assente ofalse,promptviene elaborato come testo Liquid e inviato al LLM come messaggio di sistema. ConpromptExec: true,promptdeve contenere JavaScript che definisceprompt(params). La funzione deve restituire un oggetto:{ prompt: "..." }crea un messaggio di sistema usato dal LLM per la risposta successiva, mentre{ text: "..." }crea un messaggio assistant diretto restituito senza modifiche. Se vengono restituiti entrambi, viene usato soloprompt. - Se
toolsExecè assente ofalse, un valoretoolsnon vuoto deve essere una stringa JSON decodificabile in un array di function tool compatibili con OpenAI. Ogni tool locale richiede anche un handler con lo stesso nome infunctions; una funzione presente solo infunctionsnon viene eseguita automaticamente. ContoolsExec: true,toolsdeve invece contenere JavaScript che definiscetools(params), e la funzione deve restituire{ tools: [...] }; restituire direttamente l’array non è valido. Anche i tool generati dinamicamente richiedono handler con lo stesso nome infunctions. - I due campi possono usare modalità diverse. Ad esempio, un
promptJavaScript con tool JSON statici o unpromptLiquid con tool JavaScript generati dinamicamente sono validi. È vietato solo mescolare i formati nello stesso campo:promptnon può contenere contemporaneamente testo Liquid e una funzione JavaScript, etoolsnon può contenere contemporaneamente una stringa JSON e codice JavaScript.
Per un handler di tool, data viene inviato al LLM come risultato del tool, così che possa formulare la risposta successiva. text viene invece restituito direttamente come risposta assistant invariata. Se vengono restituiti entrambi, data ha la precedenza e text non viene inviato direttamente.
list_stages restituisce anche botEngine: lightweight usa JavaScript sincrono con api() e webhook, mentre extendedNodeJs usa JavaScript basato su Promise e consente fetch. Un settings.packageJson non nullo attiva extendedNodeJs; un valore assente o nullo attiva lightweight. Non usare async, await, fetch, Promise, import o require nel motore leggero.
I nomi degli stage distinguono maiuscole e minuscole. settings.initialStages definisce lo stack iniziale. Il codice del prompt può cambiare stage restituendo lo stack aggiornato:
function prompt(params) {
params.stack.push("Booking");
return { state: params.state, stack: params.stack, prompt: "Chiedi la data della prenotazione." };
}Uno strumento può cambiare stage con transitionTo: "Booking"; dropStage: true rimuove lo stage corrente prima del handler. Gli strumenti dinamici usano function tools(params) { return { tools: [...] }; } e ogni strumento locale richiede un handler con lo stesso nome in functions. toolsState/toolsStack valgono per tools(params); state/stack per il suo handler.
Usa wizard per assistenti semplici a singolo stage. Per flussi esperti o multi-stage, crea o modifica gli stage separatamente.
Test dei bot
Gli strumenti per i test dei bot gestiscono configurazioni per due bot diversi dell’azienda autenticata. Il bot sorgente
avvia la conversazione e il bot di destinazione risponde. Le risposte usano la struttura pubblica con srcBotId e destBotId.
| Strumento | Funzione |
|---|---|
list_bot_tests | Elenca i test dei bot dell’azienda autenticata. |
create_bot_test | Crea un test. name, srcBotId e destBotId sono obbligatori; settings è opzionale. |
update_bot_test | Aggiorna un test. id è obbligatorio e i campi omessi vengono mantenuti. |
delete_bot_test | Elimina un test. id è obbligatorio. |
settings può includere convInitBot, maxConvTurns, asCall, startTimeout e stateUpdate. Entrambi i bot devono
essere visibili, appartenere all’azienda autenticata ed essere diversi.
Account SIP
| Strumento | Funzione |
|---|---|
list_sip_accounts | Elenca gli account per registrazione, routing, webhook e trasferimenti. include_inactive è true per impostazione predefinita. |
create_sip_account | Salva un account SIP modificabile e aggiorna la registrazione del connector; non acquista né configura un numero. |
update_sip_account | Aggiorna un account conservando i campi non forniti; id è obbligatorio e le impostazioni vengono unite. |
delete_sip_account | Elimina gli account modificabili. Gli account gestiti dal sistema vengono invece deregistrati con register: false. |
Le password SIP sono solo scrivibili e non vengono mai restituite. Se una password viene omessa durante un aggiornamento, quella esistente viene conservata; una stringa vuota la cancella.
Cronologia e trace
| Strumento | Funzione |
|---|---|
list_call_history | Cerca sessioni telefoniche e chat. Tutti i parametri sono opzionali: botId, start, end_date, call, limit e offset. Senza parametri cerca tutti i bot. |
get_trace_conversation | Restituisce turni ed eventi trace di una sessione. callSessionId è obbligatorio; limit è massimo 1000. |
list_call_webhook_events | Restituisce gli eventi webhook e JavaScript persistiti di una sessione, inclusi header, body, errori, URL e tempi. callSessionId è obbligatorio; limit è massimo 1000. |
get_trace_conversation include le chiamate webhook solo come riepilogo in fsCalls. Usa list_call_webhook_events per i dettagli completi. Le conversazioni soggette a conservazione dei dati vengono escluse e vengono applicati i filtri per API nascoste.