機能ごとの解説

Webhook

レコードが追加・編集・削除されたときに、決めておいた URL へその内容を自動で送る仕組みです。チャットに通知する、別の業務システムにデータを送る、といった連携に使います。 受け取る側のプログラムを用意する必要があるので、主にシステムの担当者向けの機能です。

Webhook とは

アプリの設定の「Webhook」タブで作ります。作れるのはアプリの管理の権限を持つ人(会社のオーナー・管理者を含む)です。

きっかけ
レコードの追加・編集・削除(どれで送るかを選べます)
送り先
https:// で始まる URL(ポート番号の指定はできません)。社内ネットワークのアドレスには送れません
送り方
JSON を POST。保存とは別に、裏で送ります(保存は待たされません)

作る

「Webhook」タブの「新規作成」を押します。

  1. 1名前と送信先 URL を入れる名前は一覧で見分けるためのもの(例: Slack 通知)です。
  2. 2送るイベントを選ぶ「レコードの追加」「レコードの編集」「レコードの削除」から 1 つ以上選びます。状態は「有効」のまま「作成」を押します。
  3. 3表示されたシークレットを控える作成すると、署名の確認に使うシークレットが一度だけ表示されます(再表示できません)。「コピー」して受け取る側に設定してください。

一時的に止めたいとき

Webhook を開いて状態を「停止中」にして「保存」します。止めている間の 操作は送られません(あとから送り直されることもありません)。

シークレットが漏れたとき

「シークレット再生成」で新しい値にします。受け取る側の設定も新しい値に 差し替えてください。

送られる内容

レコード 1 件の値と、どのアプリで誰が何をしたかが 1 回の送信にまとまっています。

{
  "id": "送信ID",
  "type": "RECORD_UPDATED",
  "occurredAt": "2026-09-02T16:00:00+09:00",
  "company": { "slug": "sample", "name": "サンプル商事" },
  "app": { "appNumber": 1, "code": "clients", "name": "顧客台帳" },
  "record": {
    "recordNumber": 5,
    "payload": { "company_name": "伊藤商事", "amount": "6200000" },
    "display": { "company_name": "伊藤商事", "amount": "6,200,000円" }
  },
  "actor": { "displayName": "山田 花子" }
}

payload と display

payloadは機械が読む形の値(数値は "6200000" のような文字列、電話は +81 から 始まる形、利用者は ID)、displayは画面に出る表記(「6,200,000円」「03-1234-5678」、利用者の名前)です。 計算・ルックアップ(同期)・作成者なども、画面と同じ値が入ります。

送られる項目に気をつけてください

フィールドの権限にかかわらず、すべての項目の値が送られます。一部の人にだけ見せている項目も含まれるので、送信先は信頼できる システムにしてください。

編集と削除のとき

編集では保存した後の値を送ります(変更前の値は含みません)。何も 変えずに保存したときは送りません。削除では、削除する直前の値を送ります。

画面以外からの変更も送られます

公開フォームからの登録・更新や、AI(MCP)からの更新でも、同じように 送られます。

署名を確かめる

本当に mokomo から届いたものかは、ヘッダの署名で確かめられます。

x-mokomo-signature
sha256=(本文を、シークレットを鍵に HMAC-SHA256 した値の 16 進)
x-mokomo-event
イベント名(RECORD_CREATED / RECORD_UPDATED / RECORD_DELETED)
x-mokomo-delivery
送信 ID(本文の id と同じ。送信ログにも出ます)
// Node.js の例: 受け取った本文をそのまま使って署名を計算し、ヘッダと比べる
const crypto = require("crypto");
const expected =
  "sha256=" + crypto.createHmac("sha256", SECRET).update(rawBody).digest("hex");
const ok = crypto.timingSafeEqual(
  Buffer.from(expected),
  Buffer.from(req.headers["x-mokomo-signature"]),
);

本文は受け取ったままの文字列を使ってください(JSON を読み直して並べ替えると 署名が合いません)。

送信ログ

Webhook の一覧に「直近24h: 成功 N / 失敗 N」が出ます。Webhook を開くと、下に最新 50 件の送信ログが並びます。

ログに出るもの

成功・失敗・中止などの状態、イベント、日時、相手の HTTP ステータス、 かかった時間、エラーの種類、相手の応答の先頭です。

成功とみなす条件

相手が 10 秒以内に 2xx を返したときです。3xx(リダイレクト)は追いかけず、 失敗になります。

できないこと

  • 失敗しても、自動で送り直しません。 送信ログから送り直すボタンもありません。取りこぼしが困る連携では、受け取る側で 定期的に mokomo の値と突き合わせてください。
  • 失敗が続いても、Webhook は自動では止まりません。
  • 送る条件は「追加・編集・削除」の 3 つだけです。項目の値で絞ったり、 ヘッダを足したりはできません。
  • 社内ネットワーク(プライベート IP・localhost)には送れません。