首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >API.AI逻辑流

API.AI逻辑流
EN

Stack Overflow用户
提问于 2017-07-01 12:31:09
回答 5查看 483关注 0票数 3

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

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

其次,我在API.AI中的意图已经引起了Use webhook的注意。我假设逻辑流程如下:

代码语言:javascript
运行
复制
Messenger → my app (webhook for Messenger) → api.ai → my app (webhook for api.ai)

显然不是这样的-API.AI从不打电话给网络钩子。

这是我向发送给API.AI的JSON:

代码语言:javascript
运行
复制
{"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的响应API.AI:

代码语言:javascript
运行
复制
{
    "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"
}

这是否意味着我的应用程序应该调用web钩子(这是同一个应用程序,但端点不同)本身?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2017-08-07 10:56:03

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

代码语言:javascript
运行
复制
Messenger → my app (webhook for Messenger) → api.ai

或者:

代码语言:javascript
运行
复制
Messenger → api.ai → my app (webhook for api.ai)
票数 0
EN

Stack Overflow用户

发布于 2017-07-01 12:50:35

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

如果您使用的是集成,则您的流程如下所示:

代码语言:javascript
运行
复制
fb -> api.ai -> your service -> api.ai -> fb

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

代码语言:javascript
运行
复制
fb -> your service -> api.ai -> your service -> fb

编辑:由于我为自己实现了帐户链接,我编写了以下中间件。hook/handler.clj

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

(PS. )微型服务是最好的)

票数 1
EN

Stack Overflow用户

发布于 2017-07-01 21:43:34

你的流动逻辑不对。

在你的例子中,Facebook永远不会和你的应用直接对话。它总是首先将用户输入发送到api.ai。然后,api.ai将尝试从您创建的所有意图中找到一个匹配项。

这一点很重要,如果api.ai设法找到了一个意图,它将调用您配置的web钩子。然而,如果api.ai无法从您的意图中找到匹配的内容,它将调用回Facebook的回发回复的回退意图。在这种情况下,您的应用程序将不会被调用。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44860978

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档