Ich werde vorstellen, wie LINE BOT einfach mit Java Servlet erstellt werden kann. Den vollständigen eingeführten Quellcode finden Sie unter https://github.com/riversun/line-bot-servlet-examples.git
Ich werde unter der Annahme schreiben, dass die Messaging-API verwendet werden kann. Ich werde die Registrierungsmethode usw. einem anderen Artikel überlassen.
Die Registrierung ist hier https://business.line.me/ja/services/bot
Erstellen Sie einen LINE BOT mit ** HttpServlet **.
Der offizielle LINE-Github (https://github.com/line/line-bot-sdk-java) stellt ein Beispiel für die Verwendung von Spring Boot (*) vor.
Dieses Mal möchte ich einen LINE BOT mit ** Suppins HttpServlet ** anstelle von Spring Boot erstellen.
Wie Sie wissen, ist es mit Spring Boot ganz einfach, einen LINE BOT zu erstellen. ** HttpServlet ** soll so einfach sein wie das Spring Boot-Beispiel.
Zu diesem Zweck haben wir eine Hilfsbibliothek vorbereitet. Obwohl es sich um eine Bibliothek handelt, handelt es sich um einen Thin Wrapper, der intern https://github.com/line/line-bot-sdk-java verwendet. Ich denke, Sie können ihn verwenden, indem Sie die Quelle in Ihr eigenes Servlet integrieren. .. Der Methodenname basiert ebenfalls auf dem Spring Boot-Beispiel.
** Klicken Sie hier für die Quelle der Hilfsbibliothek ** https://github.com/riversun/line-bot-helper
_ * Das offizielle SDK (derzeit v1.6.0) hat auch ein Line-Bot-Servlet. In Bezug auf den Inhalt scheint eine einfache Hilfsklasse (Signaturüberprüfung usw.) für HttpServlet vorbereitet zu sein. Es scheint, dass es keine Ereigniszuordnung wie Spring Boot macht. _
Dies ist ein Beispiel, in dem BOT in Textform antwortet, wenn ein Benutzer eine Textnachricht an BOT sendet.
Der Code sieht folgendermaßen aus:
LineBotExample01Servlet.java
@SuppressWarnings("serial")
public class LineBotExample01Servlet extends LineBotServlet {
// CHANNEL_GEHEIMNIS und KANAL_ACCESS_TOKEN kann so wie es ist als Zeichenfolge angegeben werden
private static final String CHANNEL_SECRET ="Setzen Sie, was Sie haben" ;
private static final String CHANNEL_ACCESS_TOKEN ="Setzen Sie, was Sie haben";
@Override
protected ReplyMessage handleTextMessageEvent(MessageEvent<TextMessageContent> event) throws IOException {
//Vom Benutzer an BOT gesendete Nachricht
TextMessageContent userMessage = event.getMessage();
//Holen Sie sich das Benutzerprofil
UserProfileResponse userProfile = getUserProfile(event.getSource().getUserId());
//Antwortnachricht von BOT
String botResponseText = userProfile.getDisplayName() + "Herr."
+ "「" + userMessage.getText() + "Ich sagte";
TextMessage textMessage = new TextMessage(botResponseText);
return new ReplyMessage(event.getReplyToken(), Arrays.asList(textMessage));
}
@Override
protected ReplyMessage handleDefaultMessageEvent(Event event) {
//Tun Sie nichts, wenn Sie eine Nachricht erhalten, die nicht überschrieben wird(Gibt null zurück)
return null;
}
@Override
public String getChannelSecret() {
return CHANNEL_SECRET;
}
@Override
public String getChannelAccessToken() {
return CHANNEL_ACCESS_TOKEN;
}
Wenn Sie eine Textnachricht von einem Benutzer erhalten
ReplyMessage handleTextMessageEvent(MessageEvent<TextMessageContent> event)
Wird aufgerufen, ebenso die notwendige Verarbeitung in dieser Methode. In diesem Beispiel wird die Bemerkung (der Text) des Benutzers erfasst, ein wenig verarbeitet und beantwortet.
Wenn Sie eine Antwortnachricht wie unten gezeigt zurücksenden, wird die Antwort an den Benutzer gesendet.
return new ReplyMessage(event.getReplyToken(), Arrays.asList(textMessage));
Hier
return null;
Wenn diese Option aktiviert ist, wird keine Antwort gesendet.
Apropos,
Arrays.asList(textMessage)
Der Grund dafür ist, dass mehrere Nachrichten gleichzeitig zurückgegeben werden können. Zum Beispiel, wenn Sie Bilder und Text gleichzeitig zurückgeben möchten
Arrays.asList(imageMessage,textMessage)
Machen.
In diesem Beispiel wurde handleTextMessageEvent überschrieben. Sie können jedoch jedes Ereignis auch empfangen, indem Sie die folgenden Methoden überschreiben.
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)
Schließlich,
@Override
protected ReplyMessage handleDefaultMessageEvent(Event event) {
//Tun Sie nichts, wenn Sie eine Nachricht erhalten, die nicht überschrieben wird(Gibt null zurück)
return null;
}
Es wird jedoch aufgerufen, wenn ein Ereignis empfangen wird, das nicht überschrieben wird.
Geben Sie in Gradle / Maven Folgendes an, um die Hilfsbibliothek einzuschließen, die das oben genannte ** LineBotServlet ** enthält.
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>
Der Zweck dieses Artikels ist es, ein Servlet zu erstellen, aber als Bonus werde ich auch darüber schreiben, wie man es auf einem lokalen PC versucht.
Es ist viel einfacher, ein Servlet zu erstellen, aber es ist immer noch schwach, wenn Sie es sofort ausprobieren können.
Das Starten und Bereitstellen von Tomcat usw. ist mühsam. Verwenden Sie daher den Container ** Jetty **, mit dem Sie das Servlet problemlos testen können.
Anlegestelle ist sehr einfach zu bedienen.
Fügen Sie zunächst Folgendes zu Gradle / Maven hinzu.
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>
Schreiben und führen Sie den Code nach dem Schreiben in Gradle / Maven wie folgt aus.
AppMain.java
public class AppMain {
public static void main(String[] args) throws Exception {
ServletHandler handler = new ServletHandler();
handler.addServletWithMapping(LineBotExample01Servlet.class, "/callback");
// loclahost:Starten Sie Jetty bei 3000
Server jetty = new Server(3000);
jetty.setHandler(handler);
jetty.start();
jetty.join();
}
}
handler.addServletWithMapping(LineBotExample01Servlet.class, "/callback");
Akzeptieren Sie wie in gezeigt das ** LineBotExample01Servlet **, das zuvor mit dem Pfad ** / callback ** erstellt wurde.
Wenn Sie es auf Ihrem lokalen PC ausführen, können Sie unter http://127.0.0.1:3000/callback auf das LINE BOT-Servlet zugreifen.
Selbst wenn Sie es lokal starten, müssen Sie es auf dem Server bereitstellen und nach außen veröffentlichen, um sich als LINE BOT zu verhalten. Lassen Sie uns den mit Jetty erstellten Server von außen zugänglich machen, damit Sie ihn problemlos zu Testzwecken ausprobieren können.
Hier verwenden wir einen Dienst namens ngrok, der für diese Zwecke perfekt ist.
Laden Sie ngrok von unten herunter https://ngrok.com/download
An der Kommandozeile
ngrok http -region=ap 127.0.0.1:3000
Dann startet ngrok und der folgende Bildschirm wird angezeigt
Mit genau dem Die URL https://xxxxx.ap.ngrok.io wurde https://127.0.0.1:3000 zugeordnet!
_ (Der xxxxx-Teil ändert sich jedes Mal zufällig, wenn Sie ngrok starten. Sie können ihn beheben, indem Sie sich anmelden.) _
Dies ist praktisch, da für die Web-Hook-URL von LINE BOT https erforderlich ist.
Zu diesem Zeitpunkt müssen Sie lediglich die folgende URL in der Web Hook-URL registrieren.
https://xxxxx.ap.ngrok.io/callback
** ngrok Tipps ** Wenn Sie ** - region = ap ** angeben, wird die Region Asien-Pazifik ausgewählt. Beim Zugriff von Japan aus hat dies einen Vorteil in Bezug auf die Latenz gegenüber der Standardregion in den USA.
Wenn Sie eine Nachricht über die LINE-App auf Ihrem Smartphone eingeben
Es ging gut
Nächstes Mal möchte ein Beispiel für die Erhöhung der zu behandelnden Materialien versuchen, z. B. das Senden und Empfangen von Bildern.
Recommended Posts