Webhook

最終更新: 2026年6月22日

Webhook は、Space で何かが起きたとき (例: Content の作成・公開) に、あらかじめ指定した外部 URL へ HTTP リクエストを送る設定です。外部システム連携や自動化に使います。たとえば商品 Content が公開されるたびに社内通知サーバーを呼び出したり、外部 API を呼び出すように構成できます。

Webhook はリクエストを送るだけでなく、その応答を受け取って再び ContentMedia へ書き戻す WriteBack まで設定できます。外部 API の結果を Space 内のデータとして取り込む非同期ジョブのフローを、このように構成します。Webhook は CMA における Space 配下のリソースで、パスは /spaces/{spaceId}/webhooks を基準とします。

リソース構造

次は Webhook「商品変更通知」の単一取得レスポンスです。sys (システムプロパティ) とあわせて、送信先・購読イベント・トリガー条件といった設定フィールドを持ちます。

{
  "sys": {
    "id": "3trmXRM3RqbgSnifyg7PWhk01Examp",
    "type": "Webhook",
    "space": { "sys": { "id": "HnQ32YiH", "type": "Refer", "targetType": "Space" } },
    "createdBy": { "sys": { "id": "3p4tcFbQRwz503VXdtHXNI5dZH5TVB", "type": "Refer", "targetType": "User" } },
    "createdAt": "2026-06-18T11:30:00.000Z",
    "updatedBy": { "sys": { "id": "3p4tcFbQRwz503VXdtHXNI5dZH5TVB", "type": "Refer", "targetType": "User" } },
    "updatedAt": "2026-06-18T11:30:00.000Z",
    "version": 1
  },
  "name": "商品変更通知",
  "filters": [
    { "doc": "sys.contentType.sys.id", "op": "EQ", "value": "3trmXRLdJF4GBlAjtcuoZ7Pnxj8dlA" }
  ],
  "headers": [
    { "key": "X-Source", "value": "weegloo", "secret": false }
  ],
  "httpBasicUsername": "dailywear",
  "topics": ["Content.Create", "Content.Publish"],
  "transformation": { "method": "POST", "contentType": "application/json", "includeBody": true },
  "url": "https://api.dailywear.example/webhooks/products",
  "activate": true
}

主なキー:

  • sys.id: Webhook の一意な識別子です。単一取得・修正・削除パスの {webhookId} に入ります。
  • url: イベントが発生したときに呼び出す外部の対象 URL です。
  • topics: どのイベントを購読するかを定めた配列です。下記の topics で形式を説明します。
  • filters: 購読したイベントのうち、実際にトリガーする条件です。下記の filters で説明します。
  • transformation: 送り出すリクエストの形 (メソッド・本文など) を変える設定です。下記の transformation で説明します。
  • writeBacks: 外部応答を受け取って ContentMedia へ書き戻すジョブの配列です。上記の例にはありません。下記の writeBacks で説明します。

システムプロパティ (sys)

すべての Webhook は共通のシステムプロパティを sys オブジェクトに格納します。spacecreatedByupdatedByRefer の形 ({ "sys": { "id", "type": "Refer", "targetType" } }) で入ります。

プロパティ説明
idstringリソースの一意な識別子。
typestringリソースの種類。Webhook は常に "Webhook"
spaceRefer<Space>この Webhook が属する Space
createdByRefer<User>作成したユーザー。
createdAtstring (date-time)作成日時。
updatedByRefer<User>最後に修正したユーザー。
updatedAtstring (date-time)最終修正日時。
versioninteger (≥1)リソースのバージョン。修正ごとに 1 ずつ増えます。

Webhook は設定リソースなので、公開という概念がありません。ContentContent Type とは違い、publisharchivestatus のような公開状態のプロパティを持たず、変更追跡用の version だけを持ちます。オン・オフは公開ではなく、本文フィールド activate で制御します。

本文プロパティ

Webhook の本文 (作成・修正時に送り、応答として返ってくる設定値) は次のフィールドで構成されます。

フィールド必須説明
namestring (1~64)Webhook 名。
urlstring (url)イベント発生時に呼び出す外部の対象 URL。
activatebooleanオンかどうか。false ならイベントが発生してもリクエストを送りません。
topicsstring[]購読するイベントの配列。下記の topics を参照。
filtersFilter[]トリガー条件の配列。空にすると購読したすべてのイベントがトリガーします。下記の filters を参照。
headersWebhookHeader[] (0~30)リクエストに載せて送る HTTP ヘッダーの配列。
httpBasicUsernamestring (1~32)HTTP Basic 認証のユーザー名。
httpBasicPasswordstring (1~32)HTTP Basic 認証のパスワード。書き込み専用です。応答には出てきません。
transformationTransformation送り出すリクエストのカスタマイズ。下記の transformation を参照。
writeBacksWriteBack[]応答を受け取って実行する書き込みジョブの配列。下記の writeBacks を参照。

headers の各項目は key (必須)・value (必須)・secret (任意, boolean) で構成されます。secrettrue のヘッダーは応答で値が隠されます。 API キーのように露出してはいけない値は secret: true のヘッダーに置きます。

topics

topics の各項目は {リソース}.{アクション} の形式です。例: Content.Create, Content.Publish, Media.Create

