Skip to navigation

JavaScript SDK-referentie

Klassen, methoden en events voor de Speech Engine JavaScript SDK.

Op deze pagina wordt de openbare API voor de Speech Engine JavaScript SDK (@elevenlabs/elevenlabs-js) beschreven.

Een Speech Engine-resource ophalen

Haal een SpeechEngineResource op via de engine-ID. Het geretourneerde object biedt methoden om te koppelen aan een bestaande HTTP-server, een zelfstandige server te starten of afzonderlijke sessies te maken.

import { ElevenLabsClient } from "@elevenlabs/elevenlabs-js";
const elevenlabs = new ElevenLabsClient();
const engine = await elevenlabs.speechEngine.get("seng_8k3m9xr4hjnfg983brhmhkd98n6");

SpeechEngineResource

Eigenschappen

EigenschapTypeBeschrijving
engineIdstringDe ID van de spraakengine.

attach

Koppel aan een bestaande Node.js HTTP-server en begin Speech Engine-verbindingen te accepteren op het opgegeven pad. Gebruik dit als je al een HTTP-server hebt (bijvoorbeeld Express, Fastify of een gewone http.createServer()) en Speech Engine wilt toevoegen naast je bestaande routes.

Handelt WebSocket-upgrades, padrouting en requestverificatie automatisch af. Retourneert een SpeechEngineAttachment waarvan de methode close() geen nieuwe verbindingen meer accepteert zonder de HTTP-server te beïnvloeden.

const attachment = engine.attach(httpServer, "/ws", {
debug: true,
onTranscript(transcript, signal, session) {
session.sendResponse(stream);
},
});
ParameterTypeBeschrijving
httpServerhttp.ServerDe Node.js HTTP-server waaraan je koppelt.
pathstringURL-pad waarop WebSocket-upgrades worden afgehandeld.
handlerSpeechEngineCallbacksCallbackobject (zie Callbacks).

Er is rechtstreeks op de client een snelkoppeling beschikbaar die get() en attach() in één aanroep combineert:

await elevenlabs.speechEngine.attach("seng_8k3m9xr4hjnfg983brhmhkd98n6", httpServer, "/ws", {
onTranscript(transcript, signal, session) {
session.sendResponse(stream);
},
});

verifyRequest

Controleer of een binnenkomend request afkomstig is van de ElevenLabs Speech Engine API. Controleert de header X-Elevenlabs-Speech-Engine-Authorization op een geldige JWT die is ondertekend met de SHA-256-hash van je API-sleutel.

Alleen nodig wanneer je de WebSocket-upgrade zelf beheert. Bij gebruik van attach() of SpeechEngineServer wordt de verificatie automatisch afgehandeld.

const isValid = await engine.verifyRequest(req);
ParameterTypeBeschrijving
req{ headers: Record<string, string | string[] | undefined> }Object van het binnenkomende HTTP-request.

Retourneert: Promise<boolean> — true als het request geldig is.

createSession

Verpak een geaccepteerde WebSocket in een SpeechEngineSession. Gebruik dit voor aangepaste serverintegratie of handmatige WebSocket-afhandeling.

const session = engine.createSession(ws, { debug: true });
session.on("user_transcript", (transcript, signal) => {
/* ... */
});
ParameterTypeStandaardBeschrijving
wsWebSocketEen geaccepteerde WebSocket-verbinding.
options.debugbooleanfalseSchakel debuglogging in.

Retourneert: SpeechEngineSession

SpeechEngineServer

Een zelfstandige WebSocket-server die Speech Engine-verbindingen accepteert zonder een bestaande HTTP-server nodig te hebben. Gebruik deze wanneer je server uitsluitend bedoeld is voor het afhandelen van Speech Engine-verbindingen.

Gebruik engine.attach() voor integratie met een bestaande HTTP-server (bijvoorbeeld Express of Fastify).

