J'ai essayé de créer une compétence Clova en Java

introduction

[9/3 @ Sapporo] LINE BOOT AWARDS - Clova Skill Hands-on co-sponsorisé par le groupe d'utilisateurs Java Hokkaido (Java Do) est également assisté par des participants slapstick. C'était un grand succès. Merci à tous ceux qui ont coopéré à l'événement.

J'ai utilisé node.js dans Hands-on, mais depuis que JUG l'a co-sponsorisé, j'ai écouté Hands-on et j'ai fait presque le même contenu Clova CEK SDK Java Il a été implémenté avec -sdk-java).

Je laisserai cette note de mise en œuvre pour cet article.

procédure

Ici, la configuration suivante est réalisée.

[Vous] ----- [Clova] ----- [Classe EchoHandler sur Spring Boot]

Préparation

M. Nobisuke Comment démarrer le développement des compétences avec Clova CEK ~ Démarrer le développement avec Node.js ~ utilisé comme texte pratique / #% E4% BD% BF% E3% 81% 84% E5% A7% 8B% E3% 82% 81% E3% 81% AE% E7% 94% B3% E8% AB% 8B)

3.Application à utiliser
4.Créer un modèle d'interaction
Intentions et créneaux horaires
fente
Intention
5.Créer un modèle interactif

Procédez de la même manière.

Le nom d'intention CurreySearchIntent créé ici est important, alors notez-le.

Implémentation des compétences Clova en Java (Spring Boot)

Dans le document de Nobisuke, la compétence Clova est implémentée dans node.js, mais ici elle est implémentée en utilisant Java (Spring Boot).

Créer un projet Spring Boot

Accédez à Spring Initializr et définissez les éléments suivants.

--Version de démarrage du printemps: 2.0.4

Téléchargez clova.zip avec le bouton Generate Project.

Extrayez clova.zip et ouvrez-le en tant que projet Maven dans un IDE (IntelliJ, Eclipse, Netbeans, etc.).

Paramètres pom.xml

Ajoutez la dépendance Java Clova CEK SDK entre <dependencies> ~ </ dependencies> dans pom.xml,

pom.xml


<dependencies>

(Omis)

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

</dependencies>

application.properties

Définissez le chemin d'accès au fichier du serveur qui accepte les requêtes de Clova.

application.properties


cek.api-path=/clova

Cela définira https: // xxxx ... / clova pour accepter les requêtes POST de Clova.

(Vous pouvez également définir cek.client.default-locale etc. si nécessaire)

Créer une classe de gestionnaire de demande

Créez une classe de gestionnaire de requêtes qui gère les requêtes POST de Clova.

Cette classe est [Exemple d'implémentation Java du SDK Clova CEK](https://github.com/line/clova-cek-sdk-java/blob/master/samples/echo/src/main/java/com/linecorp/ Il est fait en se référant à clova / extension / sample / hello / EchoHandler.java).

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("Trouvez une boutique de curry."))
      .shouldEndSession(false)
      .build();
  }

  @IntentMapping("CurreySearchIntent")
  CEKResponse handleRepeatIntent(@SlotValue Optional<String> area) {
    String outputSpeechText = area
      .map(this::callbackShop)
      .orElse("Je n'ai pas pu l'entendre.");
    return CEKResponse.builder()
      .outputSpeech(text(outputSpeechText))
      .shouldEndSession(false)
      .build();
  }

  private String callbackShop(String inArea) {
    switch (inArea) {
      case "Akihabara":
        return inArea + "Le magasin de curry recommandé est Fujiyama Dragon Curry.";
      case "Kanda":
        return inArea + "Le magasin de curry recommandé est Kyoeidou.";
      default:
        return "Je suis désolé, je n'ai pas compris.";
    }
  }

  @IntentMapping("Clova.CancelIntent")
  CEKResponse handleCancelIntent() {
    return CEKResponse.builder()
      .outputSpeech(text("La recherche de boutiques de curry prendra fin."))
      .shouldEndSession(true)
      .build();
  }

  @SessionEndedMapping
  CEKResponse handleSessionEnded() {
    log.info("La compétence de recherche de magasin de curry est terminée.");
    return CEKResponse.empty();
  }

}

Je vais expliquer quelques points importants.

IntentMapping, annotation SlotValue

@ IntentMapping est le processus (méthode) correspondant au nom d'intention personnalisée / d'intention intégrée nom. ) Est une annotation.

Dans cet exemple, la méthode handleCancelIntent () avec @IntentMapping (Clova.CancelIntent) correspond à l'intention intégrée Clova.CancelIntent lorsque la compétence est annulée (terminée).

De plus, la méthode handleRepeatIntent (@SlotValue ...) with@IntentMapping (CurreySearchIntent)correspond à la question" Dis-moi la boutique de curry à Akihabara (région) "créée lors de la préparation. Faire.

L'argument «@ SlotValue» indique que la valeur de l'emplacement est l'argument passé. Dans cet exemple, la valeur de la case ʻarea` de "Dites-moi le magasin de curry à Akihabara (région)" est passée.

Classe CEKResponse

La classe CEKResponse définie dans la valeur de retour représente la réponse de Clova. Instanciez avec le constructeur.

