コンテンツの変更時に外部システムとの連携を行うための機能として、Webhook機能を用意しています。
設定は各APIの「API設定」→「Webhook」で行うことができます。
追加ボタンから、Webhookの種類を選び、設定を行ってください。
設定できるWebhookは、以下の9種類です。
各Webhookの設定時にWebhookを発行するタイミングを設定できます。
コンテンツが「公開中」になった際や、「公開中」もしくは「公開中かつ下書き中」のコンテンツに変更があった際に通知を行います。
管理画面の操作によって、新規公開や公開済みコンテンツが更新された際に通知を行います。(レビュー、予約による操作を除く)
以下の場合に通知を行います。
レビュー申請機能によって、新規公開や公開済みコンテンツが更新された際に通知を行います。
コンテンツの予約公開機能によって、新規公開や公開済みコンテンツが更新された際に通知を行います。
公開済みのコンテンツをコンテンツ一覧画面で並び替えた際に通知を行います。
公開済みのコンテンツのコンテンツIDを更新した際に通知を行います。
公開済みのコンテンツの公開日時を更新した際に通知を行います。
公開済みのコンテンツのカスタムステータスを更新した際に通知を行います。
コンテンツが「公開中」もしくは「公開中かつ下書き中」から、「公開終了」もしくは「下書き中」に変更された際や、「公開終了」のコンテンツに変更があった際に通知を行います。
以下の場合に通知を行います。
コンテンツの公開終了予約機能によって、「公開中」もしくは「公開中かつ下書き中」のコンテンツが「公開終了」に変更された際に通知します。
「公開終了」のコンテンツをコンテンツ一覧画面で並び替えた際に通知を行います。
「公開終了」のコンテンツのコンテンツIDを更新した際に通知を行います。
「公開終了」のコンテンツの公開日時を更新した際に通知を行います。
「公開終了」のコンテンツのカスタムステータスを更新した際に通知を行います。
コンテンツが「下書き中」もしくは「公開中かつ下書き中」になった際や、「下書き中」のコンテンツに変更があった際に通知します。
管理画面の操作によって「下書き中」のコンテンツが更新された際に通知を行います。
以下の場合に通知を行います。
「下書き中」のコンテンツをコンテンツ一覧画面で並び替えた際に通知を行います。
「下書き中」のコンテンツのコンテンツIDを更新した際に通知を行います。
「下書き中」のコンテンツの公開日時を更新した際に通知を行います。
「下書き中」のコンテンツのカスタムステータスを更新した際に通知を行います。
「公開中」もしくは「公開中かつ下書き中」のコンテンツが削除された際に通知します。
管理画面の操作によって「公開中」もしくは「公開中かつ下書き中」のコンテンツが削除された際に、通知を行います。
DELETE APIによって「公開中」もしくは「公開中かつ下書き中」のコンテンツが削除された際に、通知を行います。
「公開終了」のコンテンツが削除された際に通知します。
管理画面の操作によって「公開終了」のコンテンツが削除された際に、通知を行います。
DELETE APIによって「公開終了」のコンテンツが削除された際に、通知を行います。
「下書き中」のコンテンツが削除された際に通知します。
管理画面の操作によって「下書き中」のコンテンツが削除された際に、通知を行います。
DELETE APIによって「下書き中」のコンテンツが削除された際に、通知を行います。
管理画面の操作によって「公開中かつ下書き中」のコンテンツの下書きを破棄した際に通知を行います。
APIの設定(基本設定やスキーマなど)に変更を行った際に通知を行います。
APIが削除された際に通知を行います。
SlackへのWebhookには以下の情報が必須で必要です。
Slack側の操作については公式ドキュメント等をご参照ください。
実際に通知が行われる際は以下のような形で行われます。
URL部分にはデフォルトでは管理画面のURLが入りますが、設定で任意のURLに変更することも可能です。
ChatworkへのWebhookには以下の情報が必須で必要です。
通知内容はSlackと同様となります。
microCMSからのWebhookによってビルド処理を開始できます。
設定内容は下記の通りです。
microCMSからのWebhookによってビルド処理を開始できます。
設定内容は下記の通りです。
microCMSからのWebhookによってビルド処理を開始できます。
設定内容は下記の通りです。
microCMSからのWebhookによってビルド処理を開始できます。
設定内容は下記の通りです。
microCMSからのWebhookによってビルド処理を開始できます。
GitHub Actionsの設定方法の詳細については、ヘルプ記事「【コンテンツのWebhook連携】GitHub Actionsの設定方法について」をご覧ください。
トークンが有効期限になった際は、新規にトークンを取得いただき、値を上書きして設定できます。
dispatchイベント呼び出し時のリクエストボディには、event_typeとclient_payload の情報が含まれます。
{
"event_type": "microcms_build",
"client_payload": {
"service": "your_service",
"api": "news",
"id": "RX252Zoo7",
"draftKey": "2Jnt22mLh5",
"type": "new"
}
}event_typeには、トリガーイベント名に指定した値が含まれます。
この値はGitHub Actions内で github.event.actionとして参照できます。
client_payloadには対象となったコンテンツやAPIの情報が含まれます。
{
"service": "your_service",
"api": "news",
"id": "RX252Zoo7",
"draftKey": "2Jnt22mLh5",
"type": "new"
}service - 変更のあったコンテンツが属するサービスのサブドメインが入ります。api - APIの更新時・削除時に指定したエンドポイントが入ります。id - コンテンツのidが入ります。コンテンツに関する操作が行われた場合のみ含まれます。draftKey - 管理画面で取得できる下書きキー(draftKey)が入ります。コンテンツが下書き、もしくは予約公開状態の場合にのみ含まれます。type - 変更の種類です。新規追加時はnew、編集時はedit、削除時はdeleteが入ります。(コンテンツの公開ステータスの変更とは関係なく、データに対する変更の種類となります。)これらの値はGitHub Actions内でgithub.event.client_payloadとして参照できます。
コンテンツやAPIの変更時などに指定したメールアドレスに変更内容を送信できます。
送信元メールアドレスはinfo@microcms.ioです。
設定内容は下記の通りです。
また、SlackやChatworkのWebhookと同様に、本文内にはURLが含まれますがこちらも任意のものに変更可能です。
任意のURLに対してPOSTリクエストを送信します。
設定内容は下記の通りです。
カスタム通知では任意のURLに対してPOSTリクエストを送信します。
あらゆるURLを指定可能ですので、リクエストを受け取った側は独自の処理を自由に行ってください。
microCMSにはWebhookリクエストがmicroCMSからのものであることを検証するためのヘッダ値を付与できます。
付与にあたってはシークレット値を設定する必要があり、microCMSでは設定することを推奨いたします。
シークレット値が設定されている場合のみ、リクエストのヘッダにx-microcms-signature: <COMPUTED_HASH>が付与されます。
※ペイロードはmicroCMSがシークレット値とリクエストボディからSHA-256を使用したハッシュベースのHMACで生成します。
シークレット値はカスタム通知の設定画面で変更できます。
シークレット値には極力推測されづらい値を設定してください。(例: ruby -rsecurerandom -e 'puts SecureRandom.hex(20)' で生成した値)
以下2つの値を比較することで検証を行うことができ、リクエストがmicroCMSからのものであることを検証可能です。
x-microcms-signatureヘッダで受け取った値request.body )と設定したシークレット値を元にした値一例としてNode.jsの場合、検証は以下のような実装で行うことができます。
const crypto = require('crypto');
const expectedSignature = crypto
.createHmac('sha256', <設定したシークレット>)
.update(request.body)
.digest('hex');
const signature = request.headers['x-microcms-signature'];
if (!crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(expectedSignature))) {
throw new Error('Invalid signature.');
}リクエストヘッダには Content-Type: application/json が含まれます。
また、上述のシークレットを設定済みの場合は x-microcms-signature: <SIGNATUR_VALUE> が含まれます。
任意のリクエストヘッダーを追加することも可能です。カスタムリクエストヘッダー の「+」ボタンをクリックして追加してください。

