วิธีการส่งผ่านพารามิเตอร์อื่นนอกเหนือจากตัวเลือกจากจุดประสงค์ที่แสดงภาพหมุนไปยังจุดประสงค์ในการจัดการภาพหมุน?
ฉันใช้ความตั้งใจในการนำเสนอภาพหมุนให้กับผู้ใช้ก่อน เมื่อผู้ใช้คลิกที่ตัวเลือกใดตัวเลือกหนึ่งในภาพหมุนในจุดประสงค์ของตัวจัดการฉันจะได้รับคีย์ของรายการแบบหมุนที่ผู้ใช้เลือก
ตัวอย่างเจตนาภาพหมุน
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 ซึ่งจะไม่ซ้ำกันสำหรับแต่ละตัวเลือก ฉันจะบรรลุเป้าหมายนั้นได้อย่างไร?
คำตอบ
คุณมีแนวทางสองสามประการในการส่งข้อมูลเพิ่มเติมที่ควรเชื่อมโยงกับแต่ละคีย์
ประการแรกคือตามที่คุณทราบในคำตอบของคุณการจัดเก็บการแมปนั้นในตารางที่จัดเก็บเป็นส่วนหนึ่งของข้อมูลเซสชัน (ไม่ว่าจะใช้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 );
// ...
});
ฉันสร้างแผนที่ของคีย์ของตัวเลือกภาพหมุนต่างๆและพารามิเตอร์ที่เกี่ยวข้องที่ฉันต้องการส่งผ่านบันทึกแผนที่นั้นไว้ใน conv.data.store ซึ่งเป็นที่เก็บข้อมูลการสนทนาที่จัดทำโดย actions-on-google จากนั้นฉันใช้แผนที่นั้นเพื่อรับพารามิเตอร์จากคีย์ภาพหมุนที่ส่งผ่านไปยังจุดประสงค์ของตัวจัดการ
ตัวอย่างเช่นในเจตนาภาพหมุน:
let map = {
keyofcarousel : option,
other_parameter : otherparam,
};
conv.data.store = map;
จากนั้นเรียก conv.data.store ในจุดประสงค์ของตัวจัดการ