कॉन्टेंट पर जाएं

ElevenAgents में इमेज और डॉक्युमेंट्स प्रोसेस करना

प्रकाशित
आखिरी बार अपडेट किया गया

सुनेंइस आर्टिकल को सुनें

एक साइट सुपरवाइज़र को जॉब साइट पर मटेरियल्स की कमी दिखती है। वह उसकी फोटो खींचता है, वह फोटो WhatsApp पर प्रोक्योरमेंट एजेंट को भेजता है, और वॉइस से डिलीवरी एड्रेस कन्फर्म करता है। एजेंट फोटो प्रोसेस करता है, पता लगाता है क्या कमी है, और तुरंत ऑर्डर कर देता है—ये सब एक ही बातचीत में। एंटरप्राइज़ वर्कफ़्लो में अक्सर ऐसा कॉन्टेक्स्ट होता है जो सिर्फ़ शब्दों से नहीं आ सकता। किसी रिक्वेस्ट को सुलझाने के लिए ज़रूरी जानकारी कभी-कभी डैमेज्ड आइटम की फोटो या पॉलिसी का PDF हो सकता है। उसे सीधे एजेंट को भेजना बातचीत को छोटा करता है और जल्दी समाधान देता है। जब कस्टमर दिखा सकता है, बताने की बजाय, तो एजेंट बिना चैनल बदले जल्दी ट्रबलशूट कर सकता है।Rohlik—यूरोप के सबसे बड़े ऑनलाइन ग्रॉसरी प्लेटफॉर्म्स में से एक—अपना एजेंट फोन, वेब, ऐप और WhatsApp पर छह भाषाओं में चलाता है और 90% कस्टमर सवाल खुद-ब-खुद हल करता है। मल्टीमोडल इनपुट वही रिज़ॉल्यूशन रेट उन मौकों पर भी देता है जब कस्टमर को बताने की बजाय दिखाना पड़ता है। ElevenAgents फाइल्स को फर्स्ट-क्लास इनपुट्स की तरह ट्रीट करता है, उसी एजेंट पर जो पहले से वॉइस, WhatsApp, वेब और मोबाइल संभाल रहा है। फाइल्स मॉडल तक नेटिव मैसेज के रूप में पहुँचती हैं, जिससे एक ही एजेंट हर इनपुट टाइप को एक ही बातचीत में संभाल सकता है।

इस पोस्ट में बताया गया है कि प्लेटफॉर्म पर मल्टीमोडैलिटी का क्या मतलब है, फाइल्स कस्टमर के डिवाइस से मॉडल के कॉन्टेक्स्ट तक कैसे जाती हैं, हर चैनल क्या सपोर्ट करता है, और जब कस्टमर लौटता है तो सेशन्स के बीच कॉन्टेक्स्ट कैसे बना रहता है।

चैनल्स और इनपुट्स

ElevenAgents उन्हीं चैनल्स के इर्द-गिर्द बना है जिन्हें एंटरप्राइज़ पहले से कस्टमर्स तक पहुँचने के लिए इस्तेमाल करते हैं: वेब और मोबाइल ऐप्स, उनका सपोर्ट प्लेटफॉर्म, फोन, SMS, ईमेल, WhatsApp और अन्य। एजेंट की सेटिंग (प्रॉम्प्ट, मॉडल, टूल्स, नॉलेज बेस, और वॉइस) एक बार तय होती है और सभी चैनल्स में शेयर होती है। हर चैनल में दो चीज़ें अलग होती हैं: ट्रांसपोर्ट लेयर और वह कौन-कौन से इनपुट टाइप्स सपोर्ट करता है। वेब और मोबाइल ऐप्स एम्बेडेबल विजेट, SDKs या Agents WebSocket से कनेक्ट होते हैं। टेलीफोनी बातचीतें नेटिव Twilio, SIP ट्रंकिंग या नेटिव websocket-बेस्ड इंटीग्रेशन से जुड़ती हैं। SMS नेटिव Twilio इंटीग्रेशन से कनेक्ट होता है। WhatsApp, WhatsApp Business अकाउंट इम्पोर्ट करके और एजेंट पर इंटीग्रेशन इनेबल करके जुड़ता है। एक ही एजेंट इन सभी ट्रांसपोर्ट्स पर एक साथ चल सकता है।

