通知と Webhook 設定

Webhook 通知チャネル。URL・任意 HMAC 署名・リクエスト仕様、運営/コンソールでの設定とテスト送信。

運営の「システム通知」とコンソールの「通知設定」で Webhook を有効にし、指定の HTTPS/HTTP エンドポイントへ運用アラートを送れます。Telegram と単独/併用が可能です。

用途

  • 自前サービス、メッセージゲートウェイ、ローコード自動化(n8n など)、他の IM へ転送
  • Bot Token を製品側に置かず、自前サービスから再配信したい場合

運営側とアカウント側の設定は独立です。Webhook を有効にした側では、通知ごとにその URL へ 1 回 POST します(Telegram も有効なら両方送られます)。

設定項目

項目必須説明
Webhook スイッチオフなら配信しない
Webhook URL有効時必須http:// または https:// で始まること
署名シークレット任意設定時は本文に HMAC-SHA256 署名を付与
署名ヘッダ名任意シークレットがあるとき有効。空なら X-Adswds-Signature

どこで設定するか

コンソール(本アカウント)

  1. 管理者が システム管理 → 通知設定 → チャネル → Webhook を開く
  2. 有効にして URL を入力。検証するならシークレット/ヘッダも設定
  3. 保存後に テスト送信 し、受信側で JSON を確認

運営コンソール

  1. システム通知 → チャネル → Webhook を開く
  2. 同様に URL/任意署名を設定
  3. 保存してテスト

リクエスト仕様

プラットフォームは次のように呼び出します。

  • メソッドPOST
  • Content-Typeapplication/json
  • User-AgentAdswds-Notify-Webhook/1.0
  • タイムアウト:約 15 秒。リダイレクトは追従しない(3xx は成功にならない)
  • 成功:HTTP ステータスが 2xx。それ以外は配信失敗

ボディ

JSON は 2 フィールドのみ(現在の通知言語でレンダリング済みのタイトル/本文):

{
  "title": "通知タイトル",
  "body": "通知本文"
}

{{client_name}} などのプレースホルダは送信前にサーバー側で展開されます。Webhook に生のイベント ID や未展開の変数表は含まれません

任意署名(推奨)

署名シークレットを設定すると、生のリクエストボディバイト列に対して:

HMAC-SHA256(secret, raw_body) → 小文字 hex

を計算し、ヘッダ(既定名 X-Adswds-Signature)に載せます:

X-Adswds-Signature: sha256=<hex>

受信側は同じシークレットで再計算し、sha256= 以降を定数時間比較してください。シークレット未設定時は署名ヘッダを付けません

疑似コード:

expected = "sha256=" + hex(hmac_sha256(secret, raw_body))
assert header["X-Adswds-Signature"] == expected

受信側の例

一時的な公開トンネルや小さな HTTP サーバーで十分確認できます。最小の Node 例:

import http from 'node:http'
import crypto from 'node:crypto'

const SECRET = process.env.HOOK_SECRET || ''

http.createServer((req, res) => {
  const chunks = []
  req.on('data', (c) => chunks.push(c))
  req.on('end', () => {
    const raw = Buffer.concat(chunks)
    if (SECRET) {
      const sig = req.headers['x-adswds-signature'] || ''
      const expected =
        'sha256=' + crypto.createHmac('sha256', SECRET).update(raw).digest('hex')
      if (sig !== expected) {
        res.writeHead(401)
        res.end('bad signature')
        return
      }
    }
    console.log(JSON.parse(raw.toString('utf8')))
    res.writeHead(200)
    res.end('ok')
  })
}).listen(8080)

製品の Webhook URL をその公開アドレスにし、シークレットを揃えてからテスト送信してください。

テスト送信と切り分け

症状確認点
URL 無効http:// / https:// で始まっているか
HTTP 非 2xx受信側が 200–299 を返すか。リダイレクトに依存していないか(追従しない)
署名不一致生 body バイトで計算しているか。シークレット一致。ヘッダ名(既定 X-Adswds-Signature
テスト成功だが本番が来ないイベントスイッチ、マスター、アカウント利用中か
タイムアウト約 15 秒以内に応答。重い処理は先に ACK して非同期化

関連:通知と Telegram 設定 · システムとアカウント · FAQ