无法将事件数据传递给Api.ai

时间:2017-09-27 09:06:45

标签: python python-3.x dialogflow

我正在尝试将事件提升为Api.ai并在python客户端中传递数据

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已定义并链接到正确的意图。 Intent具有已定义的CName和amount

的必需参数

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

我做错了什么?有人可以帮忙吗 或者指出一些样本来实现这个目标

1 个答案:

答案 0 :(得分:1)

这有点棘手,这是我在使用API​​.ai时发现的。据我所知,API.ai有很多"未记录的功能",这是其中之一。

您可以在触发事件时实际设置参数,除非您尝试触发的事件与您在触发时传递给该意图的参数具有相同的参数。接下来会发生以下情况:API.ai将神秘而神奇地"空白"输出这些参数,好像它们被意图重置一样。

我已经在API.ai论坛上发布了这个,如果它是一个实际的功能或错误,但到目前为止我还没有得到任何回复。

所以为了给你一个具体的例子,让我们说:

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

如果我使用包含以下JSON的webhook中的事件触发此意图:

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

金额和Cname将为空白并由意图重置,您可以在API.ai控制台中查找上下文以查看此结果,但是,由于测试不是“不”,因此测试不会被删除并重置。在意图的参数列表中。

这很奇怪而且令人困惑,但那是我跑过的多次测试所发生的事情。为了解决这个问题,我创建了一个解决方法,通过使用相同的"用户句子来做出额外的意图"而contextin和contextout是我试图在第一时间尝试触发的意图,但不同之处在于没有为这个新意图添加任何参数。

它看起来像这样:

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

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

我自己如何解决这个问题,为什么会发生这种情况,我仍然在等待API.ai工作人员之一的回复。