Dialogflow-来自Cloud Firestore的嵌入式Webhook

问题描述 投票:0回答:1

所以,我正在为一个学校项目构建一个聊天机器人,但我陷入了困境。基本上,我的聊天机器人是在问一些问题并得到一些答案,然后我想要使用这些答案来匹配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。”。任何帮助都会很棒。

谢谢。

所以,我正在为一个学校项目构建一个聊天机器人,但我陷入了困境。基本上,我的聊天机器人是在问一些问题并得到一些答案,然后我想要的是使用这些答案来匹配一些...

node.js firebase google-cloud-firestore dialogflow
1个回答
0
投票

看起来问题出在如何设置Intent Handler。假设我正确地阅读了您的代码,您似乎拥有Handler Map inside

© www.soinside.com 2019 - 2024. All rights reserved.