TCP → HTTP/HTTPS エントリポイント (beam.soracom.io:23080
) に、デバイスから TCP で送信されたデータを、任意のタイミングで HTTP リクエストまたは HTTPS リクエストに変換して指定の URL に転送 (POST) します。なお、TCP → HTTP/HTTPS エントリポイントに送信されたデータは、たとえ JSON 形式のデータと同じフォーマットでも、バイナリデータとして処理されます。
デバイスのアプリケーションが TCP で送信したデータは HTTP/HTTPS リクエストで転送されるときに分割 / 結合されることがあります
TCP (RFC 9293 Transmission Control Protocol (TCP)) は、デバイスのアプリケーションが送信したデータを、ネットワークの仕様や通信状況にあわせて適切に TCP セグメントという単位で分割して送信します。そして TCP → HTTP/HTTPS エントリポイントでは、TCP で受信したデータ (TCP セグメント) を、任意のタイミングで HTTP/HTTPS リクエストに変換して転送先サーバーに転送します。
その結果、デバイスのアプリケーションが TCP で送信したデータは、アプリケーションが送信した単位 (TCP コネクション単位や TCP セグメント単位) で転送されることは保証されません。たとえば、以下のようなことが発生します。
- デバイスのアプリケーションが送信したデータが、TCP の仕様に従って複数の TCP セグメントに分割されることがあります。その場合、転送先サーバーに複数の HTTP リクエストまたは HTTPS リクエストとして転送されることがあります。
- デバイスから 1 つの TCP コネクションで送信した複数のデータが TCP → HTTP/HTTPS エントリポイントで結合 (*1) され、1 つの HTTP リクエストまたは HTTPS リクエストとして転送されることがあります。
転送先では、デバイスのアプリケーションが送信したデータが分割 / 結合 (*1) されて転送されることも考慮してください。分割 / 結合されることに問題がある場合は、SORACOM Binary Format v1 や、HTTP エントリポイント の利用も検討してください。どちらもデバイスのアプリケーションでの対応が必要です。
- (*1) TCP コネクションを確立してから切断するまでに、アプリケーションが複数のデータを送信した場合に、データが結合されることがあります。TCP コネクションの単位を超えて結合されることはありません。
バイナリデータは JSON 形式に変換されて転送されます
バイナリデータとして処理される場合は、以下の JSON 形式に変換されたうえで転送されます。
payload
の値 (eyJs...
) は、デバイスから送信した JSON 形式のデータを Base64 形式でエンコードしたものです。これを、payload 変換と呼びます。{ "payload": "eyJsYXQiOm51bGwsImxvbiI6bnVsbCwiYmF0IjozLCJycyI6MywidGVtcCI6MTkuOSwiaHVtaSI6NDcuNiwieCI6bnVsbCwieSI6bnVsbCwieiI6bnVsbCwidHlwZSI6MX0=" }
payload 変換されたデータから元のデータを取り出すには、
payload
の値 (eYJs...
) を Base64 形式でデコードしてください。バイナリパーサー や Orbit で処理された場合は、処理後のデータが JSON 形式のデータとして UDP → HTTP/HTTPS エントリポイントに出力されるため、payload 変換は行われません。
TCP → HTTP/HTTPS エントリポイントを設定する
設定画面を表示する操作については、SORACOM Beam のエントリポイントを設定する を参照してください。TCP → HTTP/HTTPS エントリポイントで設定できる項目は以下のとおりです。
項目 | 説明 | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
任意の名前を入力します。 同じ名前の設定を追加できますは、エントリポイントの一意のキーとして扱われません。ほかのエントリポイントと同じ名前を設定できます。 | |||||||||||
この設定の有効 / 無効を切り替えます。 | |||||||||||
このエントリポイントで受け付けたリクエストの転送先を設定します。
| |||||||||||
プラットフォームバージョンとして「202411」または「201509 (非推奨)」を選択します。プラットフォームバージョンについては、プラットフォームバージョン 201509 と 202411 の違い を参照してください。 | |||||||||||
SORACOM Binary Format v1 (Public beta) を参照してください。 | をオンにすると、TCP で送信されたバイナリデータが、SORACOM Binary Format v1 に準拠するものとして処理され、転送先に転送されます。SORACOM Binary Format v1 形式について詳しくは、|||||||||||
転送先へのリクエストに追加するヘッダーを設定します。詳しくは、HTTP エントリポイントの [ヘッダ操作] を参照してください。 | |||||||||||
転送先サーバーからのレスポンスは、加工されてデバイスに返却されますTCP → HTTP/HTTPS エントリポイント では、転送先サーバーからのレスポンスは加工されて、デバイスに返却されます。以下の 2 つの設定を行うと、レスポンスは加工されません。
|
SORACOM CLI / SORACOM API の場合
グループ設定に Beam のエントリポイントを追加するコマンドについては、SORACOM Beam のエントリポイントを設定する の SORACOM CLI / SORACOM API の場合 を参照してください。
ここでは、TCP → HTTP/HTTPS エントリポイントを追加する場合のリクエストボディに指定する key
と value
のペアを説明します。
key | value の型 | value |
---|---|---|
tcp://beam.soracom.io:23080 | Object | TCP → HTTP/HTTPS エントリポイントの Object を参照してください。 |
SORACOM CLI のコマンド例:
$ soracom groups put-config --group-id {group_id} --namespace SoracomBeam \
--body '[
{
"key": "tcp://beam.soracom.io:23080",
"value": {
"name": "tcp2https",
"enabled": true,
"destination": "https://beamtest.soracom.io",
"version": "202411"
"addSubscriberHeader": true,
"addSimIdHeader": false,
"addMsisdnHeader": false,
"addEquipmentHeader": false,
"addSignature": true,
"customHeaders": {
"X-GROUP-NAME": {
"action": "append",
"headerKey": "X-GROUP-NAME",
"headerValue": "TEST"
}
},
"skipStatusCode": true,
"eodBytes": "",
"psk": {
"$credentialsId": "CredentialsID"
}
}
}
]'
SORACOM CLI や API で設定を更新するときは
Beam のエントリポイントの設定を部分的に更新するときは、更新しない設定も含めて、すべての設定を漏れなく指定してください。更新する設定だけを指定すると、省略した設定は初期値に戻ります。
想定していない値を指定した場合の動作は、定義されていません。SORACOM CLI / SORACOM API で設定を変更したあとで、SORACOM ユーザーコンソールで意図通りに設定されていることを確認してください。
TCP → HTTP/HTTPS エントリポイントの Object
以下の key と value を指定します。なお、この key と value のペアは、通常の JSON Object として指定します。
key | value の型 | value | ||||||
---|---|---|---|---|---|---|---|---|
name | String | 任意の名前を入力します。 同じ名前の設定を追加できます
| ||||||
enabled | Boolean | このエントリポイントの有効 / 無効を設定します。
| ||||||
destination | String | エントリポイントで受け付けたリクエストの転送先 (URL) を入力します。例: https://example.com:443/to/ | ||||||
version | String | プラットフォームバージョンとして以下のいずれかの値を設定します。プラットフォームバージョンについては、プラットフォームバージョン
| ||||||
addSubscriberHeader | Boolean | 転送先へのリクエストに
| ||||||
addSimIdHeader | Boolean | 転送先へのリクエストに
| ||||||
addMsisdnHeader | Boolean | 転送先へのリクエストに
| ||||||
addEquipmentHeader | Boolean | 転送先へのリクエストに
| ||||||
addSignature | Boolean | 転送先へのリクエストに
| ||||||
customHeaders | Object | 転送先へのリクエストヘッダーを追加、置換、削除できます。
リクエストヘッダーは大文字小文字が区別されませんでは、大文字小文字を区別して登録できますが、一般に、リクエストヘッダーは大文字小文字が区別されません。大文字小文字を同一視した結果、同じ値になるヘッダーを複数登録した場合の動作は保証されません。 | ||||||
skipStatusCode | Boolean | レスポンスに HTTP のステータスコードを含むかを設定します。詳しくは、レスポンスのステータスコードを省略する を参照してください。
| ||||||
eodBytes | String | レスポンスの末尾に、終端を識別するためのバイト列を付与します。詳しくは、レスポンスのデータ終端バイト列を設定する を参照してください。例: 0a (改行コード) | ||||||
psk.$credentialsId | String | addSignature が true のときに、署名に利用する事前共有鍵の認証情報 IDを指定します。認証情報 ID は、認証情報ストア に事前共有鍵を登録したときに指定しています。詳しくは、署名ヘッダと事前共有鍵を使って送信元を検証する を参照してください。 |
TCP → HTTP/HTTPS エントリポイントにリクエストする
TCP → HTTP/HTTPS エントリポイントに、デバイスからデータを送信します。
以下は、デバイスで nc コマンドを利用して、TCP → HTTP/HTTPS エントリポイント (beam.soracom.io:23080
) にデータを送信する場合の例です。
$ nc -v beam.soracom.io 23080
Connection to beam.soracom.io (100.127.127.100) 23080 port [tcp/*] succeeded!
Test data # 送信するデータを入力して、Enter キーを押します。
ヘッダー操作について
デバイスが送信したデータが転送先の URL に転送される際、Beam によって以下のヘッダー操作が行われます。
user_agent: SORACOM Beam
が追加されます。- [ヘッダ操作] を参照してください。 の設定に従って、ヘッダーが追加、置換、削除されます。詳しくは、HTTP エントリポイントの
デバイスへのレスポンス
TCP には HTTP のようなリクエスト&レスポンスの概念はありません。転送先の HTTP/HTTPS サーバーが返した HTTP ステータスコードと HTTP レスポンスのボディは、以下の形式で TCP パケットのペイロードに含めてレスポンスされます。
${HTTP ステータスコード} ${転送先サーバーから返された HTTP レスポンスのボディ}${[データ終端バイト列] に指定したバイト列}
なお、${HTTP ステータスコード}
(半角スペースを含む) と、${[データ終端バイト列] に指定したバイト列}
は省略できます。詳しくは、以下のページを参照してください。
レスポンスの具体例は以下のとおりです。
転送先サーバーから、HTTP ステータスコードが
200
で、ボディがない HTTP レスポンスが返された場合の表示例:200
転送先サーバーから、HTTP ステータスコードが
200
で、ボディ (Message from server
) がある HTTP レスポンスが返され、 が0a
だった場合の表示例:200 Message from server\n
転送先サーバーから、HTTP ステータスコードが
200
で、ボディ (Message from server
) がある HTTP レスポンスが返され、 が空欄だった場合の表示例:200 Message from server
プラットフォームバージョン 201509
と 202411
の違い
TCP → HTTP/HTTPS エントリポイントのプラットフォームバージョンによって、以下の点が異なります。
Unified Endpoint は TCP → HTTP/HTTPS エントリポイントの [プラットフォームバージョン] の設定の影響を受けません
Unified Endpoint に TCP で送信した場合、Unified Endpoint のレスポンスの形式 を「SORACOM Beam」に設定しているとき (*1) は、常にプラットフォームバージョン 202411
の動作をします。
なお、このときのレスポンスは、TCP → HTTP/HTTPS エントリポイントの
や の設定の影響を受けます。- (*1) Unified Endpoint のレスポンスの形式 を「Auto (デフォルト)」に設定し、さらにそのグループ設定で SORACOM Beam だけが有効なときも、同じ動作です。
レスポンスのデータ終端バイト列のデフォルト値
TCP → HTTP/HTTPS エントリポイントの Object が eodBytes
プロパティを含まない場合、 の設定によって、データ終端バイト列が異なります。
ユーザーコンソールで設定を行う場合、TCP → HTTP/HTTPS エントリポイントの Object は必ず eodBytes
プロパティを含んでいます。 の欄を空白にして TCP → HTTP/HTTPS エントリポイントの設定を作成すると、ユーザーコンソールは自動的に "eodBytes": ""
(空の文字列) として eodBytes
プロパティを追加します。
API から手動で TCP → HTTP/HTTPS エントリポイントの設定を登録する場合、Object が eodBytes
プロパティを含むかどうかを確認してください。
データ終端バイト列は変更できます。詳しくは、レスポンスのデータ終端バイト列を設定する を参照してください。
デバイスへのエラーレスポンス
転送先サーバーが HTTP ステータスコード 400 以上のレスポンスを返却した場合、TCP → HTTP/HTTPS エントリポイントではエラーレスポンスとみなされます。このときデバイスには、プラットフォームバージョンに応じて定められたレスポンス形式で、TCP パケットのペイロードとして送信されます。
なお、エラーレスポンスに含まれるデータの違いやカスタマイズできるかどうかについて詳しくは、エラーレスポンスに含まれるデータの違い を参照してください。
プラットフォームバージョン
201509
の場合:${HTTP ステータスコード} ${転送先の URL} returns a status code (${HTTP ステータスコード}). Please check your destination.\r\n
レスポンスの具体例
レスポンスの具体例は以下のとおりです。
転送先サーバーから、HTTP ステータスコードが
400
で、ボディ (Message from server
) がある HTTP レスポンスが返された場合の表示例:400 https://example.com:443/to/ returns a status code (400). Please check your destination.\r\n
プラットフォームバージョン
202411
の場合:${HTTP ステータスコード} ${転送先サーバーから返された HTTP レスポンスのボディ}${[データ終端バイト列] に指定したバイト列}
レスポンスの具体例
レスポンスの具体例は以下のとおりです。
転送先サーバーから、HTTP ステータスコードが
400
で、ボディ (Message from server
) がある HTTP レスポンスが返され、 が0a
だった場合の表示例:400 Message from server\n
転送先サーバーから、HTTP ステータスコードが
400
で、ボディ (Message from server
) がある HTTP レスポンスが返され、 が空欄だった場合の表示例:400 Message from server
エラーレスポンスに含まれるデータの違い
エラーレスポンスに含まれるデータの違いは以下のとおりです。
項目 | プラットフォームバージョン 201509 | プラットフォームバージョン 202411 |
---|---|---|
HTTP ステータスコード | あり。省略できません。 | あり。レスポンスのステータスコードを省略する を参照してください。 | をオンにすると省略できます。詳しくは、
転送先の URL | あり。省略できません。 | なし。追加できません。 |
転送先サーバーから返された HTTP レスポンスのボディ | なし。追加できません。 | あり。省略できません。 |
データ終端バイト列 | \r\n 。変更できません。 | なし。レスポンスのデータ終端バイト列を設定する を参照してください。 | で変更できます。詳しくは、