SORACOM Users

SORACOM Funk を利用して Azure Functions を呼び出し Microsoft Teams へ通知する

当ガイドでは、SORACOM Funk (以降、Funk)を利用して Azure Functions を呼び出し Microsoft Teams (以降、Teams) へ通知します。

はじめに

Funk は、クラウドサービスの Function を直接実行できるサービスです。クラウドリソースを活用することでデバイス側の実装をシンプルに保ちリソースのオフロード、低電力消費化が可能となります。

Funk概要

当ガイドは以下の2つのステップです。

当ガイドの前提は以下のとおりです。

各種デバイスでの IoT SIM の使用は各種デバイスで SORACOM Air を使用するを参考にしてください。

ステップ 1: Microsoft Teams を設定する

通知を受けるための Teams を設定します。
Teams のアカウント・チームを作成したのちIncoming Webhook の追加を行います。

Teams設定

Incoming Webhook を設定します。 作成後、のちに Azure Functions に設定するので [クリップボードにコピー] より Webhook URL をメモしておきます。

Teams設定

以上で Teams の設定は完了です。

ステップ 2: Azure Functions を設定する

次に Funk から呼び出す Azure Functions (関数アプリ) を設定します。当ガイドでは Node.js のサンプルプログラムを紹介します。Node.js を利用する場合は作成時「ランタイム スタック」に Node.js を指定してください。

Functionsの作成

Webhook の URL を環境変数に設定する

Teams へ通知するための URL を環境変数に設定します。[構成] > [新しいアプリケーション設定] より以下を追加し、[OK] > [保存] をクリックします。

Functionsの設定

JWT デコード用のパッケージをインストールする

Funk から Azure Functions へ連携されるデータについて、送信した SIM の IMSI やオペレーター ID などが必要な場合は JWT デコード用のパッケージをインストールします。本ドキュメントのサンプルプログラムでは jwt-decode を利用します。[コンソール] より以下のコマンドを実行してインストールします。

npm --init
npm install jwt-decode

Functionsの設定

参考
Funk から Azure Functions へデータが連携される際、以下のような情報が JWT (JSON Web Token) 形式のトークンで格納されています。
{
  "iss": "https://soracom.io",
  "aud": "srn:soracom:OP00XXXXXXXX:jp:Subscriber:44052XXXXXXXXXXX",
  "jti": "4i2qn8oqu78",
  "iat": 1558673437,
  "typ": "soracom/token/v1",
  "sub": "funk.soracom.io",
  "ctx": {
    "srn": "srn:soracom:OP00XXXXXXXX:jp:Subscriber:44052XXXXXXXXXXX",
    "operatorId": "OP9012345678",
    "sourceProtocol": "udp",
    "resrouceId": "440101234567890",
    "resrouceType": "Subscriber",
    "imsi": "440101234567890"
  }
}

関数を設定する

HTTP トリガーテンプレートの関数を作成します。

Functionsの設定

[コードとテスト] より以下のサンプルプログラムを参考にコードを記述します。

const https = require('https');
const jwtDecode = require('jwt-decode');
module.exports = function (context, req) {
    const url = process.env.WEBHOOK_URL;
    const metadata = jwtDecode(req.headers['x-soracom-token']);
    context.log('metadata : %j', metadata);
    context.log('message body : %j', req.body);
    const message = "sent from IMSI " + metadata.ctx.imsi + ". message is " + JSON.stringify(req.body);
    const postData = {"text": message};
    const postBody = JSON.stringify(postData);
    const options = {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json',
            'Content-Length': Buffer.byteLength(postBody)
        }
    };
    const client = https.request(url, options, (res) => {
        context.log(res.statusCode);
        context.log(res.headers);
        let resBody = '';
        res.on('data', (chunk) => { resBody += chunk; });
        res.on('end', () => {
            context.log(resBody);
            context.res = {status: 204};
            context.done();
        });
    });
    client.on('error', (e) => {
        context.log.error(e);
        context.res = {status: 500};
        context.done();
    });
    client.write(postBody);
    client.end();
};

URL をコピーする

関数を保存した後、Funk へ設定するために [関数の URL を取得] より URL をコピーします。

Functionsの設定

ステップ 3: Funk の利用を開始する

SORACOM コンソールで Azure Functions の認証情報を登録します。
SORACOM ユーザーコンソールの右上のユーザー名をクリックし、"セキュリティ“ を選択します。

funk設定

"認証情報ストア” => “認証情報を登録” を選択します。
“認証情報 ID” は任意に記載し、種別として「API トークン認証情報」を選択します。
ステップ 2 でコピーした Azure Functions の URL の code= 以降を貼り付けます。URL が以下のような場合、SO8EXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXnfPw== を貼り付けます。

https://funk-test-xxxxxxxx.azurewebsites.net/api/HttpTrigger1?code=
SO8EXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXnfPw==

funk設定

利用する SIM を紐付けた SIM グループの設定から Funk の設定を行います。
サービスとして Azure Functions を選択し、認証情報と関数の URL を入力し保存します。ステップ 2 でコピーした URL が以下のような場合、https://funk-test-xxxxxxxx.azurewebsites.net/api/HttpTrigger1 を貼り付けます。

https://funk-test-xxxxxxxx.azurewebsites.net/api/HttpTrigger1?code=
SO8EXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXnfPw==

funk設定

ステップ 4: Teams へ通知を行う

SORACOM Funk 経由で Teams へ通知を行います。
今回は SIM を利用しているデバイスから unified endpoint を利用します。

$ curl -v -X POST -H 'content-type:application/json' -d '{"hello": "funk"}' http://uni.soracom.io

通知確認


以上で SORACOM Funk を利用して Azure Functions を呼び出し Teams へ通知することができました。

トラブルシューティング

本手順で Teams へ通知できなかった場合、以下の点を確認してください。

SORACOM Harvest Data へデータが格納されるか

本手順では Unified Endpoint を利用しているため、SORACOM Harvest Data を有効にすることで SORACOM Harvest Data と SORACOM Funk 両方へ連携されます。SORACOM Harvest Data へ格納されていない場合、デバイスが SORACOM に接続されていなかったり、グループへ所属できていない可能性があります。

Azure Functions へデータが連携されているか

Azure Functions のログより、SORACOM Funk からのデータが連携されているか確認します。もし SORACOM Harvest Data へデータが格納されているのに Azure Functions にログが記録されていない場合、SORACOM Funk に設定した URL や認証情報が誤っていないか確認してください。

Teams へ通知されているか

データを送信した際に Azure Functions にログが記録されているにもかかわらず Teams へ通知されていない場合、Azure Functions の設定 (コード・パッケージ・環境変数) を確認してください。

Getting Started

SORACOM Air for セルラー

SORACOM Air for LoRaWAN

SORACOM Air for Sigfox

SORACOM Beam

SORACOM Canal/Direct/Door

SORACOM Endorse

SORACOM Funnel

SORACOM Funk

SORACOM Gate

SORACOM Harvest

SORACOM Inventory

SORACOM Junction

SORACOM Krypton

SORACOM Lagoon

SORACOM Mosaic

SORACOM Napter

SORACOM Orbit

SORACOM Peek

SORACOM LTE-M Button

GPS マルチユニット SORACOM Edition

IoT 体験キット

Device

サービス機能詳細

Developer Tools

Design Patterns

pagetop