uzullaがブログ

uzullaがブログです。

新・続LINEのMessaging APIを使うメモ:Beaconつかうぞ!

uzulla.hateblo.jp

一つ前の記事をまず見てください。

ビーコンとは

先日のLINE DEVELOPER DAY 2016で来場者にビーコンが配布されました。

f:id:uzulla:20161007153619p:plain

ビーコン、すごく夢があるやつで、「これがあればあんな案件もこんな案件も現実的だったのに…」と広告業界に片足あった男は思います*1。「その人がリアルにその場所にこないと発生しないトリガー」を皆がもとめていた時代があったのです(今でもあるけど)。

LINE DEV DAYでも、三箇所のビーコンのちかくにいくと、スタンプがもらえました。*2

まあビーコンのビジネス活用の話は他所に置きます。

ビーコンの登録

f:id:uzulla:20161007153900j:plain

ハコにURLがかいてあります、ハコをすててしまった人はしりません。*3

ビーコンの電池を抜くと、HWIDとCODEがあり、URLにそれを入力します。単語統一してくれ。

f:id:uzulla:20161007153922p:plain

うまくいけばビーコンがアカウントと連携し、LINE@MANAGERの左側にビーコンが現れ、アカウントのMessaging APIにビーコン検知のイベントがきます。

f:id:uzulla:20161007153941p:plain

使い方

昨日のサンプルコードをちょっとだけ修正して以下の感じにしてみました。

<?php // callback.php
define("LINE_MESSAGING_API_CHANNEL_SECRET", 'your channel secret');
define("LINE_MESSAGING_API_CHANNEL_TOKEN", 'your channel token');

require __DIR__."/../vendor/autoload.php";

$bot = new \LINE\LINEBot(
    new \LINE\LINEBot\HTTPClient\CurlHTTPClient(LINE_MESSAGING_API_CHANNEL_TOKEN),
    ['channelSecret' => LINE_MESSAGING_API_CHANNEL_SECRET]
);

$signature = $_SERVER["HTTP_".\LINE\LINEBot\Constant\HTTPHeader::LINE_SIGNATURE];
$body = file_get_contents("php://input");

$events = $bot->parseEventRequest($body, $signature);

foreach ($events as $event) {
    if ($event instanceof \LINE\LINEBot\Event\MessageEvent\TextMessage) {
        $reply_token = $event->getReplyToken();
        $text = $event->getText();
        $bot->replyText($reply_token, $text);
/* ================= ここから追記 =============================*/
    } elseif ($event instanceof \LINE\LINEBot\Event\BeaconDetectionEvent) {
        $reply_token = $event->getReplyToken();
        $bot->replyText($reply_token, "近くにいますね?");
/* ================= ここまで追記 =============================*/
    }
}

echo "OK";

追記の所をみてみればわかりますが、BeaconDetectionEventがきたらreply tokenをとりだして適当なテキストを送っています。

基本的にはテキストメッセージ受信とまったく同じです。

たったこれだけです、ちゃんとうごきますよ。

以上ですが

これだけでは何なので、もう少し書きます。

配布されたビーコンについて

配布されたビーコンの感覚値をかいておきます。これは配布された開発者用のビーコンと手元のGalaxy S7 edgeでの話であり、飛距離は(これをもっている開発者以外にはw)あまり意味がないでしょう。 電波状況やつかっているHWでは変わるでしょうし。

  • スイッチいれて、イベントがくるまで約1分、案外早い
  • 屋内ドア二枚くらいなら電波とどく(が、とぎれとぎれ)
  • 10mは余裕そう(うわさによれば、1mでも100mでも調整できる(ハードが新しく出る?)とか…?)
  • 一度でも検知されれば良いようなので、即時性をかんがえなければ実効はもっとひろそう
  • 検知するとenterイベントがくる
  • leaveイベントはない
  • 検出のインターバルは15秒くらいなのでは?
    • 微妙な距離に置くと、イベントが30秒間隔で発生する事があった(有効>無効>有効のワンクールで15*2?)
    • つまり無限にenterがくるので、一度きたら一時間無視みたいなのは自分で調整しなければいけない(自由度がたかくてよい)
    • 人が多いイベントでこれうごかすと、アプリサーバ側も相応にまちかまえないとダメそう
  • ハードウェアの説明書がもうちょっとほしい
    • 電池の持ちがさっぱりわからん
    • LEDの意味とか…スペックとか
    • まあ、こまったことはないので説明書は不要かもしれないが
  • もう一個ほしいんですが

まあ公式APIドキュメントにビーコンのことはまだほとんどないし、しかたないね。

色々やって自分でたしかめろ!ということなのでしょう。

まとめ

よくできていて、迷う所がない。

とにかく管理画面以外文句がない。

こちらからは以上です、つづく 。

*1:最近は疎遠です

*2:LINEは主に奥さんとやっているので、使いどころがない

*3:固定っぽいけど