2017-09-27 53 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