如何在对话流中触发另一个意图的响应的意图

问题描述 投票:0回答:1
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中有两个意图:

  1. 交付
  2. 产品

在交付意向中,动态存在来自API的类别。

关于类别的选择,我只是想触发产品意图,以便用户可以从那里选择产品。

如何触发产品意图选择类别。

node.js dialogflow actions-on-google
1个回答
0
投票

您最好的选择是将产品意图逻辑移至其自己的类或函数。这样,您就可以将代码用于其他用途,而不必复制和粘贴任何代码。因此,它使您的代码更灵活,更易于阅读。

您是否真正选择函数或类取决于您。如果您只是创建简单的响应,那么一个函数就足够了,但是如果您发现自己一次又一次地导入/要求相同的类,那么一个类可能会更好。

这是NodeJS中带有Typescript的欢迎意图类的示例:

/**
 * 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(),它就会欢迎用户。

© www.soinside.com 2019 - 2024. All rights reserved.