我正在使用 Actions On Google/Dialogflow,并且我正在尝试创建一个函数,如果用户之前使用过该操作,则该函数会通过用户的名字向他们打招呼,如果没有,则会询问他们的名字。我尝试通过实现将其映射到“欢迎意图”,但每当我尝试在模拟器上运行该操作时,都会收到此错误:
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 数据库的函数?
感谢您的帮助或建议!
最佳答案
让我们先澄清一些事情:
- 您可以实现您的欢迎意图。
- 您不需要需要用户登录。虽然使用 Google Sign In for Assistant 当然可以使用,但这并不能从根本上改变您的问题。
- 您不需要需要使用写入 firestore 数据库的函数。同样,您可以使用它,但这不会改变您的问题。
这不起作用的具体原因是因为本例中的 conv
参数包含 Dialogflow WebhookClient而不是 Google 上的操作 Conversation对象。
要使用您拥有的参数获取 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
从何而来。我假设您将从用户存储对象中获取它,但您似乎没有这样做。
关于javascript - 如果用户之前使用过该操作,如何让 Dialogflow 代理向用户打招呼?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53450716/