SDK React
SDK ElevenAgents: wdrażaj spersonalizowanych, interaktywnych agentów głosowych w kilka minut.
Zobacz omówienie ElevenAgents, aby dowiedzieć się, jak działa ElevenAgents.
Instalacja
Zainstaluj pakiet w projekcie za pomocą menedżera pakietów.
Aktualizujesz starszą wersję? Uruchom npx skills add elevenlabs/packages, aby zainstalować
umiejętność elevenlabs:sdk-migration dla swojego agenta AI do programowania. Automatyzuje ona zmiany importów,
opakowanie w ConversationProvider i aktualizacje API.
@elevenlabs/react ponownie eksportuje wszystko z @elevenlabs/client, więc nie musisz instalować
obu pakietów.
Użycie
Oto minimalny działający przykład, który łączy się z agentem i pozwala użytkownikowi rozpocząć oraz zakończyć rozmowę głosową:
Poniższe sekcje szczegółowo wyjaśniają każdą część.
ConversationProvider
Wszystkie hooki rozmowy muszą być używane wewnątrz ConversationProvider. Owiń nim aplikację (lub odpowiednie poddrzewo).
Właściwości providera
Provider przyjmuje te same opcje co useConversation — w tym callbacki, narzędzia klienta, nadpisania i lokalizację serwera — więc możesz je skonfigurować na poziomie providera zamiast w każdym hooku.
Kontrolowany stan wyciszenia
Provider obsługuje właściwości isMuted i onMutedChange do kontrolowanego zarządzania stanem wyciszenia. Dzięki temu możesz przechowywać stan wyciszenia poza nim, np. między sesjami.
useConversation
Wygodny hook React, który łączy wszystkie szczegółowe hooki w jedną wartość zwracaną. Wymaga nadrzędnego ConversationProvider.
Dla lepszej wydajności renderowania rozważ użycie szczegółowych hooków.
useConversation powoduje ponowne renderowanie przy każdej zmianie stanu, podczas gdy szczegółowe hooki
renderują ponownie tylko wtedy, gdy zmienia się ich konkretny fragment stanu.
Inicjowanie rozmowy
Pamiętaj, że ElevenAgents wymaga dostępu do mikrofonu w rozmowach głosowych. Zanim rozpocznie się rozmowa, rozważ wyjaśnienie tego w interfejsie aplikacji i umożliwienie dostępu.
Opcje
Hook można opcjonalnie zainicjować z opcjami. Możesz je też przekazać na poziomie ConversationProvider.
Dostępne opcje:
- clientTools - definicja obiektu narzędzi klienta, które może wywoływać agent. Szczegóły znajdziesz poniżej.
- overrides - definicja obiektu nadpisań ustawień rozmowy. Szczegóły znajdziesz poniżej.
- textOnly - czy rozmowa ma działać w trybie tylko tekstowym. Szczegóły znajdziesz poniżej.
- serverLocation - określa lokalizację serwera (
"us","eu-residency","in-residency","global"). Domyślnie:"us".
Przegląd callbacków
- onConnect - procedura wywoływana po ustanowieniu połączenia rozmowy.
- onDisconnect - procedura wywoływana po zakończeniu połączenia rozmowy.
- onMessage - procedura wywoływana po otrzymaniu nowej wiadomości. Mogą to być wstępne lub końcowe transkrypcje głosu użytkownika, odpowiedzi wygenerowane przez LLM albo komunikaty debugowania, gdy włączona jest opcja debugowania.
- onError - procedura wywoływana po wystąpieniu błędu.
- onAudio - procedura wywoływana po otrzymaniu danych audio.
- onModeChange - procedura wywoływana po zmianie trybu rozmowy (mówienie/słuchanie).
- onStatusChange - procedura wywoływana po zmianie stanu połączenia.
- onCanSendFeedbackChange - procedura wywoływana po zmianie możliwości wysłania opinii.
- onDebug - procedura wywoływana, gdy dostępne są informacje debugowania.
- onUnhandledClientToolCall - procedura wywoływana po napotkaniu nieobsłużonego wywołania narzędzia klienta.
- onVadScore - procedura wywoływana po zmianie wyniku wykrywania aktywności głosowej.
- onAudioAlignment - procedura wywoływana po otrzymaniu danych synchronizacji audio, zapewniających informacje o czasie na poziomie znaków dla mowy agenta.
- onAgentChatResponsePart - procedura wywoływana z tekstem odpowiedzi agenta w trakcie jej generowania, jako zdarzenia rozpoczęcia, delty i zakończenia. Zawsze wysyłana w trybie tylko tekstowym; w rozmowach głosowych włącz
agent_chat_response_partw konfiguracjiclient_eventsagenta.
Narzędzia klienta
Narzędzia klienta pozwalają agentowi wywoływać funkcje po stronie klienta. Możesz dzięki nim uruchamiać działania w kliencie, np. otworzyć modal lub wykonać wywołanie API w imieniu użytkownika.
Definicja narzędzi klienta to obiekt funkcji i musi być zgodna z konfiguracją w interfejsie ElevenLabs, gdzie możesz nazwać i opisać różne narzędzia oraz skonfigurować parametry przekazywane przez agenta.
Jeśli funkcja zwraca wartość, jest ona przekazywana agentowi jako odpowiedź.
Aby agent czekał na odpowiedź i mógł na nią zareagować, narzędzie musi być w interfejsie ElevenLabs wyraźnie ustawione tak, by blokowało rozmowę. W przeciwnym razie agent zakłada powodzenie i kontynuuje rozmowę.
Bardziej zgodne z podejściem React rozwiązanie do rejestrowania narzędzi klienta znajdziesz w useConversationClientTool.
Nadpisania rozmowy
Możesz nadpisać różne ustawienia rozmowy i ustawiać je dynamicznie na podstawie innych interakcji użytkownika.
Obsługujemy nadpisywanie różnych ustawień. Są one opcjonalne i pozwalają dostosować rozmowę.
Dostępne są następujące ustawienia:
Tylko tekst
Jeśli twój agent jest skonfigurowany do działania w trybie tylko tekstowym, czyli nie wysyła ani nie odbiera wiadomości audio, możesz użyć tej flagi, by korzystać z lżejszej wersji rozmowy. W takim przypadku użytkownik nie zostanie poproszony o uprawnienia do mikrofonu i nie zostanie utworzony kontekst audio.
Kontrolowany stan
Możesz bezpośrednio kontrolować wybrane elementy stanu rozmowy przez opcje hooka:
Rezydencja danych
Możesz określić, z którym regionem serwerów ElevenLabs ma zostać nawiązane połączenie. Więcej informacji znajdziesz w przewodniku po rezydencji danych.
Metody
startSession
Metoda startSession ustanawia połączenie i zaczyna używać mikrofonu do komunikacji z agentem ElevenLabs Agents. Metoda przyjmuje obiekt opcji, w którym wymagane jest signedUrl, conversationToken lub agentId.
Identyfikator agenta można uzyskać w interfejsie ElevenLabs.
Zalecamy też przekazywanie własnych identyfikatorów użytkowników końcowych, aby mapować rozmowy na użytkowników.
Typ połączenia jest automatycznie wybierany na podstawie trybu rozmowy. Rozmowy głosowe
używają WebRTC, a rozmowy tylko tekstowe domyślnie używają WebSocket. W razie potrzeby nadal możesz wyraźnie określić
connectionType.
W przypadku agentów publicznych (czyli agentów bez włączonego uwierzytelniania) wymagany jest tylko agentId.
Jeśli rozmowa wymaga autoryzacji, użyj REST API, aby wygenerować podpisane linki dla połączenia WebSocket lub token rozmowy dla połączenia WebRTC.
startSession zwraca obietnicę z conversationId. Ta wartość to globalnie unikalny identyfikator rozmowy, którego możesz użyć do rozróżniania rozmów.
Połączenie WebSocket
Połączenie WebRTC
endSession
Metoda ręcznego zakończenia rozmowy. Rozłącza i kończy rozmowę.
setVolume
Ustawia głośność wyjściową rozmowy. Przyjmuje obiekt z polem volume o wartości od 0 do 1.
sendUserMessage
Wysyła wiadomość tekstową do agenta.
Możesz użyć jej, by pozwolić użytkownikowi wpisać wiadomość zamiast korzystać z mikrofonu. W przeciwieństwie do sendContextualUpdate, zostanie to potraktowane jako wiadomość użytkownika i skłoni agenta do wykonania swojej tury w rozmowie.
sendContextualUpdate
Wysyła agentowi informacje kontekstowe, które nie wywołają odpowiedzi.
sendFeedback
Przekazuje opinię o jakości rozmowy. Pomaga to poprawiać działanie agenta.
sendUserActivity
Powiadamia agenta o aktywności użytkownika, aby zapobiec przerwaniu. Przydatne, gdy użytkownik aktywnie korzysta z aplikacji, a agent powinien przestać mówić, np. gdy użytkownik pisze na czacie.
Agent przestanie mówić na około 2 sekundy po otrzymaniu tego sygnału.
changeInputDevice
Zmienia urządzenie wejściowe audio podczas aktywnej rozmowy głosowej. Ta metoda jest dostępna tylko w rozmowach głosowych.
changeOutputDevice
Zmienia urządzenie wyjściowe audio podczas aktywnej rozmowy głosowej. Ta metoda jest dostępna tylko w rozmowach głosowych.
Przełączanie urządzeń działa tylko w rozmowach głosowych. Jeśli nie podasz konkretnego deviceId,
przeglądarka użyje domyślnego urządzenia. Dostępne urządzenia możesz wyświetlić za pomocą
API MediaDevices.enumerateDevices().
getId
Zwraca identyfikator bieżącej rozmowy.
getInputVolume / getOutputVolume
Metody zwracające bieżące poziomy głośności wejściowej/wyjściowej (skala 0–1).
getInputByteFrequencyData / getOutputByteFrequencyData
Metody zwracające Uint8Array zawierające bieżące dane częstotliwości wejściowej/wyjściowej. Więcej informacji znajdziesz w AnalyserNode.getByteFrequencyData.
Te metody są dostępne tylko w rozmowach głosowych. W trybie WebRTC audio jest na stałe ustawione na
pcm_48000, więc wizualizacje korzystające ze zwracanych danych mogą pokazywać inne wzory
niż połączenia WebSocket.
sendMCPToolApprovalResult
Wysyła wynik zatwierdzenia wywołań narzędzi MCP (Model Context Protocol).
Wartości zwracane
Oprócz powyższych metod useConversation zwraca następujący reaktywny stan:
- status - bieżący stan połączenia (
"disconnected","connecting","connected"). - isSpeaking - czy agent aktualnie mówi.
- isListening - czy agent aktualnie słucha.
- mode - bieżący tryb rozmowy (
"speaking"lub"listening"). - isMuted - czy mikrofon jest aktualnie wyciszony.
- setMuted - funkcja wyciszająca/włączająca mikrofon.
- canSendFeedback - czy można przesłać opinię o bieżącej rozmowie.
- message - ostatnia wiadomość z rozmowy.
Szczegółowe hooki
Dla lepszej wydajności renderowania użyj tych hooków zamiast useConversation. Każdy hook subskrybuje tylko swój konkretny fragment stanu, więc komponenty renderują się ponownie tylko wtedy, gdy zmieniają się dane, z których korzystają.
Wszystkie szczegółowe hooki wymagają nadrzędnego ConversationProvider.
useConversationControls
Zwraca metody działania do sterowania rozmową. Ten hook nie powoduje ponownego renderowania, ponieważ udostępnia tylko stabilne referencje funkcji.
useConversationStatus
Zwraca bieżący stan połączenia i opcjonalny komunikat stanu.
useConversationInput
Zwraca stan wyciszenia oraz setter do przełączania mikrofonu.
useConversationMode
Zwraca stan mówienia/słuchania agenta.
useConversationFeedback
Zwraca dostępność opinii i metodę jej przesłania.
useRawConversation
Zwraca surową instancję rozmowy. To rozwiązanie awaryjne dla zaawansowanych przypadków użycia, gdy potrzebujesz bezpośredniego dostępu do bazowego obiektu VoiceConversation lub TextConversation.
useConversationClientTool
Hook do dynamicznego rejestrowania narzędzi klienckich z komponentów React. Narzędzia są automatycznie wyrejestrowywane po odmontowaniu komponentu.
Przydaje się, gdy handler narzędzia potrzebuje dostępu do stanu komponentu lub propsów niedostępnych na poziomie providera.
Hook zawsze używa najnowszej wartości closure handlera, więc nie musisz martwić się o nieaktualny stan.