mysql - 如何使用带有 Node.js 的 Webhook Tripadvisor API 在 Dialogflow 中跟进多个意图
问题描述
我正在 Dialogflow 中使用Tripadvisor API创建酒店预订代理。
例子:
代理:您好,我可以帮您预订酒店房间或查看您的预订信息
用户:预订酒店房间
经纪人:在哪个城市?
用户:巴塞罗那
代理:我们推荐酒店“Barcelona Hoteles”。你要我预订吗?
用户:是的
经纪人:告诉我你的全名
用户:强尼苹果籽
经纪人:好的,约翰尼·苹果籽。我在“巴塞罗那酒店”酒店预订。
为此,我创建了两个后续意图,具体取决于用户是否想在代理推荐的酒店预订:
我正在使用 ngrok 向 Internet 公开本地开发服务器。
我想要实现的是,通过询问用户他们的姓名,整个预订都存储在一个 MYSQL 数据库中(姓名、预订城市、人数、登记、结帐......),这样,一旦用户关闭与代理的交互,通过再次开始与他的对话,而不是想要进行预订,用户想要查看他的预订,代理从数据库中读取他的预订,只需询问他的姓名。所以要做到这一点,我需要创建另一个意图(跟进意图“yes”,在上图中它对应于“reservaIntent - yes”)以获得用户的全名,但是我该如何做这个开发在我的 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 数据库中?
我希望这很清楚。不要犹豫,问我是否有不清楚的地方:)
解决方案
如果我在这里正确理解了您的情况,那么您需要在此处更改一些方法以使其变得容易。
让我从第一个代理响应开始,您似乎正试图以相同的意图处理操作:
代理:您好,我可以帮您预订酒店房间或查看您的预订信息
理想情况下,应该进行两次具有不同意图的不同对话。
一个是你目前正在做的书,另一个是获取现有的预订详细信息:
所以创建双亲意图:
- 创建预订:您已经处理并成功预订。
- 获取预订详细信息:它有一个后续意图 askName 以获取名称并显示预订详细信息。所以,这就是谈话中的样子
代理: 您好,我可以帮您预订酒店房间或查看您的预订信息
用户: 我想查看我的预订
//This above response will be decision point to invoke either of intent (**create a booking or get reservation**)
经纪人:告诉我你的全名
用户: Johnny Appleseed
经纪人: 好的,Johnny Appleseed。您已于 8 月 31 日在巴塞罗那酒店预订。
现在在 Node JS 中也很简单。对话设计有点不同。您需要设计每个对话流程,例如对话。
推荐阅读
- laravel - 如何从laravel中具有关系的3个表中获取结果?
- vue.js - 在 Nuxt js 中热重载页面时存储属性未定义
- r - 在R中包含多个单词的列中查找最长的单词
- hive - Apache NIFI 忽略 SelectHiveQL 中的 serialization.null.format
- python - 在 Python 中访问已部署 Cloud Function 的版本号
- java - 多个属性文件中的 Java Spring Boot 配置文件
- c++ - C++ 构造函数没有对象
- javascript - Youtube 视频与 Youtube API 内的图像响应像电视
- r - 根据其他向量R重复向量的每个元素N次
- tensorflow - Tensorflow 的 multi worker estimator 教程中关于 `input_fn` 的问题