2017-07-01 2 views
3

Diese Diskussion gilt für jede Integration, aber als Beispiel werde ich über Messenger sprechen. Um Kontext zu geben, ist mein Backend auch in Java geschrieben.API.AI Fluss der Logik

Von dem, was ich gelesen habe, für kundenspezifische Szenarien (z Kontoverknüpfung), wir nicht API.AI direkt verwenden sollten. Stattdessen sollte die „Callback-URL“ in Messenger-Einstellungen (developer.facebook.com) weist auf eigene gehosteten Anwendung, die wiederum api.api.ai/v1/query nennt. Ist das korrekt?

Zweitens meine Absicht in API.AI hat bereits Use webhook abgehakt. Ich nehmen der Fluss der Logik wäre wie folgt:

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

Offenbar ist es nicht das case-API.AI nie die Webhook nennt.

Dies ist die JSON ich zu API.AI gesendet:

{"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"} 

Und das ist die Antwort von 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" 
} 

es, dass meine app bedeutet dies sollte Rufen Sie den Webhook selbst an (welche dieselbe App, aber einen anderen Endpunkt hat)?

Antwort

0

Wenn API.AI als NLU verwendet wird (dh Sie rufen /query), ruft es die Webhooks nicht auf. Also, es ist entweder:

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

oder:

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

Sie müssen Ihre Absicht eine Aktion geben! In Ihrer Antwort ist das Aktionsfeld leer!

Wenn Sie die Integrationen verwenden, um Ihre Strömung ist wie folgt:

fb -> api.ai -> your service -> api.ai -> fb 

Ihr individuelles Szenario es wie folgt aus (keine Verwendung der Integrationen, nur reine Textverständnis) verwenden:

fb -> your service -> api.ai -> your service -> fb 

EDIT: Da ich Konto implementiert haben für mich die Verknüpfung, ich schrieb folgende Middleware. https://github.com/hhucn/dbas-fb-hook/blob/master/src/dbas_fb_hook/handler.clj

Die Strömung ist jetzt: fb -> service -> api.ai -> fb, weil ich herausfiltern nur die Auth bezogenes und leiten die Nachrichten direkt an api.ai (die api.ai Facebook-Integration verwenden) oder meine anderen Authentifizierungsdienst.

(PS. Microservices sind die besten)

+0

Ich habe getickt „Use Webhook“ und haben meine Frage mit einer besseren Ablaufplan aktualisiert, lesen Sie bitte das Update. – wiradikusuma

+0

Ihre Aktion fehlt. – MrOerni

+0

@wiradikusuma Ich habe eine andere Möglichkeit hinzugefügt, die Verknüpfung mit api.ai zu verwenden. API.ai verhält sich wie es die Nachrichten direkt von Facebook bekommt. (Rufen Sie den Webhook für die Logik auf.) – MrOerni

1

Ihre Logik der Strömung nicht korrekt ist.

In Ihrem Fall wird Facebook niemals direkt mit Ihrer App kommunizieren. Es sendet immer zuerst die Benutzereingabe an api.ai. api.ai wird dann versuchen, eine Übereinstimmung von allen Absichten zu finden, die Sie erstellt haben.

Dies ist wichtig, wenn api.ai eine Absicht finden kann, wird er die Webhook Sie konfiguriert haben, aufrufen. Wenn api.ai jedoch keine Übereinstimmung mit einer Ihrer Absichten findet, ruft er die Fallback-Absichten auf, die die Antwort zurück an Facebook senden. In diesem Fall wird Ihre App nicht aufgerufen.

Sie Mein Vorschlag ist vor dem Start Prüfung auf Facebook, verwenden Sie das Testwerkzeug (in der oben rechts) in api.ai, um sicherzustellen, dass Ihre Eingabe durch die richtigen Absichten gefiltert werden kann und Ihre App in der Lage ist, Ihre Eingabe von api.ai zu rezessivieren.

+0

Tatsächlich können Sie im Metadatenfeld sehen, dass eine übereinstimmende Absicht gefunden wird! Aber die Aktion fehlt! – MrOerni

0

Es hängt davon ab, ob Sie api.ai URL für Code weniger Agentenkonfiguration verwenden.

Im Code-losen Agenten wird api.ai die Facebook-Interaktionsendpunkte für Sie hosten. [https://bots.api.ai/facebook/ *] [1]. In dem Code weniger Mitteln, typischer Fluss

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

seine In Ihrem Szenario

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

für das intent.This erstellt (wenn Vorsatz für Webhook Erfüllung aktiviert ist) ist ein wesentlicher Nachteil als Fulfillment von 1 bestimmten Absicht könnte über mehrere Endpunkte, api's.In Ihrem Fall haben Sie möglicherweise Webhook Fulfillment auf Ihre Absicht nicht aktiviert, 'Hey'

0

Idealerweise wird FB Messenger nicht mit Ihremsprechen. Der Arbeitsablauf sollte FB messenger->api.ai->webhook (where your actual logic resides) & sein, selbst wenn Sie my app (webhook for Messenger) verwenden, dann sollten Sie api.ai an erster Stelle nicht benötigen. Es ist, weil, bevor Sie irgendwelche Maßnahmen ergreifen, Sie müssen wissen, was Benutzer sagt &, die nur von NLP getan werden kann! Mit my app (webhook for Messenger) wird NLP direkt ersetzen.

Zweite Sache, wir können nicht Erfüllung in api.ai JSON Antwort sehen. Wenn zu irgendeinem Zeitpunkt der Webhook-Aufruf fehlschlägt, wird Ihre Standardantwort von api.ai als Antwort auf die Benutzeranfrage gepostet. & Fallback wird aufgerufen, wenn api.ai selbst den Kontext nicht versteht, was der Benutzer sagen möchte. Die Eingabe der Standardantwort hilft Ihnen auch beim Debuggen.

enter image description here