app.intent('Delivery', conv => {
conv.ask("What a great day for Delivery! We can provide more information on any of the categories shown below.");
return axios.get(url).then((success) => {
let items = {};
for (let i of success.data.data) {
let item = {};
item.synonyms = [i.name];
item.title = `${i.name}`;
item.image = new Image({
url: `${i.image}`,
alt: 'Image alternate text',
});
item.description = `${i.description}`;
items[i.id] = item;
}
conv.ask(new List({ title: 'Food Categories', items }));
}).catch((error) => {
conv.ask("Error in category");
});
});
我在Dialogflow中有两个意图:
在交付意图中,动态存在来自API的类别。
在选择类别时,我只是想触发产品意图,以便用户可以从那里选择产品。
我如何触发选择类别的产品意图。
答案 0 :(得分:0)
您最好的选择是将产品意图逻辑移至其自己的类或函数。这样,您就可以将代码用于其他用途,而不必复制和粘贴任何代码。因此,它使您的代码更灵活,更易于阅读。
是否选择函数或类取决于您自己。如果仅创建简单的响应,一个函数就足够了,但是如果发现自己一次又一次地导入/请求相同的类,那么一个类可能会更好。
这是NodeJS中带有Typescript的Welcome Intent类的示例:
/**
* Welcome intent class
*/
export default class WelcomeIntent {
invoke(conv: DialogflowConversation): DialogflowConversation {
const greeting = this.getTimeOfDayGreeting();
const response = "Welcome to my test app. How can I help?"
const hasScreen = this.contextService.getContext(conv, "actions_capability_screen_output");
if (hasScreen) {
conv.ask(new Suggestions("What can I do?"));
}
conv.ask(greeting);
return conv.ask(response);
}
private getTimeOfDayGreeting(): string {
const currentHour = new Date().getHours();
if (currentHour >= 6 && currentHour < 12) {
return "Good morning.";
} else if (currentHour >= 12 && currentHour < 18) {
return "Good afternoon.";
} else if (currentHour >= 18 && currentHour <= 23) {
return "Good evening.";
} else {
return "Hello.";
}
}
}
每次我想欢迎用户时,我只返回welcomeIntent.invoke()
,它就会欢迎用户。