【问题标题】:API.AI flow of logicAPI.AI 逻辑流程
【发布时间】:2017-07-01 12:31:09
【问题描述】:

此讨论适用于任何集成,但作为示例,我将讨论 Messenger。另外,为了提供上下文,我的后端是用 Java 编写的。

根据我的阅读,对于自定义场景(例如帐户链接),我们不应该直接使用 API.AI。相反,Messenger 设置中的“回调 URL” (developer.facebook.com) 应该指向我们自己的托管应用,而后者又调用api.api.ai/v1/query。对吗?

其次,我在 API.AI 中的 Intent 已经勾选了Use webhook。我假设逻辑流程如下:

Messenger → my app (webhook for Messenger) → api.ai → my app (webhook for api.ai)

显然情况并非如此——API.AI 从不调用 webhook。

这是我发送 API.AI 的 JSON:

{"query":"hey","originalRequest":{"source":"facebook","data":{"object":"page","entry":[{"id":"xxx","time":yyy,"messaging":[{"sender":{"id":"zzz"},"recipient":{"id":"xxx"},"timestamp":yyy,"message":{"mid":"aaa","seq":bbb,"text":"hey"}}]}]}},"v":"20170704","sessionId":"1","lang":"en"}

这是来自 API.AI的响应:

{
    "id": "xxx",
    "timestamp": "yyy",
    "lang": "en",
    "result": {
        "source": "agent",
        "resolvedQuery": "hey",
        "speech": "",
        "action": "",
        "parameters": {
            "greeting": "hey"
        },
        "metadata": {
            "inputContexts": [],
            "outputContexts": [],
            "intentName": "greeting",
            "intentId": "zzz",
            "webhookUsed": "true",
            "webhookForSlotFillingUsed": "false",
            "contexts": []
        },
        "score": 1.0
    },
    "status": {
        "code": 200,
        "errorType": "success"
    },
    "sessionId": "1"
}

这是否意味着我的应用应该调用 webhook(这是同一个应用但不同的端点)本身?

【问题讨论】:

    标签: dialogflow-es


    【解决方案1】:

    你的流程逻辑不正确。

    在您的情况下,Facebook 永远不会直接与您的应用程序对话。它总是首先将用户输入发送到 api.ai。然后 api.ai 将尝试从您创建的所有意图中找到匹配项。

    这很重要,如果 api.ai 设法找到一个意图,它将调用您配置的 webhook。但是,如果 api.ai 无法从您的任何意图中找到匹配项,它会调用后备意图,该意图会将响应发布回 Facebook。在这种情况下,您的应用程序将不会被调用。

    我给你的建议是在开始在 Facebook 上测试之前,使用 api.ai 中的测试工具(位于右上角)确保你的输入可以被正确的意图过滤,并且你的应用能够隐性输入你的输入来自 api.ai。

    【讨论】:

    • 实际上可以在元数据字段中看到,找到了匹配的意图!但动作不见了!
    【解决方案2】:

    你必须给你的意图一个行动!在您的回复中,操作字段为空!

    如果您使用集成,您的流程是这样的:

    fb -> api.ai -> your service -> api.ai -> fb
    

    您的自定义场景可能会这样使用它(不使用集成,只是纯文本理解):

    fb -> your service -> api.ai -> your service -> fb
    

    编辑: 由于我已经为自己实现了帐户链接,因此我编写了以下中间件。 https://github.com/hhucn/dbas-fb-hook/blob/master/src/dbas_fb_hook/handler.clj

    现在的流程是:fb -> service -> api.ai -> fb,因为我只是过滤掉与身份验证相关的内容并将消息直接转发到 api.ai(使用 api.ai facebook 集成)或我的其他身份验证服务。

    (PS。微服务是最好的)

    【讨论】:

    • 我勾选了“使用 webhook”,并用更好的流程图更新了我的问题,请阅读更新。
    • 您的操作丢失。
    • @wiradikusuma 我添加了另一种使用与 api.ai 进行帐户链接的方法。 API.ai 就像它直接从 facebook 获取消息一样。 (为逻辑调用 webhook。)
    【解决方案3】:

    当 API.AI 用作 NLU 时(即调用/query),它不会调用 webhook。所以,要么是:

    Messenger → my app (webhook for Messenger) → api.ai
    

    或:

    Messenger → api.ai → my app (webhook for api.ai)
    

    【讨论】:

      【解决方案4】:

      这取决于您是否使用 api.ai url 进行无代码代理配置。

      在无代码代理中,api.ai 将为您托管 facebook 交互端点。 [https://bots.api.ai/facebook/*][1]。 在无代码代理中,典型流程为

      Messenger -> api.ai server->api.ai nlp -> your webhook
      

      (如果为 webhook 实现启用了意图) 在你的场景中

      Messenger -> your api server ->api.ai nlp -> your webhook /end point
      

      为该意图创建。这是一个明显的缺点,因为 1 个特定意图的实现可能会跨多个端点、api 进行拆分。在您的情况下,您可能没有在您的意图上启用 webhook 实现,'嘿'

      【讨论】:

        【解决方案5】:

        理想情况下,FB 信使不会与您的webhook for messenger service 交谈。工作流程应该是FB messenger->api.ai->webhook (where your actual logic resides) & 即使你使用my app (webhook for Messenger),那么你首先不应该需要 api.ai。这是因为在采取任何行动之前,您需要知道用户在说什么,而这只能由 NLP 完成!使用my app (webhook for Messenger) 将直接替换 NLP。

        第二件事,我们在 api.ai json 响应中看不到实现。如果在任何时候 webhook 调用失败,来自 api.ai 的默认响应将作为对用户查询的回复发布,并且当 api.ai 本身不理解用户想说的上下文时,将调用回退。输入默认响应也将帮助您进行调试。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-12-19
          • 2023-03-28
          相关资源
          最近更新 更多