
eDreams ODIGEO scales agentic AI with ElevenLabs to power the future of conversational travel
Achieving double-digit improvements in resolution speed and transfer rates across five languages
ElevenAgents React SDK v1.0.0: en omarbetning av JavaScript- och React-SDK:n med mer detaljerade hooks, ett enhetligt API för både webben och React Native, samt ett stabilt publikt API.
Version 1.0.0 av ElevenAgents JavaScript- och React-SDK finns nu tillgänglig. Den här versionen är en total omarbetning av @elevenlabs/client, @elevenlabs/react och @elevenlabs/react-native-paketen, med fokus på renderingsprestanda, ett enhetligt API för webben och React Native, samt ett stabilt publikt API. Det är en förändring som bryter bakåtkompatibilitet, men den välkända useConversation-hooken finns kvar, och en kodagent-funktion finns tillgänglig för att automatisera uppgraderingen.
Tre problem låg bakom den här versionen.
React och React Native hade olika API:er, olika funktioner och olika inställningsmöjligheter. Kod och kunskap gick inte att återanvända mellan plattformarna, och AI-kodverktyg föreslog ofta API:er som bara fanns på en plattform. React Native saknade dessutom helt WebSocket-läge.
Internt berodde det här på att React Native-SDK:n byggde på en tredjeparts-SDK istället för att bygga på @elevenlabs/client. Funktioner och buggfixar behövde släppas två gånger, och plattformarna gled längre ifrån varandra för varje version.
Varje ändring av tillstånd (status, läge, mute, volym) renderade om alla komponenter som använde samtalstillståndet. Det gick inte att prenumerera på bara den del du behövde. Om din komponent bara brydde sig om anslutningsstatus, renderades den ändå om när mute-läget ändrades.
Detta berodde på att SDK:n använde en enda context provider för allt samtalstillstånd, med bara grova hooks och callbacks via options-objekt.
Att uppgradera SDK:n riskerade att bryta din kod. Interna klasser som Input, Output och Anslutning var en del av det publika API:et, och utvecklare använde råa browser-primitiver som conversation.output.gain.gain.value för volym och conversation.input.analyser för ljudvisualisering. Alla interna ändringar kunde bryta dessa sätt att komma åt data.
För vår del gjorde ett arvbaserat klassystem det svårt att fixa detta stegvis, så en ren omstart behövdes.
@elevenlabs/react-native exporterar nu vidare @elevenlabs/react med ett tunt plattforms-lager: cirka 40 rader kod istället för över tusen. Samma ConversationProvider, samma hooks, samma metoder. Kod skriven för webben fungerar på React Native med bara en ändrad import-sökväg, kunskap kan användas direkt mellan plattformarna och AI-kodverktyg hittar inte längre på plattformsunika API:er.
| 1 | // On React Native, change this import to '@elevenlabs/react-native'. |
| 2 | import { |
| 3 | ConversationProvider, |
| 4 | useConversationControls, |
| 5 | useConversationStatus, |
| 6 | } from '@elevenlabs/react'; |
| 7 | |
| 8 | function App() { |
| 9 | return ( |
| 10 | <ConversationProvider> |
| 11 | <Agent /> |
| 12 | </ConversationProvider> |
| 13 | ); |
| 14 | } |
| 15 | |
| 16 | function Agent() { |
| 17 | const { startSession, endSession } = useConversationControls(); |
| 18 | const { status } = useConversationStatus(); |
| 19 | |
| 20 | if (status === 'connected') { |
| 21 | return <button onClick={endSession}>End</button>; |
| 22 | } |
| 23 | |
| 24 | return ( |
| 25 | <button onClick={() => startSession({ agentId: 'agent_7101k5zvyjhmfg983brhmhkd98n6' })}> |
| 26 | Start |
| 27 | </button> |
| 28 | ); |
| 29 | } |
Sex nya hooks prenumererar var och en på en specifik del av samtalstillståndet. Komponenter renderas bara om när just deras data ändras.
En statusindikator som tidigare renderades om vid varje tillståndsändring renderas nu bara om när själva anslutningsstatusen ändras:
| 1 | import { useConversationStatus } from '@elevenlabs/react'; |
| 2 | |
| 3 | function StatusBadge() { |
| 4 | const { status } = useConversationStatus(); |
| 5 | return <span>{status}</span>; |
| 6 | } |
useConversation finns fortfarande kvarDen välkända useConversation-hooken finns kvar och returnerar samma typ av data: status, läge, mute-läge och alla kontrollmetoder. Det är ett smidigt wrapper över de mer detaljerade hooks som beskrivs ovan. Befintliga användare kan börja med att byta till ConversationProvider + useConversation som första steg, och sedan gradvis använda mer detaljerade hooks där prestanda är viktigt.
| 1 | import { useConversation } from '@elevenlabs/react'; |
| 2 | |
| 3 | function Agent() { |
| 4 | const { status, isSpeaking, isMuted, setMuted, startSession, endSession } = useConversation(); |
| 5 | // Same API shape as before, just requires a ConversationProvider ancestor. |
| 6 | } |
useConversationClientTool låter React-komponenter registrera verktyg som agenten kan använda. Verktygen kopplas till komponentens livscykel: de registreras vid mount, avregistreras vid unmount och använder alltid det senaste värdet från closure.
| 1 | import { useConversationClientTool } from '@elevenlabs/react'; |
| 2 | import { useState } from 'react'; |
| 3 | |
| 4 | function MapComponent() { |
| 5 | const [location, setLocation] = useState({ lat: 0, lng: 0 }); |
| 6 | |
| 7 | useConversationClientTool('getLocation', () => { |
| 8 | return `${location.lat},${location.lng}`; |
| 9 | }); |
| 10 | |
| 11 | useConversationClientTool('setLocation', (params: { lat: number; lng: number }) => { |
| 12 | setLocation(params); |
| 13 | return 'Location updated'; |
| 14 | }); |
| 15 | |
| 16 | return <Map center={location} />; |
| 17 | } |
Det här är användbart när en verktygsfunktion behöver komma åt komponentens state eller props som inte finns tillgängliga på providernivå.
Interna klasser (Input, Output, wake lock) är nu privata. Det publika API:et visar dokumenterade metoder istället för råa browser-primitiver:
setVolume({ volume }) ersätter conversation.output.gain.gain.value = vgetInputByteFrequencyData() ersätter conversation.input.analyser.getByteFrequencyData()setMicMuted(true) ersätter conversation.input.setMuted(true)Detta innebär att den underliggande ljudlösningen kan bytas ut (till exempel byta transportlager) utan att användarens kod bryts.
ConversationProvider accepterar isMuted och onMutedChange props för extern hantering av tillstånd. Det är användbart om du vill spara mute-läget mellan sessioner eller synka det med applikationens tillstånd.
| 1 | import { ConversationProvider } from '@elevenlabs/react'; |
| 2 | import { useState } from 'react'; |
| 3 | |
| 4 | function App() { |
| 5 | const [muted, setMuted] = useState(false); |
| 6 | |
| 7 | return ( |
| 8 | <ConversationProvider isMuted={muted} onMutedChange={setMuted}> |
| 9 | <YourComponents /> |
| 10 | </ConversationProvider> |
| 11 | ); |
| 12 | } |
Om dessa props utelämnas hanteras mute-läget internt som tidigare.
Röstsamtal använder nu WebRTC som standard och textbaserade samtal använder WebSocket som standard. Du behöver oftast inte ange connectionType manuellt. Om du behöver en viss anslutningstyp kan du fortfarande ange det själv.
Detta är en förändring som bryter bakåtkompatibilitet och kräver uppdateringar i befintliga integrationer. Här är de viktigaste ändringarna:
Conversation är nu ett namespace-objekt och en typalias, inte en klass. instanceof-kontroller och subklassning fungerar inte längre.useConversation kräver en ConversationProvider som förälder.Input och Output-klasserna ersätts av dokumenterade metoder på samtalsinstansen.ElevenLabsProvider av ConversationProvider från @elevenlabs/react-native.För hela listan över förändringar, se ändringslogg.
En särskild funktion finns för att automatisera uppgraderingen. Funktionen läser din nuvarande integration, gör nödvändiga API-ändringar och uppdaterar imports. Den tar hand om det mekaniska arbetet med att migrera till ConversationProvider, byter ut borttagna klassreferenser och uppdaterar metodanrop.
Funktionen är särskilt användbar för större kodbaser där migreringen påverkar många filer.
| 1 | npx skills add elevenlabs/packages |
SDK-dokumentationen har uppdaterats för att visa det nya API:et:
Installera paketet för din plattform:
| 1 | # React (web) |
| 2 | npm install @elevenlabs/react |
| 3 | |
| 4 | # React Native (Expo) |
| 5 | npx expo install @elevenlabs/react-native @livekit/react-native @livekit/react-native-webrtc |
| 6 | |
| 7 | # Vanilla JavaScript |
| 8 | npm install @elevenlabs/client |
@elevenlabs/react exporterar allt från @elevenlabs/client, så du behöver inte installera båda.
Lägg in din app i en ConversationProvider, använd hooks för att starta en session och läs SDK-dokumentationen för hela API-referensen.
Och som vi nämnde i början finns en kodagent-funktion för att automatisera uppgraderingen:
| 1 | npx skills add elevenlabs/packages |
Om du stöter på problem eller har förslag, skapa ett ärende på GitHub. SDK:n underhålls aktivt och vi går igenom alla rapporter.

Achieving double-digit improvements in resolution speed and transfer rates across five languages
.webp&w=3840&q=95)
ElevenLabs' integration with IBM watsonx Orchestrate will help businesses to deliver natural, multilingual conversational experiences at scale