line-bot-sdk-javaでLINE Beaconの通知をSpring Bootで処理する

LINE Beaconをゲットしたので、line-bot-sdk-java使ってBeaconの通知を受けるまでの流れを書きたいと思います。手順的にはびっくりするぐらい簡単です（多分10分程度でいけます）。

LINE Beacon取得に関する経緯が特殊だったので先に触れたいと思います。技術的な部分だけ興味ある方は読み飛ばしてください～。

ちなみにLINE Beaconは以下より購入可能です。
https://beacon.theshop.jp/items/4699062

また、先日Raspberry PiなどでLINE Beaconが作れるというニュースもありました。

ラズベリーパイでLINE Beaconが作成可能に！「LINE Simple Beacon」仕様を公開しました
https://engineering.linecorp.com/ja/blog/detail/117

# LINE Beacon取得の経緯

先日、[Developers Summit 2017](http://event.shoeisha.jp/devsumi/20170216/)で[「【締め切り直前】30分でLINE Messaging APIを使ったチャットボットを作って優勝賞金1000万円のLINE Bot Awardsにチャレンジしよう！」](http://event.shoeisha.jp/devsumi/20170216/session/1256/)のランチセッションに参加しました。

内容的にはLINE Botの紹介とプラットフォームの概要、そしてライブコーディングによるBot作成だったのですが、セッションの中でLINEの[砂金さん](https://twitter.com/shin135)より**「本日LINE Beaconをお持ちしています。紳士協定ですが、LINE Botを作成してBeaconについても情報発信をしてくれる方に差し上げます！」**とのこと！！

私もLINE Botは趣味で作っていて、少し前に以下の記事を書いたりしてました。

**LINEで乃木坂46の若月さんと話せる「若様Bot」を開発してみた**
http://qiita.com/kikutaro/items/525b54a6a466b5369f9e

Beacon欲しい！とセッション後のAsk the speakerに並んだのですが、既に列ができていて（汗）自分の順番が来る少し前で**「すみませんー、Beacon品切れになりました」**とのこと orz

諦めて帰ろうと思ったのですが**「どうしても…という方は送り先を教えてください」**とのこと！！なんて太っ腹な！！

厚かましいの重々承知で名刺をお渡しさせていただきました。

で、早速今日届いた！！！**はやい！！！**

<img width="300px" alt="LINE Beacon封筒" src="https://qiita-image-store.s3.amazonaws.com/0/47737/2ab9cd73-8d5a-9ec7-7c99-36b8f077a8f9.png">

ということで早速試してみました。

# Beaconのセットアップ

Beaconはこんな感じです。思ってたより全然小さかった(幅7cmくらい？)

<img width="400px" alt="LINE Beacon表" src="https://qiita-image-store.s3.amazonaws.com/0/47737/1e79411e-7e0f-0b79-82ca-d6988754d745.png">

<img width="400px" alt="LINE Beacon裏" src="https://qiita-image-store.s3.amazonaws.com/0/47737/ca4a4297-c730-9959-bee6-66c6f6bf4d22.jpeg">

<img width="400px" alt="LINE Beacon電池あり" src="https://qiita-image-store.s3.amazonaws.com/0/47737/bf938f59-8c42-36e0-3fe1-b3661c5b50f1.jpeg">

Beaconに付属の紙にある登録サイトのURLを入力してBeaconの設定画面へ進みます。

「ビーコン端末とbotの連携」ボタンを選択します。
![2017-02-20_12h59_54.png](https://qiita-image-store.s3.amazonaws.com/0/47737/c6fa39da-7621-ce97-57b3-5793b35eec89.png)

アカウントの一覧が表示されるので、ビーコンを利用するアカウントを選択します。
![2017-02-20_13h00_15.png](https://qiita-image-store.s3.amazonaws.com/0/47737/9c7df9f7-e1c7-e06e-b6fa-990535770ead.png)

アカウント連携の画面にきたら、Beaconに記載されている「端末ID(HWID)」と「パスコード(CODE)」を入力します。場所がわからない方は上に載せたBeacon端末の写真の1つ目を確認してみてください。（電池入れちゃった人は電池取ればわかるかと）
![2017-02-20_18h38_48.png](https://qiita-image-store.s3.amazonaws.com/0/47737/efe241b0-7381-8fe2-802c-72eaffebcb84.png)

「連携する」ボタンを押すと「アカウント連携が完了しました。」と出ます。ビーコンは電源OFF状態で大丈夫でした。
![2017-02-20_19h32_56.png](https://qiita-image-store.s3.amazonaws.com/0/47737/22a13ad2-c70c-5932-9169-224d5c93ad4c.png)

これで設定は完了です。「LINE BeaconのEvent Web hookを受信する方法」という部分にしたがってLINEの設定をします。
![2017-02-20_21h32_17.png](https://qiita-image-store.s3.amazonaws.com/0/47737/94946204-b946-82aa-4da7-44a26e528ea8.png)

# LINEアプリのセットアップ

LINEアプリを起動して、(その他タブの)右上のギアマークを選択します。
<img width="300px" alt="LINE設定" src="https://qiita-image-store.s3.amazonaws.com/0/47737/eda25feb-5dba-d739-8181-81b637ea0bc5.png">

設定の「プライバシー管理」を選択します。
<img width="300px" alt="LINE設定" src="https://qiita-image-store.s3.amazonaws.com/0/47737/2d1a1904-3dcc-b0a1-12a1-cb8f1c8e32d9.png">

「LINE Beaconを利用」にチェックを入れます。
<img width="300px" alt="LINE設定" src="https://qiita-image-store.s3.amazonaws.com/0/47737/7ac6998e-9078-eb6d-9e60-1a090d8b9106.png">

「同意して利用開始」を選びます。
<img width="300px" alt="LINE設定" src="https://qiita-image-store.s3.amazonaws.com/0/47737/0932d104-69d3-b7c6-0870-55a3282dc364.png">

Bluetoothをオンにします。
<img width="300px" alt="LINE設定" src="https://qiita-image-store.s3.amazonaws.com/0/47737/3e1beb90-3c30-c18c-631e-a0c33c1dea92.png">

これでアプリの設定は完了です。

# line-bot-sdk-javaのコード

あとはコードを書くのみ！[line-bot-sdk-java](https://github.com/line/line-bot-sdk-java/tree/master/line-bot-spring-boot)を使うとSpring Bootで簡単にLINEのサーバを立てることができます。

ローカル環境でもngrok使えばLINE Botの動作確認ができます。この辺りについては以前に以下ブログでまとめたので参考になれば幸いです。

Spring BootとLINE Messaging APIで作ったLINE BOTをHerokuで動かす
http://kikutaro777.hatenablog.com/entry/2017/01/16/230122

[line-bot-sdk-javaのGitHubページ](https://github.com/line/line-bot-sdk-java/tree/master/line-bot-spring-boot
)には以下のようなエコーサンプル（botに話かけた内容をそのまま返すサンプル）があります。

```java:EchoApplication.java
@SpringBootApplication
@LineMessageHandler
public class EchoApplication {
    public static void main(String[] args) {
        SpringApplication.run(EchoApplication.class, 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);
    }
}
```

で、Beaconの通知を受けるのは以下メソッドを追加するだけ。

```java:EchoApplication.java
@EventMapping
public Message handleBeaconMessageEvent(BeaconEvent event) {
    System.out.println(event.getBeacon().getHwid()); //HWIDを標準出力
    return new TextMessage("LINE Beanconから通知だよ！砂金さん、ありがとうございました！");
}
```

Botを友達登録して、Beaconの電源を入れて近づけば…

<img width="300px" alt="Beacon通知" src="https://qiita-image-store.s3.amazonaws.com/0/47737/5da1c760-b915-5b3c-8ed3-52b32162335d.png">

キター！！

<img width="300px" alt="Beacon通知" src="https://qiita-image-store.s3.amazonaws.com/0/47737/99333375-77b0-18fc-13ca-d4b74bab0d10.png">

なんか楽しいー！色々と幅が広がりますね！

お忙しい方なのに、デブサミ後、速攻で手配してくださった[砂金さん](https://twitter.com/shin135)、本当にありがとうございました！