所以,我正在为一个学校项目构建一个聊天机器人,但我陷入了困境。基本上,我的聊天机器人是在问一些问题并得到一些答案,然后我想要使用这些答案来匹配Cloud Firestore中的某些数据以返回对应的信息。
例如:
用户:我要喝咖啡。
Bot:什么样的?美国,意大利等...
用户:美国。
Bot:好的,强度如何?强,弱,无咖啡因?
用户:十进制。
Bot:所以您想要一个美国聋人,然后我们将“放置在这里”。
我的FireStore数据库结构] ::
:我的功能:{ "coffee": { "blend": { "Arabica":[ { "name": "Acaía", "intensityId": "decaf"}, { "name": "Catuaí", "intensityId": "forte"}, { "name": "Icatu", "intensityId": "fraco"} ], "Italiano":[ { "name": "Buon Giorno!", "intensityId": "forte"}, { "name": "In Vetro", "intensityId": "fraco"}, { "name": "Tazzina", "intensityId": "decaf"} ], "Asiatico":[ { "name": "Blend", "intensityId": "forte"}, { "name": "Plantation", "intensityId": "fraco"}, { "name": "Kaffa", "intensityId": "decaf"} ], "Americano":[ { "name": "Grande Intenso", "intensityId": "forte"}, { "name": "Unwind", "intensityId": "fraco"}, { "name": "Live for the Moment", "intensityId": "decaf"} ] }, "intensity":{ "decaf": "Descafeínado", "forte": "Forte", "fraco": "Fraco" }, "packs": { "decaf_pack1": { "intensityId": "decaf", "name": "Pack 1", "price": "6.99", "units": "3" }, "decaf_pack2": { "intensityId": "decaf", "name": "Pack 2", "price": "9.99", "units": "6" }, "decaf_pack3": { "intensityId": "decaf", "name": "Pack 3", "price": "13.99", "units": "12" }, "forte_pack1": { "intensityId": "forte", "name": "Pack 1", "price": "5.99", "units": "3" }, "forte_pack2": { "intensityId": "forte", "name": "Pack 2", "price": "7.99", "units": "6" }, "forte_pack3": { "intensityId": "forte", "name": "Pack 3", "price": "12.99", "units": "12" }, "fraco_pack1": { "intensityId": "fraco", "name": "Pack 1", "price": "4.99", "units": "3" }, "fraco_pack2": { "intensityId": "fraco", "name": "Pack 2", "price": "6.99", "units": "6" }, "fraco_pack3": { "intensityId": "fraco", "name": "Pack 3", "price": "10.99", "units": "12" } } } }
编辑2
function handleBlend( agent ){ const responseBlend = agent.parameters.responseBlend; const blendAmericano = db.collectionGroup('blend'); const queryBlend = blendAmericano.where(responseBlend,'==',('Americano').where('itensityId', '==', 'forte')); queryBlend.get().then(function(querySnapshot){ agent.add('Então, o café que procura é ' + doc.data(queryBlend));
我的座席参数:
-Intensidade
(咖啡强度,可以是Forte,Fraco ouDescafeínado)-类型
(美洲咖啡,意大利咖啡,阿拉比卡咖啡或阿西蒂科咖啡,这是咖啡的类型)代理的答案的最终结果应该是混合
:-Blend
对于Americano Fraco正在展开。我是编程新手,所以如果我不清楚我的解释,对不起。
感谢您提供的任何帮助!
编辑1
:FireStore数据库已更新为JSON格式EDIT 3
:我已经取得了一些进展,我能够从VS Code查询到Firestore。现在,我正在尝试返回单个值。这就是棘手的部分。let query = db.collection('coffee').where('blend', 'array-contains', [type,{'intensityId': intensity}])
上面的代码是我尝试返回位于“映射”内部(位于“数组”内部)的值。
到目前为止没有运气...可能有帮助吗?
谢谢
编辑4
:function handleBlend( agent ) { const getBlend = agent.context.get('procura-blend'), type = getBlend.parameters.type, intensity = getBlend.parameters.intensity; //agent.add(`Obrigado, então é um ${type} ${intensity} que procura.`); let query = db.collection('coffee').doc(type); return query .get() .then(doc => { var value = doc.data().Americano[0].name; agent.conv(`Então, para um ${type} ${intensity} temos:, ${value}`); // Intent-Handler para mapear funções aos intents let intentMap = new Map(); intentMap.set('pergunta.confirma.blend', handleBlend); agent.handleRequest(intentMap); }); }
所以..这将是我的最后一次更新。.我设法通过VS Code和NodeJS调用单个值,并调用FireStore。现在,当我尝试为DialogFlow复制时,虽然没有太多更改,但是我错了,所以上面的代码就是我现在想要的,试图为用户提示响应,但是我得到了一个代码:4,“消息”:“ Webhook调用失败。错误:DEADLINE_EXCEEDED。”。任何帮助都会很棒。
谢谢。
所以,我正在为一个学校项目构建一个聊天机器人,但我陷入了困境。基本上,我的聊天机器人是在问一些问题并得到一些答案,然后我想要的是使用这些答案来匹配一些...
看起来问题出在如何设置Intent Handler。假设我正确地阅读了您的代码,您似乎拥有Handler Map inside