我正在对Google项目进行操作,该操作将使用基本功能来记住用户所说的内容并将其用于其他目的。
例如,这就是对话的样子:
1 User: Hello
2 Bot: Hey! What's your name?
3 User: Joel
4 Bot: Your name is Joel, is that correct?
5 User: Yes that is correct
6 Bot: Awesome, it's great to meet you Joel.
我知道最初如何获取信息,但是我很难将信息(名称“ Joel”)传递给另一个纯粹用于确认的意图。
这是我所拥有的:
app.intent('greeting', (conv, params) => {
const context = conv.contexts.set('context'); // working good
conv.ask(`I got ${params.name}, is that right?`);
});
app.intent('greeting_1', (conv,params) => {
const context1 = conv.contexts.get('context'); //not working
conv.ask(`Awesome, it's great to meet yoy ${params.name}`);
});
如果这有帮助,尤其是我正在读取的错误:
TypeError: Cannot read property 'userDecision' of undefined
如何使它正常工作?我有一种感觉,我必须将数据保存在userStorage中,但是我真的只需要这样做,这是非常基本的情况,所以我对此并不熟悉。
感谢您的帮助!
答案 0 :(得分:1)
首先,嗨!
您最初将数据存储在UserStorage中的想法可能是正确的,具体取决于您的用例。让我详细说明:
您可以使用conv.data.name = 'Joel'
保存对话之间的数据。但是,下次用户再次访问时,这些数据将不可用。
这是userStorage发挥作用的地方。您可以使用conv.user.storage.name = 'Joel'
记住用户每次回来的名字。请记住,根据用户的居住地,此类永久性存储可能需要用户的同意。
法律注释::在访问userStorage之前获得同意。一些 国家/地区有要求开发商获得同意的法规 在用户可以访问或保存某些信息之前 (例如个人信息)在userStorage中。如果您合而为一 这些国家/地区中,您想访问或保存此类信息 userStorage,您必须使用确认助手来同意 用户并获得同意后,您才能开始存储此类信息 userStorage中的信息。
您还需要在“隐私权政策”中说明要保存的数据。
对于您的特定用例,将不会更改的数据(即名称)存储在userStorage中是一种更好的方法。由于如果仅将其保存为一个对话,则下次需要再次请求权限。
这些应该满足您在平台上保存数据的基本需求。但是,如果确实需要更复杂的状态管理解决方案,则可能需要检查Dialogflow Contexts。
编辑:我忽略了您已经在使用上下文。但是答案仍然是正确的,如果您只想在对话中保存数据,则无需使用上下文。
但是我认为您遇到问题的原因是您没有正确设置或获取上下文参数。看一下示例here和here:
context.set()
方法获得三个参数;名称,寿命和参数。您只是在代码中传递上下文的名称。
而且,仅使用contexts.get()
方法不足以读取上下文的参数。您需要像这样阅读它们:
app.intent('Tell Greeting', conv => {
const context1 = conv.contexts.get('context1')
const { color, num } = context1.parameters
})
但是,我重复我原来的观点。如果您不需要的话,就不要让自己变得如此复杂。尝试使用conv.data
和conv.user.storage
。