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
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é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. _
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;
}
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>
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>
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.
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
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.
Lorsque vous saisissez un message depuis l'application LINE sur votre smartphone
Ça s'est bien passé
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