Wir integrieren Yandex.Alisa und Sexshops über Spring Boot.
Das Thema Sprachassistenten gewinnt zunehmend an Bedeutung, und ich habe mich diesem Trend angeschlossen und den größten Großhandelsanbieter für Intimwaren und Yandex.Alisa integriert.
Idee : Der Lieferant hat persönliche Konten von Inhabern von Online-Shops, und es ist erforderlich, analytische Daten des Lieferanten über den Sprachkanal von Alice anzugeben.
Die Integration bestand aus zwei Teilen:
- Integration von Webservice und REST-API des Warenlieferanten.
- Integration von Yandex.Alice und einem Webdienst zur Bearbeitung von Benutzeranfragen.
Integration von Web Service und REST API des Warenlieferanten
Der Dienst sollte verstehen, was genau der Benutzer angefordert hat, und diese Daten vom Server des Lieferanten anfordern. Wir haben uns entschlossen, einen Service für Spring Boot zu schreiben.
Projekteinrichtung
Wir erstellen ein Repository in Git und stellen das Projekt mithilfe von
spring initializr beim Spring Boot bereit (wir geben das Web in Abhängigkeiten an).
Die Anforderung an den Dienst erfolgt im JSON-Format. Es hat eine
gut dokumentierte Struktur , so dass das Generieren von Klassen ganz einfach ist:

Praktischerweise werden Schlüsselwörter in der Anfrage hervorgehoben, z. B. eine erkannte Adresse. Sie befinden sich im Block
“entities”
:

In unserem Fall war es jedoch bequemer, das
Command
verwenden. Es enthält den vom Benutzer vorgegebenen Text. Da der Integrationsdienst mit der Erkennung von Bedeutungen befasst ist, müssen Anforderungen analysiert werden. Sie sind gut voneinander trennbar (Anfragen nach aufgegebenen Bestellungen, Anfragen nach Bestellungen in Bearbeitung), daher haben wir beschlossen, sie mit regulären Ausdrücken zu analysieren.
Die Integration mit dem Anbieter wurde über die Apache httpclients-Bibliothek und die Deserialisierung der XML-Antwort über jaxb implementiert.
Also haben wir die Anfrage aussortiert und Daten vom Lieferanten angefordert. Aber Alice ist ein strenges Mädchen und wird unsere Antwort daher nicht später als drei Sekunden später akzeptieren. Und der Benutzer möchte möglicherweise eine vergleichende Beschreibung seines Geschäfts in den letzten zwei Jahren erhalten, was mehr Zeit in Anspruch nehmen wird. Um dieses Problem zu lösen, haben wir
das Caching über die
ehCache- Bibliothek
aktiviert und das Laden von Benutzerdaten konfiguriert. Konfrontiert mit einer neuen Nuance: Alice gibt fast keine personalisierten Benutzerdaten an. Das heißt, Sie sehen nicht einmal E-Mails in der eingehenden Anfrage. Es gibt nur eine Benutzer-ID, die die eindeutige Kennung des Geräts anzeigt. Es wurde zum Schlüssel zur Identifizierung von Benutzern gemacht.
Der Schlüssel ist da, der Cache ist, es bleibt zu verstehen, wann Informationen in ihn geladen werden müssen. Der Benutzer fordert nicht sofort Daten an, sondern startet zuerst die Fertigkeit (dies ist der Begriff, der in Alice verwendet wird, ich werde weiter unten mehr darüber sprechen). Für den Server sieht dies wie eine Anforderung mit einem leeren Befehlstag aus. Zu diesem Zeitpunkt können Sie mit dem Herunterladen von Kundendaten beginnen. Bis zum Senden der ersten Benutzeranfrage wurden alle Daten bereits in unseren Service hochgeladen.
Für vollständige Tests und weitere Arbeiten im Produkt haben wir beschlossen, die Anwendung in der Cloud auf Heroku bereitzustellen. Gehen Sie dazu auf die
Heroku- Website, registrieren Sie sich, laden Sie heroku cli herunter und installieren Sie es. Öffnen Sie dann die Konsole und geben Sie den
heroku login
. Gehen Sie mit der Projekt-CD ~ / myapp in das Verzeichnis und führen Sie
heroku create
.
Wenn Sie die Anwendung erstellen, erstellt Git ein Remote-Repository namens heroku, das Ihrem lokalen Git-Repository zugeordnet ist. Standardmäßig generiert Heroku auf dem Server einen zufälligen Namen für Ihr Projekt. Sie können es ersetzen, indem Sie den Anwendungsnamen mit
heroku create myapp
.
Führen Sie den Befehl aus, um den Start der Anwendung zu überprüfen.
heroku ps:scale web=1
Und wenn Sie den Pfad „/“ gehen müssen, führen wir
heroku open
.
Der erste Integrationspunkt ist fertig.
Integration von Yandex.Alice und Anforderungsverarbeitungsservice
Wir implementieren die Integration durch die Schaffung der sogenannten Skill auf der Yandex-Plattform. Registrieren Sie sich zuerst in Yandex und gehen Sie dann zur
Entwicklerseite . Klicken Sie auf "Dialog erstellen" und wählen Sie den Dialogtyp aus:

Auf der Registerkarte "Einstellungen" müssen Sie die Felder ausfüllen:

