安全にご利用いただくために、Webhookの送信元がCWS APIであることを、ご確認いただくことを推奨します。
送信元の検証を実施いただけるように、CWS APIでは、Webhookの送信の際に、HMAC SHA256ハッシュのhexdigestをHTTP Headerに付与しています。
ハッシュは、authenticationKeyを発行するで発行したauthenticationKey
と、Webhookで送信するHTTP Request Bodyの値により生成しています。
Webhookを受信した際に、CWS APIと同じ方法で生成したハッシュと比較することで、送信元がCWS APIであることをご検証いただけます。
送信元検証のサンプルプログラム
Webhookを受信するFlaskアプリケーションで、送信元の検証を実施するサンプルプログラムを、以下に例示します。
import hmac
import hashlib
from flask import Flask, request, abort, jsonify
app = Flask(__name__)
@app.route('/device-event', methods=['GET', 'POST'])
def device_event():
if request.method == 'GET':
return abort(403)
key = get_authentication_key()
data = request.data.decode('utf-8')
hash = get_hmac_hash_hexdigest(key, data)
if hash != request.headers.get('X-TLPF-NOTIFICATION-KEY'):
return abort(403)
return jsonify(None)
def get_authentication_key():
return 'CWS APIが発行した authenticationKey'
def get_hmac_hash_hexdigest(key, data):
return hmac.new(
bytearray(key, "ASCII"),
bytearray(data, "ASCII"),
hashlib.sha256,
).hexdigest()
上記プログラムは一例であるため、これによる問題が発生した場合の責任は負いかねます。
通知・アクセス設定で登録した「デバイスイベント通知先URLdeviceEvent
」に対して、トランザクションの結果またはデバイス状態変更を通知します。
本通知は デバイスイベントの種別によって外部通知のリクエスト内容が変わります。そのため、本通知では デバイスイベント毎に表記しています。
トランザクション結果通知の再送について
CWSでは、端末がオンラインになった際、以下条件を全て満たすトランザクションを再送します。
- ステータスが未処理(created,published,accepted)
- 再送の回数が、一定回数を下回っている
- 同一のオペレーションIDで最後に発行された
- 以下のオペレーションIDの場合は、アップデート対象のパッケージ/バージョンが異なるトランザクションが対象になります。
- put-v1-applications-devices-apps (ソフトウェアをすぐにアップデートさせるAPI)
- put-v1-applications-devices-firmware (ファームウェアをすぐにアップデートさせるAPI)
- put-v1-applications-devices-apps (ソフトウェアをすぐにアップデートさせるAPI)
- 以下のオペレーションIDの場合は、アップデート対象のパッケージ/バージョンが異なるトランザクションが対象になります。
上記に一致しない未処理のトランザクションは破棄します。 また、デバイスをディアクティベートするAPI、デバイスの初期化APIを実行した場合には、API実行前に発行した未処理のトランザクションを破棄します。
破棄した場合、その理由と共にトランザクション結果通知(破棄) を通知します。
通知・アクセス設定で登録した「Soraイベント送信先URLsoraEvent
」に対して Sora イベントを通知します。
本通知は Sora イベントの種別によって外部通知のリクエスト内容が変わります。
トランザクション結果通知 Webhook
トランザクションの結果を通知します。
関連API
通知タイミング
デバイスで以下処理完了後に通知します
- アクティベート
- ディアクティベート
- 初期化
- Wifi設定
- APN設定
- 言語設定
- LauncherAppへのKey設定
Authorizations:
header Parameters
X-TLPF-NOTIFICATION-KEY | string 署名検証のハッシュ値(payloadとauthenticationKeyのHMAC-SHA256) |
Request Body schema: application/json
applicationId required | string アプリケーションID |
deviceId required | string THINKLETのIMEI NO |
transactionId required | integer トランザクションID |
operationId required | string トランザクション結果通知の種別となるオペレーションID。 オペレーションIDは、トランザクションを発行したCWS APIのAPI操作に応じて異なる値となっている。 APIとoperationIdの値の組み合わせは以下である。
|
notificationType required | string 通知種別
|
result required | string トランザクション結果(success:成功, failure:失敗) |
message required | string トランザクシ ョンの処理結果メッセージ。 |
timestamp required | string イベント発生時のタイムスタンプ |
Request samples
- Payload
{- "applicationId": "abcdefghigklmnopqrstuvwxyz012345",
- "deviceId": "123456789101234",
- "transactionId": 1,
- "operationId": "post-v1-applications-devices",
- "notificationType": "processed",
- "result": "success",
- "message": "",
- "timestamp": "2020-10-16T00:37:08.260Z"
}
トランザクション結果通知(ソフトウェア/ファームウェアのアップデート) Webhook
トランザクションの結果(ソフトウェア/ファームウェアのアップデート)を通知する。
関連API
通知タイミング
- デバイスで ソフトウェア/ファームウェア のアップデートを受け付けた
- アップデート中に10秒間隔
- アップデート完了
Authorizations:
header Parameters
X-TLPF-NOTIFICATION-KEY | string 署名検証のハッシュ値(payloadとauthenticationKeyのHMAC-SHA256) |
Request Body schema: application/json
applicationId required | string アプリケーションID |
deviceId required | string THINKLETのIMEI NO |
transactionId required | integer トランザクションID |
operationId required | string トランザクション結果通知の種別となるオペレーションID。 オペレーションIDは、トランザクションを発行したCWS APIのAPI操作に応じて異なる値となっている。 APIとoperationIdの値の組み合わせは以下である。
|
notificationType required | string 通知種別。通知タイミング毎に以下値となる。
|
result required | string トランザクション結果(success:成功, failure:失敗) |
progress | number <float> 端末での、アップデート用データ(FW、アプリ)のダウンロード進捗率(0.0〜1.0) この項目は、MDM v0.6.21 以降を使用する場合に存在します。 進捗率は以下のnotificationTypeと値のパターンで通知します
|
message required | string トランザクションの処理結果メッセージ。 |
timestamp required | string イベント発生時のタイムスタンプ |
Request samples
- Payload
{- "applicationId": "abcdefghigklmnopqrstuvwxyz012345",
- "deviceId": "123456789101234",
- "transactionId": 1,
- "operationId": "put-v1-applications-devices-apps",
- "notificationType": "accepted",
- "result": "success",
- "progress": 0,
- "message": "message accepted.",
- "timestamp": "2020-10-16T00:37:08.260Z"
}
トランザクション結果通知(コマンド実行) Webhook
トランザクションの結果(コマンド実行)を通知します
関連API
通知タイミング
- 端末内連携先アプリの呼出後
- CWS APIはコマンド通知先である端末内連携先アプリの呼出結果を1度目に通知します
- 端末内連携先アプリからの応答受信後
- CWS APIは端末内連携先アプリでの処理結果を2度目に通知します
特記事項
- 1度目の通知のsuccessは、端末内連携先アプリの呼出に対する成功、失敗を表します
- 2度目の通知のsuccessは、端末内連携先アプリでの処理結果の成功、失敗を表します
- customDataは、ユーザ独自の端末内連携先アプリで任意に定義することができます
- 2度目の通知は、ユーザ独自の端末内連携先アプリがMDMアプリに対して結果を戻すことで通知されます
- 連携情報を記載したmd ファイルはご希望の方に都度共有を行なっております。ご希望の方は FairyDevices にお問い合わせください。
Authorizations:
header Parameters
X-TLPF-NOTIFICATION-KEY | string 署名検証のハッシュ値(payloadとauthenticationKeyのHMAC-SHA256) |
Request Body schema: application/json
applicationId required | string アプリケーションID |
deviceId required | string THINKLETのIMEI NO |
transactionId required | integer トランザクションID |
operationId required | string トランザクション結果通知の種別となるオペレーションID。 オペレーションIDは、トランザクションを発行したCWS APIのAPI操作に応じて異なる値となっている。 APIとoperationIdの値の組み合わせは以下である。
|
success required | boolean コマンド実行結果(true:成功, false:失敗) |
process required | string processed(固定値) |
message required | string トランザクションの処理結果メッセージ。 |
customData required | string Default: "" 端末内連携先アプリからの送信データ(任意項目) |
timestamp required | string イベント発生時のタイムスタンプ |
Request samples
- Payload
{- "applicationId": "abcdefghigklmnopqrstuvwxyz012345",
- "deviceId": "123456789101234",
- "transactionId": 1,
- "operationId": "put-v1-applications-devices-commands",
- "success": true,
- "process": "processed",
- "message": "called app.",
- "customData": "",
- "timestamp": "2020-10-16T00:37:08.260Z"
}
トランザクション結果通知(Bluetoothデバイス/ネットワークの一覧を取得) Webhook
トランザクションの結果(Bluetoothデバイス/ネットワークの一覧を取得)を通知する。
関連API
通知タイミング
デバイスで以下処理完了 後に通知します
- Bluetoothデバイスの一覧を取得
- ネットワークの一覧を取得
Authorizations:
header Parameters
X-TLPF-NOTIFICATION-KEY | string 署名検証のハッシュ値(payloadとauthenticationKeyのHMAC-SHA256) |
Request Body schema: application/json
applicationId required | string |