हिंडोला दिखाने के इरादे से हिंडोला को दिखाने के इरादे से विकल्प के अलावा एक और पैरामीटर कैसे पारित करें?

Aug 17 2020

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

हिंडोला इरादे का उदाहरण,

app.intent('search', async (conv,params) => {
 conv.ask(`Choose one item`,new Carousel({
   title :`Search results`,
   items : carouselItems,
        }));
});

हैंडलर इरादे का उदाहरण,

app.intent('handle_carousel', async (conv,params,option) => {
const key = parseInt(option);
});

हालांकि, चयनित विकल्प की कुंजी के साथ मैं हिंडोला इरादे से हिंडोला इरादे से एक और पूर्णांक पास करना चाहता हूं। यह अन्य पूर्णांक प्रत्येक विकल्प के लिए अलग है। आप अन्य पूर्णांक को एक आईडी के रूप में सोच सकते हैं, यह प्रत्येक विकल्प के लिए अद्वितीय है। मैं उसे कैसे प्राप्त कर सकता हूं?

जवाब

1 Prisoner Aug 17 2020 at 19:26

आपके पास अतिरिक्त डेटा पास करने के लिए कुछ दृष्टिकोण हैं जो प्रत्येक कुंजी के साथ जुड़े होने चाहिए।

पहला है, जैसा कि आप अपने जवाब में नोट करते हैं, उस मैपिंग को एक तालिका में संग्रहीत करते हैं जो सत्र डेटा (या तो conv.dataया डायलॉगफ़्लो संदर्भ का उपयोग करके ) के भाग के रूप में संग्रहीत किया जाता है ।

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

इसलिए, उदाहरण के लिए, आप कुंजी को एन्कोड फ़ंक्शन के परिणामस्वरूप बना सकते हैं

function encodeOptionKey( key, otherValue ){
  return `${key}:${otherValue}`
}

और फिर इसे एक फ़ंक्शन के साथ डिकोड करें जैसे कि

function decodeOptionKey( option ){
  const [key,otherValue] = option.split(':');
  return {
    key,
    otherValue
  }
}

और अपने हैंडलर से कुछ इस तरह से कॉल करें

app.intent('handle_carousel', async (conv,params,option) => {
  const {key, otherValue} = decodeOptionKey( option );
  // ...
});
1 VaroOP Aug 17 2020 at 18:37

मैंने विभिन्न हिंडोला विकल्पों की चाबियों का एक नक्शा बनाया और संबंधित पैरामीटर जो मैं पास करना चाहता था, उस नक्शे को conv.data.store में सहेजा, जो कि क्रिया-पर-Google द्वारा प्रदान की गई वार्तालाप संग्रहण है। फिर मैंने उस नक्शे का उपयोग हिंडोला इरादे के लिए पारित होने वाले हिंडोला कुंजी से पैरामीटर प्राप्त करने के लिए किया।

हिंडोला इरादे में उदाहरण के लिए:

let map = {
keyofcarousel : option,
other_parameter : otherparam,
};

conv.data.store = map;

Then call conv.data.store in the handler intent.