はじめに
本記事は、LINE Things を使っていて、link / unlink イベント周りでハマったことを書いています。
LINT Things に関しては、以下にすばらしい記事がありますので、そちらを参考にしてください。
さっそくLINE Thingsを触ってみた(ESP32でリモートLチカ) #linedevday
LINE Things Developer Trial ハンズオン
で、今回のネタなのですが、LINE Things の API には、デバイスが連携した時、もしくは連携が外れた時にイベントが発火するということで、そちらを拾ってみたいと思ったところから始まります。
LINE Things で用意されているイベントとは
ドキュメント抜粋するとこんな感じです。
LINE Thingsでは、以下の2つのイベントがWebhook URLに通知されます。
・ デバイス連携イベント
・ デバイス連携解除イベント
たとえば、ユーザーがデバイスを連携したり、連携を解除したりしたときに、任意のメッセージを送信できます。
LINE Things で紐づけている Messaging API のチャネル(LINE Bot)に設定した webhook URL に対して、ユーザがデバイスを連携させたり、連携を解除させたりするときにイベントが発火するわけですね。
たしかに、デバイスを利用するときに毎回以下のようなメッセージが出て、ペアリングをタップしてから利用していますね。

で、webhook URLはどこで設定するかといえば、ドキュメントにもあるように Messaging API の設定画面で行っていきます。たとえば以下のような感じですね。
Webhook送信を利用するにすることを忘れないようにします。また、Webhook URL は SSL 対応となりますので、そちらにも気をつけてください。設定したら、念のために接続確認ボタンを押して、連携が成功することを確認しておきます。
テスト
では早速ペアリングをしてみましょう。
どうでしょう。Webhook は正しく飛んでいるでしょうか?
はい。そうです。飛ばないですよね。
飛ばないんですよ、Webhook 。
ネタバラシ
実はイベントが発火するのは、ユーザがデバイスを連携した時、もしくは連携が外れた時と書いてありますね。この連携っていうのはペアリングではなくて、一番最初に LINE Things 画面上で連携可能なデバイスの一覧が表示され、かつそれを選択したときに連携が発生するらしいです。
なので、一度連携してしまっているデバイスでは、ペアリングのたびにイベントは発火しないみたいです。
確かに言われてみればそのとおりですね。
ということで、最後にデバイスの連携解除と連携をテストする方法を書いておきます。
デバイスの連携解除
LINE Things の画面で、すでに連携済みのデバイスを左側にスワイプすると、連携解除というメニューが出るので、それをタップします。
この方法ってほぼほぼ奇跡的に見つける以外に見つけられなさそうです。

連携を解除するかというダイアログが表示されるので、解除を選択すると連携が解除されます。
このときに、unlink イベントが発火し、次のような JSON が渡ってきます。
events.things.type が unlink になっているので、正しく連携解除されたことがわかります。
デバイスの連携
連携解除されると、今度は連携可能デバイスの一覧にデバイスがリストされるので、そちらを選択してペアリングを押すと連携完了のダイアログが表示されます(初回だけ)。
このタイミングで link イベントが発火して、以下のようなJSONが渡ってきます。
先程の unlink イベント内容は同じですが、events.things.type が linkになっています。
見るとわかるように、events.source.userId でユーザIDが取得できるので、これを使ってトーク画面にメッセージを送信することもできます。
まとめ
ということで、LINE Things の link イベントの発火タイミングは、毎回のペアリング時ではないということがわかりました。
大変勉強になりました。