2017-07-01 51 views
3

這個討論適用於任何集成,但作爲一個例子我會談談Messenger。另外,爲了給出上下文,我的後端是用Java編寫的。邏輯的API.AI流程

從我讀過的,對於自定義場景(例如賬戶鏈接),我們不應該直接使用API​​.AI。相反,Messenger設置(developer.facebook.com)中的「回撥URL」應該指向我們自己託管的應用,後者又調用api.api.ai/v1/query。那是對的嗎?

其次,我在API.AI中的意圖已經有Use webhook打勾。我假設邏輯流將如下所示:

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

顯然,這不是case-API.AI從未調用網絡掛接。

這是我送 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(這是相同的應用程序,但不同的端點)本身?

回答

0

當API.AI用作NLU(即,您調用/query)時,它不會調用webhook。因此,它要麼:

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

或:

Messenger → api.ai → my app (webhook for api.ai) 
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。Microservices are best)

+0

我已經選中「使用網絡掛接」,並已更新了我更好的流程圖問題,請閱讀更新。 – wiradikusuma

+0

您的操作丟失。 – MrOerni

+0

@wiradikusuma我已經添加了另一種方式來使用與api.ai帳戶鏈接。 API.ai的行爲就像直接從facebook獲取消息一樣。 (調用webhook的邏輯。) – MrOerni

1

您的流程邏輯不正確。

就你而言,Facebook永遠不會直接與你的應用程序通話。它會始終首先將用戶輸入發送到api.ai。然後,api.ai會嘗試從您創建的所有意圖中找到匹配項。

這很重要,如果api.ai設法找到一個意圖,它會調用你配置的webhook。但是,如果api.ai無法從您的任何意圖中找到匹配項,則會調用迴應意圖,並將響應發回給Facebook。在這種情況下,您的應用程序將不會被調用。

我的建議是在開始在Facebook上測試之前,在api中使用測試工具(位於右上角)。ai以確保您的輸入可以通過正確的意圖進行過濾,並且您的應用程序可以隱藏來自api.ai的輸入。

+0

其實你可以在元數據字段中看到匹配的意圖被發現!但是這個動作不見了! – MrOerni

0

這取決於如果你使用api.ai網址的代碼少代理配置。

在無代碼代理中,api.ai將爲您提供Facebook交互終端。 [https://bots.api.ai/facebook/ *] [1]。 在無代碼劑,典型的流程會

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

(如果意圖是爲網絡掛接完成啓用) 在您的方案

Messenger -> your api server ->api.ai nlp -> your webhook /end point 

爲intent.This創建作爲履行一個顯著的缺點的一個特定的意圖可能會分裂在多個端點,API。在你的情況下,你可能沒有啓用webhook履行你的意圖,'嘿'

0

理想情況下,FB信使不會跟你的webhook for messenger service。即使您使用了my app (webhook for Messenger),工作流程也應該是FB messenger->api.ai->webhook (where your actual logic resides) &那麼您應該首先不需要api.ai。這是因爲在採取任何行動之前,您需要知道用戶說什麼&只能通過NLP完成!使用my app (webhook for Messenger)將直接替換NLP。

第二件事,我們無法在api.ai json響應中看到滿足感。如果在任何時候webhook調用失敗,您的api.ai默認響應將作爲對用戶查詢的回覆發佈&當api.ai本身不理解用戶想說的內容時,將會調用fallback。輸入默認響應也會幫助您進行調試。

enter image description here