Sequence diagram showing a flow for attaching and sending files in a customer conversation using ElevenLabs API.

फाइल इनपुट्स (इमेज और PDF) अभी वेब, मोबाइल और WhatsApp पर सपोर्टेड हैं। इनपुट हैंडलिंग टाइप-ड्रिवन है, चैनल-ड्रिवन नहीं: एक फोटो और एक वॉइस नोट अगर एक ही WhatsApp सेशन में आते हैं, तो दोनों अलग-अलग पाइपलाइन से मॉडल तक पहुँचते हैं। चैनल या इनपुट टाइप चाहे जो भी हो, सभी इनपुट्स एक ही प्री-प्रोसेसिंग लेयर पर मिलते हैं, फिर नेटिव कॉन्टेक्स्ट के रूप में मॉडल को भेजे जाते हैं, जहाँ वे दो रास्तों में से एक पर जाते हैं।

इनपुट रिप्रेजेंटेशन: फाइल-बैक्ड vs. इनलाइन

इनपुट टाइप या चैनल चाहे जो भी हो, प्लेटफॉर्म हर इनपुट को मॉडल को भेजने से पहले दो इंटरनल रिप्रेजेंटेशन में से एक में नॉर्मलाइज़ करता है। यही क्लासिफिकेशन तय करता है कि इनपुट मॉडल के कॉन्टेक्स्ट विंडो में कैसे एन्कोड होगा और आपकी इंटीग्रेशन को ऊपर क्या संभालना है।

फाइल-बैक्ड इनपुट्स

इमेज और PDF मॉडल को नेटिव फाइल रेफरेंस के रूप में भेजे जाते हैं, न कि टेक्स्ट समरी के रूप में। प्लेटफॉर्म फाइल को स्टोर करता है, उसे एकfile_id देता है, और उस पहचान को यूज़र के टर्न से जोड़ता है। विज़न या डॉक्युमेंट-कैपेबल मॉडल को रॉ फाइल उसके कॉन्टेक्स्ट विंडो में मिलती है, न कि कोई डेराइव्ड रिप्रेजेंटेशन। इंटीग्रेशन की ज़रूरत सीधी है: अपलोड एंडपॉइंट से मिलाfile_id कैप्चर करें और उसे मैसेज पेलोड में शामिल करें। अगर मैसेजfile_id के बिना भेजा गया, तो मॉडल के पास फाइल का कोई रेफरेंस नहीं होगा, चाहे अपलोड सफल हुआ हो या नहीं। फाइल स्टोरेज बातचीत तक सीमित है। यानी, जो भी सेशन के बाद चाहिए (फाइल, एक्सट्रैक्टेड फील्ड्स, या स्ट्रक्चर्ड आउटपुट), उसे आपकी इंटीग्रेशन को अलग से संभालना होगा। ये तरीका चैनल और यूज़ केस के हिसाब से बदलता है।

इनलाइन

दूसरी रिप्रेजेंटेशन इनलाइन है और बाकी सब कुछ कवर करती है। वॉइस और वॉइस नोट्स ट्रांसक्राइब होते हैं। टाइप किया गया टेक्स्ट, ट्रांसक्राइब्ड स्पीच, WhatsApp लोकेशन पिन्स और कॉन्टैक्ट कार्ड्स—ये सब ट्रांसक्रिप्ट में प्लेन टेक्स्ट में नॉर्मलाइज़ हो जाते हैं, फिर मॉडल चलता है। लोकेशन पिन कोऑर्डिनेट्स और ऑप्शनल एड्रेस बन जाता है; कॉन्टैक्ट नाम और फोन नंबर बन जाता है। इनमें से कोई भी फाइल के रूप में स्टोर नहीं होता या फाइल रेफरेंस नहीं बनाता। ये इनपुट्स सीधे ट्रांसक्रिप्ट में रहते हैं।

ये फर्क क्यों मायने रखता है

