如何使用带有Node.js的Webhook Tripadvisor API跟踪Dialogflow中的几个意图

问题描述

我正在Dialogflow中创建一个代理商,用于使用Tripadvisor API预订酒店。

示例:

代理:您好,我可以帮助您预订酒店房间或查看您的预订

用户:预订酒店房间

代理商:在哪个城市?

用户:巴塞罗那

代理商:我们推荐酒店“ Barcelona Hoteles”。你要我预定吗?

用户

代理:告诉我您的全名

用户:Johnny Appleseed

代理:好的,Johnny Appleseed。 我在“巴塞罗那酒店”酒店预订

为此,我创建了两个后续意图,具体取决于用户是否要在代理商推荐的酒店预订:

enter image description here

我正在使用ngrok将本地开发服务器公开到Internet。

我想要实现的是,通过询问用户的姓名,整个预订都存储在MYSQL数据库中(名称,预订所在的城市,人数,签到,签出...),以便,一旦用户通过与代理再次开始对话来结束与代理的交互,而不是想要进行保留,而是希望查看其保留,则代理会从数据库中读取其保留,只是询问他的名字。因此,要做到这一点,我需要创建另一个意图(跟随意图“是”,在上面的照片中它对应于“ reservaIntent-是”),以获得用户的全名,但是我该如何在我的Node.js项目中进行此开发?

这是我代码的最新开发。在这里,我向Dialogflow发送答案,说“ x”的推荐酒店是“ x”:

request(options,function (error,response,body) {
  var json2 = JSON.parse(body);
  respuestaWebhook.fulfillmentText = 'For the city ' + city+ ' we recommend the hotel ' + json2.data[0].name + '. Do you want me to book?';
  res.json(respuestaWebhook);

// where "json2.data[0].name" is the name of the hotel received from de Tripadvisor API

现在,如果用户回答“是”,则当代理在“后续意图-是”中询问其姓名时,我如何在Node.js中收集该变量,以后再将其存储在我的MYSQL数据库?

我希望这很清楚。不要犹豫,问我是否有不清楚的地方:)

解决方法

如果我在这里正确理解了您的情况,那么您需要对此处的方法进行一些更改以使其变得简单。

让我从第一个特工的响应开始,看来您正在尝试按照相同的意图采取行动:

代理商您好,我可以帮助您预订酒店房间或查看预订信息

理想地,从这里开始,应该进行两个意图不同的对话。

一种用于您当前正在阅读的书,另一种用于获取现有的预订详细信息:

因此,请创建双亲意图:

  1. 创建预订:您已经在处理并成功预订。
  2. 获取预订详细信息::它具有一个跟进意图AskName以获取名称并显示预订详细信息。所以,这就是对话的样子

代理人: 您好,我可以帮助您预订酒店房间或查看预订信息

用户我要检查我的预订

//This above response will be decision point to invoke either of intent (**create a booking or get reservation**)

代理商:告诉我您的全名

用户:约翰尼·苹果种子

代理人: 好的,Johnny Appleseed。您已于8月31日在巴塞罗那酒店预订。

现在在Node JS中也非常简单。对话设计有些不同。您需要像对话一样设计每个对话流。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...