import { SpeechEngine } from "@elevenlabs/elevenlabs-js";
const server = new SpeechEngine.Server({
port: 3001,
debug: true,
onTranscript(transcript, signal, session) {
session.sendResponse(stream);
},
});
server.start();

Constructoropties

ParameterTypeStandaardBeschrijving
portnumber3001Poort waarop wordt geluisterd.
apiKeystringElevenLabs API-sleutel voor het verifiëren van verbindingen. Valt terug op de omgevingsvariabele ELEVENLABS_API_KEY. Niet vereist wanneer disableAuth true is.
engineIdstringDe ID van de spraakengine. Wordt automatisch ingevuld wanneer deze via de resource wordt gemaakt.
…SpeechEngineCallbacksAlle callbackopties (onInit, onTranscript, onClose, onDisconnect, onError, debug, disableAuth). Zie Callbacks.

start

Start de zelfstandige WebSocket-server op de geconfigureerde poort. Verifieert elke binnenkomende verbinding met de ElevenLabs API via de geconfigureerde API-sleutel, tenzij disableAuth: true is ingesteld.

server.start();

stop

Stop de WebSocket-server en sluit alle actieve verbindingen.

await server.stop();

handleConnection

Verpak een bestaande WebSocket in een SpeechEngineSession met de callbacks van de server gekoppeld. Gebruik dit als je je eigen WebSocket-server beheert en afzonderlijke verbindingen wilt verpakken.

const session = server.handleConnection(ws);
ParameterTypeBeschrijving
wsWebSocketEen geaccepteerde WebSocket-verbinding.

Retourneert: SpeechEngineSession

SpeechEngineSession

Verpakt één WebSocket-verbinding. Elke verbinding vertegenwoordigt één gesprek. De sessie geeft events af voor transcripts en wijzigingen in de levenscyclus, en biedt methoden om LLM-antwoorden terug te sturen.

Wanneer er een nieuw transcript binnenkomt, wordt het abort-signaal van de vorige transcripthandler geactiveerd, waardoor lopende LLM-aanroepen worden onderbroken.

Eigenschappen

EigenschapTypeBeschrijving
conversationIdstringDe gespreks-ID die door de API is toegewezen. Beschikbaar na init.
isOpenbooleanOf de sessie nog open is.

on

Registreer een handler voor een event. Retourneert de sessie voor chaining.

session.on("user_transcript", (transcript, signal) => {
/* ... */
});

off

Verwijder een eerder geregistreerde handler.

session.off("user_transcript", listener);

once

Registreer een handler die één keer wordt uitgevoerd en zichzelf vervolgens verwijdert.

session.once("init", (conversationId) => {
/* ... */
});

sendResponse

Stuur een LLM-antwoord terug naar de Speech Engine API voor text-to-speechsynthese. Moet binnen een onTranscript-handler worden aangeroepen. Als je deze buiten een handler aanroept, wordt een waarschuwing gegeven en keert de methode terug zonder iets te verzenden.

// String response
session.sendResponse("Hello, how can I help?");
// Streamed response (OpenAI, Anthropic, or Gemini)
const stream = await openai.responses.create(
{ model: "gpt-4o", input: messages, stream: true },
{ signal }
);
session.sendResponse(stream);
ParameterTypeBeschrijving
responsestring | AsyncIterable<unknown>Een volledige string of een async iterable met tekstchunks / LLM-streamevents.

De SDK detecteert automatisch tekst in de volgende LLM-streamformaten en extraheert deze:

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

close

Sluit de sessie en de onderliggende WebSocket-verbinding.

session.close();

SpeechEngineAttachment

Geretourneerd door engine.attach(). Beheert de levenscyclus van de WebSocket-server zonder de HTTP-server waaraan deze is gekoppeld te beïnvloeden.

close

Stop met het accepteren van nieuwe verbindingen, verwijder de upgradelistener van de HTTP-server en sluit de onderliggende WebSocket-server.

await attachment.close();

Callbacks

Het callbackobject dat wordt doorgegeven aan attach() of SpeechEngineServer. Alle callbacks zijn optioneel.

