我正在Google / Dialogflow上使用Actions,并且尝试创建一个函数,该函数将在用户之前使用过该操作的情况下按其名称打招呼,如果不使用,则会询问其名称。我试图通过实现将其映射到“欢迎意图”,但是每当我尝试在模拟器上运行操作时,都会出现此错误:
Error 206: Webhook Error
如果最初将其映射到另一个意图,哪个会有意义,但是我想知道是否由于您无法满足欢迎意图而收到此错误?
这是我在嵌入式编辑器中使用的代码,这可能是问题所在:
exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request,response) => {
const agent = new WebhookClient({ request, response });
function welcome(conv) {
if (conv.user.last.seen) {
conv.ask(`Welcome back ${name}!`);
} else {
conv.ask('Welcome to The app! My name is Atlas, could I get your name?');
}}
let intentMap = new Map();
intentMap.set('Welcome Intent', welcome);
agent.handleRequest(intentMap);
这怎么不起作用?我需要实现用户登录吗?我是否需要使用将写入Firestore数据库的函数?
感谢您的帮助或建议!
答案 0 :(得分:1)
让我们先清除一些事情:
不起作用的特定原因是因为在这种情况下,conv
参数包含一个Dialogflow WebhookClient而不是Google动作Conversation对象。
要使用具有的参数获取会话对象,可以调用conv.getConv()
,这将为您提供一个具有user
参数的对象。所以可能看起来像
function welcome(conv) {
let aog = conv.getConv();
if (aog.user.last.seen) {
conv.ask(`Welcome back ${name}!`);
} else {
conv.ask('Welcome to The app! My name is Atlas, could I get your name?');
}}
但是,这仍然存在一些问题。最值得注意的是,尚不清楚name
的来源。我假设您将从用户存储对象中删除它,但是您似乎还没有这样做。
答案 1 :(得分:0)
对于将来遇到此问题且只想直接答案而不必搜索含糊不清的答案/文档的任何人,请按以下步骤操作:
注意:我最终使用了Google登录方法,但是即使这不是您的目标,我也会将链接发布到其他方法。
1)在Google模块上导入操作。人员/教程不显示的是,您必须这样导入库(用于用户登录):
const {
dialogflow,
Permission,
SignIn
} = require('actions-on-google')
代替
const dialogflow = require('actions-on-google')
2)使用此代码:
const app = dialogflow({
clientId: '<YOUR CLIENT ID from Actions on Google>',
});
app.intent('Start Signin', conv => {
conv.ask(new SignIn('To get your account details'));
});
app.intent('Get Signin', (conv, params, signin) => {
if (signin.status === 'OK') {
const payload = conv.user.profile.payload;
conv.ask(`Welcome back ${payload.name}. What do you want to do next?`);
} else {
conv.ask(`I won't be able to save your data, but what do you want to do next?`);
}
});
此功能将询问用户登录信息,下次您调用该意图时,它会显示“ Welcome back name”(欢迎使用名字),因为Google会自动保存它。
以下是备用method的链接: