Vai alla navigazione

Riferimento SDK Python

Classi, metodi ed eventi per l'SDK Python Speech Engine.

Questa pagina documenta l’API pubblica dell’SDK Python di Speech Engine (elevenlabs).

Ottenere una risorsa Speech Engine

Recupera una SpeechEngineResource tramite l’ID del motore. L’oggetto restituito offre metodi per avviare un server, verificare le richieste o creare singole sessioni.

from elevenlabs import AsyncElevenLabs
elevenlabs = AsyncElevenLabs()
engine = await elevenlabs.speech_engine.get("seng_8k3m9xr4hjnfg983brhmhkd98n6")

SpeechEngineResource

Proprietà

ProprietàTipoDescrizione
engine_idstrL’ID del motore vocale.

serve

Avvia un server WebSocket indipendente. Rimane in esecuzione finché non viene arrestato.

await engine.serve(
port=3001,
path="/ws",
debug=True,
on_transcript=handle_transcript,
)
ParametroTipoPredefinitoDescrizione
portint3001Porta su cui rimanere in ascolto.
pathstrNoneLimita le connessioni a questo path. None accetta tutte le connessioni.
debugboolFalseAbilita i log di debug su stdout.
disable_authboolFalseIgnora la verifica JWT per le connessioni in entrata. Vedi Disabilitare l’autenticazione.
on_initcallableChiamato quando viene inizializzata una sessione.
on_transcriptcallableChiamato quando arriva una trascrizione dell’utente.
on_closecallableChiamato in caso di disconnessione regolare.
on_disconnectcallableChiamato quando il WebSocket si interrompe inaspettatamente.
on_errorcallableChiamato in caso di errori di protocollo o WebSocket.

Disabilitare l’autenticazione

Per impostazione predefinita, serve() verifica l’header X-Elevenlabs-Speech-Engine-Authorization per ogni connessione in entrata. Se il tuo server si trova dietro un livello di infrastruttura che limita già il traffico in entrata a ElevenLabs (in genere una allowlist di IP limitata agli intervalli di uscita di ElevenLabs), puoi ignorare la verifica JWT passando disable_auth=True:

# No api_key required when disable_auth is True
await engine.serve(port=3001, disable_auth=True, on_transcript=on_transcript)
# Or directly on SpeechEngineServer
from elevenlabs.speech_engine import SpeechEngineServer
server = SpeechEngineServer(port=3001, disable_auth=True, on_transcript=on_transcript)
await server.serve()

Quando l’autenticazione è disabilitata, il server accetta qualsiasi client che riesca a raggiungerlo ed emette un UserWarning all’avvio.

Usa disable_auth=True soltanto se davanti al server hai una allowlist di IP, valori di header personalizzati o una restrizione equivalente a livello di rete. Senza una di queste protezioni, chiunque su internet può aprire una sessione e consumare le tue risorse di calcolo e la quota LLM a valle.

verify_request

Verifica che una richiesta in entrata provenga dall’API Speech Engine di ElevenLabs. Controlla che l’header X-Elevenlabs-Speech-Engine-Authorization contenga un JWT valido firmato con l’hash SHA-256 della tua chiave API.

È necessario soltanto se gestisci personalmente l’upgrade WebSocket. Quando usi serve(), la verifica viene gestita automaticamente (a meno che non sia impostato disable_auth=True).

is_valid = engine.verify_request(headers)
ParametroTipoDescrizione
headersdictDizionario degli header della richiesta.

Restituisce: bool — True se la richiesta è valida.

create_session

Racchiude un WebSocket accettato in una SpeechEngineSession. Usalo per un’integrazione personalizzata del server (ad esempio FastAPI, Starlette o gestione manuale del WebSocket).

session = engine.create_session(websocket, debug=True)
session.on("user_transcript", handle_transcript)
await session.run()
ParametroTipoPredefinitoDescrizione
wsWebSocketUna connessione WebSocket accettata.
debugboolFalseAbilita i log di debug.

Restituisce: SpeechEngineSession

SpeechEngineSession

Racchiude una singola connessione WebSocket. Ogni connessione rappresenta una conversazione. La sessione emette eventi per le trascrizioni e le modifiche del ciclo di vita e offre metodi per inviare risposte LLM.

Quando arriva una nuova trascrizione, il gestore della trascrizione precedente viene annullato automaticamente, interrompendo qualsiasi chiamata LLM in corso.

