我正在设置一个Dialogflow实现,该功能将在用户登录后保存用户数据。
我正在使用内联编辑器中的示例(下面的代码):
exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request, response) => {
const agent = new WebhookClient({ request, response });
function welcome(agent) {
agent.add(`Welcome to my agent!`);
}
let intentMap = new Map();
intentMap.set('Default Welcome Intent', welcome);
agent.handleRequest(intentMap);
});
我还想使用帐户链接,所以我添加了一个新功能,如下所示:
function signIn(agent) {
agent.conv().ask(new SignIn('Log in to link accounts'));
}
intentMap.set('Sign In', signIn);
到目前为止,系统一直在询问用户是否要创建帐户以及所有这些。问题是...下一步应该是检查用户是否确实登录。在此示例中,他们正在使用一种完全不同的方法来处理履约(至少我是这样认为的):
https://github.com/actions-on-google/dialogflow-google-sign-in-nodejs/blob/master/functions/index.js
app.intent('Get Sign In', async (conv, params, signin) => {
if (signin.status !== 'OK') {
return conv.close(`Let's try again next time.`);
}
//more code
});
...现在我很麻烦,因为我只有request
和response
参数,它们被组合到传递给函数的agent
WebhookClient对象中。我没有signin
参数,也不知道在哪里可以找到这些信息。我检查了代理中的许多不同属性,但找不到数据了...
所以,我的问题是:
有人知道信息是否存储在请求/响应/代理对象中的某处吗?或可能“可以”存储它,但是我必须在Dialogflow控制台中更改/向Intent定义添加一些内容(此处未显示定义,因为它几乎是空的,我启用了webhooks并添加了“ Sign以“事件”为触发条件,并且履行功能在创建用户帐户后执行,因此可以-但它没有signin
参数),
如果该代码没有存储在其中,并且我无法使用WebhookClient处理登录-您能否解释一下如何“合并”这两种方法?还是我必须完全按照示例中的方式编写代码,并彻底放弃WebhookClient?我真的不想这么做,但是,我不得不重写很多行代码...:(