Outgoing Webhook¶
[更新: 2021年12月21日]
Outgoing WebhookサービスアダプタはデバイスからIoTクラウドコアへの片方向通信を実現します。
1. サービスアダプタ作成¶
さくらのクラウドコントロールパネルより新規にサービスアダプタを作成します。
サービスアダプタの追加画面からOutgoing Webhookに必要な情報を入力します。

名前 | サービスアダプタを管理する名前を入力します。 |
プロジェクト | サービスアダプタを接続するプロジェクトを選択します。 作成されたサービスアダプタは、ここで選択したプロジェクトに所属するSIMとのみ通信できます。 |
サービスアダプタ | outgoing webhookを選択します。 |
Payload URL | 送信先のWebhook URLを入力します。※ http/https から始まるURLを入力してください。 |
シークレット | 任意に文字列を設定します。Payload URLに届いたメッセージの検証を行い、メッセージの改ざんなどを防止します。 シークレットを設定した場合、リクエストにX-Sakura-Signatureヘッダが付与されています。 X-Sakura-Signature には、リクエストボディをメッセージ、Secret に入力した文字をキーとするHMAC-SHA1が設定されているため、これを検証してください。 |
各項目を入力し、「作成」ボタンをクリックするとサービスアダプタを作成できます。なお、入力した項目は後からでも変更ができます。
2. メッセージの受信¶
Outgoing Webhookサービスアダプタでデバイスからのメッセージを受信します。
例としてPayload URLに設定したサーバーにてOutgoing Webhookからのメッセージを受信します。 サーバ内の適当な階層にて以下を記載したindex.phpを用意します。
<?php
$fp = fopen('php://stdout', 'w');
$json = file_get_contents('php://input');
fprintf($fp, "receive message: ".$json."\n");
$headers = getallheaders();
$secret = $headers['X-Sakura-Signature'] ?? '';
if ($secret) fprintf($fp, "secret: ".$secret."\n");
$secret_verify = hash_hmac('sha1', $json, "<secret>");
fprintf($fp, "secret_verify: ".$secret_verify."\n");
if ($secret_verify === $secret)
fprintf($fp, "OK \n");
else
fprintf($fp, "InValid Secret \n");
- Outgoing WebhookからPOSTされるメッセージデータを取得します。
- シークレットを設定している場合、リクエストにHMAC-SHA1のX-Sakura-Signatureを取得し検証します。<secret>は適宜書き換えます。
簡易的な確認としてビルトインサーバを立ててデバイスからIoTクラウドコアへメッセージを送ります。
$ php -S 0.0.0.0:8000
本例の場合、メッセージを受信した場合コンソール上でOKのログが表示されます。
$ php -S 0.0.0.0:8888
receive message: {"id":"xxxxxxxx","module_id":"xxxxxx","timestamp_src":1609459200000,"timestamp_platform_from_src":1638772594137,"timestamp_platform_to_dst":1638772594249,"type":"object","payload":[{"type":"int32","tag":"00","value":65536},{"type":"float64","tag":"00","value":3.141592653589793}]}
secret: xxxxxx
secret_verify: xxxxxx
OK
また、サーバ側でのシークレットの照合に失敗した場合、コンソール上でInValid Secretログが表示されます。
$ php -S 0.0.0.0:8888
receive message: {"id":"xxxxxxxx","module_id":"xxxxxx","timestamp_src":1609459200000,"timestamp_platform_from_src":1638772594137,"timestamp_platform_to_dst":1638772594249,"type":"object","payload":[{"type":"int32","tag":"00","value":65536},{"type":"float64","tag":"00","value":3.141592653589793}]}
secret: xxxxxx
secret_verify: yyyyyy
InValid Secret