ये डिवाइड तय करता है कि आपकी इंटीग्रेशन की मेहनत कहाँ लगेगी। इनलाइन रास्ते में बातचीत के दौरान आपको कुछ नहीं करना पड़ता: प्लेटफॉर्म इनपुट्स को टेक्स्ट में बदल देता है और वे सीधे ट्रांसक्रिप्ट में रहते हैं। फाइल-बैक्ड रास्ते में अलग इंटीग्रेशन सरफेस है। फाइल कंटेंट को मॉडल चलने से पहले टेक्स्ट में बदलने की बजाय, ऑर्केस्ट्रेटर रॉ फाइल को सीधे मॉडल के कॉन्टेक्स्ट विंडो में भेजता है। मॉडल फाइल की स्ट्रक्चर पर काम करता है, न कि डेराइव्ड टेक्स्ट या डिस्क्रिप्शन पर, जिससे स्पेशल रिलेशनशिप्स, विज़ुअल लेआउट और डॉक्युमेंट फॉर्मेटिंग बनी रहती है। ये फर्क समझकर, आगे की पोस्ट में इम्प्लीमेंटेशन बताया गया है: एजेंट कैसे सेट करें, फाइल्स हर चैनल से कैसे जाती हैं, और सेशन्स के बीच कॉन्टेक्स्ट कैसे ले जाएँ।

मल्टीमोडल इनपुट सेटअप करना

मल्टीमोडल इनपुट इनेबल करने के लिए वेब, मोबाइल और WhatsApp पर एक जैसी एजेंट सेटिंग से शुरू करें। इसके बाद, फाइल कैसे अपलोड होती है और आप उसे बाद में कैसे पाएँगे, ये चैनल पर निर्भर करता है।

फाइल इनपुट इनेबल करना

फाइल इनपुट चालू करने के लिए एजेंट सेटिंग में दो चीज़ें ज़रूरी हैं। सबसे पहले,conversation_config.conversation.file_input.enabled कोTrue पर सेट करें, या तो एजेंट बनाते समय API से याSettings > Advanced Settings > File Input में डैशबोर्ड पर। दूसरा, एजेंट को विज़न और डॉक्युमेंट-कैपेबल मॉडल से कॉन्फ़िगर करें। सिर्फ़ फ्लैग लगाने से कुछ नहीं होगा अगर मॉडल इमेज या डॉक्युमेंट ब्लॉक्स प्रोसेस नहीं कर सकता; दोनों सेट होने चाहिए।

SDK और WebSocket

वेब या मोबाइल पर फाइल इनपुट के लिए SDK पर बना कस्टम चैट क्लाइंट या रॉ Agents websocket कनेक्शन चाहिए। फ्लो तीनों में एक जैसा है, और सीक्वेंसिंग ज़रूरी है: फाइल पहले अपलोड होनी चाहिए, क्योंकि मैसेज पेलोड में उसी अपलोड से मिला आइडेंटिफायर रेफरेंस होता है।

पहले फाइल अपलोड करें:

from elevenlabs import ElevenLabs

client = ElevenLabs(api_key="YOUR_API_KEY")

response = client.conversational_ai.conversations.files.create(
    conversation_id="your_conversation_id",
    file=open("example_file.jpg", "rb"),
)

file_id = response.file_id  

पूरा रिक्वेस्ट और रिस्पॉन्स देखने के लिएfile upload देखें:

फिर कनेक्शन पर मैसेज भेजें जिसमें मिला हुआfile_id रेफरेंस हो:

	"type": "multimodal_message",
	"text": { 
		"type": "user_message"		"text": "What does this show?" 
	 },
	"file": { 
		"type": "file_input"		"file_id": "<file_id>" 
 	}
}

