我有一个值列表,每个值都有对应的另一个KEY值,当我向用户显示此列表时,用户必须选择一个值,代理必须使用选定值的KEY调用外部api。如何在dialogflow中实现此目的?
我试图在上下文中发送整个键值对并在下一个意图中访问它,但是由于某种原因,当我将上下文参数dialogflow的列表(数组)设置为简单地忽略实现响应时,就出于某种原因。
这是怎么回事,有什么好的方法可以实现?我正在尝试开发一个食品订购聊天机器人,其中显示了菜单中项目的类别,并且当用户选择类别时将提取该菜单中的列表项,该菜单不是静态的,这就是为什么我使用api调用来获取动态菜单的原因。
function newOrder(agent)
{
var categories = []
var cat_parameters = {}
var catarray = []
const conv = agent.conv();
//conv.ask('sure, select a category to order');
agent.add('select a category to order');
return getAllCategories().then((result)=>{
for(let i=0; i< result.restuarantMenuList.length; i++)
{
try{
var name = result.restuarantMenuList[i].Name;
var catid = result.restuarantMenuList[i].Id;
categories.push(name)
//categories.name = catid
cat_parameters['id'] = catid;
cat_parameters['name'] = name
catarray.push(cat_parameters)
}catch(ex)
{
agent.add('trouble getting the list please try again later')
}
}
agent.context.set({
name: 'categorynames',
lifespan: 5,
parameters: catarray, // if i omit this line, the reponse is the fultillment response with categories names, if i keep this line the reponse is fetching from default static console one.
})
return agent.add('\n'+categories.toString())
})
function selectedCategory(agent)
{
//agent.add('category items should be fetched and displayed here');
var cat = agent.parameters.category
const categories = agent.context.get('categorynames')
const cat_ob = categories.parameters.cat_parameters
// use the key in the catarray with the parameter cat to call the external API
agent.add('you have selected '+ cat );
}
}
答案 0 :(得分:0)
主要问题是上下文parameters
必须是一个对象,不能是数组。
因此,保存时,您可以执行类似的操作
parameters: {
"cat_parameters": catarray
}
,当您收到答复时处理它,您可以使用
let catarray = categories.parameters.cat_parameters;
(您的代码还有其他语法和范围问题,但这似乎是您遇到的数据可用性问题。)