如何使用 Webhook Tripadvisor API 和 Node.js 在 Dialogflow 中跟进多个意图
How to followup several intents in Dialogflow using Webhook Tripadvisor API with Node.js
我正在使用 Tripadvisor API.
在 Dialogflow 中创建酒店预订代理
示例:
代理:您好,我可以帮您预订酒店房间或查看您的预订
用户:预订酒店房间
代理: 哪个城市的?
用户:巴塞罗那
代理:我们推荐酒店“巴塞罗那酒店”。要我预定吗?
用户:是
代理: 告诉我你的全名
用户:Johnny Appleseed
代理:好的,约翰尼·阿普尔赛德。 我预订了“巴塞罗那酒店”酒店。
为此,我根据用户是否想预订代理推荐的酒店创建了两个后续意图:
我正在使用 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 数据库中?
我希望一切都清楚。如果有什么不清楚的地方,请随时问我:)
如果我正确地理解了你的情况,那么你需要稍微改变一下这里的方法以使其变得简单。
让我从第一个代理响应开始,您似乎正试图以相同的意图处理操作:
代理: 您好,我可以帮您订酒店房间或查看您的预订情况
理想情况下,应该进行两次不同意图的对话。
一个是你目前正在做的书,另一个是获取现有的预订详情:
因此创建 two-parent 意图:
- 创建预订:您已经处理并成功预订。
- 获取预订详情: 它有一个后续意图 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 中也很简单。对话设计有点不同。您需要像对话一样设计每个对话流程。
我正在使用 Tripadvisor API.
在 Dialogflow 中创建酒店预订代理示例:
代理:您好,我可以帮您预订酒店房间或查看您的预订
用户:预订酒店房间
代理: 哪个城市的?
用户:巴塞罗那
代理:我们推荐酒店“巴塞罗那酒店”。要我预定吗?
用户:是
代理: 告诉我你的全名
用户:Johnny Appleseed
代理:好的,约翰尼·阿普尔赛德。 我预订了“巴塞罗那酒店”酒店。
为此,我根据用户是否想预订代理推荐的酒店创建了两个后续意图:
我正在使用 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 数据库中?
我希望一切都清楚。如果有什么不清楚的地方,请随时问我:)
如果我正确地理解了你的情况,那么你需要稍微改变一下这里的方法以使其变得简单。
让我从第一个代理响应开始,您似乎正试图以相同的意图处理操作:
代理: 您好,我可以帮您订酒店房间或查看您的预订情况
理想情况下,应该进行两次不同意图的对话。
一个是你目前正在做的书,另一个是获取现有的预订详情:
因此创建 two-parent 意图:
- 创建预订:您已经处理并成功预订。
- 获取预订详情: 它有一个后续意图 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 中也很简单。对话设计有点不同。您需要像对话一样设计每个对话流程。