Einfacher LINE BOT mit Java Servlet

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

Vorbereitung für einen LINE BOT

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 Servlet

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. _

Erstellen Sie einen Antwort-BOT auf die Nachricht

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;
	}

Operationsbild

line_bot_small.png

Kommentar

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>

Einfach auf Ihrem lokalen PC zu testen

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>

Starten Sie Jetty und greifen Sie auf das Servlet zu

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.

Machen Sie das erstellte LINE BOT-Servlet von außen zugänglich

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 ngrok.png

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.

Ich werde das machen

Wenn Sie eine Nachricht über die LINE-App auf Ihrem Smartphone eingeben line_bot_small.png

Es ging gut

Zusammenfassung

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

Einfacher LINE BOT mit Java Servlet
Einfacher LINE BOT mit Java Servlet Teil 2: Ich habe versucht, Bildnachrichten und Vorlagen zu erstellen
Einfach, Slack Bot mit Java zu machen
Wie erstelle ich einen Discord Bot (Java)
Einfach mit regulären Java-Ausdrücken zu stolpern
Ich habe versucht, eine Standardauthentifizierung mit Java durchzuführen
Machen Sie Java Stream Zeilenumbrüche mit Eclipse schön
So erstellen Sie eine mit Ruby erstellte LINE-Messaging-Funktion
Machen wir einen LINE Bot mit Ruby + Sinatra - Teil 2
Machen wir einen LINE Bot mit Ruby + Sinatra - Teil 1
Ich habe nc (netcat) normalerweise mit JAVA gemacht
[Java] So unterbrechen Sie eine Zeile mit StringBuilder
(Java) Einfache BDD mit Spektrum?
Java zum Spielen mit Function
Java - So erstellen Sie JTable
Stellen Sie mit Java eine Verbindung zur Datenbank her
Stellen Sie mit Java eine Verbindung zu MySQL 8 her
[Anfänger] Versuchen Sie, mit Java ein einfaches RPG-Spiel zu erstellen ①
Band 1, in dem Sie Ihren Lieblings-SCANDAL LINE-Bot erstellen möchten
Ich möchte eine Liste mit Kotlin und Java erstellen!
Ich möchte eine Funktion mit Kotlin und Java erstellen!
Java mit Ramen lernen [Teil 1]
[Java] Mit Arrays.asList () zu beachtende Punkte
So erstellen Sie einen Java-Container
SpringBoot + Redis Einfache Demo
Wagen Sie es, Kaggle mit Java herauszufordern (1)
Ich habe versucht, mit Java zu interagieren
[Java] LINE-Integration mit Spring Boot
Java, Arrays für Anfänger
Einfacher Datenbankzugriff mit Java Sql2o
So erstellen Sie ein Java-Array
Ich möchte mit link_to [Hinweis] eine Schaltfläche mit einem Zeilenumbruch erstellen.
Ich habe versucht, eine Android-Anwendung mit MVC zu erstellen (Java)
Schnittstelle Versuchen Sie, Java-Problem TypeScript 7-3 zu machen
So erstellen Sie eine Java-Kalenderzusammenfassung
[Java] Fassen Sie zusammen, wie Sie mit der Methode equals vergleichen können
Machen Sie so etwas wie Javas Enum mit Typescript
Einführung in Algorithmen mit Java-Suche (Tiefenprioritätssuche)
[Java] Anfänger wollen Dating machen. 1
Java: So senden Sie Werte von Servlet zu Servlet
[Java] Machen Sie das Programm mit parallelStream 10x schneller
Linienbot
[LINE BOT] Ich habe einen Ramen BOT mit Java (Maven) + Heroku + Spring Boot (1) gemacht.
So erstellen Sie eine App mit einem Plug-In-Mechanismus [C # und Java]
Einführung in Algorithmen mit Java --Search (Breitenprioritätssuche)
[LINE @] Ich habe versucht, einen westlichen Kalender für einen japanischen Kalender zu konvertieren. BOT [Messaging API]
[Java] Ich habe versucht, über den Verbindungspool eine Verbindung mit Servlet (Tomcat) & MySQL & Java herzustellen
Hallo Welt mit Java Servlet und JSP (Einfacher Start des Webservers mit Maven + Jetty)
Herausforderung, mit verstümmelten Zeichen mit Java AudioSystem.getMixerInfo () umzugehen
Interagieren Sie mit der LINE Message API mit Lambda (Java)
Machen Sie die SpringBoot1.5 + Gradle4.4 + Java8 + Docker-Umgebung mit Java11 kompatibel
Einführung in Algorithmen mit Java --Search (Bit Full Search)
Stellen Sie Java-Webanwendungen mit maven in Azure bereit
Ich habe Java gemacht, um (a == 1 && a == 2 && a == 3) immer wahr zu machen
Versuchen Sie, Ruby und Java in Dapr zu integrieren
Verwendung des Java-Frameworks mit AWS Lambda! ??
Verwaltung des Gesprächsstatus (Kontext) (Sitzungsverwaltung?) Mit LINE BOT
Ich möchte Java8 für jeden mit Index verwenden
Ich wollte (a == 1 && a == 2 && a == 3) in Java wahr machen
Zeichenfolgenoperation Versuchen Sie, das Java-Problem in TypeScript 9-3 zu ändern