如何从显示轮播的意图向处理轮播的意图传递除选项以外的其他参数?

问题描述

我打算先将轮播展示给用户。 当用户单击轮播中的一个选项时,在处理程序意图中,我将获得用户选择的轮播项目的键。

轮播意图示例,

app.intent('search',async (conv,params) => {
 conv.ask(`Choose one item`,new Carousel({
   title :`Search results`,items : carouselItems,}));
});

处理程序意图示例,

app.intent('handle_carousel',params,option) => {
const key = parseInt(option);
});

但是,除了选择的选项的键,我还希望将另一个整数从轮播意图传递给处理程序意图。 每个选项的另一个整数都不同。您可以将另一个整数视为一个ID,它对于每个选项都是唯一的。 我该如何实现?

解决方法

我创建了一个轮播选项和我想传递的对应参数的映射,并将该映射保存在conv.data.store中,该存储是由Google行动提供的对话存储。然后,我使用该映射从传递给处理程序意图的轮播键中获取参数。

例如轮播意图:

url <- "https://en.wikipedia.org/wiki/COVID-19_pandemic_in_the_United_States"

url %>% 
  read_html() %>% 
  html_node(xpath = '//*[@id="mw-content-text"]/div[1]/div[4]/div/table/tbody') %>% 
  html_table(fill = TRUE)

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

,

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

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