[Java] 在Spring Boot中实现LINE的连接
首先
我們目前正在進行的專案中,正在使用Spring Boot進行LINE連携(LINE BOT)。
由於覺得這個功能很有趣,因此我們進行了另外的調查和實作。
关于LINE Bot的LINE整合
LINE BOT是指LINE Messaging API,它允许用户与机器自动进行消息交流的API。
主要功能包括以下内容:

开发环境 fā
・STS(Spring Tool Suite)※单体软件包版本
・JDK1.8
・Heroku
进行LINE BOT的操作验证(前期准备工作)。
1. 注册到「LINE开发者平台」
为了使用LINE BOT,您需要先在“LINE Developers”进行注册。
所需仅为一个LINE账号。




2. 新建服务提供商
供应商是指服务提供者(包括公司和个人)的名称。



3. 创建一个新的频道(BOT)。
本频道有三个选项,分别是“LINE登录”、“Message API”和“Clova技能”,但是本次我们将创建“Message API”的频道。



\def\textlarge#1{%
{\rm\Large #1}
}
\def\textsmall#1{%
{\rm\scriptsize #1}
}
确认动作
这次我们将确认以下消息的回复。





Spring Boot的LINE整合
虽然前期准备工作耗时较长,但从现在开始才是正题。
我们将实现Spring Boot与LINE的协作部分。
增加依赖关系
本次使用Maven进行开发,需在pom.xml文件中添加以下依赖关系。
<dependency>
<groupId>com.linecorp.bot</groupId>
<artifactId>line-bot-spring-boot</artifactId>
<version>2.0.0</version>
</dependency>
2. 添加属性
将以下属性添加到属性文件中。”channel-token”和”channel-secret”在创建的机器人的通道基本设置中进行了描述。由于”channel-token”在第一次创建时尚未生成,所以需要重新生成。
line:
bot:
channel-token: 「アクセストークン(ロングターム)」欄の文字列
channel-secret: 「Channel Secret」欄の文字列
handler.path: /callback
3. 修改应用程序类
在应用程序类中添加处理接收LINE消息的代码。
我会以”line-bot-sdk”的示例为基础来创建。
规定要直接返回LINE发送的消息。
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;
/**
* アプリケーションクラス
* @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);
}
}
将开发好的应用程序部署到Heroku平台。

【番外篇】尝试制作一下
我根据上述应用程序的基础,编辑了能够返回我所工作公司的经营理念和核心价值观的内容。如需了解经营理念等详细信息,请参阅以下网址。
・株式会社アイエンター
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;
/**
* メインプログラム
* @author s-tsuchida
*/
@SpringBootApplication
@LineMessageHandler
public class SpringBootResearchApplication {
// LINEサービス
@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);
}
}
package spring.research.domain.service.line;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import org.springframework.stereotype.Component;
/**
* LINEサービス
* @author s-tsuchida
*/
@Component
public class LineService {
// 返答メッセージ
private static final String MISSION_MESSAGE = "楽しむを世界へ";
private static final String PHILOSOPHY_MESSAGE = "信頼され愛される企業をめざし、\r\nたゆまぬ努力をしつづけます。\r\n"
+ "一. 仕事を楽しむ\r\n"
+ "一. 成長を楽しむ\r\n"
+ "一. 挑戦を楽しむ\r\n"
+ "一. サービスを楽しむ\r\n"
+ "一. 感謝を楽しむ\r\n";
private static final String CORE_VALUE_01_MESSAGE = "1.常に前向きに行動しよう";
private static final String CORE_VALUE_02_MESSAGE = "2.何事にも一生懸命、一所懸命やろう";
private static final String CORE_VALUE_03_MESSAGE = "3.日本一のマナーを実践しよう";
private static final String CORE_VALUE_04_MESSAGE = "4.NO.1をつくろう";
private static final String CORE_VALUE_05_MESSAGE = "5.スピードを追求し喜びを与えよう";
private static final String CORE_VALUE_06_MESSAGE = "6.全ての人にワクワクを仕掛けよう";
private static final String CORE_VALUE_07_MESSAGE = "7.自分力を磨こう";
private static final String CORE_VALUE_08_MESSAGE = "8.素直で謙虚になろう";
private static final String CORE_VALUE_09_MESSAGE = "9.家族のようなチームをつくろう";
private static final String CORE_VALUE_10_MESSAGE = "10.夢・希望を強く思い続け現実にしよう";
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";
// メッセージ該当外メッセージ
private static final String OTHER_MESSAGE = "ようこそ!\r\nSpringLineBotへ!";
// メッセージMAP
private static final Map<String, String> MESSAGE_MAP = Collections.unmodifiableMap(new HashMap<String, String>(){
private static final long serialVersionUID = 1L;
{
// ミッション
put("misson", MISSION_MESSAGE);
put("MISSION", MISSION_MESSAGE);
put("ミッション", MISSION_MESSAGE);
put("みっしょん", MISSION_MESSAGE);
// 経営理念
put("philosophy", PHILOSOPHY_MESSAGE);
put("PHILOSOPHY", PHILOSOPHY_MESSAGE);
put("けいえいりねん", PHILOSOPHY_MESSAGE);
put("経営理念", PHILOSOPHY_MESSAGE);
// コアバリュー1
put("corevalue1", CORE_VALUE_01_MESSAGE);
put("COREVALUE1", CORE_VALUE_01_MESSAGE);
put("こあばりゅー1", CORE_VALUE_01_MESSAGE);
put("コアバリュー1", CORE_VALUE_01_MESSAGE);
// コアバリュー2
put("corevalue2", CORE_VALUE_02_MESSAGE);
put("COREVALUE2", CORE_VALUE_02_MESSAGE);
put("こあばりゅー2", CORE_VALUE_02_MESSAGE);
put("コアバリュー2", CORE_VALUE_02_MESSAGE);
// コアバリュー3
put("corevalue3", CORE_VALUE_03_MESSAGE);
put("COREVALUE3", CORE_VALUE_03_MESSAGE);
put("こあばりゅー3", CORE_VALUE_03_MESSAGE);
put("コアバリュー3", CORE_VALUE_03_MESSAGE);
// コアバリュー4
put("corevalue4", CORE_VALUE_04_MESSAGE);
put("COREVALUE4", CORE_VALUE_04_MESSAGE);
put("こあばりゅー4", CORE_VALUE_04_MESSAGE);
put("コアバリュー4", CORE_VALUE_04_MESSAGE);
// コアバリュー5
put("corevalue5", CORE_VALUE_05_MESSAGE);
put("COREVALUE5", CORE_VALUE_05_MESSAGE);
put("こあばりゅー5", CORE_VALUE_05_MESSAGE);
put("コアバリュー5", CORE_VALUE_05_MESSAGE);
// コアバリュー6
put("corevalue6", CORE_VALUE_06_MESSAGE);
put("COREVALUE6", CORE_VALUE_06_MESSAGE);
put("こあばりゅー6", CORE_VALUE_06_MESSAGE);
put("コアバリュー6", CORE_VALUE_06_MESSAGE);
// コアバリュー7
put("corevalue7", CORE_VALUE_07_MESSAGE);
put("COREVALUE7", CORE_VALUE_07_MESSAGE);
put("こあばりゅー7", CORE_VALUE_07_MESSAGE);
put("コアバリュー7", CORE_VALUE_07_MESSAGE);
// コアバリュー8
put("corevalue8", CORE_VALUE_08_MESSAGE);
put("COREVALUE8", CORE_VALUE_08_MESSAGE);
put("こあばりゅー8", CORE_VALUE_08_MESSAGE);
put("コアバリュー8", CORE_VALUE_08_MESSAGE);
// コアバリュー9
put("corevalue9", CORE_VALUE_09_MESSAGE);
put("COREVALUE9", CORE_VALUE_09_MESSAGE);
put("こあばりゅー9", CORE_VALUE_09_MESSAGE);
put("コアバリュー9", CORE_VALUE_09_MESSAGE);
// コアバリュー10
put("corevalue10", CORE_VALUE_10_MESSAGE);
put("COREVALUE10", CORE_VALUE_10_MESSAGE);
put("こあばりゅー10", CORE_VALUE_10_MESSAGE);
put("コアバリュー10", CORE_VALUE_10_MESSAGE);
// コアバリューすべて
put("corevalue", CORE_VALUE_ALL_MESSAGE);
put("COREVALUE", CORE_VALUE_ALL_MESSAGE);
put("こあばりゅー", CORE_VALUE_ALL_MESSAGE);
put("コアバリュー", CORE_VALUE_ALL_MESSAGE);
}
});
/**
* 送信されたLINEメッセージをもとに返答メッセージを返す
* @param sendMessage 送信されたLINEメッセージ
* @return 返答メッセージ
*/
public String createResponseMessage(String sendMessage) {
if(MESSAGE_MAP.containsKey(sendMessage)) {
// 送信されたLINEメッセージがMAPのキーに存在する場合
return MESSAGE_MAP.get(sendMessage);
} else {
// 送信されたLINEメッセージがMAPのキーに存在しない場合
return OTHER_MESSAGE;
}
}
}

总结
因为我之前没有与现有的服务合作的经验,所以感到新奇和有趣。
今后,我想尝试使用cron定期发送LINE消息等。
引述的来源网站
・中国語实际上没有音的书写形式,所以无法直接将日语转换为中文,所以以下是以英语为中介的翻译:
・游玩程式编写日记
・在Heroku上运行使用Spring Boot和LINE Messaging API创建的LINE BOT并发送垃圾收集提醒的LINEbot