SDKs अपलोड और रेफरेंस स्टेप्स को एक ही कॉल में मैनेज कर लेते हैं, फाइल आइडेंटिफायर को अंदर ही हैंडल करते हैं। पूरा मैसेज फॉर्मेट देखने के लिएmultimodal_message स्पेक देखें। क्योंकि आपकी ऐप अपलोड करती है, फाइल उसी वक्त आपके पास होती है। अगर सिर्फ़ मौजूदा बातचीत के लिए चाहिए, तो अपलोड और आइडेंटिफायर रेफरेंस काफी है। अगर सेशन के बाद भी चाहिए, तो सबसे अच्छा तरीका है कि अपलोड के वक्त ही अपनी ऐप से स्टोर कर लें। बाद में पोस्ट-कॉल वेबहुक से भी फाइल मिल सकती है, जो सेशन्स के बीच कॉन्टेक्स्ट सेक्शन में बताया गया है।

WhatsApp

WhatsApp पर आपकी ऐप अपलोड में कोई रोल नहीं निभाती। जब कस्टमर इमेज, डॉक्युमेंट या स्टिकर भेजता है, फाइल पहले Meta के सर्वर पर जाती है। Meta, WhatsApp Business API वेबहुक के ज़रिए ElevenLabs को नोटिफाई करता है, और ElevenLabs आपके WhatsApp Business अकाउंट क्रेडेंशियल्स से फाइल सर्वर-टू-सर्वर डाउनलोड करता है, अपनी कॉपी स्टोर करता है, और उसे बातचीत में वैसे ही जोड़ता है जैसे वेब या SDK अपलोड में। एजेंट को यह मल्टीमोडल इनपुट के रूप में मिलता है और ट्रांसक्रिप्ट मेंfile_input इवेंट रिकॉर्ड होता है।

क्योंकि आपकी ऐप अपलोड को कभी हैंडल नहीं करती, उसके पास फाइल डायरेक्ट नहीं आती। वेब और मोबाइल की तरह अपलोड के वक्त कैप्चर करने का कोई तरीका नहीं है। फाइल आपके सिस्टम तकfile_url के ज़रिए पोस्ट-कॉल वेबहुक में पहुँचती है, जो ElevenLabs की स्टोर की गई कॉपी की लिंक होती है। Meta का मीडिया URL सिर्फ़ इनजेशन के लिए यूज़ होता है और कभी बाहर नहीं दिखता। रिट्रीवल के तरीके, जैसे डाउनलोड टाइमिंग लिमिट, सेशन्स के बीच कॉन्टेक्स्ट सेक्शन में बताए गए हैं।

Sequence diagram showing media handling from customer to ElevenLabs via WhatsApp.

WhatsApp पर कस्टमर चैट में फाइल भेजता है। ElevenLabs उसे Meta से लाता है, स्टोर करता है, और प्लेटफॉर्म साइड परfile_id जोड़ता है। यानी कोई क्लाइंट-साइड अपलोड स्टेप नहीं है। वेब और मोबाइल के उलट, आपकी ऐप POST/v1/convai/conversations/{id}/files नहीं कॉल करती याmultimodal_message WebSocket पर नहीं भेजती। ElevenLabs डिलीवरी, स्टोरेज और एजेंट टर्न संभालता है।

सेशन्स के बीच कॉन्टेक्स्ट ले जाना

ElevenAgents हर बातचीत को अलग-अलग प्रोसेस करता है। कस्टमर जो भेजता है, या एजेंट जो हल करता है, वह अपने-आप अगली बातचीत में नहीं जाता। एजेंट पूरी बातचीत का डेटा पोस्ट-कॉल वेबहुक से आपके सिस्टम को देता है, लेकिन बातचीतों के बीच की मेमोरी ElevenLabs के बाहर रहती है। ये कंटीन्युटी आपको संभालनी है।

