2017-09-27 69 views
1

我试图提高事件到Api.ai和Python客户端通过无法传递事件数据Api.ai

ai = apiai.ApiAI(CLIENT_ACCESS_TOKEN) 
parm = {} 
parm['amount'] = 222 
parm['CName'] = 'CustName' 

event1 = apiai.events.Event("MyCustomEvent") 
event1.data = parm 
request = ai.event_request(event1) 

MyCustomEvent被定义并连接到正确的意图数据。 意图中定义了强制性参数CName和金额

事件和意图在发送请求时被触发。 但数据没有得到映射

我在做什么错了?有人可以请帮助 或者指点我一些样本来得到这个工作

回答

1

这有点棘手,这是我在使用API​​.ai时发现的。据我所知,API.ai有很多“无证的功能”,这就是其中之一。

您可以在触发事件时真正设置参数,除非您尝试触发的事件具有与触发时传递给该意图的参数相同的参数。接下来发生的事情如下:API.ai会神奇地和神奇地将这些参数“空白”,就好像它们被意图重置一样。

我已经发布在API.ai论坛上,如果它是一个实际的功能或错误,但我迄今还没有得到任何回应。

所以给你一个具体的例子,假设我们有:

Intent: "customIntent" 
Entity: "amount" 
Entity: "cname" 
Event: "myCustomEvent" 
ContextIn: "testIn" 
ContextOut: "testOut" 

如果我触发此意图与包含以下JSON网络挂接的事件:

{ 
    "followupEvent": { 
    "name": "myCustomEvent", 
    "data": { 
     "amount": "2222", 
     "Cname": "a persons name", 
     "testentity": "this shouldn't be blank" 
    } 
    } 
} 

量和CNAME将被空白并被意图重置,您可以在API.ai控制台中查看上下文以查看此结果,但是,testentity不会是空白并且重置,因为testentity不在意图的参数列表中。

这很奇怪和令人困惑,但这就是通过我运行多个测试发生的事情。为了解决这个问题,我创建了一个解决方法,通过使用与我试图首先触发的意图相同的“用户语句”和contextin和contextout来创建另一个意图,但是不添加任何参数到这个新的意图。

它看起来是这样的:

Intent: "customIntent" 
Entity: "amount" 
Entity: "cname" 
ContextIn: "testIn" 
ContextOut: "testOut" 

Intent: "workaroundIntent" 
Event: "myCustomEvent" 
ContextIn: "testIn" 
ContextOut: "testOut" 

那怎么我解决了这个自己,至于为什么出现这种情况,我仍然被API.ai一名工作人员在等待该响应自己。

+0

对于迟到的歉意,实际上错过了你的回复。感谢您的好解释,一直无法弄清楚这种行为。将尝试你的解决方案。同时投入了一个效率低下的解决方法。 – Ajay