【问题标题】:How to extract postback data from payload to parameters in Dialogflow V2如何从有效负载中提取回发数据到 Dialogflow V2 中的参数
【发布时间】:2018-12-13 01:10:31
【问题描述】:

我一直在努力解决这个问题,我希望有人可以帮助我。我正在使用 Dialogflow 控制台创建一个机器人,该机器人通过提供他/她的位置和描述事件来请求用户报告“某事”。该机器人与 Facebook Messenger 集成。我的一个意图有一个后续意图,它也有一个后续意图,例如:

intent 1
    |
    intent 2
            | intent 3

intent 1 请求用户的位置,intent 2 检索用户的位置并要求用户描述位置。 Intent 3 应该在上下文中包含所有数据,因为它由 webhook 完成。所有数据都应该发布到我的服务器上。问题是我未能获取位置数据(可能是经纬度)我注意到在触发事件 FACEBOOK_LOCATION 之后数据以以下格式返回:

{
  "originalDetectIntentRequest": {
    "source": "facebook",
    "payload": {
      "postback": {
        "data": {
        "lat": 14.556761479425,
        "long": 121.05444780425
      },
     "payload": "FACEBOOK_LOCATION"
    },
    "sender": {
      "id": "1588949991188331"
    }
  }
}

我的问题是如何将该有效负载数据携带到我的 Dialogflow 意图参数中,以便在触发我的 webhook 之前将它们携带在上下文中?我希望我已经解释清楚了。谢谢大家的帮助。

【问题讨论】:

    标签: bots dialogflow-es


    【解决方案1】:

    您可以使用输出上下文来保存参数。

    {  
      "fulfillmentText":"This is a text response",
      "fulfillmentMessages":[  ],
      "source":"example.com",
      "payload":{  
        "google":{  },
        "facebook":{  },
        "slack":{  }
      },
      "outputContexts":[  
        {  
          "name":"context name",
          "lifespanCount":5,
          "parameters":{  
            "param":"param value"
          }
        }
      ],
      "followupEventInput":{  }
    }
    

    保存参数后,在后续请求中,您可以通过访问保存的上下文来访问参数。 lifespanCount 将决定此上下文有效的后续调用次数。所以在上面,例如。保存在意图 1 中的参数将在意图 5 之前可用(如果您还有 2 个后续意图) 您可以关注更多详情here

    我个人喜欢使用客户端库来开发 webhook,因为它们易于使用、功能丰富并减少了 JSON 操作错误。如果你喜欢使用基于 NodeJs 的客户端,你可以关注这个link

    【讨论】:

    • 谢谢。这个答案引导我在我的 webhook 响应中使用“OutputContexts”找到解决方案。谢谢!
    • 很高兴听到这个消息。
    • 我也使用了基于 NodeJS 的客户端。我发现使用它有很大的灵活性。非常感谢。我有一个问题,我试图将处理意图的函数分离到不同的文件(模块)中,并要求进入主 js 文件,如下所示:intentMap.set('Default Welcome Intent', <required_file_with_function>) 但是我得到了 promise 错误。我将如何解决这个问题?
    • 最好创建一个新问题 ;)
    • :) 谢谢!我解决了这个问题!我这里还有一个:stackoverflow.com/questions/51409922/… :) 谢谢!
    【解决方案2】:

    扩展 Abhinav 的答案(并指出我在这个问题上的发现)。您需要确保您提取的实体具有生命周期,以使其能够进入您的 webhook 实现调用。

    您可以通过编辑数字并保存来调整计数。

    lifespanCount 将决定此上下文有效的后续调用次数。 - 阿比纳夫

    如果您的参数未显示在您的输出上下文中,则它们可能没有适当的生命周期。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-06
      • 1970-01-01
      • 2021-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多