Amazon IVS के साथ ऑन-डिमांड लाइव स्ट्रीम प्लेबैक (3 भाग श्रृंखला) |
---|
2 Amazon IVS चैट लॉगिंग के साथ वेब चैट संदेशों को कैसे संग्रहित करें |
अपनी पिछली पोस्ट में, हमने देखा कि कैसे Amazon इंटरएक्टिव वीडियो सर्विस (Amazon IVS) की लाइव स्ट्रीम को Amazon Simple Storage Service (Amazon S3) बकेट में ऑटो-रिकॉर्ड किया जाए। यह सुविधा उपयोगकर्ता जनित सामग्री (UGC) प्लेटफ़ॉर्म के लिए एक शक्तिशाली उपकरण है क्योंकि यह किसी एप्लिकेशन में पिछली लाइव स्ट्रीम को ऑन-डिमांड देखने की सुविधा प्रदान करने का पहला चरण है। लेकिन स्ट्रीम के साथ-साथ होने वाली इंटरएक्टिव चैट के पूर्ण संदर्भ के बिना लाइव स्ट्रीम का रीप्ले अधूरा है। इस पोस्ट में, हम Amazon IVS चैट संदेशों को लॉग करना सीखकर पूर्ण ऑन-डिमांड अनुभव प्रदान करने के लिए अगला कदम उठाएंगे।
अमेज़ॅन एस 3 के लिए ऑटो-रिकॉर्डिंग को रिकॉर्डिंग कॉन्फ़िगरेशन की आवश्यकता के समान, चैट लॉगिंग को भी एक कॉन्फ़िगरेशन की आवश्यकता होती है जो चैट रूम के लिए आवश्यक विवरण को परिभाषित करती है। ध्यान रखें कि लॉगिंग गंतव्यों की आपकी पसंद के आधार पर आपको अतिरिक्त IAM अनुमतियों की भी आवश्यकता हो सकती है।
अमेज़ॅन आईवीएस कंसोल के साथ लॉगिंग कॉन्फ़िगरेशन बनाने के लिए, बाएं साइडबार में लॉगिंग कॉन्फ़िगरेशन पर क्लिक करें।
लॉगिंग कॉन्फ़िगरेशन सूची पृष्ठ पर, लॉगिंग कॉन्फ़िगरेशन बनाएँ पर क्लिक करें।
Amazon IVS चैट लॉगिंग लॉग किए गए चैट संदेशों के संग्रहण के लिए कई गंतव्य प्रदान करता है। हम आपके चैट लॉग्स के लिए स्टोरेज डेस्टिनेशन के रूप में Amazon CloudWatch, Amazon Kinesis Data Firehose, या Amazon S3 में से चुन सकते हैं। मैं व्यक्तिगत रूप से क्लाउडवॉच को सबसे सुविधाजनक गंतव्य मानता हूं क्योंकि मैं क्लाउडवॉच एसडीके के माध्यम से चैट संदेशों को आसानी से प्राप्त कर सकता हूं, तो चलिए इस डेमो के लिए इसका उपयोग करते हैं। यदि आप अपने आवेदन में गंतव्य के रूप में Amazon Kinesis Data Firehose या Amazon S3 का उपयोग करना चाहते हैं, तो दस्तावेज़ देखें।
नोट : चैट संदेश पोस्ट किए जाने और आपके लॉगिंग गंतव्य पर दिखाई देने के बीच थोड़ा विलंब हो सकता है। Amazon S3 के लिए, विलंब 5 मिनट तक हो सकता है, और Amazon CloudWatch और Amazon Kinesis Data Firehose के लिए यह 10 सेकंड तक हो सकता है।
इस डेमो के लिए कॉन्फ़िगरेशन बनाने के लिए, लॉगिंग कॉन्फ़िगरेशन नाम दर्ज करें (#1), क्लाउडवॉच को गंतव्य के रूप में चुनें (#2), एक नया क्लाउडवॉच लॉग समूह बनाएं (#3) चुनें, और लॉग समूह नाम दर्ज करें (#4) .
कोई भी वैकल्पिक टैग दर्ज करें और फिर लॉगिंग कॉन्फ़िगरेशन बनाएँ पर क्लिक करें।
रिकॉर्डिंग कॉन्फ़िगरेशन की तरह, हम अपने लॉगिंग कॉन्फ़िगरेशन बनाने के लिए AWS SDK का लाभ उठा सकते हैं। चूंकि हम इस पोस्ट में क्लाउडवॉच में लॉग इन कर रहे हैं, इसलिए हमें लॉग समूह बनाने के लिए क्लाउडवॉच लॉग एसडीके का उपयोग करने की आवश्यकता होगी।
import { CloudWatchLogsClient, CreateLogGroupCommand } from "@aws-sdk/client-cloudwatch-logs"; const cloudWatchLogsClient = new CloudWatchLogsClient(); const createLogGroupInput = { logGroupName: 'ivs-demo-chat-logging-group', }; const createLogGroupRequest = new CreateLogGroupCommand(createLogGroupInput); const createLogGroupResponse = await cloudWatchLogsClient.send(createLogGroupRequest); console.log(createLogGroupResponse);
अब हम लॉगिंग कॉन्फ़िगरेशन ( डॉक्स ) बनाने के लिए Amazon IVS चैट क्लाइंट का उपयोग कर सकते हैं ।
import { IvschatClient, CreateLoggingConfigurationCommand } from "@aws-sdk/client-ivschat"; const ivsChatClient = new IvschatClient(); const createLoggingConfigInput = { name: 'ivs-demo-chat-logging-config-sdk', destinationConfiguration: { cloudWatchLogs: { logGroupName: 'ivs-demo-chat-logging-group' } } }; const createLoggingConfigRequest = new CreateLoggingConfigurationCommand(createLoggingConfigInput); const createLoggingConfigResponse = await ivsChatClient.send(createLoggingConfigRequest); console.log(createLoggingConfigResponse);
यह निम्न के समान आउटपुट का उत्पादन करेगा:
{ "$metadata": { "httpStatusCode": 200, "requestId": "[redacted]", "cfId": "[redacted]", "attempts": 1, "totalRetryDelay": 0 }, "arn": "arn:aws:ivschat:us-east-1:[redacted]:logging-configuration/[redacted]", "createTime": "2023-01-09T14:48:35.358Z", "destinationConfiguration": { "cloudWatchLogs": { "logGroupName": "ivs-demo-chat-logging-group" } }, "id": "[redacted]", "name": "ivs-demo-chat-logging-config-sdk", "state": "ACTIVE", "tags": {}, "updateTime": "2023-01-09T14:48:35.485Z" }
हम AWS CLI के माध्यम से वैकल्पिक रूप से लॉगिंग कॉन्फ़िगरेशन भी बना सकते हैं। दोबारा, हमें क्लाउडवॉच लॉग समूह बनाना होगा, फिर नए लॉग समूह का नाम चैट लॉगिंग कॉन्फ़िगरेशन में पास करना होगा।
$ aws logs \ create-log-group \ --log-group-name ivs-demo-logging-config-log-group $ aws ivschat \ create-logging-configuration \ --name ivs-demo-logging-config \ --destination-configuration cloudWatchLogs={logGroupName=ivs-demo-logging-config-log-group}
अब हम लॉगिंग कॉन्फ़िगरेशन को मौजूदा Amazon IVS चैट रूम से जोड़ सकते हैं। बाएं साइडबार में चैट के अंतर्गत कमरे चुनें, वह कमरा चुनें जिसके साथ आप कॉन्फ़िगरेशन को संबद्ध करना चाहते हैं, और फिर संपादित करें पर क्लिक करें।
कक्ष संपादन पृष्ठ पर, नीचे स्क्रॉल करें और स्वचालित रूप से संदेश और ईवेंट लॉग करें (#1) का चयन करें। लॉगिंग कॉन्फ़िगरेशन ड्रॉपडाउन (#2) में, हमारे द्वारा ऊपर बनाए गए कॉन्फ़िगरेशन को खोजें और संबद्ध करें। ध्यान दें कि आप एक कमरे के साथ कई विन्यासों को जोड़ सकते हैं, इसलिए यदि आप Amazon Kinesis Data Firehose या Amazon S3 में भी लॉग इन करना चाहते हैं, तो आप अलग-अलग विन्यास बना सकते हैं और उन्हें अपने कमरे से जोड़ सकते हैं। यह भी ध्यान दें कि आप लॉगिंग कॉन्फ़िगरेशन बनाएं बटन (#3) पर क्लिक करके सीधे एडिट रूम पेज से एकदम नया कॉन्फिगरेशन बना सकते हैं।
AWS SDK के माध्यम से मौजूदा Amazon IVS चैट रूम के साथ लॉगिंग कॉन्फ़िगरेशन को संबद्ध करना
उत्पादन में, आप अपने लॉगिंग कॉन्फ़िगरेशन को नए या मौजूदा चैट रूम से जोड़ने के लिए एसडीके का उपयोग कर सकते हैं। ऐसा करने के लिए, CreateRoomCommand
( docs ) या UpdateRoomCommand
( docs ) का उपयोग करें। चैट लॉगिंग कॉन्फ़िगरेशन के साथ मौजूदा चैट रूम को अपडेट करने का एक उदाहरण यहां दिया गया है। अपेक्षित रूप से, हमें ARN को चैट रूम के identifier
के रूप में पास करना होगा, और किसी भी/सभी चैट लॉगिंग कॉन्फ़िगरेशन ARNs को एक सरणी में loggingConfigurationIdentifiers
में पास करना होगा।
import { IvschatClient, UpdateRoomCommand } from "@aws-sdk/client-ivschat"; const ivsChatClient = new IvschatClient(); const updateChatRoomInput = { identifier: 'arn:aws:ivschat:us-east-1:[redacted]:room/[redacted]', loggingConfigurationIdentifiers: [ 'arn:aws:ivschat:us-east-1:v:logging-configuration/[redacted]', ] }; const updateChatRoomRequest = new UpdateRoomCommand(updateChatRoomInput); const updateChatRoomResponse = await ivsChatClient.send(updateChatRoomRequest); console.log(updateChatRoomResponse);
नोट: आप चैट रूम के लिए एकाधिक लॉगिंग कॉन्फ़िगरेशन निर्दिष्ट कर सकते हैं। यदि वांछित हो, तो इससे आप एक से अधिक गंतव्यों का उपयोग कर सकते हैं। SDK के माध्यम से
UpdateRoomCommand
को भेजे गए चैट लॉगिंग आइडेंटिफ़ायर की सरणी किसी भी मौजूदा आइडेंटिफ़ायर को ओवरराइट कर देगी, इसलिए यदि आप एक अतिरिक्त कॉन्फ़िगरेशन जोड़ रहे हैं, तो उन्हें हटाने से बचने के लिए किसी भी मौजूदा कॉन्फ़िगरेशन ARN को शामिल करना सुनिश्चित करें।
इस बिंदु पर, अमेज़ॅन आईवीएस चैट रूम में पोस्ट किए गए सभी नए संदेशों को संलग्न लॉगिंग कॉन्फ़िगरेशन द्वारा निर्दिष्ट गंतव्य पर लॉग किया जाएगा। जैसा कि ऊपर उल्लेख किया गया है, क्लाउडवॉच के मामले में एक लॉगिंग डेस्टिनेशन के रूप में, हम एक निश्चित समय अवधि के लिए अपने चैट लॉग को पुनः प्राप्त करने के लिए क्लाउडवॉच एसडीके का उपयोग कर सकते हैं। ऐसा करने के लिए, हमें logGroupName , प्रारंभ और समाप्ति टाइमस्टैम्प (यूनिक्स टाइमस्टैम्प प्रारूप में), और logStreamNames की आवश्यकता है। LogStreamName प्रारूप में होगा: aws/IVSChatLogs/1.0/room_[suffix of chat room ARN]
तो arn:aws:ivschat:us-east-1:[redacted]:room/0wgOPVl4ZRdu
ARN वाले चैट रूम के लिए, logStreamName aws/IVSChatLogs/1.0/room_0wgOPVl4ZRdu
होगा।
यहाँ बताया गया है कि कैसे CloudWatchLogsClient
का उपयोग करके FilterLogEventsCommand
( दस्तावेज़ ) का निर्माण किया जाता है जिसका उपयोग चैट लॉग को पुनः प्राप्त करने के लिए किया जाता है।
import { CloudWatchLogsClient, FilterLogEventsCommand } from "@aws-sdk/client-cloudwatch-logs"; const cloudwatchClient = new CloudWatchLogsClient(); const filterLogEventsInput = { logGroupName: 'demo-chat-log-cw-group', logStreamNames: ['aws/IVSChatLogs/1.0/room_0wgOPVl4ZRdu'], startTime: 1672929210000, endTime: 1672929330000, }; const filterLogEventsRequest = new FilterLogEventsCommand(filterLogEventsInput); const filterLogEventsResponse = await cloudwatchClient.send(filterLogEventsRequest); const events = filterLogEventsResponse.events.map(e => JSON.parse(e.message));
मुझे कैसे पता चलेगा कि किस प्रारंभ और समाप्ति समय का उपयोग करना है? याद रखें कि किसी चैनल पर स्ट्रीमिंग करते समय Amazon IVS इवेंटब्रिज को ईवेंट भेजता है । यदि आप किसी विशिष्ट Amazon IVS लाइव स्ट्रीम के लिए चैट लॉग पुनर्प्राप्त करने का प्रयास कर रहे हैं, तो आप स्ट्रीम प्रारंभ और समाप्ति समय का उपयोग कर सकते हैं।
ध्यान रखें, कि FilterLogEventsCommand
अनंत संख्या में ईवेंट नहीं लौटा सकता है। यदि आपकी समयावधि में SDK से एकल प्रतिक्रिया में फिट होने की तुलना में अधिक ईवेंट हैं, तो आपको nextToken
के अस्तित्व के लिए FilterLogEventsCommandOutput
की जाँच करनी पड़ सकती है और पृष्ठांकन को संभालना पड़ सकता है। अधिक जानकारी के लिए एसडीके दस्तावेज़ देखें।
डिफ़ॉल्ट रूप से, यह ऑपरेशन उतने लॉग इवेंट लौटाता है जितने 1 एमबी (10,000 लॉग इवेंट तक) या निर्दिष्ट समय सीमा के भीतर पाए जाने वाले सभी इवेंट में फिट हो सकते हैं। यदि परिणामों में एक टोकन शामिल है, तो इसका मतलब है कि अधिक लॉग इवेंट उपलब्ध हैं। बाद की कॉल में टोकन निर्दिष्ट करके आप अतिरिक्त परिणाम प्राप्त कर सकते हैं। टोकन के माध्यम से अधिक लॉग इवेंट उपलब्ध होने पर यह ऑपरेशन खाली परिणाम लौटा सकता है।
इस बिंदु पर हम चैट लॉग के साथ जो चाहें कर सकते हैं। याद रखें, चैट लॉगिंग Amazon IVS चैट रूम में पोस्ट की गई सभी घटनाओं को लॉग करेगा, जिसमें कस्टम ईवेंट और चैट मॉडरेशन से संबंधित ईवेंट शामिल हैं। अगर हम चैट स्ट्रीम को फिर से चलाना चाहते हैं, तो हमें मॉडरेट किए गए संदेशों को साफ़ करने और संदेशों की "पुनः चलाने योग्य" स्ट्रीम बनाने के लिए शायद ईवेंट को थोड़ा सा पार्स करने की आवश्यकता होगी।
चैट मॉडरेट करने के बारे में अधिक जानकारी : यदि आपने उन्हें अभी तक नहीं पढ़ा है, तो Amazon IVS चैट के साथ स्वचालित और मैन्युअल चैट मॉडरेशन पर मेरे ब्लॉग पोस्ट देखें।
लॉग किए गए ईवेंट को पार्स करने के लिए एक फ़ंक्शन ऐसा दिखाई दे सकता है। आपकी माइलेज भिन्न हो सकती है!
const parseEvents = (events) => { let parsedEvents = []; events.forEach(e => { switch (e.type) { case 'MESSAGE': parsedEvents.push(e); break; case 'EVENT': if (e.payload.EventName === 'aws:DELETE_MESSAGE') { const existingEventIdx = parsedEvents.findIndex(parsedEvent => { return parsedEvent.payload.Id === e.payload.Attributes.MessageID }); if (existingEventIdx > -1) { parsedEvents.splice(existingEventIdx, 1); } } break; } }); return parsedEvents; };
यह फ़ंक्शन चैट लॉग से हटाए गए मॉडरेट संदेशों के साथ चैट रीप्ले उद्देश्यों के लिए उपयुक्त एक सरणी लौटाएगा। इवेंट स्ट्रीम कैसी दिख सकती है, इसका एक छोटा सा उदाहरण यहां दिया गया है।
[ { "event_timestamp": "2023-01-05T14:33:32.894Z", "type": "MESSAGE", "payload": { "Type": "MESSAGE", "Id": "WhO6MW6iRdS5", "RequestId": "", "Attributes": { "username": "gleningp" }, "Content": "bbiab!", "SendTime": "2023-01-05T14:33:32.894089757Z", "Sender": { "UserId": "75758272-f3f2-4f65-83c5-9b8f144116b8", "Attributes": {} } }, "version": "1.0" }, { "event_timestamp": "2023-01-05T14:33:39.896Z", "type": "MESSAGE", "payload": { "Type": "MESSAGE", "Id": "VwEPwPV74GN3", "RequestId": "", "Attributes": { "username": "rpeirazzia" }, "Content": "perfect", "SendTime": "2023-01-05T14:33:39.896519733Z", "Sender": { "UserId": "704D6BF8-22D2-4A52-B6A7-BDEFB115ECE5", "Attributes": {} } }, "version": "1.0" }, { "event_timestamp": "2023-01-05T14:33:47.330Z", "type": "MESSAGE", "payload": { "Type": "MESSAGE", "Id": "00kqu1sPa6dF", "RequestId": "", "Attributes": { "username": "jmycroft2" }, "Content": "🔥🔥🔥", "SendTime": "2023-01-05T14:33:47.330983449Z", "Sender": { "UserId": "2F12AA2D-DF65-42CF-AE99-133A5A06F7B4", "Attributes": {} } }, "version": "1.0" } ]
इस पोस्ट में, हमने सीखा कि Amazon IVS चैट रूम में पोस्ट किए गए संदेशों को कैसे लॉग करना है। हमारी अगली पोस्ट में, हम एक उपयुक्त "ऑन-डिमांड" रिप्ले उपयोगकर्ता अनुभव बनाने के लिए एक एप्लिकेशन में ऑटो-रिकॉर्डेड लाइव स्ट्रीम और लॉग चैट संदेशों को एक साथ लाने पर ध्यान देंगे।