[Java] 在Spring Boot中实现LINE的连接

首先

我們目前正在進行的專案中,正在使用Spring Boot進行LINE連携(LINE BOT)。
由於覺得這個功能很有趣,因此我們進行了另外的調查和實作。

关于LINE Bot的LINE整合

LINE BOT是指LINE Messaging API,它允许用户与机器自动进行消息交流的API。
主要功能包括以下内容:

機能概要Push APIBOT起点でメッセージを送る機能Reply APIユーザからのメッセージ起点でメッセージを送る機能
line_message_api.png

开发环境 fā

・STS(Spring Tool Suite)※单体软件包版本
・JDK1.8
・Heroku

进行LINE BOT的操作验证(前期准备工作)。

1. 注册到「LINE开发者平台」

为了使用LINE BOT,您需要先在“LINE Developers”进行注册。
所需仅为一个LINE账号。

line_develop_1.PNG
line_develop_2.PNG
line_develop_3.png
line_develop_4.png

2. 新建服务提供商

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

line_develop_5.png
line_develop_6.png
line_develop_7.png

3. 创建一个新的频道(BOT)。

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

line_develop_8.png
line_develop_9.png
line_develop_10.png
\def\textlarge#1{%
   {\rm\Large #1}
}
\def\textsmall#1{%
  {\rm\scriptsize #1}
}

确认动作

这次我们将确认以下消息的回复。

メッセージ概要$\textsmall{キーワード応答メッセージ}$$\textsmall{特定のキーワードが入力された場合に自動的に送信されるメッセージ}$$\textsmall{自動応答メッセージ}$$\textsmall{キーワード応答メッセージ以外が入力された場合に自動的に送信されるメッセージ}$
line_develop_11.png
line_develop_12.png
line_develop_13.png
line_develop_14.png
line_develop_15.png

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平台。

line_develop_16.png

【番外篇】尝试制作一下

我根据上述应用程序的基础,编辑了能够返回我所工作公司的经营理念和核心价值观的内容。如需了解经营理念等详细信息,请参阅以下网址。
・株式会社アイエンター

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

}

line_develop_17.png

总结

因为我之前没有与现有的服务合作的经验,所以感到新奇和有趣。
今后,我想尝试使用cron定期发送LINE消息等。

引述的来源网站

・中国語实际上没有音的书写形式,所以无法直接将日语转换为中文,所以以下是以英语为中介的翻译:
・游玩程式编写日记
・在Heroku上运行使用Spring Boot和LINE Messaging API创建的LINE BOT并发送垃圾收集提醒的LINEbot

广告
将在 10 秒后关闭
bannerAds