Raspberry PiとLINE Simple Beaconで通知システムを作る方法

LINE Simple Beaconは現在も公式仕様に掲載されている

LINE公式ドキュメントでは、LINE Simple Beacon規格に準拠したBLE端末と、LINE Official Account Managerで発行したハードウェアIDを利用する構成が案内されています。利用地域、LINEアプリ設定、アカウントとの紐付け条件を確認してください。

現在の構成で必ず確認すること

  • ユーザーが公式アカウントを友だち追加している
  • スマートフォンのBluetoothとLINE Beacon設定が有効
  • Webhook URLがHTTPSでHTTP 200を返す
  • 受信前にx-line-signatureをHMAC-SHA256で検証する
  • Raspberry Piの管理ポートをインターネットへ直接公開しない

Simple Beaconの広告パケット自体には、法人向けLINE Beacon仕様のSecure messageがありません。用途とリスクを整理して利用してください。

LINE公式:LINEでビーコンを使うWebhook署名の検証

今回はLINEの提供している、LINE Simple Beaconを試してみようと思います。 LINE Beaconは具体的な金額は導入企業によって変わるようですが、多少値段は張るようです。 しかしながら自分で LINE Beacon 対応デバイスを製作することが出来るオープンなビーコン仕様として「LINE Simple Beacon」が提供されていますので、こちらを使ってラズパイ端末でスマホで認識できるのかを試してみたいと思います。

システムの概要

システムの概要としてはシンプルです。 LINE Simple Beaconの認識端末としてRaspberryPiを設置し、スマホを持った人が認識範囲に入ると検知し、LINE Developersの管理画面でwebhookに指定した先の既定スクリプトが起動します。 今回は、テスト用のサーバにPythonでLINEグループ宛にメッセージを送信するスクリプトを用意しましたので、スマホの接近を検知すると、LINE公式アカウントにメッセージが来る。という作りです。

必要なもの

  • Beacon端末(RaspberryPi)
  • スマートフォン
  • webhook用のサーバ
必要なものとしては、BLE対応のBeacon端末となります。旧式のRaspberryPiでもBluetoothドングルを付けることで接続は出来るかと思いますが、手元にRaspberryPi4があり、こちらはBluetooth内臓でBLEにも対応していますので特に追加デバイス不要で実行できます。 ちなみに、BLE(Bluetooth Low Energy)は、無線PAN技術である Bluetooth の一部で、バージョン 4.0 から追加になった低消費電力の通信モードのことです。 スマートフォンは手元のiPhone8にLINEアプリを入れて使用します。 LINEのwebhookで指定するスクリプトですが、RaspberryPiを公開し、RaspberryPiを宛先にしておけば、特段新設サーバなども不要です。今回は外部のサーバを利用しました。

制作手順・実施

制作手順は以下の通りです。
  1. LINE Simple Beaconの導入・設定
  2. webhook用のスクリプト作成・設置
  3. Raspberry PiのBeacon設定

LINE Simple Beaconの導入・設定

LINE Developersで端末用のHWIDを取得します。
LINE Business ID
HWIDはRaspberryPiに設定しますので控えておきます。

webhook用のスクリプト作成・設置

LINE Offichal Account Manager でLINE公式アカウントの応答の設定を上記の通りwebhook利用可能な設定にしておきます。
LINE Business ID
同様にMessaging APIの項目からWebhookを有効にし、Webhook URLを指定します。 Webhookで起動する通知スクリプトは以下の記事とも重複しますので、以下の内容をご覧頂ければと思います。 PythonからLINEへ通知する関連記事 特にPythonでなくとも大丈夫ですし、サーバも使わずGASの活用なども可能です。RaspberryPiから通知というのも出来そうですね。

Raspberry PiのBeacon設定

RaspberryPiをLINE Simple Beaconの端末とする方法については、少し古い記事ですが LINE Engineering にやり方が記載されていますので、基本的には以下記事の流用です。
Main - LINE ENGINEERING
2022-LINE-engineering-site
実際にRaspberryPi上で以下のコマンドを実行すれば設定できます。
HWID='** ** ** ** **'
ADVERTISE_DATA="13 02 01 06 03 03 6F FE 0B 16 6F FE 02 ${HWID} 7F 00"
sudo hciconfig hci0 up
sudo hcitool -i hci0 cmd 0x08 0x0008 ${ADVERTISE_DATA}
sudo hciconfig hci0 leadv 3
HWIDは先ほど、LINE Developersで生成したIDを指定します。上記を実行すれば設定は完了です。 ただし、RaspberryPiを再起動すると設定は消えてしまいますので、実務として使う場合はシェルスクリプトとして纏めて起動時に実行されるようにしておくと良いでしょう。

動作検証

RaspberryPiを起動し、スマホを近づけてみると確かにWebhookで指定したスクリプトからLINEに通知を飛ばすことが出来ました。

まとめ

今回はRapberryPiをBeacon端末としてLINE Simple Beaconを使ってみました。無事にLINE公式アカウントに通知を飛ばすことができました。 ただ、スマホ側でBluetoothをオンにしておき、なおかつLINEアプリでBeaconをオンにしておかないと検知出来ないのは少し難点かも知れません。 さらに言うと、Bluetoothの認識精度がちょっと怪しい時があります。LINE Simple Beacon の認識タイミングは正確には公表されていませんが、一度認識すると一定期間は認識しないなど一定のルールなどもあるようです。 個人で動作を試したりするのはさほど難しくありませんが、ビジネスとして使うには少し不安もあるかなと思いました。
タイトルとURLをコピーしました