Incoming Webhook

[更新: 2026年10月20日]

1. サービスアダプター作成

さくらのクラウドコントロールパネルより新規にIncoming Webhookサービスアダプターを作成します。 サービスアダプターの追加画面からIncoming Webhookに必要な情報を入力します。

画像ファイル
Incoming Webhook サービスアダプター入力項目

名前

サービスアダプターを管理する名前を入力します。

プロジェクト

サービスアダプターを接続するプロジェクトを選択します。
作成されたサービスアダプターは、ここで選択したプロジェクトに所属するSIMとのみ通信できます。

サービスアダプター

incoming webhookを選択します。

シークレット

任意に文字列を設定します。Incoming WebhookのURLへ届いたメッセージをIoTクラウドコア側でメッセージの検証を行い、メッセージの改ざんなどを防止します。
リクエストボディーをメッセージ、Secret に入力した文字をキーとするHMAC-SHA1を計算し、X-Sakura-Signatureヘッダーとして、リクエストを送信してください。

各項目を入力し、「作成」ボタンをクリックするとサービスアダプターを作成できます。なお、入力した項目は後からでも変更ができます。

参考

双方向通信を行う Webアプリケーション実装例 にて、Incoming Webhookを用いた作例を参照できます。

2. メッセージの送信

Incoming Webhook用のURLにデータを送信することで、デバイス方向へメッセージを送信できます。 URLは暗号化プロトコル(HTTPS)のみ対応しています。

例としてdata.jsonというファイルを準備し、以下のjsonメッセージを記載します。 その際、 <device_id> は適宜書き換えます、 device_id はプロジェクトのSIM一覧画面から確認することができます。

{
   "device_id":"<device_id>",
   "type":"object",
   "payload":[
      {
         "type":"int32",
         "tag":"FF",
         "value":15
      },
      {
         "type":"float64",
         "tag":"00",
         "value":3.141592653589793
      }
   ]
}

メッセージデータを送信する前に末尾の改行コードを削除します。

$ sed -i -z 's/\n//g' data.json

また、シークレットを設定している場合リクエストボディーをメッセージとしてHMAC-SHA1を計算します。 <secret>は適宜書き換えます。

$ cat data.json | openssl dgst -sha1 -hmac "<secret>"
(stdin)= xxxxxx

上記のHMAC-SHA1を X-Sakura-Signature ヘッダーに入れて、POSTリクエストを送ります。 <token>は適宜書き換えます。

正しく送信ができた場合、サービスアダプターはnotifyタイプのデータを応答します。

curl -X POST --header 'Accept: application/json' --header 'X-Sakura-Signature: xxxxxx' -d @data.json 'https://incoming.sipf.iot.sakura.ad.jp/v0/<token>'
{"device_id":"<device_id>","type":"notify","id":"xxxxxxxxxxxxxxxx"}

シークレットに誤りあり送信が失敗した場合、サービスアダプターはerrorタイプのデータを応答します。

curl -X POST --header 'Accept: application/json' --header 'X-Sakura-Signature: xxxxxx' -d @data.json 'https://incoming.sipf.iot.sakura.ad.jp/v0/<token>'
{"device_id":"<device_id>","type":"error","datetime":"<datetime>>","payload":{"error":"Invalid Signature","detail":"invalid signature"}}

3. エラーレスポンスの一覧

Incoming Webhook に対してリクエストに誤りがあった場合、以下のようなエラーが返されます。

エラーステータスコードとレスポンスの一覧

HTTP Status

エラーの原因と対処法

400(Bad Request)

正しいメッセージフォーマットでリクエストてください

401(Unauthorized)

正しいトークンを含めてアクセスしてください

403(Forbidden)

デバイスID がサービスアダプターと連携されていません

404(Not Found)

デバイス、もしくはデバイスに対するサービスアダプターが見つかりません

405(MethodNotAllowed)

POST 以外の HTTP Request は許可されておりません

422(Unprocessable Entity)

JSON の形式が間違っています。
正しいメッセージフォーマットでリクエストしてください

429(Too Many Request)

プラットフォームへのリクエストが多すぎます。
時間をおいてリクエストしてください

500(Internal Server Error)

内部エラーです。時間をおいてリクエストしてください