以前、GravioからとLINEやSlackにメッセージを送る記事は書いてみましたが、業務で使うのにはLINE WORKSを使ってる会社も多いって聞いたので、LINE WORKSにもメッセージを送ってみることにします。
TL;DR
- GravioでCO2センサーの値を拾います
- アクション内のHTTPRequestコンポーネントをつかってLINE WORKSに「換気してね」とポストするAPIを呼び出します。
- CO2濃度が1000ppmを超えていたらトリガーでアクションを実行します
使用環境
- Raspberry Pi 4 Model B w/4GB RAM
- Ubuntu Server 20.04.3 LTS
- Gravio HubKit v4.4.0-6902
- Gravio Studio v4.4.4247.0
- Gracio CO2センサー (Gravio Standardの契約が必要)
- LINE WORKS
事前準備
- https://line.worksmobile.com/jp/ から「LINE WORKS」にサインアップして管理者権限をもらっておいてください
- 「Gravio 4とPower BIでCO2を可視化する」を参考にCO2データを取得できるようにしておいてください。
- GravioからインターネットにでていくときのPublic IPアドレスを調べておいてください。下記のようなサイトで調べることができます。会社ネットワークの場合は、IT管理者さんなどに聞いてみてもいいでしょう。
https://www.cman.jp/network/support/go_access.cgi
手順
LINE WORKSでの設定
APIのトークンを発行する
LINE WORKSのDeveloper Consoleにログインします。
今回はAPIの2.0は使わずに従来バージョンを使いますので、「API」をクリックします。
次にServer API Consumer Keyを発行します。Service API Consumer Keyではないので要注意。
APIの利用範囲を指定します。今回、とりあえずすべてチェックしました。投稿だけであれば「追加」だけでいいと思います。
Tokenの設定をします。有効期限はとりあえず「365日」、自動延長も「はい」を指定しておきます。これも用途に応じて適切に指定してくださいね。
最後にServer List(固定IPタイプ)を使います。Gravioでは現時点ではこっちしか使えません。ID登録タイプと間違えないようにしてください。
サーバー名に「Gravio」、Keyはさきほど生成したもの、IPには準備段階で取得しておいたパブリックなIPアドレスを指定してトークンを発行します。
Tokenが発行されますので、これもコピーしてどこかに保存しておいてください。
Botを作成する
Botの設定をします。
プロフィール画像は適当に指定しておくとわかりやすいです。
Bot名、説明もわかりやすく入力しておきます。
API Interfaceには「従来のAPI」を選択します。
Callback URLには「Off」を選択します。Gravioの場合、ローカルネットワークに設置することが多くコールバックを受けることができないためです。そもそもGravio自身もコールバックを受ける仕組みがないですしね。
「複数人のトークルームに招待可」もチェックしておきます。ここは運用に応じて決めてください。
最後に管理者を決めて保存します。
Developer Consoleはここまでです。
Botを追加する
LINE WORKSのサイトにログインして、管理者画面に移動します。
先ほどDeveloper Consoleで作成したBotが一覧に出てくるので、「追加」をクリックします。
前の画面に戻って追加したBotの詳細を表示します。公開設定が「非公開」になっています。「修正」ボタンをクリックして変更します。
「公開設定」をチェックして簡単にトークルームに追加できるようにしておきます。
あとから戻ってくるので、管理者画面はそのまま残しておいてください。
トークルームを作成する
LINE WORKSに戻って、通知を送る先のトークルームを作成します。
通知に入れたいメンバーと上で追加したBotを選択して「OK」をクリックします。
トークルームIDが必要なのでこれから取得します。いろいろやり方はあるようですが、管理者権限があれば一番簡単な方法を紹介しておきます。
ここで開いておいた管理者画面に移動し、「監査」「トーク」を開きます。ここにはトークルームで発言した内容が表示されていると思いますので、その一番右に表示されている「トークルームID」をメモしておきます。
ちなみに、監査ログに表示されるまで少しタイムラグがあります。今回の場合、ポストしてから10分以内には表示されました。
LINE WORKSで取っておいたデータの一覧
さて、ここまでで準備が整いました。長かったですが、最終的にGravioでの投稿に必要となる情報は以下の情報です。
取り忘れてるものがないかチェックしておいてください。
- API ID
- Server API Consumer Key
- Server Token
- Bot No.
- トークルームID
Gravioでの設定
アクションを作成する
アクションは簡単です。HTTP Requestコンポーネントを配置します。
プロパティには以下のように指定します。
プロパティ | 値 |
---|---|
HTTP メソッド | POST |
URL |
https://apis.worksmobile.com/r/<APIID>/message/v1/bot/<BotNo>/message/push APIID、BotNoはそれぞれLINE WORKSでBotを登録した際に取得したAPI ID、Bot No |
認証方式 | Bearer認証 |
トークン | LINE WORKSのServer Listに追加した際に取得したToken |
Pre Mappingsではヘッダとボディを次のように指定します。Server API Consumer Key、トークルームIDにはそれぞれLINE WORKSで取得した値を指定します。
cp.Headers = {"consumerKey": "<Server API Consumer Key>"}
cv.Payload = {
"roomId": "<トークルームID>",
"content": {
"type": "text",
"text": "CO2が" + tv.Data + "ppmです。換気しましょう。"
}
}
実行してみましょう。トークルームにメッセージがポストされましたね!
トリガーで連携
さて、ここまできたらあとは簡単です。トリガーを作成して、CO2センサーの値が1000ppmを超えたときに上で作ったアクションを実行するように指定します。
CO2が1000ppmを下回るまでずっとメッセージが来るのはうざいので、「閾値によるトリガーを利用」をチェックしておきます。こうしておくと、1000ppmを超えたときに一度アクションが実行されるだけで、あとは値が1000ppmを下回るまではアクションが実行されません。
結果の確認
CO2センサーに息を吹きかけてみましょう。どうですか?トークルームに値付きでメッセージが投稿されましたか?
だめなら設定を見直してみましょうね。
ポイント
- LINE WORKSのAPI Tokenを取得するときにServer(固定IP)を選ぶ
- つまり、DHCPでPublic IPが変わってしまったら動かなくなるので注意!
- Gravioのトリガーでは「閾値によるトリガーを利用」をチェックしておく