デバイスが Funk のエントリポイントに送信したデータは、Funk によって転送先のクラウドサービスに転送されます。
- Funk から送信されるデータフォーマットは、グループ設定の で指定できます。
- Funk から送信されるデータを、転送先のクラウドサービスで取得する方法については、クラウドサービスでデータを取得する を参照してください。
- エントリポイントについて詳しくは、エントリポイント一覧 を参照してください。
- グループ設定について詳しくは、SORACOM Funk を有効化する を参照してください。
[送信データ形式] の設定について
Funk によって転送先のクラウドサービスに送信されるデータは、 の設定によって異なります。
デバイスでのコマンド例:
$ curl -v funk.soracom.io \
-H "Content-Type: application/json" \
-d '{"hello": "funk"}'
上記のコマンドを実行して Funk にデータを送信した場合に、転送先のクラウドサービスに送信されるデータは、以下のとおりです。
| の設定 | 説明 |
|---|---|
| (指定しない) | エントリポイントの種類によって、データの処理が異なります。
|
| JSON | エントリポイントの種類に関わらず、JSON 形式のデータとして処理されます。 デバイスが、JSON 形式以外のデータを送信した場合は、 |
| テキスト | エントリポイントの種類に関わらず、テキストデータとして処理されます。 |
| バイナリ | エントリポイントの種類に関わらず、バイナリデータとして処理されます。(*1) |
- (*1) 仮に JSON 形式のデータと同じフォーマットで Funk に送信した場合でも、バイナリデータとして処理されます。
バイナリデータは JSON 形式に変換されて転送されます
バイナリデータとして処理される場合は、以下の JSON 形式に変換されたうえで転送されます。
payloadの値 (eyJs...) は、デバイスから送信した JSON 形式のデータを Base64 形式でエンコードしたものです。これを、payload 変換と呼びます。{ "payload": "eyJsYXQiOm51bGwsImxvbiI6bnVsbCwiYmF0IjozLCJycyI6MywidGVtcCI6MTkuOSwiaHVtaSI6NDcuNiwieCI6bnVsbCwieSI6bnVsbCwieiI6bnVsbCwidHlwZSI6MX0=" }payload 変換されたデータから元のデータを取り出すには、
payloadの値 (eYJs...) を Base64 形式でデコードしてください。バイナリパーサー や Orbit で処理された場合は、処理後のデータが JSON 形式のデータとして Funk のエントリポイントに出力されるため、payload 変換は行われません。
バイナリパーサーや Orbit と併用する場合の処理順序
バイナリパーサー や Orbit と併用する場合の処理順序については、SORACOM のエントリポイントに送信したデータの処理順序 を参照してください。
クラウドサービスでデータを取得する
データを受信したクラウドサービスでは、以下のようにデータを取得できます。
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 形式のトークンが指定されます。