Nuxeo Alexa Skill - Fragen Sie Alexa, um Ihre Dokumente in Nuxeo zu finden


Thu 09 March 2017 Von Rémi Cattiau

Auf der AWS re:Invent 2016 waren Alexa und virtuelle Assistenten ein Highlight, das viel Aufmerksamkeit auf sich zog. Alexa ist der Sprachdienst für Amazon Echo, Echo Dot, Echo Tap und Fire TV, der Fertigkeiten und Skills für Kunden bereitstellt, um über Sprache intuitiver mit Geräten zu interagieren. Als frühzeitiger Anwender besitze ich die erste Generation von Echo und Echo Dot, und habe 3 von diesen Geräten in meiner kleinen Wohnung. Ich muss sagen, ich bin ziemlich begeistert.

Ich glaube, Alexa wird schon bald Teil unserer Zukunft sein - es wird bereits von Ford und Volkswagen in ihre Autos integriert und wir werden zweifellos weitere Integrationen wie diese sehen. Bei Nuxeo versuchen wir, mit den neuesten Technologien Schritt zu halten. Es macht uns Spaß, coole neue Funktionen und Integrationen zu entwickeln, die der Plattform neue Möglichkeiten eröffnen. Deshalb habe ich mich dazu entschlossen, ein Nuxeo Skill zu entwickeln, mit dem wir über Alexa Dokumente auf der Nuxeo Platform suchen können.

Wie das Skill funktioniert, sehen Sie in diesem kurzen Clip:




Alle notwendigen Quellen finden Sie in meinem GitHub Repository. Sehen wir uns nun die Implementierung genauer an.

Skill-Informationen

Zunächst müssen Sie allgemeine Informationen wie Sprache, Name und Symbol Ihres Skills festlegen.

Nuxeo Skill-Informationen

Integrationsmodell

Im nächsten Schritt legen Sie die Art der Interaktion mit Ihrem Skill, die verschiedenen ‚Intents' und deren Inhalte fest.

{
  "intents": [
    {
      "intent": "GetMyLast"
    },
    {
      "intent": "GetMyTasks"
    },
    {
      "intent": "Search",
      "slots": [
        {
          "name": "Criteria",
          "type": "Value"
        }
      ]
    },
    {
      "intent": "AMAZON.RepeatIntent"
    },
    {
      "intent": "AMAZON.HelpIntent"
    },
    {
      "intent": "AMAZON.StopIntent"
    },
    {
      "intent": "AMAZON.CancelIntent"
    }
  ]
}

AMAZON.* ist das vordefinierte ‚Intent', das für die Navigation verwendet wird. Dann haben Sie ‚GetMyLast' und ‚GetMyTasks', die ohne Parameter auskommen, und zuletzt das Intent ‚Search', das einen ‚Kriterien' Parameter nutzt.

Screenshot der Nuxeo-Authentifizierung

Konfiguration

Verknüpfung von Konten

Um eine Abfrage auf dem Nuxeo Server durchführen zu können, müssen wir einen Token erstellen, auf dem wir Anmeldeinformationen speichern und dynamische Abfragen auf dem Server durchführen können.

Die UI-Authentifizierung erfordert SSL und eine eindeutige URL. Deshalb musste ich eine UI erstellen, in der Sie die URL Ihres Servers eingeben können, um nur ein Alexa Skill zu erhalten. Sie können gerne selbst Ihr Glück versuchen und Ihre eigenes erstellen und für andere bereitstellen.

Sobald Ihr Konto durch die UI bestätigt wurde, wird eine Token-Authentifizierung auf Nuxeo generiert, die mit dem Benutzer und der Server-URL zur neuen Alexa Token-Authentifizierung kombiniert wird.

Screenshot der Nuxeo-Authentifizierung

Da mein Hosting PHP nativ unterstützt, konnte ich diesen Teil mit dem Nuxeo PHP Client und Polymer für die UI erstellen, da wir bei Nuxeo sehr gerne mit Polymer arbeiten.

Die Quellen hierzu finden Sie in diesem GitHub Repository

Jetzt müssen wir nur noch unser Skill für diese Authentifizierungs-UI einrichten.

Konfiguration der Nuxeo-Authentifizierung

Lambda

Nun müssen Sie den Dienstendpunkt definieren. Lambda ist relativ einfach einzurichten, deshalb haben wir uns dafür entschieden.

Konfiguration des Nuxeo Executors

Ich habe mich für die Verwendung von NodeJS und den Nuxeo JavaScript Client entscheiden, da es schnell und einfach ist.

Die Abhängigkeiten des Projekts lauten:

  • alexa-sdk: Für Alexa primitiv
  • alexa-app: Ein kleines Framework, um die Alexa App-Entwicklung zu vereinfachen
  • nuxeo: Um auf den Nuxeo Server zuzugreifen
  • striptags: Um sämtliche HTML-Tags aus der Antwort zu entfernen, da Alexa keine Tags mag

Für jedes ‚Intents' muss eine Methode festgelegt werden:

app.intent('Search', function(request, response) {
    // Retrieve the criteria
    var criteria = request.slot("Criteria");
    // Load the token from the request
    return loadToken(request)
        .then(function(nuxeo) {
            // Search Nuxeo
            return nuxeo.repository().query({...});
        })
        .then(function(doc) {
            // List the results
            ...
            for (let id in doc.entries) {
                ...
                docs += res;
                response.say(res);
            }
            // Add a result card for the Alexa UI
            response.card({type: 'Standard', ...}});
        }).catch ( function(err) {
            // Handle Error
            handleError(err, request, response);
        });
});

Die Quellen finden Sie im GitHub Repository

Vielen Dank!

Ein großes Dankeschön an alle API-Clients, PHP und NodeJS, die diese Integration für mich so einfach gemacht haben. Ich hoffe, Ihnen gefällt dieses Skill genauso gut wie mir!


Etikettiert: AWS, Nuxeo Integration, How to