基本的にこちらの記事を参考にすれば、すぐ分かる人は分かるかと思いますが、僕自身が少しハマったことや疑問点があったので、それを忘れないうちにまとめておこうかと思います。
HWID(端末ID)はLINE@ MANAGERページの方にある
ブログ記事の通り進めていくと、LINE@ MANAGERとLINE Developerのページの2つのページで確認したり設定することになります。
HWIDはこちらから発行できるのですが、LINE@ Managerで使用しているbotアカウントを選択して、左メニューのLINE Beacon -> アカウント連携
にある端末ID
もHWID
を示していますので、そちらでも確認できます。
HWIDとは?
スマートフォンがRaspberry Piの受信圏内に出入りしたときに、Beacon EventのWebhookを投げれる状態にするもの。 ブログ記事にあるとおりにラズパイ側で設定するだけでいい。ただ、これだけでは投げる先がわかならないので、投げる先の登録は LINE Developersページで登録する必要があります。
LINE Developersページに行くには?
LINE@ Managerから設定したいBotアカウントを選択して、左メニューのアカウント設定->Bot設定
とたどります。
すると、下図のようなリンクがあるので、そこをクリックするといけます。
(LINE Dvelopersページに行くのに、毎回迷子になってました(汗))
WebhookのURLは何を指定したらいいの?
サーバーを準備する必要があり、そのURLを指定します。 私はHeroku+Goを使用しました。Getting Started on Heroku with Goなどを参考にWebhookでBeaconEventを受け取れるようにサーバーを準備します。
ただ単に受けるだけなら、下記のような感じでいいです。
http.HandleFunc("/callback", func(w http.ResponseWriter, req *http.Request) {
log.Println(req)
})
http.ListenAndServe("", nil)
ただ、これだけだとEventが来たときスルーさせるだけなので、Eventが来たことを知る必要があるのと、Eventが来たらどうするのか、たとえばLINEのメッセージに送るとかをしたいと思いますので、それに必要なのがこちらのline-bot-sdkです。
Channel SecretとChannel Access Tokenを指定する必要がありますが、これはLINE Developersページに記載されていますので、確認してみてください。
設定したりパースしたりする部分は省略しますが、Beacon Eventが来たことを判定にするには、下記のように書きます。
for _, event := range events {
if event.Type == linebot.EventTypeBeacon {
// Beacon Eventが来た。ここでLINEメッセージを送ったりする。
}
}
LINEメッセージを送るには、event
の中にあるreplyToken
を使用して、下記のように書くと、ここでははろー
というメッセージが届くようになります。
bot.ReplyMessage(event.ReplyToken, linebot.NewTextMessage("はろー")).Do()
Beacon Eventが来ないんだけど・・・
Webhook送信を利用するにチェックを入れるとか、全部設定はした!設定の確認もした!なのにwebhook送信が来ない場合、Beacon EventやLINE Beaconの仕様をよく見ると、
イベント送信元のユーザがLINE Beaconデバイスの受信圏内に出入りしたことなどを表すイベントです。
や、
LINE Beacon は、「連携しているLINEユーザがビーコンデバイスの受信圏内に出入りしたことなどをwebhookで即座にbotが知ることができる」サービスです。
などと書かれていますので、端末を受信圏内に出入りしてみるとよいかもしれません。 bluetoothの通信距離はだいたい10mなので圏内に出入りすぐできそうですが、それより簡単なのは、端末のbluetooth設定をオン/オフしてみてください。
僕はこれに少しハマりました。。
一連の流れ
手書きで汚くて申し訳ないですが・・・こんなイメージです。
LINE BeaconはMessaging APIのReplyAPIを使うので、0円で運用できる
お金、心配ですよね。LINE BeaconはMessaging APIを使うということは書かれてる記事は多いのですが、Messging APIもReply API とPush APIの2種類あって、結局どっちなの?とおもって調べていたら、
こちらのドキュメントに、Reply APIは「Webhookで通知されたイベントの中で、返信可能なイベントにはreplyTokenが付与されています。」と書かれてあり、Beacon EventのドキュメントにreplyToken
が含まれいるので、Reply APIを使用することになります。
まぁ、よくよくReply APIの定義を見ると
Reply APIとは、ユーザーからのメッセージに対して応答メッセージを送信するAPIです。
と書かれてるので、ユーザーの動きに反応して応答するのはReply APIになりますね。