LINE Messaging APIを使用したbotの作成

はじめに

LINE Botを作成してみたので本エントリにまとめます。

Herokuをはじめる

botアプリケーションはHerokuにデプロイするため、 こちらの手順に従ってHerokuアカウントの登録、Heroku CLIのインストールと使い方を学びます。

Herokuはアプリケーションをクラウドでビルド、実行、運用できるPaaSです。 devcenter.heroku.com

LINE Developersコンソールでチャネルを作成

LINEが提供するMessaging APIを使用したbotを作成するためには、 開発者アカウントの登録とLINEプラットフォームを使用するために必要な"チャネル"を作成する必要があります。 手順はこちらの記事にまとまっています。 qiita.com

次のようにチャネルの作成ではアプリ名を'My bot'としました。 f:id:hiroki-sawano:20180504073716p:plain

Herokuにはmy-bot-201805としてsample-spring-boot-echoをデプロイしました。 f:id:hiroki-sawano:20180504073733p:plain

これでLINEからMy botにメッセージを送ると、送信したメッセージがMy botから返ってきます。 f:id:hiroki-sawano:20180504073748p:plain

サンプルbotの修正

ここまででEchoサンプルボットの動作確認ができました。
続けて少しだけサンプルアプリsample-spring-boot-echoに手を加えてみます。

まず、Herokuからmy-bot-201805リポジトリをgitでクローンします。

$ heroku git:clone -a my-bot-201805
Cloning into 'my-bot-201805'...
warning: You appear to have cloned an empty repository.

しかし、上記に示すように空のリポジトリをクローンした、と警告されます。 この事象についてはこちらのヘルプに載っていました。
どうやらsample-spring-boot-echoのREADMEで行なったように、 Herokuボタンを使用したHeroku API経由のデプロイだとこのような結果になるようです。
Why do I see a message 'You appear to have cloned an empty repository' when using `heroku git:clone`? - Heroku Help

同ヘルプページのResolutionに従ってHerokuボタンのリンクからgitリポジトリのURLを取得し、git remote addgit pullすれば良いです。

$ cd my-bot-201805/
$ git remote add origin https://github.com/line/line-bot-sdk-java
$ git pull origin master

それではbotに修正を加えます。
以下の通り、EchoApplication::handleTextMessageEvent()に"How are you?"というメッセージを受け取った場合には"I'm great!"と応答するコードを追加します。

EchoApplication.java

@EventMapping
public TextMessage handleTextMessageEvent(MessageEvent<TextMessageContent> event) {
    System.out.println("event: " + event);
    if (event.getMessage().getText().equals("How are you?")){
        return new TextMessage("I'm great!");
    } else {
        return new TextMessage(event.getMessage().getText());
    }
}

変更を反映します。

$ git add .
$ git commit -am "Make it more interactive"
$ git push heroku master

LINEからメッセージを送ると期待通りに動作することが確認できました。 f:id:hiroki-sawano:20180504081944j:plain

さいごに

bot作成は思った以上に簡単にできることがわかりました。なかなか面白いです。
実用的なbotアプリの実装に向けてこれからアイディアを捻出してみようと思います。