- Fähigkeitsname - der Name, der in Alices Katalog angezeigt wird. Damit kann der Benutzer die Fertigkeit aktivieren, z. B. "Starten Sie die Fertigkeit [Name der Fertigkeit]".
- Aktivierungsname - Hier können Sie verschiedene Optionen für den Zugriff auf die Fertigkeit angeben. Standardmäßig ist eine Option für den Aktivierungsnamen der Name der Fertigkeit.
- Ein Beispiel für eine Anfrage ist eine Phrase, mit der Alice diese Fertigkeit aktiviert. Anfragen werden nach der Veröffentlichung als Schaltflächen im Verzeichnis angezeigt.
- Webhook-URL - Sie müssen die URL unseres Webdienstes angeben, der Benutzeranfragen verarbeitet.
- Yandex.Cloud - Yandex kann seiner Cloud einen Zuschuss gewähren, aber wir werden den Dienst auf Heroku bereitstellen, damit wir ihn nicht ankreuzen.
- Stimme - hier können Sie die Stimme auswählen, die Ihre Fähigkeiten sprechen. Es gibt verschiedene Variationen von Mann und Frau. Es ist jedoch zu bedenken, dass der Benutzer höchstwahrscheinlich sagen wird: "Alice, starte die Fertigkeit". Wenn Alice mit dem männlichen Bariton antwortet, kann dies etwas verwirrend sein.
- Einschränkungen der verwendeten Plattformen - ob für die Arbeit mit einer Fertigkeit ein Bildschirm erforderlich ist. In unserem Fall nein, setzen Sie also kein Häkchen.
- Datenschutz - Aktivieren Sie das Kontrollkästchen, wenn die Fertigkeit nicht im Katalog angezeigt werden soll.
- Brand Verification Site - Die Site-Adresse für die Fertigkeit. Die Fähigkeit, für die Sie dieses Feld ausgefüllt haben, wird nur moderiert, wenn Sie die Rechte an der angegebenen Site in Yandex.Webmaster bestätigt haben.
- Kategorie - in unserem Fall ist es "Business and Finance".
- Beschreibung - warum brauchst du deine Fähigkeiten? Die Skill-Beschreibung wird im Skills-Katalog angezeigt und steht den Benutzern zur Verfügung.
- Notizen für den Moderator - vielleicht das interessanteste Feld. Um in den Katalog zu gelangen, muss die Fertigkeit moderiert werden. Dies bedeutet, dass bestimmte Regeln eingehalten werden müssen, die hier beschrieben werden. In diesem Feld können Sie den Testprozess beschreiben. Zum Beispiel, wie man die Autorisierung und ein typisches Benutzerszenario durchläuft.
- Altersbeschränkungen - Trotz des Fachgebiets übermitteln wir Daten, die für jede Altersgruppe geeignet sind. Setzen Sie daher kein Häkchen.
- Symbol ist ein Muss :)
Speichern Sie den Dialog. Alle Änderungen an der Skill-Einstellung werden erst wirksam, wenn Sie auf die Schaltfläche "Speichern" klicken.
Wir haben die Integration konfiguriert, den Service geschrieben, jetzt können Sie ihn testen.
Gehen Sie zur Registerkarte "Testen".

Hier können Sie die Leistung der Fertigkeit überprüfen. Der Einfachheit halber haben wir der Fertigkeit einen schnellen Zugriff auf Funktionstasten hinzugefügt.
Es gibt Einschränkungen: Sie können die Fähigkeit nicht auf die Richtigkeit der Startphrase überprüfen und Sie können die Spracheingabe / -ausgabe nicht überprüfen. Und sollte es keine Probleme mit der Phrase geben, wird die korrekte Aussprache der Antworten erst nach der Veröffentlichung der Fertigkeit überprüft.
Nach allen Tests kann die Fertigkeit zur Moderation gesendet werden. Gehen Sie dazu zur Registerkarte "Allgemeine Informationen" und klicken Sie auf "Moderation".

Nach der Moderation wird anstelle dieser Schaltfläche die Schaltfläche Veröffentlichen angezeigt. Nach der Veröffentlichung wird die Fertigkeit im offiziellen Yandex-Katalog angezeigt.
Funktionen und Einschränkungen
Im Moment sind die Fähigkeiten etwas von Alice selbst getrennt (ich muss sagen "starte die Fähigkeit"), was es schwierig macht, Alice als vollwertige Sprachassistentin wahrzunehmen. Es wäre großartig, Ihren Kompetenzkontext zu gestalten und Alice direkt Fragen zu stellen. Es gibt keine Möglichkeit, andere Benutzerinformationen als userId abzurufen, bei der es sich um die Gerätekennung handelt. Daher muss jedes Gerät erneut autorisiert werden, was das Speichern einer einzelnen Benutzersitzung erschwert. Außerdem kann die Fertigkeit keine Push-Nachrichten senden, sodass die Erinnerungsfertigkeit nicht funktioniert.
Auf der anderen Seite können Fähigkeiten eine gute Plattform für die Implementierung der Sprachsteuerung sein, beispielsweise für Haushaltsgeräte. Die Fähigkeit kann auch nützlich sein, um zu trainieren oder Experimente durchzuführen, um Informationen über Bestellungen, Preise usw. zu klären. Im Allgemeinen, wenn Benutzer eine kurze genaue Frage stellen oder einen kurzen Befehl geben können.