Proprietà

ProprietàTipoDescrizione
conversation_idOptional[str]L’ID della conversazione assegnato dall’API. Disponibile dopo init.
is_openboolIndica se la sessione è ancora aperta.

on

Registra un gestore per un evento. Restituisce la sessione per concatenare le chiamate.

session.on("user_transcript", handler)

off

Rimuove un gestore registrato in precedenza.

session.off("user_transcript", handler)

once

Registra un gestore che viene eseguito una volta, quindi si rimuove.

session.once("init", handler)

send_response

Invia una risposta LLM all’API Speech Engine per la sintesi Text to Speech. Deve essere chiamato all’interno di un gestore on_transcript. Se lo chiami al di fuori di un gestore, viene emesso un avviso e non viene inviato nulla.

# String response
await session.send_response("Hello, how can I help?")
# Streamed response (OpenAI, Anthropic, or Gemini)
stream = await openai_client.responses.create(model="gpt-4o", input=messages, stream=True)
await session.send_response(stream)
ParametroTipoDescrizione
responsestr | async iterableUna stringa completa o un iterabile asincrono di blocchi di testo / eventi di streaming LLM.

L’SDK rileva ed estrae automaticamente il testo dai seguenti formati di streaming LLM:

ProviderFormato dell’evento
API Responses di OpenAI{ type: "response.output_text.delta", delta: "text" }
Chat Completions di OpenAI{ choices: [{ delta: { content: "text" } }] }
API Messages di Anthropic{ type: "content_block_delta", delta: { type: "text_delta", text: "text" } }
API Gemini di Google{ candidates: [{ content: { parts: [{ text: "text" }] } }] }

run

Esegue il ciclo di ricezione finché il WebSocket non si chiude. Questo è il punto di ingresso principale dopo aver creato manualmente una sessione tramite create_session().

session = engine.create_session(websocket)
session.on("user_transcript", handle_transcript)
await session.run()

close

Chiude la sessione e la connessione WebSocket sottostante.

session.close()

Callback

Gli argomenti keyword passati a serve(). Tutti i callback sono facoltativi. I gestori possono essere funzioni sincrone o asincrone (coroutine).

CallbackFirmaDescrizione
on_init(conversation_id: str, session) -> NoneSessione inizializzata con un ID conversazione.
on_transcript(transcript: list, session) -> NoneVoce dell’utente trascritta.
on_close(session) -> NoneDisconnessione regolare da ElevenLabs.
on_disconnect(session) -> NoneWebSocket interrotto inaspettatamente.
on_error(error: Exception, session) -> NoneErrore di protocollo o WebSocket.

Eventi

Quando usi direttamente session.on() invece dei callback, questi sono i nomi degli eventi e le firme dei relativi gestori.

EventoFirma del gestore
user_transcript(transcript: list[ConversationMessage])
init(conversation_id: str)
close()
disconnected()
error(error: Exception)

Sono disponibili costanti per i nomi degli eventi, per un utilizzo type-safe:

from elevenlabs.speech_engine import USER_TRANSCRIPT, INIT, CLOSE, DISCONNECTED, ERROR
session.on(USER_TRANSCRIPT, handle_transcript)

ConversationMessage

Un singolo messaggio nella cronologia della conversazione. La trascrizione completa viene passata a on_transcript a ogni turno.

ProprietàTipoDescrizione
role"user" | "agent"Chi ha inviato il messaggio.
contentstrIl contenuto testuale del messaggio.

Protocollo wire

Come riferimento, questi sono i messaggi JSON scambiati tramite la connessione WebSocket. L’SDK gestisce automaticamente la serializzazione e la deserializzazione.

In entrata (API ElevenLabs al server dello sviluppatore)

Tipo di messaggioCampiDescrizione
initconversation_id: stringSessione inizializzata.
user_transcriptuser_transcript: TranscriptMessage[], event_id: numberVoce dell’utente trascritta.
pingKeep-alive. L’SDK risponde con pong.
closeDisconnessione regolare.
errormessage: stringErrore dall’API.

In uscita (server dello sviluppatore all’API ElevenLabs)

Tipo di messaggioCampiDescrizione
agent_responsecontent: string, event_id: number, is_final: booleanBlocco di risposta LLM per la sintesi TTS.
pongRisposta al ping.