HTTP
IoT
SORACOM
AzureLogicApps
MicrosoftFlow

SORACOM Beam の HTTP リクエストヘッダー情報を Flow/Logic Apps で扱う方法

はじめに

最近 SORACOM BeamMicrosoft Flow / Azure Logic Apps で遊びまくってる @ko2a です。

SORACOM Beam の設定オプションとして、デバイスの IMSIIMEI を HTTP リクエストヘッダーへ付与する / しないを設定できるのですが、この情報を Microsoft Flow / Azure Logic Apps のアクションで使用する方法を備忘録としてまとめます。

これによって、デバイス側でわざわざ IMSI / IMEI を取得する手間がなくなり、またデータ量も(微々たるものではありますが)削減することができます。

検証機材 / 環境

検証構成

Wio LTE から SORACOM Beam へデータを送信し、SORACOM Beam を Azure Logic Apps のトリガーとして起動して Microsoft Teams へデータを POST して結果を確認します。
BeamReqHeader003.png

Logic Apps のフローは以下となります。
BeamReqHeader002.png
今回はアクションの [Message]を操作していきます。

なお、今回使用したデバイスの処理には、JSON メッセージ内にも IMSI と IMEI を埋め込んで送っていますが、今回はこちらを使用せず、 HTTP リクエストヘッダーの値を参照します。

SORACOM Beam の設定

ヘッダ操作の[IMSI ヘッダ][IMEI ヘッダ]を ON に設定します。
BeamReqHeader001.png

Flow / Logic Apps の設定

トリガーのすべての情報を取得

トリガーの出力情報をすべて取得する場合は、 triggerOutputs() を使用します。

expression
triggerOutputs()

BeamReqHeader004.png

出力結果は以下となります。

BeamReqHeader005.png

headers や body の中身も丸見えです。
User-Agent や Content-Type も確認できます。

IMSI / IMEI の取得

HTTP リクエストヘッダーの情報は triggerOutputs() で取得できることがわかったので、後は対象の情報を選択するだけで OK です。

expression
concat('IMEI:', triggerOutputs()['headers']?['x-soracom-imei'], ' IMSI:', triggerOutputs()['headers']?['x-soracom-imsi'])

BeamReqHeader006.png

この例では、 concat() で IMSI / IMEI を連結して Teams へ POST しています。

BeamReqHeader007.png

おわりに

昨年の Advent Calendar の IFTTT 連携 の際、Beam のヘッダーで載せれるんだから使えたらいいのに・・・と思っていたのですが、 Microsoft Flow / Azure Logic Apps だとちょこっといじって取得でいきるのはありがいたいですね。

またデバイス側であれこれいじらなくても、必要に応じてユーザーコンソールで設定を変えれるので、デバイス側の処理を手入れなくて済むのも結構ありがたいことですね。

参考資料

Azure Logic Apps : Get HTTP Request Header Key Value into Conditional Check
Parse headers returned from http action?