React SDK
ElevenAgents SDK: कुछ ही मिनटों में कस्टमाइज़्ड, इंटरैक्टिव वॉइस एजेंट्स डिप्लॉय करें।
ElevenAgents कैसे काम करता है, इसकी जानकारी के लिए ElevenAgents ओवरव्यू देखें।
इंस्टॉलेशन
पैकेज मैनेजर के ज़रिए अपने प्रोजेक्ट में पैकेज इंस्टॉल करें।
पुराने वर्शन से अपग्रेड कर रहे हैं? अपने AI कोडिंग एजेंट के लिए
elevenlabs:sdk-migration skill इंस्टॉल करने के लिए npx skills add elevenlabs/packages चलाएँ। यह इंपोर्ट बदलावों,
ConversationProvider wrapping और API अपडेट्स को ऑटोमेट करता है।
@elevenlabs/react, @elevenlabs/client से सब कुछ re-export करता है, इसलिए आपको
दोनों पैकेज इंस्टॉल करने की ज़रूरत नहीं है।
उपयोग
यहां एक न्यूनतम काम करने वाला उदाहरण है, जो किसी एजेंट से कनेक्ट होता है और यूज़र को वॉइस बातचीत शुरू और समाप्त करने देता है:
नीचे दिए गए सेक्शन हर भाग को विस्तार से समझाते हैं।
ConversationProvider
सभी conversation hooks का इस्तेमाल ConversationProvider के अंदर होना चाहिए। अपने ऐप (या संबंधित subtree) को इस provider से wrap करें।
Provider props
provider, useConversation जैसे ही विकल्प स्वीकार करता है — जिनमें callbacks, client tools, overrides और server location शामिल हैं — ताकि आप इन्हें हर hook consumer में देने के बजाय provider स्तर पर कॉन्फ़िगर कर सकें।
नियंत्रित म्यूट स्थिति
provider, नियंत्रित म्यूट स्थिति प्रबंधन के लिए isMuted और onMutedChange props सपोर्ट करता है। इससे आप म्यूट स्थिति को बाहर से बनाए रख सकते हैं (जैसे, सेशन्स के बीच)।
useConversation
एक सुविधाजनक React hook, जो सभी granular hooks को एक ही return value में जोड़ता है। इसके लिए ऊपर ConversationProvider होना ज़रूरी है।
बेहतर render performance के लिए, इसके बजाय granular hooks इस्तेमाल करने पर विचार करें।
useConversation किसी भी state change पर फिर से render होता है, जबकि granular hooks सिर्फ़ तब
फिर से render होते हैं जब उनकी state का खास हिस्सा बदलता है।
बातचीत शुरू करें
ध्यान रखें कि ElevenAgents को वॉइस बातचीत के लिए माइक्रोफ़ोन एक्सेस चाहिए। बातचीत शुरू होने से पहले, अपने ऐप के UI में इसका कारण समझाने और एक्सेस की अनुमति देने पर विचार करें।
विकल्प
hook को वैकल्पिक रूप से options के साथ initialize किया जा सकता है। इन्हें ConversationProvider स्तर पर भी दिया जा सकता है।
विकल्पों में शामिल हैं:
- clientTools - client tools के लिए object definition, जिन्हें एजेंट invoke कर सकता है। जानकारी के लिए नीचे देखें।
- overrides - बातचीत सेटिंग्स के overrides के लिए object definition। जानकारी के लिए नीचे देखें।
- textOnly - क्या बातचीत सिर्फ़ टेक्स्ट मोड में चलनी चाहिए। जानकारी के लिए नीचे देखें।
- serverLocation - server location बताएं (
"us","eu-residency","in-residency","global")। डिफ़ॉल्ट"us"है।
Callbacks का ओवरव्यू
- onConnect - बातचीत का कनेक्शन स्थापित होने पर कॉल किया जाने वाला handler।
- onDisconnect - बातचीत का कनेक्शन समाप्त होने पर कॉल किया जाने वाला handler।
- onMessage - नया संदेश मिलने पर कॉल किया जाने वाला handler। ये यूज़र की आवाज़ के tentative या final transcriptions, LLM से तैयार जवाब या debug option सक्षम होने पर debug message हो सकते हैं।
- onError - error आने पर कॉल किया जाने वाला handler।
- onAudio - ऑडियो डेटा मिलने पर कॉल किया जाने वाला handler।
- onModeChange - बातचीत मोड बदलने पर कॉल किया जाने वाला handler (speaking/listening)।
- onStatusChange - कनेक्शन स्थिति बदलने पर कॉल किया जाने वाला handler।
- onCanSendFeedbackChange - feedback भेजने की क्षमता बदलने पर कॉल किया जाने वाला handler।
- onDebug - debug जानकारी उपलब्ध होने पर कॉल किया जाने वाला handler।
- onUnhandledClientToolCall - अनहैंडल्ड client tool call मिलने पर कॉल किया जाने वाला handler।
- onVadScore - voice activity detection score बदलने पर कॉल किया जाने वाला handler।
- onAudioAlignment - ऑडियो alignment डेटा मिलने पर कॉल किया जाने वाला handler, जो एजेंट की आवाज़ के लिए character-level timing जानकारी देता है।
- onAgentChatResponsePart - एजेंट का response text तैयार होने के दौरान start, delta और stop events के रूप में कॉल किया जाने वाला handler। टेक्स्ट-ओनली मोड में हमेशा भेजा जाता है; वॉइस बातचीत के लिए एजेंट के
client_eventsकॉन्फ़िगरेशन मेंagent_chat_response_partसक्षम करें।
Client Tools
Client tools, एजेंट को client-side functionality invoke करने देने का तरीका हैं। इनका उपयोग client में कार्रवाई शुरू करने के लिए किया जा सकता है, जैसे modal खोलना या यूज़र की ओर से API call करना।
Client tools की definition functions का एक object होती है और यह ElevenLabs UI में आपके कॉन्फ़िगरेशन के समान होनी चाहिए। वहां आप अलग-अलग tools को नाम और वर्णन दे सकते हैं, साथ ही एजेंट द्वारा पास किए जाने वाले parameters सेट कर सकते हैं।
अगर function कोई value return करता है, तो वह response के रूप में एजेंट को वापस भेजी जाती है।
एजेंट को response का इंतज़ार करने और उस पर प्रतिक्रिया देने के लिए tool को ElevenLabs UI में बातचीत block करने के लिए स्पष्ट रूप से सेट करना होगा। वरना एजेंट सफलता मानकर बातचीत जारी रखता है।
Client tools रजिस्टर करने के लिए अधिक React-idiomatic तरीके हेतु, useConversationClientTool देखें।
बातचीत overrides
आप बातचीत की कई सेटिंग्स override कर सकते हैं और अन्य यूज़र interactions के आधार पर उन्हें डायनामिक रूप से सेट कर सकते हैं।
हम विभिन्न सेटिंग्स override करने की सुविधा देते हैं। ये सेटिंग्स वैकल्पिक हैं और बातचीत के अनुभव को कस्टमाइज़ करने के लिए इस्तेमाल की जा सकती हैं।
ये सेटिंग्स उपलब्ध हैं:
सिर्फ़ टेक्स्ट
अगर आपका एजेंट सिर्फ़ टेक्स्ट मोड में चलने के लिए कॉन्फ़िगर है, यानी वह ऑडियो संदेश न भेजता है न पाता है, तो बातचीत का हल्का version इस्तेमाल करने के लिए आप इस flag का उपयोग कर सकते हैं। इस स्थिति में यूज़र से माइक्रोफ़ोन अनुमति नहीं मांगी जाएगी और कोई audio context नहीं बनाया जाएगा।
नियंत्रित स्थिति
आप hook options के ज़रिए बातचीत की स्थिति के कुछ पहलुओं को सीधे नियंत्रित कर सकते हैं:
डेटा रेज़िडेंसी
आप यह बता सकते हैं कि किस ElevenLabs server region से कनेक्ट करना है। अधिक जानकारी के लिए डेटा रेज़िडेंसी गाइड देखें।
Methods
startSession
startSession method कनेक्शन स्थापित करती है और ElevenLabs Agents एजेंट के साथ संवाद करने के लिए माइक्रोफ़ोन का उपयोग शुरू करती है। यह method एक options object स्वीकार करती है, जिसमें signedUrl, conversationToken या agentId ज़रूरी है।
Agent ID, ElevenLabs UI से प्राप्त की जा सकती है।
हम यह भी सुझाव देते हैं कि बातचीत को अपने यूज़र्स से मैप करने के लिए आप अपने end user IDs पास करें।
कनेक्शन type, बातचीत के मोड के आधार पर अपने-आप तय होता है। वॉइस बातचीत
WebRTC इस्तेमाल करती है और टेक्स्ट-ओनली बातचीत डिफ़ॉल्ट रूप से WebSocket इस्तेमाल करती है। ज़रूरत पड़ने पर आप फिर भी
connectionType स्पष्ट रूप से बता सकते हैं।
Public agents (यानी जिन एजेंट्स में authentication सक्षम नहीं है) के लिए सिर्फ़ agentId ज़रूरी है।
अगर बातचीत के लिए authorization चाहिए, तो WebSocket कनेक्शन के लिए signed links या WebRTC कनेक्शन के लिए conversation token बनाने हेतु REST API इस्तेमाल करें।
startSession, conversationId resolve करने वाला promise return करती है। यह value एक globally unique conversation ID है, जिसका इस्तेमाल आप अलग-अलग बातचीत की पहचान के लिए कर सकते हैं।
WebSocket कनेक्शन
WebRTC कनेक्शन
endSession
बातचीत को मैन्युअल रूप से समाप्त करने की method। यह method disconnect होकर बातचीत समाप्त कर देगी।
setVolume
बातचीत का output volume सेट करती है। 0 और 1 के बीच के volume field वाला object स्वीकार करती है।
sendUserMessage
एजेंट को टेक्स्ट संदेश भेजती है।
इसका उपयोग यूज़र को माइक्रोफ़ोन इस्तेमाल करने के बजाय संदेश टाइप करने देने के लिए किया जा सकता है। sendContextualUpdate के विपरीत, इसे यूज़र संदेश माना जाएगा और यह एजेंट को बातचीत में अपनी बारी लेने के लिए कहेगा।
sendContextualUpdate
एजेंट को ऐसी contextual जानकारी भेजती है जो response trigger नहीं करेगी।
sendFeedback
बातचीत की गुणवत्ता पर feedback दें। इससे एजेंट की performance बेहतर बनाने में मदद मिलती है।
sendUserActivity
रुकावटों को रोकने के लिए एजेंट को यूज़र activity के बारे में सूचित करती है। यह तब उपयोगी है जब यूज़र ऐप का सक्रिय रूप से उपयोग कर रहा हो और एजेंट को बोलना रोकना चाहिए, जैसे जब यूज़र चैट में टाइप कर रहा हो।
यह signal मिलने के बाद एजेंट करीब 2 सेकंड तक बोलना रोक देगा।
changeInputDevice
सक्रिय वॉइस बातचीत के दौरान ऑडियो input device बदलें। यह method सिर्फ़ वॉइस बातचीत के लिए उपलब्ध है।
changeOutputDevice
सक्रिय वॉइस बातचीत के दौरान ऑडियो output device बदलें। यह method सिर्फ़ वॉइस बातचीत के लिए उपलब्ध है।
डिवाइस switching सिर्फ़ वॉइस बातचीत के लिए काम करती है। अगर कोई खास deviceId नहीं दिया गया है, तो
browser अपने डिफ़ॉल्ट device selection का उपयोग करेगा। आप उपलब्ध डिवाइस को
MediaDevices.enumerateDevices()
API से सूचीबद्ध कर सकते हैं।
getId
मौजूदा conversation ID return करती है।
getInputVolume / getOutputVolume
ऐसी methods जो मौजूदा input/output volume levels (0-1 scale) return करती हैं।
getInputByteFrequencyData / getOutputByteFrequencyData
ऐसी methods जो मौजूदा input/output frequency data वाले Uint8Arrays return करती हैं। अधिक जानकारी के लिए AnalyserNode.getByteFrequencyData देखें।
ये methods सिर्फ़ वॉइस बातचीत के लिए उपलब्ध हैं। WebRTC मोड में ऑडियो को hardcoded रूप से
pcm_48000 इस्तेमाल करने के लिए सेट किया गया है, इसलिए return किए गए डेटा का उपयोग करने वाला कोई भी visualization
WebSocket कनेक्शनों से अलग patterns दिखा सकता है।
sendMCPToolApprovalResult
MCP (Model Context Protocol) tool calls के लिए approval result भेजती है।
Return values
ऊपर दी गई methods के अलावा, useConversation यह reactive state return करती है:
- status - मौजूदा कनेक्शन स्थिति (
"disconnected","connecting","connected")। - isSpeaking - क्या एजेंट इस समय बोल रहा है।
- isListening - क्या एजेंट इस समय सुन रहा है।
- mode - मौजूदा बातचीत मोड (
"speaking"या"listening")। - isMuted - क्या माइक्रोफ़ोन इस समय म्यूट है।
- setMuted - माइक्रोफ़ोन को म्यूट/अनम्यूट करने का function।
- canSendFeedback - क्या मौजूदा बातचीत के लिए feedback दिया जा सकता है।
- message - बातचीत का नवीनतम संदेश।
Granular Hooks
बेहतर render performance के लिए useConversation के बजाय इन hooks का उपयोग करें। हर hook केवल अपनी state के खास हिस्से को subscribe करता है, इसलिए components सिर्फ़ तभी फिर से render होते हैं जब उनके इस्तेमाल का डेटा बदलता है।
सभी granular hooks के लिए ऊपर ConversationProvider होना ज़रूरी है।
useConversationControls
बातचीत को नियंत्रित करने के लिए action methods return करता है। यह hook re-renders नहीं कराता, क्योंकि यह केवल stable function references देता है।
useConversationStatus
मौजूदा कनेक्शन स्थिति और वैकल्पिक status message return करता है।
useConversationInput
म्यूट स्थिति और माइक्रोफ़ोन टॉगल करने के लिए setter return करता है।
useConversationMode
एजेंट के लिए speaking/listening state return करता है।
useConversationFeedback
feedback उपलब्धता और feedback सबमिट करने का method return करता है।
useRawConversation
raw conversation instance return करता है। यह उन्नत उपयोग के मामलों के लिए एक escape hatch है, जहां आपको underlying VoiceConversation या TextConversation object का सीधा access चाहिए।
useConversationClientTool
React कंपोनेंट्स से क्लाइंट टूल्स को डायनामिक रूप से रजिस्टर करने के लिए एक हुक। कंपोनेंट अनमाउंट होने पर टूल्स अपने-आप अनरजिस्टर हो जाते हैं।
यह तब उपयोगी है, जब किसी टूल के हैंडलर को कंपोनेंट स्टेट या props का एक्सेस चाहिए, जो प्रोवाइडर लेवल पर उपलब्ध नहीं हैं।
यह हुक हमेशा हैंडलर की नवीनतम closure वैल्यू का इस्तेमाल करता है, इसलिए आपको पुराने स्टेट की चिंता करने की ज़रूरत नहीं है।