セキュリティの観点から、microCMSのドメイン(.microcms.io, .microcms-management.io)宛てにWebhookを設定することを制限しています。
リクエストボディには対象となったコンテンツやAPIの情報が含まれます。
{
service: 'webhook-test',
api: 'news',
id: 'x2xkcwog9521',
type: 'edit',
contents: {
old: {
id: 'x2xkcwog9521',
status: ['DRAFT'],
draftKey: 'Vyf_XTclTY',
publishValue: null,
draftValue: {
id: 'x2xkcwog9521',
createdAt: '2021-06-02T05:56:24.513Z',
updatedAt: '2021-06-02T06:05:09.601Z',
publishedAt: '2021-06-02T06:05:09.601Z',
revisedAt: '2021-06-02T06:05:09.601Z',
title: 'タイトルです',
},
},
new: {
id: 'x2xkcwog9521',
status: ['PUBLISH'],
draftKey: null,
publishValue: {
id: 'x2xkcwog9521',
createdAt: '2021-06-02T05:56:24.513Z',
updatedAt: '2021-06-02T06:05:09.601Z',
publishedAt: '2021-06-02T06:05:09.601Z',
revisedAt: '2021-06-02T06:05:09.601Z',
title: 'タイトルです',
},
draftValue: null,
},
},
}service - 変更のあったコンテンツが属するサービスのサブドメインが入ります。api - API作成時・更新時に指定したエンドポイントが入ります。id - コンテンツのidが入ります。APIに関する操作の場合はnullが入ります。type - 変更の種類です。新規追加時はnew、編集時はedit、削除時はdeleteが入ります。(コンテンツの公開ステータスの変更とは関係なく、データに対する変更の種類となります。)contents - コンテンツ内容が入ります。APIに関する操作の場合はnullが入ります。contents.old - コンテンツの編集前もしくは削除前の内容が含まれます。コンテンツの新規作成時にはnullが入ります。contents.old.id - コンテンツの編集前もしくは削除前のコンテンツのidが含まれます。contents.old.status - コンテンツの公開状態を配列で示します。公開中はPUBLISH、下書き中はDRAFT、公開終了はCLOSEDが含まれます。contents.old.draftKey - コンテンツが下書き状態が含まれる場合に、管理画面で取得できる下書きキー(draftKey)が入ります。公開状態のみの場合はnullが入ります。contents.old.publishValue - 公開状態のコンテンツをGET APIで取得した際のjsonデータが含まれます。contents.old.draftValue - 下書き状態のコンテンツをGET APIで取得した際のjsonデータが含まれます。contents.new - コンテンツの作成後もしくは編集後の内容が含まれます。コンテンツの削除時にはnullが入ります。contents.new.id - コンテンツの作成後もしくは編集後のコンテンツのidが含まれます。contents.new.status - コンテンツの公開状態を配列で示します。公開中はPUBLISH、下書き中はDRAFT、公開終了はCLOSEDが含まれます。contents.new.draftKey - コンテンツが下書き状態が含まれる場合に、管理画面で取得できる下書きキー(draftKey)が入ります。公開状態のみの場合はnullが入ります。contents.new.publishValue - 公開状態のコンテンツをGET APIで取得した際のjsonデータが含まれます。contents.new.draftValue - 下書き状態のコンテンツをGET APIで取得した際のjsonデータが含まれます。カスタム通知の動作確認およびデバッグの際には、「devhook」などのWebhookの検証ツールをご利用いただくと便利です。
▼アウトプットのイメージ
上記のような検証ツールはあくまで外部サービスですので、リクエストボディなどの情報は外部に共有されます。流出させてはいけないデータは使用しないなど、お取り扱いにはご注意ください。
一時的にWebhookの設定を有効/無効にしたい場合は、Webhook一覧のスイッチを切り替えることで可能です。無効にした場合はWebhookが発行されなくなります。
Webhookの通知が、ネットワークエラーや4xx、5xxエラーにて失敗した場合でも、リトライ処理は行われません。
Webhookの通知は、設定したタイミングにつき1回のみ行われます。
なお複数コンテンツの削除やステータスの変更を行った場合、リクエストボディが含まれる通知種別については、対象のコンテンツの数だけ通知が実行されます。
対象となる通知種別は以下の通りです。
原則として、Webhookの通知は操作の実行順に行われます。
ただし、厳密な制御は行われていないため、順序は保証されません。
Webhookの送信元IPアドレスは、動的IPアドレスです。
また、IPアドレスの範囲も公開しておりません。
目次