ये आर्किटेक्चरल बाउंड्री सोच-समझकर डिज़ाइन करने लायक है। जिन बातचीतों में मल्टीमोडल इनपुट सबसे ज़्यादा मायने रखता है (जैसे कस्टमर डैमेज्ड आइटम की फोटो भेजता है, पॉलिसी डॉक्युमेंट अपलोड करता है, लोकेशन शेयर करता है), वे अक्सर एक सेशन में हल नहीं होतीं। अगर कस्टमर टूटा पार्ट भेजकर कॉलबैक शेड्यूल करता है, तो वह उम्मीद करता है कि एजेंट अगली बार फोटो याद रखेगा। बिना एक्सप्लिसिट कॉन्टेक्स्ट मैनेजमेंट के, एजेंट हर बार जीरो से शुरू करता है और कस्टमर को दोहराना पड़ता है। इसका हल दो हिस्सों में है। जब बातचीत खत्म होती है, पोस्ट-कॉल वेबहुक ट्रांसक्रिप्ट, एनालिसिस रिज़ल्ट, आपके डिफाइन किए स्ट्रक्चर्ड डेटा फील्ड्स, और सेशन में आई फाइल्स के URLs देता है। आपका बैकएंड ज़रूरी चीज़ें कस्टमर आइडेंटिफायर (जैसे फोन नंबर, यूज़र ID, या अकाउंट की) के साथ स्टोर करता है। जब वही कस्टमर लौटता है, आपकी ऐप सेशन शुरू होते ही स्टोर किया गया कॉन्टेक्स्ट डायनामिक वेरिएबल्स के ज़रिए भेजती है, जिससे एजेंट पहले से जानकार बातचीत शुरू करता है। खासकर फाइल-बैक्ड इनपुट्स के लिए, वेबहुक पेलोड में फाइल URL ElevenLabs की स्टोर की गई कॉपी की ओर इशारा करता है और बातचीत खत्म होने के बाद वही रिट्रीवल रास्ता है। प्लेटफॉर्म की कॉपी सेशन तक सीमित है, तो अगर आपको फाइल भविष्य की बातचीत या अपने सिस्टम में चाहिए, तो वेबहुक पेलोड से डाउनलोड कर लें, विंडो बंद होने से पहले। कितनी जल्दी आपको डाउनलोड करना है, ये रिटेंशन पॉलिसी पर निर्भर करता है, जो रेफरेंस डाक्यूमेंटेशन में है। वेबहुक स्टेट बाहर ले जाता है। डायनामिक वेरिएबल्स वापस लाते हैं। बीच का सब कुछ आपके सिस्टम की जिम्मेदारी है, और यहीं असली इंटीग्रेशन वर्क है, खासकर जब कस्टमर लौटते हैं, एस्केलेट करते हैं या बीच में बातचीत जारी रखते हैं।

कॉन्टेक्स्ट इंजेक्ट करना चैनल पर निर्भर करता है

इंजेक्शन का तरीका चैनल के हिसाब से बदलता है, लेकिन पैटर्न एक जैसा है। टेलीफोनी में ElevenLabs आपकी सर्वर को कॉल कनेक्ट होने से पहले कॉल करता है, जिससे आप नंबर से कॉलर की पहचान कर सकते हैं और नाम, ऑर्डर ID या अकाउंट टियर जैसे डायनामिक वेरिएबल्स एजेंट के बोलने से पहले भेज सकते हैं। WhatsApp पर हर इनबाउंड मैसेज पर प्री-मैसेज वेबहुक फायर होता है, जिससे आप अपनी सिस्टम से पहचान और बिज़नेस कॉन्टेक्स्ट जोड़ सकते हैं, एजेंट के प्रोसेस करने से पहले। बाकी चैनल्स में सेशन खुलते वक्त वही फील्ड्सconversation_initiation_client_data में भेजे जाते हैं। ElevenAgents अलग-अलग चैनल्स के सेशन्स को एक थ्रेड में नहीं जोड़ता। WhatsApp और वेब की बातचीतें अलग सेशन्स हैं, भले ही कस्टमर एक ही हो। लेकिन क्योंकि वेबहुक आउटपुट और डायनामिक वेरिएबल इंजेक्शन हर चैनल पर एक जैसा है, एक ही पर्सिस्टेंस लेयर सब संभाल सकती है। एक बार बनाएं, हर चैनल पर चलेगा। कॉन्टेक्स्ट इंजेक्शन टेक्स्ट-शेप्ड डेटा (नाम, ऑर्डर ID, समरी, स्ट्रक्चर्ड फील्ड्स) के लिए है। फाइल्स के लिए अलग तरीका चाहिए।

