Ich habe versucht, eine Clova-Fähigkeit in Java zu erstellen

Einführung

[9/3 @ Sapporo] LINE BOOT AWARDS - Clova Skill Hands-on, gesponsert von der Java-Benutzergruppe Hokkaido (Java Do) Es war ein großer Erfolg. Vielen Dank an alle, die an der Veranstaltung mitgearbeitet haben.

Ich habe node.js in Hands-on verwendet, aber da JUG es mitgesponsert hat, habe ich Hands-on angehört und fast den gleichen Inhalt Clova CEK SDK Java erstellt. Es wurde mit -sdk-java implementiert.

Ich werde diesen Implementierungshinweis für diesen Artikel hinterlassen.

Verfahren

Hier wird die folgende Konfiguration realisiert.

[Sie] ----- [Clova] ----- [EchoHandler-Klasse auf Spring Boot]

Vorbereitung

Mr. Nobisukes So starten Sie die Entwicklung von Fähigkeiten mit Clova CEK ~ Starten Sie die Entwicklung mit Node.js ~ wird als praktischer Text verwendet / #% E4% BD% BF% E3% 81% 84% E5% A7% 8B% E3% 82% 81% E3% 81% AE% E7% 94% B3% E8% AB% 8B)

3.Anwendung zu starten
4.Erstellen eines Interaktionsmodells
Absichten und Slots
Slot
Absicht
5.Erstellen Sie ein interaktives Modell

Gehen Sie genauso vor.

Notieren Sie sich den hier erstellten Absichtsnamen "CurreySearchIntent", da dieser wichtig ist.

Implementierung von Clova-Fähigkeiten in Java (Spring Boot)

In Nobisukes Dokument ist die Clova-Fähigkeit in node.js implementiert, hier wird sie jedoch mit Java (Spring Boot) implementiert.

Erstellen eines Spring Boot-Projekts

Greifen Sie auf Spring Initializr zu und legen Sie die folgenden Elemente fest.

Laden Sie clova.zip mit der Schaltfläche "Projekt generieren" herunter.

Extrahieren Sie clova.zip und öffnen Sie es als Maven-Projekt in einer IDE (IntelliJ, Eclipse, Netbeans usw.).

pom.xml Einstellungen

Fügen Sie die Clova CEK SDK Java-Abhängigkeit zwischen <Abhängigkeiten> ~ </ Abhängigkeiten> in pom.xml hinzu.

pom.xml


<dependencies>

(Weggelassen)

  <dependency>
    <groupId>com.linecorp.clova</groupId>
    <artifactId>clova-extension-boot-web</artifactId>
    <version>1.0.0</version>
  </dependency>

</dependencies>

application.properties

Legen Sie den Dateipfad des Servers fest, der Anforderungen von Clova akzeptiert.

application.properties


cek.api-path=/clova

Dadurch wird "https: // xxxx ... / clova" so eingestellt, dass POST-Anforderungen von Clova akzeptiert werden.

(Sie können bei Bedarf auch "cek.client.default-locale" usw. festlegen.)

Erstellen Sie eine Anforderungshandlerklasse

Erstellen Sie eine Anforderungshandlerklasse, die POST-Anforderungen von Clova verarbeitet.

Diese Klasse ist Clova CEK SDK Java-Implementierungsbeispiel. Es wird unter Bezugnahme auf clova / extension / sample / hello / EchoHandler.java erstellt.

EchoHandler.java


package com.example.clova;

import com.linecorp.clova.extension.boot.handler.annotation.*;
import com.linecorp.clova.extension.boot.message.response.CEKResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Optional;

import static com.linecorp.clova.extension.boot.message.speech.OutputSpeech.text;

@CEKRequestHandler
public class EchoHandler {

  private static final Logger log = LoggerFactory.getLogger(EchoHandler.class);

  @LaunchMapping
  CEKResponse handleLaunch() {
    return CEKResponse.builder()
      .outputSpeech(text("Finde einen Curry-Laden."))
      .shouldEndSession(false)
      .build();
  }

  @IntentMapping("CurreySearchIntent")
  CEKResponse handleRepeatIntent(@SlotValue Optional<String> area) {
    String outputSpeechText = area
      .map(this::callbackShop)
      .orElse("Ich konnte es nicht hören.");
    return CEKResponse.builder()
      .outputSpeech(text(outputSpeechText))
      .shouldEndSession(false)
      .build();
  }

