Soracom

Users

ドキュメント
Home ドキュメント SORACOM Funk リファレンス

SORACOM Funk から送信されるデータフォーマット

デバイスが Funk のエントリポイントに送信したデータは、Funk によって転送先のクラウドサービスに転送されます。

[送信データ形式] の設定について

Funk によって転送先のクラウドサービスに送信されるデータは、[送信データ形式] の設定によって異なります。

デバイスでのコマンド例:

curl -v funk.soracom.io \
-H "Content-Type: application/json" \
-d '{"hello": "funk"}' 

上記のコマンドを実行して Funk にデータを送信した場合に、転送先のクラウドサービスに送信されるデータは、以下のとおりです。

[送信データ形式] の設定説明
(指定しない)

エントリポイントの種類によって、データの処理が異なります。

  • UDP: バイナリデータとして処理されます。(*1)
  • TCP: バイナリデータとして処理されます。(*1)
  • HTTP: HTTP ヘッダーの Content-Type に従って処理されます。
  • SMS: テキストデータとして処理されます。
  • USSD: テキストデータとして処理されます。
JSON

エントリポイントの種類に関わらず、JSON 形式のデータとして処理されます。

{'hello': 'funk'}

デバイスが、JSON 形式以外のデータを送信した場合は、400 Bad Request が返されます。

テキスト

エントリポイントの種類に関わらず、テキストデータとして処理されます。

{'payload': '{"hello": "funk"}'}
バイナリ

エントリポイントの種類に関わらず、バイナリデータとして処理されます。(*1)

{'payload': 'eyJoZWxsbyI6ICJmdW5rIn0='}
  • (*1) 仮に JSON 形式のデータと同じフォーマットで Funk に送信した場合でも、バイナリデータとして処理されます。
バイナリデータは JSON 形式に変換されて転送されます
  • バイナリデータとして処理される場合は、以下の JSON 形式に変換されたうえで転送されます。payload の値 (eyJs...) は、デバイスから送信した JSON 形式のデータを Base64 形式でエンコードしたものです。これを、payload 変換と呼びます。

    {
      "payload": "eyJsYXQiOm51bGwsImxvbiI6bnVsbCwiYmF0IjozLCJycyI6MywidGVtcCI6MTkuOSwiaHVtaSI6NDcuNiwieCI6bnVsbCwieSI6bnVsbCwieiI6bnVsbCwidHlwZSI6MX0="
    }
    

    payload 変換されたデータから元のデータを取り出すには、payload の値 (eYJs...) を Base64 形式でデコードしてください。

  • バイナリパーサーOrbit で処理された場合は、処理後のデータが JSON 形式のデータとして Funk のエントリポイントに出力されるため、payload 変換は行われません。

クラウドサービスでデータを取得する

データを受信したクラウドサービスでは、以下のようにデータを取得できます。

AWS Lambda

Python ランタイムの場合

Python ランタイムのハンドラーは、以下のとおりです。

def lambda_handler(event, context):
    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')
    }
  • event: [送信データ形式] で指定したデータ形式に応じて値が設定されます。

  • context (クライアントコンテキスト): 以下のフォーマットのデータが設定されます。Python ランタイムの場合は、Python の AWS Lambda context オブジェクト 内の client_context.custom に以下のような JSON を元にした dict が設定されます。

    例:

    {
      "custom": {
        "operatorId": "OPXXXXXXXXXX",
        "coverage": "global",
        "resourceType": "Subscriber",
        "resourceId": "2950XXXXXXXXXXX",
        "sourceProtocol": "http",
        "srn": "srn:soracom:OPXXXXXXXXXX:global:Subscriber:2950XXXXXXXXXXX",
        "imsi": "2950XXXXXXXXXXX",
        "simId": "8942XXXXXXXXXXXXXXX",
        "imei": "8676XXXXXXXXXXX"
      }
    }
    

Node.js ランタイムの場合

Node.js ランタイムのハンドラーは、以下のとおりです。

exports.handler = async (event, context) => {
    const response = {
        statusCode: 200,
        body: JSON.stringify('Hello from Lambda!'),
    };
    return response;
};
  • event: [送信データ形式] で指定したデータ形式に応じて値が設定されます。

  • context (クライアントコンテキスト): 以下のフォーマットのデータが設定されます。Node.js ランタイムの場合は、Node.js の AWS Lambda context オブジェクト 内の clientContext に以下のような JSON が設定されます。

    {
      "operatorId": "OPXXXXXXXXXX",
      "coverage": "global",
      "resourceType": "Subscriber",
      "resourceId": "2950XXXXXXXXXXX",
      "sourceProtocol": "http",
      "srn": "srn:soracom:OPXXXXXXXXXX:global:Subscriber:2950XXXXXXXXXXX",
      "imsi": "2950XXXXXXXXXXX",
      "simId": "8942XXXXXXXXXXXXXXX",
      "imei": "8676XXXXXXXXXXX",
      "custom": {
        "operatorId": "OPXXXXXXXXXX",
        "coverage": "global",
        "resourceType": "Subscriber",
        "resourceId": "2950XXXXXXXXXXX",
        "sourceProtocol": "http",
        "srn": "srn:soracom:OPXXXXXXXXXX:global:Subscriber:2950XXXXXXXXXXX",
        "imsi": "2950XXXXXXXXXXX",
        "simId": "8942XXXXXXXXXXXXXXX",
        "imei": "8676XXXXXXXXXXX"
      }
    }
    

Azure Functions / Google Cloud Functions

以下のデータフォーマットが渡されます。

  • method: 'POST' が指定されます。
  • body: [送信データ形式] で指定したデータ形式に応じて値が設定されます。
  • headers: user-agent には 'SORACOM Funk' が指定されます。content-type には 'application/json' が指定されます。x-soracom-token には JWT 形式のトークンが指定されます。