Docs Menu
Docs Home
/ /
サードパーティー サービス

Webhook リクエストと応答

重要

サードパーティ サービスとプッシュ通知の廃止

Atlas App Services のサードパーティ サービスとプッシュ通知は非推奨となり、代わりに関数内の外部依存関係を使用する HTTP エンドポイントを作成できるようになりました。

Webhook はHTTPS endpointsに名前変更され、動作は変更されません。 既存の Webhook を移行する必要があります。

既存のサービスは、 30、2025 まで引き続き機能します。

サードパーティ サービスとプッシュ通知は非推奨になったため、App Services UI からデフォルトで削除されました。 既存のサードパーティ サービスまたはプッシュ通知を管理する必要がある場合は、次の操作を実行して構成を UI に追加できます。

  • 左側のナビゲーションの [ App Settings Manageセクションの下にある [] をクリックします。

  • Temporarily Re-Enable 3rd Party Servicesの横にあるトグル スイッチを有効にし、変更を保存します。

サービスに応じて、受信 Webhookは、リクエストを検証し、Atlas App Services が外部サービスに返す応答をカスタマイズするためのいくつかの方法を提供します。

Webhook リクエストが信頼できるソースからのものであることを検証するために、一部の外部サービスでは、受信リクエストにいくつかの方法で秘密の string を含める必要があります。 HTTP Serviceなどの他のサービスでは、オプションでリクエスト検証を要求できます。

Webhook には、 Request Validation ペイロード署名検証クエリ パラメータとしてのシークレット の 2 つのタイプがあります。

リクエストを行う際には、HTTP/1.1 以上が必要です。

注意

最大限のセキュリティを確保するには、Pythonシークレット モジュール などの安全なパッケージを使用して secret string をプログラム的に生成します。シークレットを公開したり、バージョン管理システムに含めたりしないことを確認してください。

Verify Payload Signatureリクエスト検証オプションでは、受信リクエストに、リクエスト本文とX-Hook-Signatureヘッダーにsecret string から生成された 16 進数でエンコードされた HMAC SHA-256 ハッシュが含まれている必要があります。

次の Webhook リクエストの本体とシークレットについて考えてみましょう。

const body = { "message":"MESSAGE" }
const secret = 12345

次のAtlas Functionは、このbodysecretのハッシュを生成します。

// Generate an HMAC request signature
exports = function(secret, body) {
// secret = the secret validation string
// body = the webhook request body
return utils.crypto.hmac(EJSON.stringify(body), secret, "sha256", "hex");
}
// Returns: "828ee180512eaf8a6229eda7eea72323f68e9c0f0093b11a578b0544c5777862"

ハッシュ値は、すべてのリクエストでX-Hook-Signature HTTP リクエスト ヘッダーに割り当てる必要があります。

X-Hook-Signature:sha256=<hex-encoded-hash>

リクエストが適切に署名されているかどうかをテストするには、次のcurlコマンドを実行します。

curl -X POST \
-H "Content-Type: application/json" \
-H "X-Hook-Signature:sha256=828ee180512eaf8a6229eda7eea72323f68e9c0f0093b11a578b0544c5777862" \
-d '{"message":"MESSAGE"}' \
<webhook URL>

Require Secret as Query Paramリクエスト検証オプションでは、受信リクエストにURLの末尾に追加されるクエリ パラメータとして、指定された secret string が含まれている必要があります。

12345secret値を使用するように構成された Webhook について考えてみましょう。 すべてのリクエストは、クエリ パラメーターとしてシークレットを追加した Webhook URL で行われる必要があります。

<webhook URL>?secret=12345

この URL へのリクエストが正しく検証されるかテストするには、次のcurlコマンドを実行します。

curl -H "Content-Type: application/json" \
-d '{ "message": "HELLO" }' \
-X POST '<webhook URL>?secret=12345'

App Services は、Webhook の HTTP レスポンスを表すresponseオブジェクトを Webhook 関数の 2 番目の引数として自動的に渡します。 次の表は、 responseオブジェクトを変更するために利用できる方法を示しています。

方式
Arguments
説明

setStatusCode(code)

code integer

HTTPレスポンス ステータス コード を設定します。

response.setStatusCode(201);

setBody(body)

body stringまたはBSON.Binary

HTTPレスポンス 本体 を設定します。

bodyが string の場合、返される前にBSON.Binaryにエンコードされます。

response.setBody(
"{'message': 'Hello, World!'}"
);

setHeader(name, value)

name string
value string

nameで指定されたHTTP レスポンスヘッダーvalue引数で渡された値に設定します。これにより、そのヘッダーにすでに割り当てられている他の値はすべて上書きされます。

response.setHeader(
"Content-Type",
"application/json"
);

addHeader(name, value)

name string
value string

name で指定されるHTTPレスポンス ヘッダーvalue 引数で渡される値に設定します。setHeader とは異なり、これはヘッダーにすでに割り当てられている他の値を上書きしない。

response.addHeader(
"Cache-Control",
"max-age=600"
);
response.addHeader(
"Cache-Control",
"min-fresh=60"
)

戻る

サービス アクションの呼び出し

項目一覧