캐 러셀을 표시하는 인 텐트에서 캐 러셀을 처리하는 인 텐트로 옵션 이외의 매개 변수를 하나 더 전달하는 방법은 무엇입니까?
먼저 사용자에게 캐 러셀을 표시하는 인 텐트를 사용하고 있습니다. 사용자가 캐 러셀의 옵션 중 하나를 클릭하면 핸들러 인 텐트에서 사용자가 선택한 캐 러셀 항목의 키를 얻습니다.
캐 러셀 의도의 예,
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 );
// ...
});
다양한 캐 러셀 옵션의 키와 전달하려는 해당 매개 변수의 맵을 만들고 해당 맵을 actions-on-google에서 제공하는 대화 저장소 인 conv.data.store에 저장했습니다. 그런 다음 해당 맵을 사용하여 핸들러 인 텐트로 전달되는 캐 러셀 키에서 매개 변수를 가져 왔습니다.
예를 들어 캐 러셀 인 텐트에서 :
let map = {
keyofcarousel : option,
other_parameter : otherparam,
};
conv.data.store = map;
그런 다음 핸들러 인 텐트에서 conv.data.store를 호출합니다.