วิธีการส่งผ่านพารามิเตอร์อื่นนอกเหนือจากตัวเลือกจากจุดประสงค์ที่แสดงภาพหมุนไปยังจุดประสงค์ในการจัดการภาพหมุน?

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);
});

อย่างไรก็ตามพร้อมกับคีย์ของตัวเลือกที่เลือกฉันยังต้องการส่งจำนวนเต็มอื่นจากเจตนาภาพหมุนไปยังจุดประสงค์ของตัวจัดการ จำนวนเต็มอื่นนี้แตกต่างกันสำหรับแต่ละตัวเลือก คุณสามารถคิดว่าจำนวนเต็มอื่น ๆ เป็น ID ซึ่งจะไม่ซ้ำกันสำหรับแต่ละตัวเลือก ฉันจะบรรลุเป้าหมายนั้นได้อย่างไร?

คำตอบ

1 Prisoner Aug 17 2020 at 19:26

คุณมีแนวทางสองสามประการในการส่งข้อมูลเพิ่มเติมที่ควรเชื่อมโยงกับแต่ละคีย์

ประการแรกคือตามที่คุณทราบในคำตอบของคุณการจัดเก็บการแมปนั้นในตารางที่จัดเก็บเป็นส่วนหนึ่งของข้อมูลเซสชัน (ไม่ว่าจะใช้conv.dataหรือบริบทของ Dialogflow)

อีกประการหนึ่งคือการเข้ารหัสข้อมูลนั้นเป็นส่วนหนึ่งของคีย์ที่คุณรวมไว้ในแต่ละตัวเลือกจากนั้นถอดรหัสคีย์เมื่อคุณได้รับมันกลับคืนมา

ตัวอย่างเช่นคุณสามารถทำให้คีย์เป็นผลลัพธ์ของฟังก์ชันการเข้ารหัสเช่น

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 ซึ่งเป็นที่เก็บข้อมูลการสนทนาที่จัดทำโดย actions-on-google จากนั้นฉันใช้แผนที่นั้นเพื่อรับพารามิเตอร์จากคีย์ภาพหมุนที่ส่งผ่านไปยังจุดประสงค์ของตัวจัดการ

ตัวอย่างเช่นในเจตนาภาพหมุน:

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

conv.data.store = map;

จากนั้นเรียก conv.data.store ในจุดประสงค์ของตัวจัดการ