  private String callbackShop(String inArea) {
    switch (inArea) {
      case "Akihabara":
        return inArea + "Der empfohlene Curry-Laden ist Fujiyama Dragon Curry.";
      case "Kanda":
        return inArea + "Der empfohlene Curry-Laden ist Kyoeidou.";
      default:
        return "Es tut mir leid, ich habe es nicht verstanden.";
    }
  }

  @IntentMapping("Clova.CancelIntent")
  CEKResponse handleCancelIntent() {
    return CEKResponse.builder()
      .outputSpeech(text("Die Suche nach Curry-Läden endet."))
      .shouldEndSession(true)
      .build();
  }

  @SessionEndedMapping
  CEKResponse handleSessionEnded() {
    log.info("Die Suche nach Curry-Shops ist beendet.");
    return CEKResponse.empty();
  }

}

Ich werde einige wichtige Punkte erklären.

IntentMapping, SlotValue-Annotation

@ IntentMapping ist der Prozess (Methode), der dem Namen der benutzerdefinierten Absicht / eingebaute Absicht entspricht. ) Ist eine Anmerkung.

In diesem Beispiel entspricht die Methode "handleCancelIntent ()" mit "@IntentMapping (Clova.CancelIntent)" der integrierten Absicht "Clova.CancelIntent", wenn die Fertigkeit abgebrochen (beendet) wird.

Außerdem entspricht die Methode "handleRepeatIntent (@SlotValue ...)" mit "@IntentMapping (CurreySearchIntent)" der Frage "Sagen Sie mir den Curry-Laden in Akihabara (Bereich)", die in der Vorbereitung erstellt wurde. Machen.

Das Argument "@ SlotValue" gibt an, dass der Wert des Slots das übergebene Argument ist. In diesem Beispiel wird der Wert des "area" -Slots von "Sag mir den Curry-Laden in Akihabara (area)" übergeben.

CEKResponse-Klasse

Die im Rückgabewert festgelegte CEKResponse-Klasse repräsentiert die Antwort von Clova. Instanziieren Sie mit dem Builder.

outputSpeech ist die Zeichenfolge, auf die geantwortet werden soll. shouldEndSession gibt an, ob die Fertigkeit mit true / false beendet werden soll.

Andere

@ LaunchMapping ist eine Anmerkung zur entsprechenden Methode, wenn die Fertigkeit gestartet wird.

@ SessionEndedMapping ist eine Anmerkung zur entsprechenden Methode am Ende der Fertigkeit.

Funktionsprüfung

Führen Sie die Spring Boot ClovaApplication-Klasse aus.

