[Java] LINE-Integration mit Spring Boot

Einführung

Derzeit führen wir für die zugewiesenen Projekte eine LINE-Kooperation (LINE BOT) für Spring Boot durch. Ich fand den Inhalt interessant, deshalb habe ich ihn dieses Mal separat untersucht und implementiert.

Über die LINE-Zusammenarbeit (LINE BOT)

LINE BOT ist ein beliebter Name für "LINE Messaging API" und eine API, die automatisch Nachrichten mit Benutzern austauschen kann. Die Hauptfunktionen sind wie folgt.

Funktion Überblick
Push API Möglichkeit, eine Nachricht ab BOT zu senden
Reply API Möglichkeit, eine Nachricht ausgehend von einer Nachricht des Benutzers zu senden

line_message_api.png

Entwicklungsumgebung

・ STS (Spring Tool Suite) * Einzelpaketversion ・ JDK1.8 ・ Heroku

LINE BOT Funktionsprüfung (Vorbereitung)

1. Registrierung bei "LINE Developers"

Um LINE BOT verwenden zu können, müssen Sie sich bei "[LINE Developers](https://developers.line.biz/ja/" LINE Developers ")" registrieren. Sie benötigen lediglich ein LINE-Konto.

1. Klicken Sie im roten Rahmen auf die Schaltfläche "Anmelden". ![line_develop_1.PNG](https://qiita-image-store.s3.amazonaws.com/0/215568/a47c9be7-12ce-abb3-0c71-07ab0f5edf55.png)
  1. Melden Sie sich mit Ihrem LINE-Konto an. line_develop_2.PNG

  2. Geben Sie die Entwicklerinformationen ein (Entwicklername / E-Mail-Adresse). line_develop_3.png

  3. Wenn es keine Probleme mit dem Eingabeinhalt gibt, erstellen Sie ein Konto. line_develop_4.png

2. Erstellen Sie einen neuen Anbieter

Der Anbieter ist der Name des Dienstleisters (Firma / Person).

1. Klicken Sie im roten Rahmen auf die Schaltfläche "Neuen Anbieter erstellen". ![line_develop_5.png](https://qiita-image-store.s3.amazonaws.com/0/215568/877eade7-73f4-e57f-186f-b57427fc2041.png)
  1. Geben Sie den Anbieternamen ein. line_develop_6.png

  2. Wenn Sie mit den Eingabeinhalten zufrieden sind, erstellen Sie einen Anbieter. line_develop_7.png

3. Erstellen Sie einen neuen Kanal (BOT)

Es gibt drei Kanäle: "LINE Login", "Message API" und "Clova Skill". Dieses Mal erstellen wir einen Kanal für "Message API".

1. Klicken Sie im roten Rahmen auf die Schaltfläche "Kanal erstellen". ![line_develop_8.png](https://qiita-image-store.s3.amazonaws.com/0/215568/491809c6-e32d-98e6-4d22-7bc230471ea8.png)
  1. Geben Sie die folgenden Anwendungsinformationen ein. ・ App-Symbolbild ·App Name ・ App-Beschreibung ・ Planen (verwenden Sie "Entwickler-Testversion", wenn Sie nur testen möchten) ・ Große Industrie ・ Kleinindustrie ・ Benachrichtigungs-E-Mail-Adresse (sofern nicht anders angegeben, geben Sie die E-Mail-Adresse bei der Registrierung eines Kontos an) line_develop_9.png

  2. Wenn es keine Probleme mit dem Eingabeinhalt gibt, erstellen Sie einen Kanal. line_develop_10.png

\def\textlarge#1{%
   {\rm\Large #1}
}
\def\textsmall#1{%
  {\rm\scriptsize #1}
}

4. Funktionsprüfung

Überprüfen Sie diesmal die Antwort der folgenden Nachricht.

Botschaft Überblick
\textsmall{Keyword-Antwortnachricht} \textsmall{Eine Nachricht, die automatisch gesendet wird, wenn ein bestimmtes Schlüsselwort eingegeben wird}
\textsmall{Autoresponder-Nachricht} \textsmall{Eine Nachricht, die automatisch gesendet wird, wenn eine andere Nachricht als eine Schlüsselwortantwortnachricht eingegeben wird}

<Bestätigungsverfahren>

  1. Drücken Sie auf den vom roten Rahmen erstellten Kanal. line_develop_11.png

  2. Übergang vom Link im roten Rahmen zum "LINE-Verwaltungsbildschirm". line_develop_12.png

  3. Erstellen Sie eine Schlüsselwortantwortnachricht aus dem Nachrichtenmenü auf dem Bildschirm LINE-Verwaltung. Dieses Mal habe ich es mit "test" als Schlüsselwort erstellt. line_develop_13.png

  4. Erstellen Sie eine automatische Antwortnachricht aus dem Nachrichtenmenü auf dem Bildschirm LINE-Verwaltung. line_develop_14.png

  5. Überprüfen Sie tatsächlich die Antwort der Nachricht.

  • Fügen Sie BOT-Freunde hinzu, indem Sie den "QR-Code zur LINE-App" lesen. line_develop_15.png

Spring Boot LINE Zusammenarbeit

Die Vorbereitung ist lang geworden, aber das Hauptthema ist von hier. Implementieren Sie den LINE-Verknüpfungsteil von Spring Boot.

1. Abhängigkeit hinzufügen

Dieses Mal verwenden wir Maven. Fügen Sie daher die folgende Abhängigkeit zu pom.xml hinzu.

pom.xml


	<dependency>
            <groupId>com.linecorp.bot</groupId>
            <artifactId>line-bot-spring-boot</artifactId>
            <version>2.0.0</version>
    </dependency>

2. Eigenschaft hinzufügen

Fügen Sie der Eigenschaftendatei die folgenden Eigenschaften hinzu. "Channel-Token" und "Channel-Secret" werden in den Kanal-Grundeinstellungen des erstellten BOT beschrieben. In Bezug auf "Channel-Token" muss es erneut ausgestellt werden, da es nicht zum ersten Mal erstellt wurde.

application.yml


line: 
  bot:
    channel-token:Zeichenfolge in der Spalte "Zugriffstoken (langfristig)"
    channel-secret:Zeichenfolge in der Spalte "Channel Secret"
    handler.path: /callback

3. Ändern Sie die Anwendungsklasse

Fügen Sie der Anwendungsklasse eine Verarbeitung hinzu, wenn Sie eine LINE-Nachricht empfangen. Beispiel für "[line-bot-sdk](https://github.com/line/line-bot-sdk-java/tree/master/line-bot-spring-boot" line-bot-sdk ")" Erstellen basierend auf. Es ist eine Spezifikation, die die von LINE gesendete Nachricht so zurückgibt, wie sie ist.

SpringBootResearchApplication.java


package spring.research;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import com.linecorp.bot.model.event.Event;
import com.linecorp.bot.model.event.MessageEvent;
import com.linecorp.bot.model.event.message.TextMessageContent;
import com.linecorp.bot.model.message.TextMessage;
import com.linecorp.bot.spring.boot.annotation.EventMapping;
import com.linecorp.bot.spring.boot.annotation.LineMessageHandler;

/**
 *Anwendungsklasse
 * @author s-tsuchida
 */
@SpringBootApplication
@LineMessageHandler
public class SpringBootResearchApplication {

    public static void main(String[] args) {
		final SpringApplication springApplication = new SpringApplication(SpringBootResearchApplication.class);
		springApplication.run(args);
    }

    @EventMapping
    public TextMessage handleTextMessageEvent(MessageEvent<TextMessageContent> event) {
        System.out.println("event: " + event);
        return new TextMessage(event.getMessage().getText());
    }

    @EventMapping
    public void handleDefaultMessageEvent(Event event) {
        System.out.println("event: " + event);
    }
    
}

4. Stellen Sie die erstellte Anwendung in Heroku bereit

Stellen Sie nun die erstellte Anwendung in Heroku bereit und überprüfen Sie den Vorgang. Die Registrierungsmethode von Heroku usw. wurde unter der folgenden URL leicht verständlich erläutert. Bitte beachten Sie dies. ・ Details zum Erstellen des LINE-Bots ③ ~ LINE-Bot selbst erstellt (2/2) line_develop_16.png

[Extra Edition] Ich habe es geschafft

Basierend auf der obigen Anwendung habe ich sie so bearbeitet, dass sie die Managementphilosophie und die Grundwerte des Unternehmens wiedergibt, für das ich arbeite. Wenn Sie die Details der Managementphilosophie erfahren möchten, beziehen Sie sich bitte auf die folgende URL. ・ Ienter Co., Ltd.

SpringBootResearchApplication.java


package spring.research;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import com.linecorp.bot.model.event.Event;
import com.linecorp.bot.model.event.MessageEvent;
import com.linecorp.bot.model.event.message.TextMessageContent;
import com.linecorp.bot.model.message.TextMessage;
import com.linecorp.bot.spring.boot.annotation.EventMapping;
import com.linecorp.bot.spring.boot.annotation.LineMessageHandler;

import spring.research.domain.service.line.LineService;

/**
 *Hauptprogramm
 * @author s-tsuchida
 */
@SpringBootApplication
@LineMessageHandler
public class SpringBootResearchApplication {

	//LINE-Service
	@Autowired
	private LineService lineService;
	
    public static void main(String[] args) {
		final SpringApplication springApplication = new SpringApplication(SpringBootResearchApplication.class);
		springApplication.run(args);
    }

    @EventMapping
    public TextMessage handleTextMessageEvent(MessageEvent<TextMessageContent> event) {
    	System.out.println("event: " + event);
        return new TextMessage(lineService.createResponseMessage(event.getMessage().getText()));
    }

    @EventMapping
    public void handleDefaultMessageEvent(Event event) {
    	System.out.println("event: " + event);
    }
    
}

LineService.java


package spring.research.domain.service.line;

import java.util.Collections;
import java.util.HashMap;
import java.util.Map;

import org.springframework.stereotype.Component;


/**
 *LINE-Service
 * @author s-tsuchida
 */
@Component
public class LineService {

	//Antwortnachricht
	private static final String MISSION_MESSAGE = "Genieße die Welt";
	private static final String PHILOSOPHY_MESSAGE = "Mit dem Ziel, ein vertrauenswürdiges und geliebtes Unternehmen zu sein\r\n Wir werden weiterhin unermüdliche Anstrengungen unternehmen.\r\n"
			+ "einer.Arbeit geniessen\r\n"
			+ "einer.Genießen Sie Wachstum\r\n"
			+ "einer.Genieße die Herausforderung\r\n"
			+ "einer.Genießen Sie den Service\r\n"
			+ "einer.Genieße Dankbarkeit\r\n";
	private static final String CORE_VALUE_01_MESSAGE = "1.Handeln Sie immer positiv";
	private static final String CORE_VALUE_02_MESSAGE = "2.Lass uns alles hart machen";
	private static final String CORE_VALUE_03_MESSAGE = "3.Lassen Sie uns die besten Manieren in Japan üben";
	private static final String CORE_VALUE_04_MESSAGE = "4.NO.Machen wir 1";
	private static final String CORE_VALUE_05_MESSAGE = "5.Verfolge Geschwindigkeit und gib Freude";
	private static final String CORE_VALUE_06_MESSAGE = "6.Lassen Sie uns für alle Spannung aufbauen";
	private static final String CORE_VALUE_07_MESSAGE = "7.Lassen Sie uns uns verbessern";
	private static final String CORE_VALUE_08_MESSAGE = "8.Sei ehrlich und demütig";
	private static final String CORE_VALUE_09_MESSAGE = "9.Bilden Sie ein familienähnliches Team";
	private static final String CORE_VALUE_10_MESSAGE = "10.Denken Sie weiter stark über Ihre Träume und Hoffnungen nach und verwirklichen Sie sie";
	private static final String CORE_VALUE_ALL_MESSAGE = CORE_VALUE_01_MESSAGE + "\r\n"
			+ CORE_VALUE_02_MESSAGE + "\r\n"
			+ CORE_VALUE_03_MESSAGE + "\r\n"
			+ CORE_VALUE_04_MESSAGE + "\r\n"
			+ CORE_VALUE_05_MESSAGE + "\r\n"
			+ CORE_VALUE_06_MESSAGE + "\r\n"
			+ CORE_VALUE_07_MESSAGE + "\r\n"
			+ CORE_VALUE_08_MESSAGE + "\r\n"
			+ CORE_VALUE_09_MESSAGE + "\r\n"
			+ CORE_VALUE_10_MESSAGE + "\r\n";
	
	//Nachricht Nicht zutreffend Nachricht
	private static final String OTHER_MESSAGE = "Herzlich willkommen!\r\zu nSpringLineBot!";
	
	//Nachricht MAP
	private static final Map<String, String> MESSAGE_MAP = Collections.unmodifiableMap(new HashMap<String, String>(){
		private static final long serialVersionUID = 1L;
		
		{
			//Mission
			put("misson", MISSION_MESSAGE);
			put("MISSION", MISSION_MESSAGE);
			put("Mission", MISSION_MESSAGE);
			put("Mission", MISSION_MESSAGE);
			
			//Management-Philosophie
			put("philosophy", PHILOSOPHY_MESSAGE);
			put("PHILOSOPHY", PHILOSOPHY_MESSAGE);
			put("Keieirinen", PHILOSOPHY_MESSAGE);
			put("Management-Philosophie", PHILOSOPHY_MESSAGE);
			
			//Kernwert 1
			put("corevalue1", CORE_VALUE_01_MESSAGE);
			put("COREVALUE1", CORE_VALUE_01_MESSAGE);
			put("Koabaryu 1", CORE_VALUE_01_MESSAGE);
			put("Kernwert 1", CORE_VALUE_01_MESSAGE);
			
			//Kernwert 2
			put("corevalue2", CORE_VALUE_02_MESSAGE);
			put("COREVALUE2", CORE_VALUE_02_MESSAGE);
			put("Koabaryu 2", CORE_VALUE_02_MESSAGE);
			put("Kernwert 2", CORE_VALUE_02_MESSAGE);
			
			//Kernwert 3
			put("corevalue3", CORE_VALUE_03_MESSAGE);
			put("COREVALUE3", CORE_VALUE_03_MESSAGE);
			put("Koabaryu 3", CORE_VALUE_03_MESSAGE);
			put("Kernwert 3", CORE_VALUE_03_MESSAGE);
			
			//Kernwert 4
			put("corevalue4", CORE_VALUE_04_MESSAGE);
			put("COREVALUE4", CORE_VALUE_04_MESSAGE);
			put("Koabaryu 4", CORE_VALUE_04_MESSAGE);
			put("Kernwert 4", CORE_VALUE_04_MESSAGE);			
			
			//Kernwert 5
			put("corevalue5", CORE_VALUE_05_MESSAGE);
			put("COREVALUE5", CORE_VALUE_05_MESSAGE);
			put("Koabaryu 5", CORE_VALUE_05_MESSAGE);
			put("Kernwert 5", CORE_VALUE_05_MESSAGE);
			
			//Kernwert 6
			put("corevalue6", CORE_VALUE_06_MESSAGE);
			put("COREVALUE6", CORE_VALUE_06_MESSAGE);
			put("Koabaryu 6", CORE_VALUE_06_MESSAGE);
			put("Kernwert 6", CORE_VALUE_06_MESSAGE);
			
			//Kernwert 7
			put("corevalue7", CORE_VALUE_07_MESSAGE);
			put("COREVALUE7", CORE_VALUE_07_MESSAGE);
			put("Koabaryu 7", CORE_VALUE_07_MESSAGE);
			put("Kernwert 7", CORE_VALUE_07_MESSAGE);
			
			//Kernwert 8
			put("corevalue8", CORE_VALUE_08_MESSAGE);
			put("COREVALUE8", CORE_VALUE_08_MESSAGE);
			put("Koabaryu 8", CORE_VALUE_08_MESSAGE);
			put("Kernwert 8", CORE_VALUE_08_MESSAGE);
			
			//Kernwert 9
			put("corevalue9", CORE_VALUE_09_MESSAGE);
			put("COREVALUE9", CORE_VALUE_09_MESSAGE);
			put("Koabaryu 9", CORE_VALUE_09_MESSAGE);
			put("Kernwert 9", CORE_VALUE_09_MESSAGE);
			
			//Kernwert 10
			put("corevalue10", CORE_VALUE_10_MESSAGE);
			put("COREVALUE10", CORE_VALUE_10_MESSAGE);
			put("Koabaryu 10", CORE_VALUE_10_MESSAGE);
			put("Kernwert 10", CORE_VALUE_10_MESSAGE);
			
			//Alle Grundwerte
			put("corevalue", CORE_VALUE_ALL_MESSAGE);
			put("COREVALUE", CORE_VALUE_ALL_MESSAGE);
			put("Kernwert", CORE_VALUE_ALL_MESSAGE);
			put("Kernwert", CORE_VALUE_ALL_MESSAGE);
			
		}
	});

	/**
	 *Gibt eine Antwortnachricht zurück, die auf der gesendeten LINE-Nachricht basiert
	 * @param sendMessage Gesendete LINE-Nachricht
	 * @Antwortnachricht zurückgeben
	 */
	public String createResponseMessage(String sendMessage) {
		
		if(MESSAGE_MAP.containsKey(sendMessage)) {
			//Wenn die gesendete LINE-Nachricht im MAP-Schlüssel vorhanden ist
			return MESSAGE_MAP.get(sendMessage);
		} else {
			//Wenn die gesendete LINE-Nachricht im MAP-Schlüssel nicht vorhanden ist
			return  OTHER_MESSAGE;
		}
	}
	
}

line_develop_17.png

Zusammenfassung

Ich hatte nicht viel Erfahrung mit der Verknüpfung mit vorhandenen Diensten, daher fand ich es frisch und interessant. In Zukunft möchte ich versuchen, regelmäßig LINE-Nachrichten mit cron zu senden.

Referenzierte Site

Oasobi Proguraming Diary ・ [LINE BOT mit Spring Boot und LINE Messaging API mit Heroku ausführen](http://kikutaro777.hatenablog.com/entry/2017/01/16/230122 "LINE BOT mit Spring Boot und LINE Messaging API erstellt" Mit Heroku ") ・ LINE-Bot, der vor dem Garbage Collection-Datum eine Warnung ausgibt

Recommended Posts