फाइल्स को आगे ले जाना

फाइल्स एक बातचीत तक सीमित रहती हैं और अपने-आप सेव नहीं होतीं। आगे क्या ले जाना है, ये इस पर निर्भर करता है कि अगली बातचीत को फाइल की जानकारी चाहिए या फाइल खुद। ज़्यादातर मामलों में सिर्फ़ जानकारी चाहिए। एजेंट अपलोड की गई फाइल को उसी टर्न पर समझता है, लेकिन वह समझ अपने-आप कहीं सेव नहीं होती। स्ट्रक्चर्ड आउटपुट पोस्ट-कॉल डेटा से आता है: ट्रांसक्रिप्ट, ट्रांसक्रिप्ट समरी, और आपके डिफाइन किए डेटा कलेक्शन फील्ड्स। अगर कस्टमर टूटी डोर सील की फोटो भेजता है और हफ्ते बाद क्लेम फॉलो-अप करता है, तो एजेंट को फोटो फिर से नहीं चाहिए। उसे बस पता होना चाहिए कि क्लेम टूटी डोर सील का है। आप ये पोस्ट-कॉल डेटा से निकालें, कस्टमर आइडेंटिफायर के साथ स्टोर करें, और लौटने पर डायनामिक वेरिएबल के रूप में भेजें। छोटा समरी या कुछ स्ट्रक्चर्ड फील्ड्स आमतौर पर काफी हैं।

अगर आपको ओरिजिनल फाइल चाहिए—अपने रिकॉर्ड्स, कंप्लायंस या डाउनस्ट्रीम सिस्टम्स के लिए—तो पोस्ट-कॉल वेबहुक ही रिट्रीवल रास्ता है। हर अपलोड की गई फाइल ट्रांसक्रिप्ट मेंfile_input इवेंट के रूप में आती है, जिसमें साइन किया हुआ फाइल URL होता है। ये URL पंद्रह मिनट के लिए वैलिड है, तो वेबहुक आते ही फाइल डाउनलोड और स्टोर कर लें, बाद के लिए न छोड़ें। अगर वो विंडो मिस हो जाए और बातचीत अभी भी है, तो GET conversation API से नया URL मिल सकता है।file_input कुछ मामलों में नहीं भी हो सकता, जैसे ज़ीरो-रिटेंशन मोड, तो हर फाइल-बैक्ड टर्न में URL की उम्मीद न करें।

यही पूरा लाइफसाइकल है: फाइल सेशन में आती है, मॉडल उस पर नेटिवली काम करता है, स्ट्रक्चर्ड आउटपुट वेबहुक से बाहर जाता है, और आपकी पर्सिस्टेंस लेयर तय करती है कि एजेंट अगली बार क्या जाने।

निष्कर्ष

एक ही एजेंट सेटिंग वेब, मोबाइल और WhatsApp पर इमेज और PDF स्वीकार करती है, हर चैनल के लिए अलग बिल्ड की ज़रूरत नहीं। फाइल्स नॉर्मलाइज़ होती हैं, टर्न से जुड़ती हैं, और मॉडल को नेटिव ब्लॉक्स के रूप में भेजी जाती हैं, टेक्स्ट समरी के रूप में नहीं—इससे स्पेशल लेआउट, विज़ुअल स्ट्रक्चर और डॉक्युमेंट फॉर्मेटिंग मॉडल तक सही-सलामत पहुँचती है। सेशन्स के बीच कॉन्टेक्स्ट हर चैनल पर एक जैसा रहता है: पोस्ट-कॉल वेबहुक स्टेट बाहर ले जाता है, डायनामिक वेरिएबल्स वापस लाते हैं।

अगर आप ElevenLabs Agents पर बना रहे हैं और चाहते हैं कि आपका एजेंट वॉइस और टेक्स्ट के साथ इमेज और डॉक्युमेंट्स से भी काम करे, तो मल्टीमोडल इनपुट इनेबल करें और हमें बताएं कि आपको कैसा लगा।

संबंधित लेख

उच्चतम गुणवत्ता वाले AI ऑडियो के साथ बनाएं