问题描述
我打算先将轮播展示给用户。 当用户单击轮播中的一个选项时,在处理程序意图中,我将获得用户选择的轮播项目的键。
轮播意图示例,
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 );
// ...
});