Facile à créer LINE BOT avec Java Servlet

Je vais vous présenter comment créer facilement LINE BOT en utilisant Java Servlet. Le code source complet introduit peut être trouvé à https://github.com/riversun/line-bot-servlet-examples.git

Se préparer à créer un LINE BOT

J'écrirai en supposant que l'API de messagerie peut être utilisée. Je laisserai la méthode d'inscription etc. à un autre article.

L'inscription est ici https://business.line.me/ja/services/bot

Créer un LINE BOT avec un servlet

Créez un LINE BOT avec ** HttpServlet **.

LINE officiel Github (https://github.com/line/line-bot-sdk-java) présente un exemple d'utilisation de Spring Boot (*).

Cette fois, je voudrais créer un LINE BOT avec ** Suppin's HttpServlet ** au lieu de Spring Boot.

Comme vous le savez, l'utilisation de Spring Boot facilite la création d'un LINE BOT, ** HttpServlet ** vise à être aussi simple que l'exemple Spring Boot.

Pour cela, nous avons préparé une bibliothèque d'aide. Même s'il s'agit d'une bibliothèque, c'est un wrapper fin qui utilise https://github.com/line/line-bot-sdk-java en interne, donc je pense que vous pouvez l'utiliser en incorporant la source dans votre propre servlet. .. Le nom de la méthode est également basé sur l'exemple Spring Boot.

** Cliquez ici pour la source de la bibliothèque d'aide ** https://github.com/riversun/line-bot-helper

_ * Le SDK officiel (actuellement v1.6.0) a également un line-bot-servlet. En regardant le contenu, il semble qu'une simple classe d'assistance (vérification de signature, etc.) pour HttpServlet soit préparée. Il semble qu'il ne fasse pas de mappage d'événements comme Spring Boot. _

Créer un BOT de réponse au message

Il s'agit d'un exemple dans lequel lorsqu'un utilisateur envoie un message texte à BOT, BOT répond sous forme de texte.

Le code ressemble à ceci:

LineBotExample01Servlet.java


@SuppressWarnings("serial")
public class LineBotExample01Servlet extends LineBotServlet {

	// CHANNEL_SECRET et CHANNEL_ACCESS_TOKEN peut être spécifié sous forme de chaîne de caractères tel quel
	private static final String CHANNEL_SECRET ="Mettez ce que vous avez" ;
	private static final String CHANNEL_ACCESS_TOKEN ="Mettez ce que vous avez";
	@Override
	protected ReplyMessage handleTextMessageEvent(MessageEvent<TextMessageContent> event) throws IOException {

		//Message envoyé par l'utilisateur au BOT
		TextMessageContent userMessage = event.getMessage();

		//Obtenez le profil de l'utilisateur
		UserProfileResponse userProfile = getUserProfile(event.getSource().getUserId());

		//Message de réponse du BOT
		String botResponseText = userProfile.getDisplayName() + "M."
				+ "「" + userMessage.getText() + "J'ai dit";

		TextMessage textMessage = new TextMessage(botResponseText);

		return new ReplyMessage(event.getReplyToken(), Arrays.asList(textMessage));
	}

	@Override
	protected ReplyMessage handleDefaultMessageEvent(Event event) {
		//Ne rien faire si vous recevez un message qui n’est pas remplacé(Renvoie null)
		return null;
	}

	@Override
	public String getChannelSecret() {
		return CHANNEL_SECRET;
	}

	@Override
	public String getChannelAccessToken() {
		return CHANNEL_ACCESS_TOKEN;
	}

Image d'opération

line_bot_small.png

Commentaire

Lorsque vous recevez un message texte d'un utilisateur

ReplyMessage handleTextMessageEvent(MessageEvent<TextMessageContent> event)

Sera appelé, alors faites le traitement nécessaire dans cette méthode. Dans cet exemple, la remarque de l'utilisateur (texte) est acquise, traitée un peu et répondue.

Si vous renvoyez un ReplyMessage comme indiqué ci-dessous, la réponse sera envoyée à l'utilisateur.

return new ReplyMessage(event.getReplyToken(), Arrays.asList(textMessage));

Ici

return null;

S'il est défini sur, aucune réponse ne sera envoyée.

Au fait,

Arrays.asList(textMessage)

La raison en est que plusieurs messages peuvent être renvoyés en même temps. Par exemple, si vous souhaitez renvoyer des images et du texte en même temps

Arrays.asList(imageMessage,textMessage)

Faire.

Dans cet exemple, handleTextMessageEvent a été remplacé, mais vous pouvez également recevoir chaque événement en remplaçant les méthodes suivantes.

protected ReplyMessage handleImageMessageEvent(MessageEvent<ImageMessageContent> event)
protected ReplyMessage handleLocationMessageEvent(MessageEvent<LocationMessageContent> event)  
protected ReplyMessage handleStickerMessageEvent(MessageEvent<StickerMessageContent> event)  
protected ReplyMessage handleAudioMessageEvent(MessageEvent<AudioMessageContent> event)  
protected ReplyMessage handleVideoMessageEvent(MessageEvent<VideoMessageContent> event)  
protected void handleUnfollowEvent(UnfollowEvent event) 
protected ReplyMessage handleFollowEvent(FollowEvent event) 
protected ReplyMessage handleJoinEvent(JoinEvent event) 
protected void handleLeaveEvent(LeaveEvent event) 
protected ReplyMessage handlePostbackEvent(PostbackEvent event) 
protected ReplyMessage handleBeaconEvent(BeaconEvent event) 

Finalement,


@Override
    protected ReplyMessage handleDefaultMessageEvent(Event event) {
        //Ne rien faire si vous recevez un message qui n’est pas remplacé(Renvoie null)
        return null;
    }

Cependant, il est appelé lorsqu'un événement qui n'est pas remplacé est reçu.

Afin d'inclure la bibliothèque d'assistance qui inclut le ** LineBotServlet ** ci-dessus, spécifiez ce qui suit dans Gradle / Maven.

Gradle compile 'org.riversun:line-bot-helper:1.0.0'

Maven

<dependency>
	<groupId>org.riversun</groupId>
	<artifactId>line-bot-helper</artifactId>
	<version>1.0.0</version>
</dependency>

Facile à essayer sur votre PC local

Le but de cet article est de créer un servlet, mais en prime, j'écrirai également sur la façon de l'essayer sur un PC local.

C'est beaucoup plus facile de créer un servlet, mais c'est encore faible si vous pouvez l'essayer tout de suite.

Il est difficile de démarrer et de déployer Tomcat etc., alors utilisons le conteneur ** Jetty ** qui vous permet d'essayer facilement le servlet.

Jetty est très facile à utiliser.

Tout d'abord, ajoutez ce qui suit à Gradle / Maven.

Gradle compile 'org.eclipse.jetty:jetty-server:9.4.0.v20161208' compile 'org.eclipse.jetty:jetty-webapp:9.4.0.v20161208'

Maven


<dependency>
	<groupId>org.eclipse.jetty</groupId>
	<artifactId>jetty-server</artifactId>
	<version>9.4.0.v20161208</version>
</dependency>
<dependency>
	<groupId>org.eclipse.jetty</groupId>
	<artifactId>jetty-webapp</artifactId>
	<version>9.4.0.v20161208</version>
</dependency>

Démarrez Jetty et accédez au servlet

Après avoir écrit dans Gradle / Maven, écrivez et exécutez le code comme suit.

AppMain.java


public class AppMain {

	public static void main(String[] args) throws Exception {

		ServletHandler handler = new ServletHandler();

		handler.addServletWithMapping(LineBotExample01Servlet.class, "/callback");

		// loclahost:Lancer Jetty à 3000
		Server jetty = new Server(3000);

		jetty.setHandler(handler);
		jetty.start();
		jetty.join();

	}

}

handler.addServletWithMapping(LineBotExample01Servlet.class, "/callback");

Comme indiqué dans, acceptez le ** LineBotExample01Servlet ** créé précédemment avec le chemin ** / callback **.

Si vous l'exécutez sur votre PC local, vous pourrez accéder au servlet LINE BOT à l'adresse http://127.0.0.1:3000/callback.

Rendre le servlet LINE BOT créé accessible de l'extérieur

Même si vous le lancez localement, vous devez le déployer sur le serveur et le publier vers l'extérieur afin de se comporter comme un LINE BOT. Rendons le serveur créé à l'aide de Jetty accessible de l'extérieur afin que vous puissiez facilement l'essayer à des fins de test.

Ici, nous utilisons un service appelé ngrok qui est parfait à ces fins.

Téléchargez ngrok ci-dessous https://ngrok.com/download

Sur la ligne de commande ngrok http -region=ap 127.0.0.1:3000

Ensuite, ngrok démarre et l'écran suivant s'affiche ngrok.png

Avec juste ça L'url https://xxxxx.ap.ngrok.io a été mappée sur https://127.0.0.1:3000!

_ (La partie xxxxx change de manière aléatoire à chaque fois que vous démarrez ngrok. Vous pouvez le corriger en vous inscrivant) _

Ceci est pratique car https est requis pour l'URL du crochet Web de LINE BOT.

À ce stade, tout ce que vous avez à faire est d'enregistrer l'URL suivante dans l'URL du Web Hook. https://xxxxx.ap.ngrok.io/callback

** conseils ngrok ** Si vous spécifiez ** - region = ap **, la région Asie-Pacifique sera sélectionnée. Lors de l'accès depuis le Japon, il présente un avantage en termes de latence par rapport à la région américaine par défaut.

je le ferai

Lorsque vous saisissez un message depuis l'application LINE sur votre smartphone line_bot_small.png

Ça s'est bien passé

Résumé

La prochaine fois aimerait essayer un exemple d'augmentation des matériaux à traiter un peu plus, comme l'envoi et la réception d'images.

Recommended Posts

Facile à créer LINE BOT avec Java Servlet
Facile à créer LINE BOT avec Java Servlet Partie 2: J'ai essayé des messages image et des modèles
Facile à créer Slack Bot avec Java
Comment créer un robot Discord (Java)
Facile à parcourir avec les expressions régulières Java
J'ai essayé de faire une authentification de base avec Java
Rendre la ligne Java Stream agréable avec Eclipse
Comment créer une fonction de messagerie LINE avec Ruby
Faisons un Bot LINE avec Ruby + Sinatra - Partie 2
Faisons un Bot LINE avec Ruby + Sinatra - Partie 1
J'avais l'habitude de faire nc (netcat) avec JAVA normalement
[Java] Comment rompre une ligne avec StringBuilder
(Java) BDD facile avec Spectrum?
Java pour jouer avec Function
Java - Comment créer JTable
Connectez-vous à DB avec Java
Connectez-vous à MySQL 8 avec Java
[Débutant] Essayez de créer un jeu RPG simple avec Java ①
Volume 1 de vouloir créer votre bot SCANDAL LINE préféré
Je veux faire une liste avec kotlin et java!
Je veux créer une fonction avec kotlin et java!
Java pour apprendre avec les ramen [Partie 1]
[Java] Points à noter avec Arrays.asList ()
Comment créer un conteneur Java
SpringBoot + Redis Démo facile à faire
Osez défier Kaggle avec Java (1)
J'ai essayé d'interagir avec Java
[Java] Intégration LINE avec Spring Boot
Java, des tableaux pour débuter avec les débutants
Accès facile à la base de données avec Java Sql2o
Comment créer un tableau Java
Je veux créer un bouton avec un saut de ligne avec link_to [Note]
J'ai essayé de créer une application Android avec MVC maintenant (Java)
Interface Essayez de créer un problème Java TypeScript 7-3
Comment créer un résumé de calendrier Java
[Java] Résumez comment comparer avec la méthode equals
Créez quelque chose comme Enum de Java avec Typescript
Introduction aux algorithmes avec java-Search (recherche prioritaire en profondeur)
[Java] Les débutants veulent faire des rencontres. 1er
Java: Comment envoyer des valeurs du servlet au servlet
[Java] Rendez le programme 10 fois plus rapide avec parallelStream
bot de ligne
[LINE BOT] J'ai créé un Ramen BOT avec Java (Maven) + Heroku + Spring Boot (1)
Comment créer une application avec un mécanisme de plug-in [C # et Java]
Introduction aux algorithmes avec java --Search (recherche de priorité de largeur)
[LINE @] J'ai essayé de créer un BOT de conversion de calendrier occidental de calendrier japonais [API de messagerie]
[Java] J'ai essayé de me connecter en utilisant le pool de connexion avec Servlet (tomcat) & MySQL & Java
Hello World avec Java Servlet et JSP (démarrage facile du serveur Web avec Maven + Jetty)
Défi pour gérer les caractères déformés avec Java AudioSystem.getMixerInfo ()
Interagir avec l'API de message LINE à l'aide de Lambda (Java)
Rendre l'environnement SpringBoot1.5 + Gradle4.4 + Java8 + Docker compatible avec Java11
Introduction aux algorithmes avec java --Search (bit full search)
Déployez des applications Web Java sur Azure avec maven
Je l'ai fait en Java pour toujours rendre (a == 1 && a == 2 && a == 3) vrai
Essayez d'intégrer Ruby et Java avec Dapr
Comment utiliser le framework Java avec AWS Lambda! ??
Gestion de l'état de la conversation (contexte) (gestion de session?) Avec LINE BOT
Je veux utiliser java8 forEach avec index
Je voulais que (a == 1 && a == 2 && a == 3) vrai en Java
Opération de chaîne de caractères Essayez de changer le problème Java en TypeScript 9-3