如何从显示轮播的意图向处理轮播的意图传递一个除选项之外的参数?

How to pass one more parameter other than option from the intent showing the carousel to the intent handling the carousel?

我正在使用意图首先向用户展示轮播。 当用户单击轮播中的选项之一时,在处理程序意图中,我获得了用户选择的轮播项目的键。

轮播意图示例,

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.store中,这是actions-on-google提供的对话存储。然后我使用该映射从传递给处理程序意图的轮播键中获取参数。

例如在轮播意图中:

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

conv.data.store = map;

然后在处理程序意图中调用 conv.data.store。

您有几种方法可以传递应与每个键关联的附加数据。

第一个是,正如您在回答中指出的那样,将该映射存储在作为会话数据的一部分存储的 table 中(使用 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 );
  // ...
});