IoTボタンからFunction App経由でLINEに通知を飛ばしてみる
どうも、みなとです。
ちょっときっかけがあってIoTデバイスを手に入れました。SORACOM LTE-M Button for Enterpriseというコンパクトなボタンです。
これまでIoTというとMicrosoftのセミナーなんかで幾度となく耳にしている言葉であるとはいえ、自分の中ではなかなかどうしてその実態が掴めない、具体的に何をどうしたものがIoTそれ自体であるのかがよく分かっていませんでした。
今回こうして面白そうなデバイスを手に入れたということで、早速コイツを使ってIoTを実践してみました。
全体像
ボタンにIoTデバイス用のSIMカードが刺さってて、ボタンを押すとまずSORACOM Funkというアダプタのようなサービスに通知が上がります。SORACOM Funkでは受け取った通知を予め設定したAzure Function Appに飛ばし、Function Appが更にLINE botにREST APIを投げるという極めてシンプルかつ一方通行な実装になります。
RESTの部分は何の言語で組んでもよかったのですが、せっかくなのでnode.jsに初挑戦してみました。故にその辺りの信憑性は低いです(笑)
bot作成
LINE Developersに登録してない人は登録します。
新規チャネル作成で「Messaging API」を選択します。
アプリ名、説明、アイコン等を適当に設定し、設定を完了します。
こんな感じの画面になります。アイコンはMakeGirlsMoeで適当に作りました。
登録が完了したら「チャネル基本設定」の「メッセージ送受信設定」からアクセストークンを期限なしで発行します。発行したらどこかにコピペしておきます。
ついでに「基本情報」のChannel Secretなる値と「その他」のYour user IDもコピペしておきます。これらはFunction Appで使います。
ついでに下部のQRコードからこのbotをお友達登録しておいてください。
Function App作成
AzureのポータルからFunction Appを新規作成します。
こんな感じで作ります。ランタイムスタックが「Node.js」になっていれば大体大丈夫だと思います。
作成が完了したらFunction Appのページの「プラットフォーム機能」から「コンソール (CMD / PowerShell)」を選択しCLIを開きます。開いたら、下記のコマンドを実行します。WARNINGは無視してもOKです。
$ npm init --yes
$ npm install azure-iothub
$ npm install @line/bot-sdk --save
次に「概要」から「構成」をクリックし、環境変数を追加します。次の2つを追加してください。
名前 | 値 |
CHANNEL_ACCESS_TOKEN | botのアクセストークン |
CHANNEL_SECRET | botのChannel Secret |
左ツリーから「関数」を選択し「新しい関数」→「HTTP trigger」を選びます。
最初からスクリプトが記載されているのでこれを削除して以下のコードを貼り付けます。
module.exports = function (context, req) {
context.log(req.headers);
context.log(req.body);
const line = require('@line/bot-sdk');
// create LINE SDK config from env variables
const config = {
channelAccessToken: process.env.CHANNEL_ACCESS_TOKEN,
channelSecret: process.env.CHANNEL_SECRET,
};
const client = new line.Client(config);
const message = {
type: 'text',
text: `${req.headers["x-site-deployment-id"]} が ${req.body.clickTypeName} を通知しました`
};
return client.pushMessage('[Your user ID]', message);
}
最後の行の Your user ID となっている箇所をbotの設定値に置き換えます。
最後に「関数のURLの取得」からURLをどこかにコピペしてFunction Appの作業は完了です。
SORACOM Funk作成
ここではSIMとSIMグループは登録されているものとして解説します。
SORACOM Funkを有効化し、以下のような設定にします。
項目 | 値 |
サービス | Azure Functions |
送信データ形式 | JSON |
認証情報 | (新規作成) |
関数のURL | https://[Function App名].azurewebsites.net/api/[関数名] |
更に認証情報は以下のように設定します。
項目 | 値 |
認証情報ID | (任意) |
概要 | (任意) |
種別 | APIトークン認証情報 |
APIトークン | 関数のURLの “?code=” 以降の部分 |
動かしてみる
ボタンを押すとbotとのトークにpush通知が飛んできます。