在 dialogflow 聊天中用图像 + 按钮回答并实现

Answer with an image + button in dialogflow chat with fulfillment

我正忙于越来越多地了解 dialogflow 以及它必须提供的不同可能性,但我现在卡住了。

我现在有什么? 通过我的 dialogflow 代理,目前可以从荷兰政府那里请求到特定国家/地区的当前旅行建议。因此,当用户询问时:'give me the travel advice to Spain' 对话流将使用政府提供的当前旅行建议进行响应。

正在从 Google Sheet 导入数据。在这个 Google Sheet 我从政府网页上获取实时旅行建议数据。我用来向用户反馈旅行建议的代码是:

`function reisadviesHandler(agent) {
  const bestemming = agent.parameters.bestemming;
  return getSpreadsheetDataReisadvies().then(res => {
    res.data.map(land => {
      if(land.bestemming === bestemming)
      agent.add(`Momenteel staat het reisadvies voor ${bestemming} op ${land.kleurcode}. Het Ministerie van Buitenlandse Zaken zegt verder: ${land.melding}. Is er nog iets anders waar ik je mee kan helpen?`);
    });
  });
}`

在电子表格(数据来源)中,我还在 D 列的旅行建议 (example) 的地图(图片)中添加了一个 url,名为 'mapimage'.使用 ${land.mapimage} 我可以将正确的 url 拉到特定国家/地区的正确图像(国家/地区是用户输入的动态值)。

我想做什么 当前答案后:

Momenteel staat het reisadvies voor ${bestemming} op ${land.kleurcode}. Het Ministerie van Buitenlandse Zaken zegt verder: ${land.melding}. Is er nog iets anders waar ik je mee kan helpen?

想问一下用户是否想看现在的旅游咨询图(图片)。如果他们回应/点击 'yes',聊天机器人必须发送目的地的图片(地图)。除此之外,我还想添加一个按钮,以便将用户转发到正确的政府网页以获取有关旅行建议的更多信息。

此时发送地图(图像)是主要问题,我不知道如何在我目前的实现代码中执行此操作。希望任何人都可以帮助/解释这一点,这样我就可以继续愉快地构建这个聊天机器人:) Thx!

根据您的 use-case 描述,follow-up intent could be used, since it is a child of its associated parent intent and is commonly used for replies like ‘yes’, ’no’ or ‘cancel’. Also, you could use one of the predefined follow-up intents 或创建一个自定义的。

此外,由于答案是用户给出的国家值的函数,所选国家的信息必须保存在 active context 中,因此可以在 [=38] 中使用=] 意图。为了将数据持久保存到活动上下文中,可以使用函数 agent.setContext(),方法是将数据作为参数添加到您的实现代码中,如下所示。

function reisadviesHandler(agent) { 
   const bestemming = agent.parameters.bestemming; 
   return getSpreadsheetDataReisadvies().then(res => { 
      res.data.map(land => { 
          if(land.bestemming === bestemming) {
             agent.add(`Momenteel staat het reisadvies voor ${bestemming} op ${land.kleurcode}. Het Ministerie van Buitenlandse Zaken zegt verder: ${land.melding}. Is er nog iets anders waar ik je mee kan helpen?`);
             agent.setContext({ name: 'your context name here', lifespan: 1, parameters: { [param-name]: land.mapimage , [param-name]: land.website }}); // You can use your current context name or a new one is created with the name provided.
         }
      }); 
   }); 
}

通过使用 Dialogflow simulator 您可以看到在意图交互过程中哪些是上下文和活动参数。

为了在 follow-up 意图中访问以前的持久数据,请使用该信息配置 intent parameters pointing to the context parameters

最后,您可以使用Dialogflow Card response发送图片或互动按钮,如下例。

function yes(agent) {
    const mapimage = agent.parameters.mapimage;
    const webpage = agent.parameters.webpage;
    agent.add(new Card({
         title: `Title: this is a card title`,
         imageUrl: mapimage,
         text: `This is the body text of a card.`,
         buttonText: 'This is a button',
         buttonUrl: webpage
         })
      );
   }

请注意,follow-up 意图中的 fulfillment option 必须启用,而且在实现代码中,意图必须映射到函数。

intentMap.set('your intent name here', yourFunctionHandler);