Ein Chatbot für Asset Control

Oct 29 2020
In diesem Artikel stelle ich einen Chatbot für Asset Control als lustiges kleines Projekt zusammen. Warum? Weil ich schon seit einiger Zeit einen Chatbot implementieren wollte - schon allein, um zu verstehen, wie das geht - und dies in der AC-Domäne nur natürlich erscheint.

In diesem Artikel stelle ich einen Chatbot für Asset Control als lustiges kleines Projekt zusammen. Warum? Weil ich schon seit einiger Zeit einen Chatbot implementieren wollte - schon allein, um zu verstehen, wie das geht - und dies in der AC-Domäne nur natürlich erscheint. Ich werde es auch in Slack integrieren, um zu sehen, wie dies in meine bereits vorhandenen Tools und Workflows passt.

Ein Chatbot um was zu tun?

Sie sind inzwischen an mehreren Stellen auf Chatbots gestoßen. Sie befinden sich möglicherweise auf Unternehmenswebsites und helfen Ihnen, häufig gestellte Fragen zu beantworten, Buchungen vorzunehmen usw.

In diesem Fall möchte ich einen Prototyp eines Chatbots zur Integration in Slack implementieren, mit dem ich mit Asset Control kommunizieren kann. Ich möchte möglicherweise nach Statusinformationen meiner AC-Umgebung fragen oder Daten anfordern.

Um die Implementierung zu steuern, habe ich die folgenden Fragen verwendet, die der Bot beantworten sollte:

  • Was ist der letzte Preis für XYZ?
  • Was war dieses Monat hoch für XYZ?
  • Wie viele Verdächtige heute?
  • Ist die Replikation auf dem neuesten Stand?

Implementieren wir den Bot also von Grund auf neu? Natürlich nicht. Es gibt eine Reihe von Lösungen, und ich habe mich schnell für Google Dialogflow entschieden. Mal sehen, wie das funktioniert.

Erstellen des Bots in Dialogflow

Um unseren Bot in Google Dialogflow zu erstellen , müssen wir einige Konzepte verstehen:

  • Absichten
  • Entitäten
  • Erfüllung

Eine Absicht bündelt alles, was zu einem bestimmten eng definierten Thema gehört, das der Bot behandeln sollte. In unserem Fall ist dies das Abrufen des letzten verfügbaren Preises einer Aktie aus unserem System. Wir werden Dialogflow verwenden, um den Bot zu trainieren, um zu verstehen, wann es in der Konversation um eine solche Absicht geht, indem wir ihm Trainingsphrasen geben. Wir werden das in einer Minute sehen.

Dann sind Entitäten Bausteine, aus denen sich unsere Konversation zusammensetzt und die von besonderem Interesse sind, damit wir sie als Parameter erfassen können. In unserem Fall wäre dies das Tickersymbol AAPL, wenn wir die Frage stellen: "Was ist der letzte Preis für AAPL?"

Das Fulfillment-Konzept ermöglicht es uns schließlich, über Webhooks auf Dienste im hinteren Bereich des Chatbots zuzugreifen. Dort werden wir mit Asset Control kommunizieren, um den angegebenen Bestand abzufragen und den letzten verfügbaren Preis abzurufen.

Jetzt bauen wir unseren Bot.

Schritt 1: Richten Sie Ihren Bot ein.

Gehe zu https://dialogflow.cloud.google.com/#/login und melden Sie sich an. Erstellen Sie dann einen Agenten AcChatBot:

Schritt 2: Erstellen Sie eine Aktienentität

Klicken Sie im Menü links neben Entitäten auf Plus, nennen Sie es Stock und geben Sie es [A-Z][A-Z0-9]{1,6}als regulären Ausdruck ein. Obwohl dies nicht vollständig mit Tickersymbolen übereinstimmt, ist es für unser Beispiel ausreichend und funktioniert mit den von Dialogflow selbst durchgeführten Überprüfungen regulärer Ausdrücke (z. B. nicht zu breit usw.). Dann speichere es.

Schritt 3: Erstellen Sie die Absicht des letzten Preises

Zeit für unsere letzte Preisabsicht. Last priceWählen Sie im Menü links das Plus neben Absichten aus, rufen Sie es auf und klicken Sie auf ADR TRAINING PHRASES:

Geben Sie ein What is the last price for AAPL?. Dann AAPLmit der Maus markieren . Dies öffnet ein Popup. Suchen Sie nach Stockund wählen Sie dann die angezeigte Option aus:

Wenn dies richtig gemacht wird, sieht das Ergebnis folgendermaßen aus, um sicherzustellen, dass Dialogflow die Bestandsentität korrekt erfasst:

WICHTIG! Scrollen Sie dann nach unten, öffnen Sie den Abschnitt "Erfüllung", klicken Sie auf "Erfüllung aktivieren" und wechseln Sie dann zu "Gefällt mir" Enable webhook call for this intent:

Dies ermöglicht es uns, unsere eigene Backend-Funktion aufzurufen und mit Asset Control zu kommunizieren.

Stellen Sie sicher, dass Sie die Absicht speichern, bevor Sie fortfahren.