CallbackHandtekeningBeschrijving
onInit(conversationId: string, session: Session) => voidSessie geïnitialiseerd met een gespreks-ID.
onTranscript(transcript: TranscriptMessage[], signal: AbortSignal, session: Session) => voidSpraak van de gebruiker getranscribeerd.
onClose(session: Session) => voidSchone verbinding verbroken door ElevenLabs.
onDisconnect(session: Session) => voidWebSocket onverwacht verbroken.
onError(error: Error, session: Session) => voidProtocol- of WebSocket-fout.
debugbooleanSchakel debuglogging in.
disableAuthbooleanSla JWT-verificatie bij binnenkomende verbindingen over. Zie Authenticatie uitschakelen.

De onTranscript-handler ontvangt een AbortSignal dat wordt geactiveerd wanneer de gebruiker midden in een antwoord onderbreekt.

Authenticatie uitschakelen

Standaard verifiëren zowel attach() als SpeechEngineServer de header X-Elevenlabs-Speech-Engine-Authorization bij elke binnenkomende verbinding. Als je server achter een infrastructuurlaag staat die binnenkomend verkeer al beperkt tot ElevenLabs (doorgaans een IP-allowlist voor de egress-ranges van ElevenLabs), kun je JWT-verificatie overslaan door disableAuth: true door te geven:

// Standalone — no apiKey required when disableAuth is true
new SpeechEngine.Server({ port: 3001, disableAuth: true, onTranscript }).start();
// Or on attach
elevenlabs.speechEngine.attach("seng_8k3m9xr4hjnfg983brhmhkd98n6", httpServer, "/ws", {
disableAuth: true,
onTranscript,
});

Wanneer authenticatie is uitgeschakeld, accepteert de server elke client die hem kan bereiken en geeft hij bij het opstarten een console.warn af.

Gebruik disableAuth: true alleen als je een IP-allowlist, aangepaste headerwaarden of een vergelijkbare beperking op netwerkniveau vóór de server hebt. Zonder zo’n beperking kan iedereen op internet een sessie openen en je rekenkracht en downstream LLM-quotum gebruiken.

Events

Wanneer je session.on() rechtstreeks gebruikt in plaats van callbacks, zijn dit de eventnamen en de bijbehorende handlersignaturen.

EventHandlersignatuur
user_transcript(transcript: TranscriptMessage[], signal: AbortSignal)
init(conversationId: string)
close()
disconnected()
error(error: Error)

Eventnaamconstanten zijn beschikbaar voor typeveilig gebruik:

import { SpeechEngine } from "@elevenlabs/elevenlabs-js";
session.on(SpeechEngine.USER_TRANSCRIPT, (transcript, signal) => {
/* ... */
});

TranscriptMessage

Eén bericht in de gespreksgeschiedenis. Bij elke beurt wordt het volledige transcript doorgegeven aan onTranscript.

EigenschapTypeBeschrijving
role"user" | "agent"Wie het bericht heeft verstuurd.
contentstringDe tekstinhoud van het bericht.

Wire protocol

Ter referentie: dit zijn de JSON-berichten die via de WebSocket-verbinding worden uitgewisseld. De SDK handelt serialisatie en deserialisatie automatisch af.

Binnenkomend (ElevenLabs API naar ontwikkelaarsserver)

BerichttypeVeldenBeschrijving
initconversation_id: stringSessie geïnitialiseerd.
user_transcriptuser_transcript: TranscriptMessage[], event_id: numberSpraak van de gebruiker getranscribeerd.
pingKeep-alive. SDK antwoordt met pong.
closeSchone verbinding verbroken.
errormessage: stringFout van de API.

Uitgaand (ontwikkelaarsserver naar ElevenLabs API)

BerichttypeVeldenBeschrijving
agent_responsecontent: string, event_id: number, is_final: booleanLLM-antwoordchunk voor TTS-synthese.
pongAntwoord op ping.