Skip to content

外部システムへのイベント通知 ​

プランの購入、予約・決済・契約の動きを、登録したURLへ自動で送る機能です(送信 webhook)。基幹システムや会計・顧客管理・券売機などの外部システムに、サブスクラインで起きたことをすぐに反映できます。

場所: 管理画面サイドバー「設定」>「イベント通知(webhook)」タブ >「送信先と未着一覧を開く」(/settings/outbound-webhooks)

使える権限: クライアント管理者

通知するイベント ​

送信先ごとに、送るイベントを選べます。

イベント名送るタイミング
subscription.purchasedプランの初回の支払いが確定したとき(0円・トライアル開始を含む)
subscription.renewed継続課金・プラン変更などで2回目以降の支払いが確定したとき
reservation.confirmed予約が確定したとき(確定で作成された予約・仮予約やキャンセルから確定にした予約。キャンセル申請を取り下げて確定に戻したときは送りません)
reservation.cancelled予約をキャンセルにしたとき(会員のキャンセル・管理画面での変更を含む)
payment.succeeded決済に成功したとき。定期課金(サブスク)の請求・予約の事前決済・注文の一回決済(0円の請求は送りません)
payment.failed決済に失敗したとき。定期課金はカード会社の再試行ごと、予約・注文は失敗ごとに1回
subscription.created契約が始まったとき(入会)
subscription.paused休会を受け付けたとき、または請求の一時停止を反映したとき
subscription.cancelled解約を受け付けたとき(phase: "requested")と、契約が実際に終わったとき(phase: "ended"。解約予定日の到来・決済が続けて失敗したことによる自動解約を含む)

送るイベントを選ばずに登録した送信先は、subscription.purchased と subscription.renewed だけを受け取ります。

設定のしかた ​

  1. 「送信先を追加」を押します。
  2. 送信先URL(https:// で始まるURLだけ)と、送るイベントを選んで保存します。
  3. 画面に署名用の secret が一度だけ表示されます。外部システムに保存してから閉じてください。表示されるのはこの1回だけです。紛失したときは「secret を再発行」を押します(再発行すると以前の secret では署名を検証できなくなります)。
  4. 「テスト送信」で、webhook.test イベントを1回送って届くか確かめられます。結果は画面に表示されます。

送信先は5件まで登録できます。社内ネットワーク・ローカルのアドレス(localhost・プライベートIPなど)には送れません。送信先を「送信を有効にする」のチェックを外して止めたり削除したりすると、送信待ちの通知も送りません。

送る内容 ​

Content-Type: application/json の POST で送ります。どのイベントも、先頭に eventId・eventType・occurredAt・clientId が入り、会員は lineUser で送ります。

json
{
  "eventId": "evt_3f1c0a9e2b7d4c58a6e1f0b2c3d4e5f6a7b8c9d0",
  "eventType": "reservation.confirmed",
  "occurredAt": "2026-11-01T01:00:00.000Z",
  "clientId": 123,
  "lineUser": {
    "id": "会員のハッシュID",
    "lineUserId": "LINEのユーザーID",
    "memberId": 1024,
    "barcodeData": "0000000001024"
  },
  "reservation": {
    "id": "予約のハッシュID",
    "status": "confirmation",
    "startAt": "2026-11-03T01:00:00.000Z",
    "endAt": "2026-11-03T02:00:00.000Z",
    "totalPrice": 3300,
    "shop": { "id": "店舗のハッシュID", "name": "渋谷店" },
    "menus": [{ "id": "メニューのハッシュID", "name": "カット" }]
  }
}
  • 購入のイベントは plan(プランのハッシュID・名前・種類・回数券の回数)・subscription・payment(金額・支払日時・請求のID)を送ります。
  • 契約のイベントは subscription(契約のハッシュID・状態・開始日・プランの名前と金額)を送ります。休会・解約では、休会の種類や解約日も subscription に入ります。
  • 決済のイベントは payment(target が subscription・reservation・order のどれか・金額・通貨。定期課金は請求のID invoiceId(Stripe 以外の継続課金は課金のID chargeId)、予約・注文は決済のID paymentIntentId。失敗時は再試行の回数や失敗の理由コード)と、対応する契約・予約・注文を送ります。注文にはハッシュIDが無いため、paymentIntentId で突き合わせてください。
  • 会員の氏名・電話番号・メールアドレスは送りません。会員はハッシュIDと会員番号で識別してください。

ヘッダー ​

ヘッダー内容
X-Subscline-Event-Typeイベント名
X-Subscline-Event-IdイベントのID(本文の eventId と同じ)。再送しても変わりません
X-Subscline-Timestamp送った時刻(UNIX秒)
X-Subscline-Signaturev1=<署名> の形の署名

署名の確かめ方 ​

v1= の後ろの値は、<X-Subscline-Timestamp の値>.<受け取った本文そのまま> を secret で HMAC-SHA256 にかけた16進文字列です。受け取った本文を JSON として読み直す前の、生の文字列で計算してください。

js
const crypto = require('crypto')

function verify(rawBody, headers, secret) {
  const timestamp = headers['x-subscline-timestamp']
  const signature = headers['x-subscline-signature']
  const expected = 'v1=' + crypto.createHmac('sha256', secret).update(`${timestamp}.${rawBody}`).digest('hex')
  const fresh = Math.abs(Date.now() / 1000 - Number(timestamp)) < 300 // 5分より古いものは受け付けない
  return fresh && expected.length === signature.length && crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(signature))
}

再送のルール ​

  • 送信先が 2xx を返したら成功です。10秒以内に応答してください。
  • 2xx 以外を返したとき・10秒以内に応答がなかったとき・接続できなかったときは、1分・2分・4分…(最長6時間)と間隔をあけて最大8回まで送ります。リダイレクト(3xx)には従いません。
  • 同じイベントが2回届くことがあります。X-Subscline-Event-Id で重複を取り除いてください。
  • 送信に失敗しても、購入・予約・決済・解約などの手続きそのものは取り消されません。
  • 通知は手続きの完了後に受け付けます。受け付けの直前にサーバーが止まった場合など、まれに通知が欠けることがあります。外部システムで状態を正確に保つ必要があるときは、定期的にサブスクラインの管理画面やデータの書き出しと突き合わせてください。
  • 上限まで届かなかった通知と、送信先を止めた・削除したため送らなかった通知は、画面下の「届かなかった通知」で、送信回数・最後に受け取ったHTTPステータス・理由を確認できます。

サブスクラインの使い方をAIに聞く

ページのタイトル・URL・公式マニュアルの参照先を入れた質問文が自動で入ります。

顧客情報、個人情報、社外秘の情報は入力しないでください。質問内容は選んだ外部AIへ送られます。

いずれも新しいタブで開きます。Geminiだけは質問文を渡せないため、コピーした内容を貼り付けて送信してください。