API.AI逻辑流程

时间:2017-07-01 12:31:10

标签: dialogflow

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

根据我的阅读,对于自定义方案(例如帐户关联),我们不应直接使用API​​.AI。相反,"回拨网址"在Messenger设置(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(这是相同的app但是不同的端点)本身?

5 个答案:

答案 0 :(得分:1)

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

如果您使用的是集成,那么您的流程就像这样:

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,因为我只是过滤掉与auth相关的内容并将消息直接转发到api.ai(使用api.ai facebook集成)或我的其他身份验证服务。

(PS。微服务是最好的)

答案 1 :(得分:1)

你的流程逻辑不正确。

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

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

我的建议是在Facebook开始测试之前,使用api.ai中的测试工具(位于右上角)确保您的输入可以通过正确的意图进行过滤,您的应用程序可以隐藏您的输入来自api.ai。

答案 2 :(得分:0)

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

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

或:

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

答案 3 :(得分:0)

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

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

CONCATENTATE

(如果启用了webhook履行的意图) 在你的场景中

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

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

答案 4 :(得分:0)

理想情况下,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本身不理解用户想说的内容时,将调用fallback。输入默认响应也可以帮助您进行调试。

enter image description here