Node.js 通过Dialogflow实现在Google操作上设置上下文
我正在使用Dialogflow编辑器在Google Assistant上构建对话,但我不确定如何使用Node.js 通过Dialogflow实现在Google操作上设置上下文,node.js,dialogflow-es,actions-on-google,google-assistant-sdk,Node.js,Dialogflow Es,Actions On Google,Google Assistant Sdk,我正在使用Dialogflow编辑器在Google Assistant上构建对话,但我不确定如何使用agent.setContext函数。 当我询问“关闭我的设备”时,第一步成功返回。例如,当用户以“TV”回应时,就会出现问题。系统返回另一个上下文,忽略我设置的上下文。 当用户直接询问“关掉厨房里的电视”时,系统也能正常工作。因此,我认为实体的定义是正确的 对话1(成功): 关掉厨房里的电视 对。关掉 对话2(失败): 关闭我的设备//给出与对话1相同的意图 好的,哪种设备 电视 “我的机
agent.setContext
函数。
当我询问“关闭我的设备”时,第一步成功返回。例如,当用户以“TV”回应时,就会出现问题。系统返回另一个上下文,忽略我设置的上下文。
当用户直接询问“关掉厨房里的电视”时,系统也能正常工作。因此,我认为实体的定义是正确的
对话1(成功):
- 关掉厨房里的电视
- 对。关掉
- 关闭我的设备//给出与对话1相同的意图
- 好的,哪种设备
- 电视
- “我的机器人”现在没有反应。请稍后再试//它抛出“必须设置‘最终响应’”。我认为这是因为一般的意图行为。意图。文本
exports.dialogflowFirebaseFulfillment=functions.https.onRequest
中,意图由intentMap.set('smarthome.device.switch.off',setDeviceOff'调用;
因此,我尝试了另一个版本,但同样的问题仍然存在:
const app = dialogflow();
app.intent('welcome', conv =>{
conv.ask("Welcome to auto obari. What can I do for you?");
});
app.intent('Default Fallback Intent',conv =>{
conv.ask("I didn't understand, can you try again?");
});
app.intent('smarthome.device.switch.off', (conv,{device, room})=> {
const context= 'device-switch';
if(device===''){
conv.ask("OK, which device?");
}else if (room===''){
conv.ask("Got it. of what room?");
}else{
conv.ask("Right. Turning off.");
}
const parameters = {'device':device, 'room': room};
conv.contexts.set(context, 5, parameters);
});
exports.dialogflowFirebaseFulfillment = functions.https.onRequest(app); //I tried exports.factsAboutGoogle, but it threw a error too.
上下文相同,但意图不同。
如果使用
conv
,您也可以这样尝试:
app.intent('<INTENT>', conv => {
conv.ask('<RESPONSE>');
const parameters = {'param1':param1, 'param2': param2}};
conv.contexts.set('welcome-context', 5, parameters);
});
app.intent(“”,conv=>{
conv.ask(“”);
常量参数={'param1':param1,'param2':param2};
set('welcome-context',5,参数);
});
然后像这样访问它:
const conv.context.get().parameters[];
你也可以试试这个方法,它对我很管用
const AppContexts = {CONTEXT_ONE: 'context-one'};
const app = dialogflow();
In current intent (for output context)
conv.contexts.set(AppContexts.CONTEXT_ONE, 1);
In next intent (for input context )
const context = conv.contexts.get(AppContexts.CONTEXT_ONE);
非常感谢你!但同样的问题依然存在。我把我的新代码放在上面。我尝试了
const device=conv.contexts.get('device-switch').parameters.device代码>格式。你检查文档了吗?我读了所有我能读的东西,我得到了上面的代码。我从文档中发现的唯一区别是“导出”功能。但当我在Dialogflow中使用factsAboutGoogle时,会显示一个错误。请尝试一个新项目,并一步一步地添加代码。从一个简单的1行消息开始到您当前的版本。看看这是否有效。您是否也可以共享firebase cloud函数或node js服务器的日志,无论您使用的是哪一个?在Google函数上,执行已完成,状态代码为200,没有任何错误。在谷歌操作中,给定的错误是“格式错误响应:必须设置“最终响应”。“无法将Dialogflow response解析为AppResponse,因为通过:1.1 google Alt Svc的语音响应为空”我认为这是因为当用户使用“TV”进行响应时,不会再次触发意图。发送的意图是通用的“actions.intent.TEXT”。我在问题日志中添加了更多详细信息。我试图设置一个函数来获取actions.intent.TEXT,但未调用意图。我真的不知道该怎么办了。
const conv.contexts.get(<context>).parameters[<param>];
const AppContexts = {CONTEXT_ONE: 'context-one'};
const app = dialogflow();
In current intent (for output context)
conv.contexts.set(AppContexts.CONTEXT_ONE, 1);
In next intent (for input context )
const context = conv.contexts.get(AppContexts.CONTEXT_ONE);