캐 러셀을 표시하는 인 텐트에서 캐 러셀을 처리하는 인 텐트로 옵션 이외의 매개 변수를 하나 더 전달하는 방법은 무엇입니까?

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

다양한 캐 러셀 옵션의 키와 전달하려는 해당 매개 변수의 맵을 만들고 해당 맵을 actions-on-google에서 제공하는 대화 저장소 인 conv.data.store에 저장했습니다. 그런 다음 해당 맵을 사용하여 핸들러 인 텐트로 전달되는 캐 러셀 키에서 매개 변수를 가져 왔습니다.

예를 들어 캐 러셀 인 텐트에서 :

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

conv.data.store = map;

그런 다음 핸들러 인 텐트에서 conv.data.store를 호출합니다.