如何清除用户存储(Dialogflow)
How to clear user storage (Dialogflow)
我正在我的用户存储中存储一个值(在我的例子中是用户想要听到新闻的城市)。我希望用户能够更改这个城市,从而更改用户存储。我尝试了很多东西,但还没有成功,希望有人能提供帮助。
当用户选择更改城市时,将调用 regio_kiezen 意图。此意图使用包含多个城市的名为 regio 的实体询问您想要哪个城市。查看此意图的屏幕截图(顺便说一句:该事件是为调用此意图的另一个场景添加的):
在提示输入参数值后,它会执行。这是此意图和名为 Regio 的意图的实现代码(这是显示新闻标题的意图):
app.intent('regio_kiezen', (conv, params) => {
conv.user.storage.regio = {};
var chosen_regio = params['regio'];
conv.user.storage.regio = chosen_regio;
console.log(`user: ${conv.user.storage.regio}`);
conv.followup('Regio');
console.log("intent: regio kiezen intent");
});
app.intent('Regio', (conv) => {
console.log("regio intent");
console.log(`doebiesnoesje: ${conv.user.storage.regio}`);
conv.ask(new Suggestions('Regio veranderen'));
conv.ask(new Suggestions(['Suggestion 2', 'Suggestion 3']));
return axios.get(`api-adress/${conv.user.storage.regio}`) //can not share the real api-adres
.then((result) => {
// informatie ophalen
for (let i=0; i <= 5; i++) {
titels[i] = (result.data.categories[0].news[i].title); // titel
subtexts[i] = (result.data.categories[0].news[i].text); // subtext
images[i] = (result.data.categories[0].news[i].media[0].image); // image
links[i] = (result.data.categories[0].news[i].url); // link
}
// LIST
if (!conv.screen) {
conv.ask('Sorry, try this on a screen device or select the ' +
'phone surface in the simulator.');
return;
}
console.log(`Regioo:`);
if(conv.user.storage.regio == 'nhgooi') {
praat = 'het Gooi';
} else {
praat = conv.user.storage.regio;
}
conv.ask(`Hier volgt het laatste nieuws uit ${praat}`);
conv.ask(new List({
title: praat,
items: {
// Add the first item to the list
'SELECTION_KEY_ONE': {
synonyms: [
'synonym 1',
'synonym 2',
'synonym 3',
],
title: titels[0],
image: new Image({
url: images[0],
}),
},
// Add the second item to the list
'SELECTION_KEY_GOOGLE_HOME': {
synonyms: [
'Google Home Assistant',
'Assistant on the Google Home',
],
title: titels[1],
image: new Image({
url: images[1],
}),
},
// Add the third item to the list
'SELECTION_KEY_GOOGLE_PIXEL': {
synonyms: [
'Google Pixel XL',
'Pixel',
'Pixel XL',
],
title: titels[2],
image: new Image({
url: images[2],
}),
},
'SELECTION_FOUR': {
synonyms: [
'Google Pixel XL',
'Pixel',
'Pixel XL',
],
title: titels[3],
image: new Image({
url: images[3],
}),
},
'SELECTION_KEY_FIVE': {
synonyms: [
'Google Pixel XL',
'Pixel',
'Pixel XL',
],
title: titels[4],
image: new Image({
url: images[4],
}),
},
},
}));
})
.catch((err) => console.log(err));
});
我遇到的问题是它一直显示旧(第一组)城市的新闻。因此,看起来 conv.user.storage.regio 没有被改变。我不知道为什么会这样,希望有人能提供帮助!提前致谢。
感谢所有评论。我找到了解决办法。在意图 2 中发生时,在意图 1 中看不到清除用户存储或更新。起作用的是在 regio_kiezen 意图中创建一个新的用户存储变量。创建一个全局变量来存储此值。在 Regio 意图中检查此变量是否未定义,并选择选择用户存储或创建的变量。我知道这可能不是很清楚,所以请看一下代码:
app.intent('regio_kiezen', (conv, params) => {
console.log(`user1: ${conv.user.storage.regio}`);
p = 0;
r++;
conv.user.storage.regio = '';
conv.user.storage.regio = params['regio'];
test = conv.user.storage.regio;
test2 = params['regio'];
conv.user.storage.regio2 = test2;
tert = conv.user.storage.regio2;
console.log("testt: " + test + " test2: " + test2);
console.log(`tert: ${conv.user.storage} en ${conv.user.storage.regio2} en ${tert}`);
conv.followup('Regio');
console.log("intent: regio kiezen intent");
return tert;
});
app.intent('Regio', (conv) => {
p++;
console.log("regio intent");
console.log(`tertt: ${conv.user.storage.regio2} en ${tert}`);
//console.log("test: " + test + " test2: " + test2);
console.log(`doebiedushi: ${conv.user.storage.regio}`);
if (tert === undefined) {
var regioo = conv.user.storage.regio;
} else {
var regioo = tert;
}
conv.ask(new Suggestions(['Regio veranderen', 'Meer nieuws']));
return axios.get(`https:url/${regioo}`)
.then((result) => { //rest of code
这有效并存储在会话和对话之间!
我正在我的用户存储中存储一个值(在我的例子中是用户想要听到新闻的城市)。我希望用户能够更改这个城市,从而更改用户存储。我尝试了很多东西,但还没有成功,希望有人能提供帮助。
当用户选择更改城市时,将调用 regio_kiezen 意图。此意图使用包含多个城市的名为 regio 的实体询问您想要哪个城市。查看此意图的屏幕截图(顺便说一句:该事件是为调用此意图的另一个场景添加的):
在提示输入参数值后,它会执行。这是此意图和名为 Regio 的意图的实现代码(这是显示新闻标题的意图):
app.intent('regio_kiezen', (conv, params) => {
conv.user.storage.regio = {};
var chosen_regio = params['regio'];
conv.user.storage.regio = chosen_regio;
console.log(`user: ${conv.user.storage.regio}`);
conv.followup('Regio');
console.log("intent: regio kiezen intent");
});
app.intent('Regio', (conv) => {
console.log("regio intent");
console.log(`doebiesnoesje: ${conv.user.storage.regio}`);
conv.ask(new Suggestions('Regio veranderen'));
conv.ask(new Suggestions(['Suggestion 2', 'Suggestion 3']));
return axios.get(`api-adress/${conv.user.storage.regio}`) //can not share the real api-adres
.then((result) => {
// informatie ophalen
for (let i=0; i <= 5; i++) {
titels[i] = (result.data.categories[0].news[i].title); // titel
subtexts[i] = (result.data.categories[0].news[i].text); // subtext
images[i] = (result.data.categories[0].news[i].media[0].image); // image
links[i] = (result.data.categories[0].news[i].url); // link
}
// LIST
if (!conv.screen) {
conv.ask('Sorry, try this on a screen device or select the ' +
'phone surface in the simulator.');
return;
}
console.log(`Regioo:`);
if(conv.user.storage.regio == 'nhgooi') {
praat = 'het Gooi';
} else {
praat = conv.user.storage.regio;
}
conv.ask(`Hier volgt het laatste nieuws uit ${praat}`);
conv.ask(new List({
title: praat,
items: {
// Add the first item to the list
'SELECTION_KEY_ONE': {
synonyms: [
'synonym 1',
'synonym 2',
'synonym 3',
],
title: titels[0],
image: new Image({
url: images[0],
}),
},
// Add the second item to the list
'SELECTION_KEY_GOOGLE_HOME': {
synonyms: [
'Google Home Assistant',
'Assistant on the Google Home',
],
title: titels[1],
image: new Image({
url: images[1],
}),
},
// Add the third item to the list
'SELECTION_KEY_GOOGLE_PIXEL': {
synonyms: [
'Google Pixel XL',
'Pixel',
'Pixel XL',
],
title: titels[2],
image: new Image({
url: images[2],
}),
},
'SELECTION_FOUR': {
synonyms: [
'Google Pixel XL',
'Pixel',
'Pixel XL',
],
title: titels[3],
image: new Image({
url: images[3],
}),
},
'SELECTION_KEY_FIVE': {
synonyms: [
'Google Pixel XL',
'Pixel',
'Pixel XL',
],
title: titels[4],
image: new Image({
url: images[4],
}),
},
},
}));
})
.catch((err) => console.log(err));
});
我遇到的问题是它一直显示旧(第一组)城市的新闻。因此,看起来 conv.user.storage.regio 没有被改变。我不知道为什么会这样,希望有人能提供帮助!提前致谢。
感谢所有评论。我找到了解决办法。在意图 2 中发生时,在意图 1 中看不到清除用户存储或更新。起作用的是在 regio_kiezen 意图中创建一个新的用户存储变量。创建一个全局变量来存储此值。在 Regio 意图中检查此变量是否未定义,并选择选择用户存储或创建的变量。我知道这可能不是很清楚,所以请看一下代码:
app.intent('regio_kiezen', (conv, params) => {
console.log(`user1: ${conv.user.storage.regio}`);
p = 0;
r++;
conv.user.storage.regio = '';
conv.user.storage.regio = params['regio'];
test = conv.user.storage.regio;
test2 = params['regio'];
conv.user.storage.regio2 = test2;
tert = conv.user.storage.regio2;
console.log("testt: " + test + " test2: " + test2);
console.log(`tert: ${conv.user.storage} en ${conv.user.storage.regio2} en ${tert}`);
conv.followup('Regio');
console.log("intent: regio kiezen intent");
return tert;
});
app.intent('Regio', (conv) => {
p++;
console.log("regio intent");
console.log(`tertt: ${conv.user.storage.regio2} en ${tert}`);
//console.log("test: " + test + " test2: " + test2);
console.log(`doebiedushi: ${conv.user.storage.regio}`);
if (tert === undefined) {
var regioo = conv.user.storage.regio;
} else {
var regioo = tert;
}
conv.ask(new Suggestions(['Regio veranderen', 'Meer nieuws']));
return axios.get(`https:url/${regioo}`)
.then((result) => { //rest of code
这有效并存储在会话和对话之间!