मैंने एज़ूर बॉट एप्लिकेशन विकसित किया है, मैं अपने वेब एप्लिकेशन से एज़ूर चैटबॉट शुरू करने के लिए सीधी लाइन टोकन आधारित दृष्टिकोण का उपयोग कर रहा हूं। प्रलेखन के अनुसार टोकन एक घंटे के लिए वैध है और यह एक घंटे के बाद स्वतः समाप्त हो जाता है। टोकन समाप्त होने से पहले उसे ताज़ा किया जा सकता है। दो प्रश्न हैं।

  1. हमने देखा है कि चैट एक घंटे के बाद भी चल रही है, यह बिना किसी प्रभाव के सामान्य रूप से जारी है। तो 1 घंटे की समाप्ति का क्या मतलब है? क्या चल रही बातचीत के लिए टोकन को रीफ्रेश करने की कोई आवश्यकता है?

  2. क्या किसी अन्य क्लाइंट द्वारा उसी एक्सेस टोकन का पुन: उपयोग किया जा सकता है?

सादर

0
smith99 20 जिंदा 2021, 11:57

2 जवाब

सबसे बढ़िया उत्तर

आपकी विस्तृत प्रतिक्रिया के लिए धन्यवाद बिल। यह भी ठीक काम करता है। हमारे मामले में हम window.WebChat.renderWebChat का उपयोग कर रहे हैं। आप अपने कॉल में अपना टोकन पास कर सकते हैं। आंतरिक रूप से यह हर 15 मिनट में टोकन को रीफ्रेश करता है। कृपया उसी के लिए GitHub दस्तावेज़ देखें। टोकन हर 15 मिनट में ताज़ा हो जाता है, इसलिए यदि चैट 15 मिनट से अधिक समय तक चलती है तो टोकन की समाप्ति संभव नहीं है। दस्तावेज़ में टोकन के इस रिफ्रेश का उल्लेख नहीं किया गया है।

0
smith99 16 मार्च 2021, 14:20

आपको केवल वेबचैट सत्र के प्रतिपादन के लिए टोकन की आवश्यकता है। इस प्रकार एक बार वेबचैट खुलने के बाद, आपको टोकन की आवश्यकता नहीं है और आपकी बातचीत बिना किसी समस्या के 1 घंटे से अधिक समय तक चल सकती है। मुझे लगता है कि आप एक घंटे के भीतर एक नया वेबचैट सत्र शुरू करने के लिए टोकन का पुन: उपयोग कर सकते हैं, या इसे उससे आगे उपयोग करने के लिए रीफ्रेश कर सकते हैं, लेकिन यह अनावश्यक लगता है जब आप एक और टोकन उत्पन्न कर सकते हैं। साथ ही, आप लगभग निश्चित रूप से टोकन अनुरोध के मुख्य भाग में उपयोगकर्ता विशेषता पास करना चाहेंगे ताकि आप उपयोगकर्ता स्थिति से जानकारी संग्रहीत (और सही ढंग से पुनर्प्राप्त) कर सकें। जाहिर है आप उस मामले में अन्य ग्राहकों के लिए इस टोकन का उपयोग नहीं करना चाहेंगे। मुझे लगता है कि यदि आप अपने बॉट में उपयोगकर्ता स्थिति का उपयोग नहीं कर रहे हैं तो आप इसका पुन: उपयोग कर सकते हैं, लेकिन मैं इसकी अनुशंसा नहीं करता और फिर से मुझे लगता है कि यह इस तरह से और अधिक काम करेगा।

मुझे लगता है कि आपके पास पहले से ही इस सेट में से कुछ है, लेकिन यहां बताया गया है कि मैं अपने बॉट में टोकन बनाने के लिए एंडपॉइंट कैसे बना रहा हूं:

server.post('/directline/token', async (req, res) => {

    try {
        var body = {User:{Id:req.body.userId}};
        const response = await request({
            url: 'https://directline.botframework.com/v3/directline/tokens/generate',
            method: 'POST',
            headers: { Authorization: `Bearer ${process.env.DIRECTLINE_SECRET}`},
            json: body,
            rejectUnauthorized: false,
            timeout: 10000
        });
        const token = response.token;
        res.setHeader('Content-Type', 'text/plain');
        res.writeHead(200);
        res.write(token);
        res.end();
    } catch(err) {
        console.log(err);
        res.setHeader('Content-Type', 'text/plain');
        res.writeHead(500);
        res.write('Call to retrieve token from Direct Line failed');
        res.end();
    }
})

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

    const response = await fetch('https://YOURAPPSERVICE.azurewebsites.net/directline/token', {
        method: 'POST',
        headers: {'Content-Type':'application/json'},
        body: JSON.stringify({userId:userID})
    });
    const token = await response.text();

अनुरोध का मुख्य भाग JSON स्ट्रिंग होना चाहिए। उपयोगकर्ता आईडी केवल एक कुकी है जिसे वेबपृष्ठ पुनर्प्राप्त करता है और/या बॉट के प्रस्तुत होने से पहले सेट करता है। Fetch एक स्ट्रीम के रूप में प्रतिक्रिया देता है, इसलिए आपको इसे .text() या .json() का उपयोग करके परिवर्तित करने की आवश्यकता है, इस पर निर्भर करता है कि आप अपने बॉट एंडपॉइंट से प्रतिक्रिया कैसे भेज रहे हैं (मैंने .text() का उपयोग किया था। , यदि आप JSON का उपयोग करना चाहते हैं, तो आपको पाठ के बजाय इसे वापस करने के लिए अपना टोकन समापन बिंदु सेट करना होगा जैसा कि मैंने ऊपर किया था)। आपको fetch और response.text() दोनों की प्रतीक्षा करनी होगी। वेबचैट परिनियोजित करने के लिए मेरी पूरी स्क्रिप्ट एक एसिंक्स फ़ंक्शन के भीतर है।

0
billoverton 2 फरवरी 2021, 22:39