Nobisukes [So starten Sie die Entwicklung von Fähigkeiten mit Clova CEK ~ Starten Sie die Entwicklung mit Node.js ~](https://dotstud.io/blog/clova-cek-nodejs-tutorial/#%E4%BD%BF % E3% 81% 84% E5% A7% 8B% E3% 82% 81% E3% 81% AE% E7% 94% B3% E8% AB% 8B)

 7.Bestätigen Sie die Kommunikation ohne Hosting mit ngrok
10.Tatsächlicher Maschinentest

Gehen Sie genauso vor (ngrok kann von der Homepage heruntergeladen und ausgeführt werden, ohne npm oder homebrew für macOS zu verwenden. Es ist auch gut).

Wenn Sie so kommunizieren können, sind Sie erfolgreich.

abschließend

Genau wie line-bot-sdk-java, das einen Bot (Messaging-API) erstellt, verfügt Clova auch über Clova CEK SDK Java scheint es einfach zu machen, Clova-Kenntnisse in Java zu erstellen.

Der entsprechende Steckplatz (Sapporo, Chitose) und die Antwortnachricht sind unterschiedlich, aber der entsprechende Quellcode befindet sich in gishi-yama / ClovaSample. Es gibt.

Ich möchte weiterhin herausfordern, wie man mit Bot zusammenarbeitet.

** Werbung **

Praktisches Material zum Erstellen von LINE Bot mit Java ist jetzt verfügbar!

Recommended Posts

Ich habe versucht, eine Clova-Fähigkeit in Java zu erstellen
Ich habe versucht, Alexa-Fähigkeiten mit Java zu erstellen
Ich habe versucht, eine Anmeldefunktion mit Java zu erstellen
Ich habe versucht, mit Chocolatey eine Java8-Entwicklungsumgebung zu erstellen
Ich habe versucht, in Java von einer Zeichenfolge in einen LocalDate-Typ zu konvertieren
Ich habe einen RESAS-API-Client in Java erstellt
Ich habe versucht, eine einfache Karten-App in Android Studio zu erstellen
Java Ich habe versucht, einen einfachen Block zu brechen
Versuchen Sie, ein Bulletin Board in Java zu erstellen
Ich wollte (a == 1 && a == 2 && a == 3) in Java wahr machen
Ich habe versucht, eine LINE-Klon-App zu erstellen
Ich habe versucht, neunundneunzig in Java auszugeben
Ich habe versucht, den Block mit Java zu brechen (1)
Ich habe versucht, mit AI "A3RT" eine Talk-App in Java zu erstellen.
Ich habe versucht, Metaprogrammierung mit Java
So erstellen Sie eine Java-Umgebung in nur 3 Sekunden
Ich habe versucht, die Firebase-Push-Benachrichtigung in Java zu implementieren
# 2 [Anmerkung] Ich habe versucht, neunundneunzig mit Java zu berechnen.
So erstellen Sie einen Daten-URI (base64) in Java
Ich habe versucht, die Methode der gegenseitigen Teilung von Eugrid in Java zu implementieren
~ Ich habe jetzt versucht, funktionale Programmierung mit Java zu lernen ~
Ich habe versucht herauszufinden, was sich in Java 9 geändert hat
[Azure] Ich habe versucht, eine Java-App für die Erstellung von kostenlosen Web-Apps zu erstellen. [Anfänger]
Ich habe ein PDF mit Java erstellt.
Ich habe versucht, mit Java zu interagieren
Ich habe versucht, JWT in Java zu verwenden
Ich habe versucht, das Java-Lernen zusammenzufassen (1)
Ich habe jetzt versucht, Java 8 zusammenzufassen
Ich habe versucht, eine Java EE-Anwendung mit OpenShift zu modernisieren.
[Rails] Ich habe versucht, eine Mini-App mit FullCalendar zu erstellen
[Anfänger] Ich habe ein Programm zum Verkauf von Kuchen in Java erstellt
Ich wollte nur eine reaktive Eigenschaft in Java erstellen
Erstellen Sie eine Methode, um den Steuersatz in Java zurückzugeben
Selbst in Java möchte ich true mit == 1 && a == 2 && a == 3 ausgeben
Ich möchte eine Parkettdatei auch in Ruby erstellen
Ich habe versucht, Dapr in Java zu verwenden, um die Entwicklung von Mikroservices zu erleichtern
Ich habe versucht, eine Webanwendung voller Fehler mit Kotlin zu implementieren
Ich habe versucht, mit Docker eine Padrino-Entwicklungsumgebung zu erstellen
Ich habe versucht, mit Java und Spring eine Funktion / einen Bildschirm für den Administrator einer Einkaufsseite zu erstellen
[Azure] Ich habe versucht, eine kostenlose Java-App zu erstellen ~ Mit FTP verbinden ~ [Anfänger]
Ich habe versucht, die Elasticsearch-API in Java zu verwenden
Ich habe ein Kalenderproblem mit Ruby versucht
Ich kann in IntelliJ keine Java-Klasse mit einem bestimmten Namen erstellen
Ich habe versucht, Java-Lambda-Ausdrücke zusammenzufassen
Ich habe versucht, Code wie eine Typdeklaration in Ruby zu schreiben
Ich habe das neue Yuan-Problem in Java ausprobiert
So erstellen Sie ein neues Gradle + Java + Jar-Projekt in Intellij 2016.03
Ich habe versucht, eine Spring MVC-Entwicklungsumgebung auf einem Mac zu erstellen
Erstellen Sie eine TODO-App in Java 7 Create Header
[Java] Ich habe versucht, mit der Grabmethode ein Labyrinth zu erstellen ♪
Ich habe versucht, eine Formel in Javadoc einzubetten
Ich habe versucht, mit dem Alexa Skills Kit (ASK) eine Echo-Fähigkeit von Amazon zu erstellen, die kratzte Informationen in Java anzeigt.
So erstellen Sie eine Zip-Datei beim Gruppieren von Datenbanksuchergebnissen in Java
Selbst in Java möchte ich true mit == 1 && a == 2 && a == 3 ausgeben (PowerMockito Edition)
Ich möchte mit Jakarta EE 8 mit Java 11 ein dunkles Web-SNS erstellen