Fincs

講座運営 / オファー(キャンペーン)

講座運営 / オファー(キャンペーン)

本ページは 2 段構成。上段が biz/CS 向け(ユーザー提示可)、下段(## 🔧 実装詳細 以降)が dev 向け。biz/CS がユーザーへ提示・転用してよいのは上段のみ。

概要

オファー(キャンペーン)は、メイン講師が自身の講座で「特定の料金プラン契約者向けに、別プランへの切り替え提案」を表示する機能。受講者が新規契約完了直後のサンクスページに、講師が設定したオファーが表示され、受講者が「承諾」すると現在のサブスク契約を解除した上で新プランの契約が成立する。アップセル・関連プランへの誘導・上位プランへの切り替え促進などに利用する。

主な利用想定は、入門プラン契約者へのスタンダード / プレミアムプラン提案、月額プラン契約者への一括(年額)プラン誘導、複数プランをまたぐ連続契約案内など。受講者にとっては「契約直後の提案」として表示されるため、契約タイミングに合わせた効果的な訴求が可能。

重要な動作(CS 案内必須): オファーを受講者が承諾すると、承諾時点の既存サブスク契約は解除され、新プランの契約が成立する。一方、承諾直前に決済された初回プラン(プラン A)の決済自体は取り消されないため、オファー文言や受講者向け案内では「承諾後は新プランへの切り替えとなり、初回決済の返金は行わない」旨を明示する必要がある。CS 対応で「オファー承諾後にプラン A の決済が二重で残っている」という相談を受けるケースがあるため、案内文の整理が重要。

対象外プラン: 一括(年額)プランに対するオファー設定はできない。オファーの「対象プラン」として指定可能なのはサブスク型のプランのみ。

📝 レビュー観点:

  • 目的: 入会促進・アップセル。既存契約者を別プランへ誘導
  • 誰が使うか: メイン講師
  • どこで使うか: 講座詳細画面のオファータブ、/plan/{id}/distribute/offer/{create, edit, [campaignId]/history}
  • 隣接機能との関係: 料金プラン(./price.md)、決済(受講者側)、一斉配信(./bulk-delivery.md
  • CS 問い合わせで頻発する論点: 「既存サブスクが破棄される」「初回プラン A の決済は取り消されない」「期間限定の運用方法」「一括プランにオファーできない」
  • [本機能特有] サンクスページでの表示が中心: 表示済みユーザーは記録される
  • [本機能特有] 期間カラムが存在しない: 期間限定はステータス手動切替で運用
  • [本機能特有] 一括プラン対象外: UI で注記、対象は display_plan_price_id で指定

利用シナリオ

シナリオ 1: 入門プラン契約者にスタンダードプランを提案する

メイン講師が自身の講座にオファーを作成。対象プランとして「入門プラン」、オファープランとして「スタンダードプラン」を指定し、訴求文(リッチエディタで作成)と稼働状態(稼働中)を設定。受講者が入門プランで新規契約を完了すると、サンクスページで本オファーが表示される。

シナリオ 2: 受講者がオファーを承諾してアップグレードする

サンクスページに表示されたオファーで「承諾」を選択した受講者は、その場で新プランの決済へ進む。決済成立後、入門プランの契約は解除されてスタンダードプランの契約が成立する。承諾直前に決済された入門プランの決済自体は取り消されない。

シナリオ 3: 期間限定キャンペーンを手動で稼働 / 停止する

オファーの稼働状態を「稼働中」「停止中」で切り替えることで、期間限定運用を実現。期間の自動切替機能は提供していないため、開始日・終了日に合わせて講師(または運営)が手動で切替。

シナリオ 4: 既存オファーを編集して文言を改善する

公開中のオファーのタイトル・本文・対象プラン・オファープランを編集可能。編集履歴は時系列で内部に保存され、後から「いつ何を変更したか」を確認できる。

シナリオ 5: オファーの並び順を調整する

同一講座に複数のオファーがある場合、画面上の並び順を講師が任意に調整できる。

よくある失敗ケース

  • 一括プランをオファーの対象プランに指定: 一括プランは対象外。設定画面で弾かれる
  • 対象プラン未指定: 必須項目のため保存不可
  • 稼働中オファーの即時停止: 稼働状態を「停止中」に切り替えると、以降のサンクスページではオファーが表示されない
  • オファー承諾後の二重決済感: 受講者が「直前のプラン決済が二重で残っている」と感じるケース。CS 案内では「初回決済は取り消さず、新プランへの切り替えとなる」旨を明示
  • オファーの削除: オファーを削除しても、過去にオファー経由で成立した契約の紐付け情報自体は内部的に残る(履歴確認のため)

権限別仕様

権限定義は ../user-roles.md 参照。用語は ../terminology.md

講座権限軸

操作 未受講者 受講者 サブ講師 メイン講師
オファー作成 × × ×
オファー編集 × × ×
オファー削除 × × ×
履歴閲覧 × × ×
並び順変更 × × ×
サンクスページでのオファー表示 × ○(対象プラン契約者)

横断軸

操作 運営アドミン テストユーザー 投稿禁止
オファーの代理操作 ×(運営アドミン専用経路なし) × ×

📝 レビュー観点:

  • メイン講師のみ: サブ講師は不可(OWNER 権限必須)
  • 運営アドミン経路の必要性

機能詳細(ふるまい)

オファー作成

入力項目:

  • タイトル: 受講者にも表示されるオファー名(1〜20 文字、必須)
  • 対象プラン: 本オファーをサンクスページで表示する対象の料金プラン(必須、サブスクのみ。一括プランは選択不可)
  • オファープラン: 受講者が承諾した場合に契約する料金プラン
  • 稼働状態: 稼働中 / 停止中
  • 本文: リッチエディタで作成する訴求文・案内文

サンクスページでの表示

  • 受講者が「対象プラン」で新規契約を完了したサンクスページに、稼働中のオファーが表示される
  • 同一受講者・同一オファーの組み合わせで表示記録が残る仕組み(履歴的な追跡用)
  • 同じ対象プランに複数の稼働中オファーが存在する場合の表示優先ロジックは内部仕様に依存(CS 対応で必要な場合は dev に確認)

オファー承諾(決済)

  • 受講者がサンクスページのオファーで「承諾」を選択 → オファープランの決済画面に進む
  • 決済が成立すると新プランの契約が成立し、承諾直前の既存サブスク契約は解除される
  • 直前に決済された初回プランの決済自体は取り消されない(受講者から見ると、初回プランの決済 1 件 + 新プラン決済 1 件、計 2 回の決済履歴が残る)
  • 0 円プランや無料期間つきプランへのアップセルでも、契約紐付け情報は同様に記録される

稼働状態の切替

  • 稼働中 ↔ 停止中の切替により、サンクスページでの表示有無を制御
  • 切替は即時反映
  • 期間限定運用は本切替の手動オペレーションで実現(開始 / 終了日付の自動切替機能は提供していない)

履歴閲覧

  • オファーごとに編集履歴を時系列で確認可能
  • いつ・誰が・何を変更したかの追跡用

並び順の変更

  • 同一講座に複数のオファーがある場合、講師が任意に並び順を変更可能

制限値

  • タイトル: 1〜20 文字(必須、画面の文字数制限と内部ルールが一致)
  • 対象プラン: 必須
  • オファープラン: 必須
  • 本文(リッチエディタ): 上限値の表示は画面側で制御(要 dev 確認)

📝 レビュー観点:

  • 入力 → 処理 → 出力: 編集 → 即時反映 → サンクスページ表示 → 承諾で決済
  • エッジケース: 同じ対象プランに複数 AVAILABLE オファーが存在する場合の表示優先
  • エラー表示: 一括プランへのオファー試行時の弾き
  • 編集・削除の挙動: 削除しても過去の contract_campaign は残る
  • [本機能特有] 既存サブスク破棄: 重要、CS 案内必須
  • [本機能特有] 初回プラン A 決済の取り消しなし: 重要、CS 案内必須

admin 操作

該当なし / 実装されていない

  • オファーの代理作成・編集・削除: 専用経路なし(運営アドミン側でのキャンペーン操作経路は未実装)
  • CS 対応用の手動 SQL のみ: 専用 UI は無し

📝 レビュー観点:

  • 運営アドミン経路の必要性(CS 対応の頻度次第)

品質 / 約束事項

  • 応答性: 編集・並び順変更は即時反映
  • 信頼性: 履歴は内部トリガで自動コピー
  • 制限値:
    • タイトル: 1〜20 文字
    • 対象プラン: 必須
    • 本文: リッチエディタ(上限は要確認)
  • データ保持: 論理削除、履歴は保持

📝 レビュー観点:

  • [本機能特有] 既存サブスク破棄の biz 説明: 受講者向け表示文言の確定
  • [本機能特有] 期間カラムなし: 期間限定は手動運用

変更履歴(リリースノート候補)

v2.29.2: 2026-05-02(PSD 初版)

  • [PSD 追加] 本ドキュメント初版作成。v2.29.2 時点の実装を起こし。機能追加・変更は含まない

📝 レビュー観点:

  • 過去の主要変更(履歴トリガ追加 / parent_campaign_id 廃止 / contract_campaign 導入 等)

関連ドキュメント


このページの内容を AI に質問しますか?
関連 spec を自動抽出して ChatGPT / Claude などに渡せます。
AI Prompt で開く →