Schritt 4: Implementieren Sie einen REST-Service zum Abrufen von Asset Control-Daten

Auch hier gibt es viele Möglichkeiten. Wir werden Spring Boot verwenden, da es das ganze schwere Heben für uns erledigt, und wir bleiben in Java und können daher sofort dieselbe Java-API von Asset Control verwenden, die Adetta verwendet.

Wenn Sie es noch nicht wissen, ist Adetta unsere Testautomatisierungssoftware für Asset Control. Schauen Sie sich hier die Einführung in Adetta an .

Das interessante Bit ist eine Klasse AcBotControllerund ihre handleIntentMethode wie unten gezeigt:

Sie können sehen, dass der Webhook für die Dialogflow-Erfüllung eine POST-Anforderung verarbeitet. Sowohl die Eingabe als auch die Ausgabe sind JSON. Und wir verwenden GoogleCloudDialogflowV2Webhook*Klassen, um sowohl die Anforderungs- als auch die Antwort-JSON für uns zu verarbeiten.

Die eigentliche Behandlung der Absicht wird an einen AcBotIntentHandler weitergeleitet, den wir durch den Aufruf erhalten AcBotIntents.getHandlerFor(request). Schauen wir uns diese Klasse an:

Wir bauen eine Zuordnung von Absichten zu Handlern auf (erinnern Sie sich an unsere Last priceAbsicht?) Und implementieren eine Methode zum Abrufen eines geeigneten Handlers, wenn die Absicht im Anforderungsobjekt codiert ist. Wir definieren auch einen Standardhandler für den Fall, dass wir keinen tatsächlichen Handler finden konnten:

Um unseren letzten Preis für eine bestimmte Aktie zu erhalten, schauen wir uns Folgendes an AcBotLastPriceIntentHandler:

Sie sehen, wie wir unseren Bestandsentitätsparameter aus dem Anforderungsobjekt request.getQueryResult().getParameters().getOrDefault("Stock", "")abrufen und dann getLastPriceMessageForStockwie hier gezeigt aufrufen :

Wir schützen uns vor einem fehlenden Wert für Aktien. Andernfalls durchsuchen wir unser Asset Control-System nach Aktien mit dem angegebenen Ticker. Falls wir kein solches ADO haben, zeigen wir die entsprechende Meldung an. Andernfalls rufen wir weiterhin Preisdaten für jedes gefundene ADO ab (während dies nur ein einziges ADO sein sollte, würde die Implementierung bei Bedarf nur mehrere Nachrichten zurückgeben.)

So finden wir den letzten Preis:

Wir laden die Zeitreihen des ADO, holen den letzten Datensatz und erstellen - falls vorhanden - eine Nachricht, die wie folgt lautet The last price for AAPL (C0.EQY.100101) is from 2020-06-12 at $338.00. Und wieder schützen wir uns vor Fällen, in denen wir keinen Preis finden können.

Mit Spring Boot können wir dies starten und unseren REST-Service auf localhost ausführen lassen: 8080 / ac-bot. Was als nächstes?

Nun, wir betrügen offensichtlich ein wenig, da wir diesen Dienst nirgendwo bereitstellen. Um ihn von außen verfügbar zu machen, werden wir ngrok verwenden , um einen Tunnel für uns einzurichten:

Schritt 5: Richten Sie unseren eigenen Fulfillment-Webhook ein

Als nächstes müssen wir Dialogflow wissen lassen, wo sich unser REST-Service befindet. Gehen Sie also zurück und klicken Sie im Menü links auf Erfüllung:

Geben Sie dann die https://...von ngrok angegebene Adresse und stellen Sie sicher , die Sie hinzufügen , /ac-botam Ende.

Ok, der Moment der Wahrheit. In der oberen rechten Ecke, wo es heißt Try it now, können wir tippen What is the last price for AAPL?und wenn alles in Ordnung ist, sollten wir die folgende Antwort erhalten:

Das ist spannend!

Schritt 6: Integrieren Sie unseren Chatbot in Slack

Jetzt werden wir die Dialogflow-Konsole nicht mehr verwenden, um mit unserem Bot zu spielen. Stattdessen werden wir es in Slack integrieren. Wählen Sie also Integrationen aus dem Menü links, suchen Sie Slack und starten Sie einen Testbot:

Gehen Sie dann zu Slack und beginnen Sie mit dem Bot zu chatten:

Dann können wir den Zyklus wiederholen, um die anderen Fragen / Absichten zu implementieren, die am Anfang des Artikels beschrieben wurden.

Schlussworte

Ich dachte, das macht Spaß. Und einfacher als ich dachte. Natürlich habe ich einige Abkürzungen genommen:

  • Den Dienst nur lokal ausführen.
  • Keine Berücksichtigung von Sicherheit, Zugriffskontrolle und Auswahl der Asset Control-Umgebung.
  • Sehr begrenzte Verwendung des Bots.

Ich hoffe, Ihnen hat dieser Artikel gefallen. Kontaktieren Sie uns, um Ihre Gedanken zu teilen, Fragen zu stellen usw. Wir sind hier, um Ihnen zu helfen.