ʻOutputSpeechest la chaîne à laquelle répondre.shouldEndSession` indique si la compétence doit être terminée par true / false.

autres

@ LaunchMapping est une annotation donnée à la méthode correspondante lorsque la compétence est lancée.

@ SessionEndedMapping est une annotation donnée à la méthode correspondante à la fin de la compétence.

Contrôle de fonctionnement

Exécutez la classe Spring Boot ClovaApplication.

Nobisuke [Comment démarrer le développement des compétences avec Clova CEK ~ Démarrer le développement avec 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.Confirmer la communication sans hébergement avec ngrok
10.Test réel de la machine

Procédez de la même manière (ngrok peut être téléchargé et exécuté depuis le site d'accueil sans utiliser npm, ni homebrew pour macOS. C'est aussi bien).

Si vous pouvez communiquer ainsi, vous réussissez.

en conclusion

Tout comme line-bot-sdk-java, qui crée un Bot (Messaging API), Clova dispose également de [Clova CEK SDK Java]( Il semble que vous puissiez facilement créer des compétences Clova en Java en utilisant https://github.com/line/clova-cek-sdk-java).

Le slot correspondant (Sapporo, Chitose) et le message de réponse sont différents, mais le code source équivalent est placé dans gishi-yama / ClovaSample. Il y a.

Je voudrais continuer à remettre en question la manière de coopérer avec Bot.

** Publicité **

Le matériel pratique pour créer LINE Bot avec Java est maintenant disponible!

Recommended Posts

J'ai essayé de créer une compétence Clova en Java
J'ai essayé de créer une compétence Alexa avec Java
J'ai essayé de créer une fonction de connexion avec Java
J'ai essayé de créer un environnement de développement java8 avec Chocolatey
J'ai essayé de convertir une chaîne de caractères en un type LocalDate en Java
J'ai créé un client RESAS-API en Java
J'ai essayé de créer une application cartographique simple dans Android Studio
java j'ai essayé de casser un simple bloc
Essayez de créer un babillard en Java
Je voulais que (a == 1 && a == 2 && a == 3) vrai en Java
J'ai essayé de créer une application de clonage LINE
J'ai essayé de sortir quatre-vingt-dix-neuf en Java
J'ai essayé de casser le bloc avec java (1)
J'ai essayé de créer une application de conversation en Java à l'aide de l'IA «A3RT»
J'ai essayé la métaprogrammation avec Java
Comment créer un environnement Java en seulement 3 secondes
J'ai essayé d'implémenter la notification push Firebase en Java
# 2 [Note] J'ai essayé de calculer quatre-vingt-dix-neuf avec Java.
Comment créer un URI de données (base64) en Java
J'ai essayé d'implémenter la méthode de division mutuelle d'Eugrid en Java
~ J'ai essayé d'apprendre la programmation fonctionnelle avec Java maintenant ~
J'ai essayé de découvrir ce qui avait changé dans Java 9
[Azure] J'ai essayé de créer une application Java pour la création d'applications Web gratuites - [Débutant]
J'ai créé un PDF avec Java.
J'ai essayé d'interagir avec Java
J'ai essayé d'utiliser JWT en Java
J'ai essayé de résumer l'apprentissage Java (1)
J'ai essayé de résumer Java 8 maintenant
J'ai essayé de moderniser une application Java EE avec OpenShift.
[Rails] J'ai essayé de créer une mini application avec FullCalendar
[Débutant] J'ai créé un programme pour vendre des gâteaux en Java
Je voulais juste créer une propriété réactive en Java
Créer une méthode pour renvoyer le taux de taxe en Java
Même en Java, je veux afficher true avec un == 1 && a == 2 && a == 3
Je veux créer un fichier Parquet même en Ruby
J'ai essayé d'utiliser Dapr en Java pour faciliter le développement de microservices
J'ai essayé d'implémenter une application web pleine de bugs avec Kotlin
J'ai essayé de créer un environnement de développement padrino avec Docker
J'ai essayé de créer une fonction / écran d'administrateur de site commercial avec Java et Spring
[Azure] J'ai essayé de créer une application Java gratuitement ~ Se connecter avec FTP ~ [Débutant]
J'ai essayé d'utiliser l'API Elasticsearch en Java
J'ai essayé un problème de calendrier avec Ruby
Je ne peux pas créer une classe Java avec un nom spécifique dans IntelliJ
J'ai essayé de résumer les expressions Java lambda
J'ai essayé d'écrire du code comme une déclaration de type en Ruby
J'ai essayé le nouveau yuan à Java
Comment créer un nouveau projet Gradle + Java + Jar dans Intellij 2016.03
J'ai essayé de créer un environnement de développement Spring MVC sur Mac
Créer une application TODO dans Java 7 Créer un en-tête
[Java] J'ai essayé de faire un labyrinthe par la méthode de creusage ♪
J'ai essayé d'incorporer une formule dans Javadoc
J'ai essayé de créer une compétence d'écho d'Amazon qui raconte des informations récupérées en Java à l'aide d'Alexa Skills Kit (ASK)
Pour créer un fichier Zip lors du regroupement des résultats de recherche de base de données en Java
Même en Java, je veux afficher true avec un == 1 && a == 2 && a == 3 (édition PowerMockito)
Je souhaite créer un SNS Web sombre avec Jakarta EE 8 avec Java 11