アクションは次のいずれか、またはリソースのすべてのアクションを意味する * です (例: Content.*)。

アクション意味
Allすべてのアクション。
Create作成。
Read取得。
Edit編集。
Save保存 (修正)。修正イベントは Save です。Update ではありません。
Delete削除。
Publish公開。
Unpublish公開取り消し。
Archiveアーカイブ。
Unarchiveアーカイブ解除。

filters

filters は、購読した topics のうち実際に Webhook をトリガーする条件を絞り込む配列です。各フィルターは次の形です。

{ "doc": "sys.contentType.sys.id", "op": "EQ", "value": "3trmXRLdJF4GBlAjtcuoZ7Pnxj8dlA" }
  • doc: 比較するフィールドのパス。sys.idsys.contentType.sys.idsys.createdBy.sys.idsys.updatedBy.sys.id のいずれかです。
  • op: 比較演算子。EQNEINNOT_INREGEXNOT_REGEX のいずれかです。
  • value: 比較値。EQNEREGEXNOT_REGEX には文字列を、INNOT_IN には文字列の配列を渡します。

複数のフィルターを置くと、すべてを満たした場合にトリガーします (AND)。filters を空にすると、購読した topics のすべてのイベントがトリガーします。

transformation

transformation は、送り出す HTTP リクエストの形を変えます。指定しない場合は、リソースのペイロード全体がデフォルトの POST でそのまま送られます。

キー説明
methodstringHTTP メソッド。GETPOSTPUTDELETEPATCH のいずれか。
contentTypestringリクエスト本文の Content-Type。
bodyobject送る本文を JSON Pointer テンプレートで構成するオブジェクト。
includeBodybooleanトリガーしたリソースの本文をあわせて送るかどうか。

writeBacks

writeBacks は、Webhook が受け取った外部応答を使って ContentMedia へ書き戻すジョブの、順序付き配列です。外部 API が 2xx で応答したときだけ、順番に実行されます。各項目は $content (WriteBackContent) または $media (WriteBackMedia) を 1 つ持ちます。

WriteBackContent ($content) のキー:

キー説明
actionstringCreateUpdateDeletePublishUnpublishArchiveUnarchive のいずれか。
contentTypeRefer<ContentType>Create 時に作る Content Typesys.id だけ渡せば十分です。
targetstringUpdateDelete などで対象 Contentsys.id を指す JSON Pointer テンプレート (例: { /response/id })。{ } で囲む必要があり、囲まないとリテラルとして扱われます。省略すると Webhook をトリガーしたリソースを対象にします。
localestringCreateUpdate 時に値を書き込む locale。locale コードまたはポインターテンプレート。省略すると Space のデフォルト locale。
fieldsobjectCreateUpdate 時の、対象フィールドのキー → ソース式のマップ。キーは対象 Content フィールドの apiName です。
publishbooleanCreateUpdate の後に公開するかどうか。デフォルト値 true
unpublishbooleanDelete 時に削除前に公開取り消しするかどうか。デフォルト値 true

WriteBackMedia ($media) のキー:

キー説明
actionstringCreateDeletePublishUnpublishArchiveUnarchive のいずれか。
sourcestringCreate 時に Media として取り込む値のポインターテンプレート (例: { /response/data/0/url })。{ } で囲む必要があります。
encodingstringCreate 時に source を解釈する方式。UrlBase64Binary のいずれか。
localestringCreate 時にファイル・タイトル・説明を書き込む locale。省略すると Space のデフォルト locale。
titlestringCreate 時の Media タイトル (ソース式またはリテラル)。
descriptionstringCreate 時の Media 説明。
targetstringDelete などで対象 Mediasys.id を指すポインターテンプレート。省略するとトリガーしたリソースが対象。
publishbooleanCreate 時に処理完了後に公開するかどうか。デフォルト値 true
unpublishbooleanDelete 時に削除前に公開取り消しするかどうか。デフォルト値 true

次は、外部応答 JSON から値を取り出して Content を 1 つ作る writeBacks の例です。

"writeBacks": [
  {
    "$content": {
      "action": "Create",
      "contentType": { "sys": { "id": "3trmXRLdJF4GBlAjtcuoZ7Pnxj8dlA" } },
      "locale": "ko-KR",
      "fields": {
        "productName": "{ /response/title }",
        "price": "{ /response/price }"
      },
      "publish": true,
      "unpublish": true
    }
  }
]

{ /response/... } は、Webhook が受け取った応答 JSON から値を取り出す JSON Pointer テンプレートです。fields のキー (productNameprice) は、対象 Content フィールドの apiName です。上記の例は、応答の titleContentproductName に、priceprice に埋めて Content を作り、その後に公開します。

API

以下のすべてのエンドポイントの基準 URL は https://cma.weegloo.com/v1 で、Authorization ヘッダーに CMA を認証する Bearer トークンが必要です。修正 (PUT) と部分修正 (PATCH) は、楽観的同時実行制御のために X-Weegloo-Version ヘッダー (現在のリソースの sys.version) もあわせて送る必要があります。

  • Content: Webhook がトリガーされる、または WriteBack で書き込む本文データ。
  • Media: WriteBack で作成できるファイルリソース。
  • SpaceRole: Webhook ジョブの Content へのアクセスを :self で制限するとき。