トーク通知
トーク通知
本ページは 2 段構成。上段が biz/CS 向け(ユーザー提示可)、下段(
## 🔧 実装詳細以降)が dev 向け。biz/CS がユーザーへ提示・転用してよいのは上段のみ。
概要
講座内のトークルームへの投稿をトリガーに、関係ユーザーへプッシュ通知を送る機能。Web プッシュ通知と PushQuay 通知 の 2 チャネルに同時配信する。
通知は投稿が行われたルーム種別・投稿内容に応じて次に分岐する:
- チャンネル通知: チャンネル(1:多 ルーム)への投稿に対し、購読している受講者に送信
- DM 通知: DM(1:1 ルーム)への投稿に対し、DM 相手 + メイン講師 + サブ講師に送信
- メンション通知: 投稿テキストでメンションされたユーザーに追加送信
- スレッド通知: スレッド投稿の場合、スレッド関連ユーザー(親・兄投稿者・メンション対象)に送信
受信側は講座単位・ルーム単位・メンション・DM で通知 ON/OFF を細粒度に制御できる。送信側はルーム設定(講師限定投稿 / スレッド限定投稿 / 公開状態 / アーカイブ)で投稿・通知の可否が決まる。
設計上の要点は「投稿 → 通知対象決定 → 配信」の各段階で多層のフィルタリングが走る点、および「投稿が成功しても通知が発火しないケースがある」非対称性(非公開ルーム・アーカイブ済み)。
利用シナリオ
シナリオ 1: 講師からの新着お知らせ
メイン講師がチャンネルに投稿 → 購読中の受講者全員に数秒以内にプッシュ通知が届く。受講者はミュートや通知 OFF で受信を止められる。
シナリオ 2: 受講者同士の会話とメンション
受講者 A が受講者 B をメンションして投稿 → ルーム購読者への通常通知に加え、B にメンション通知が届く(B がメンション通知を ON にしている場合)。
シナリオ 3: 講師と受講者の 1:1 DM
受講者が講師へ DM → 講師(メインとサブ)と DM 相手に通知が届く。他の受講者には配信されない。
シナリオ 4: スレッドでの議論
親投稿に返信すると、親投稿者・既にスレッドに参加した投稿者・親/兄投稿のメンション対象に通知が届く。スレッド外の購読者には原則届かない。
シナリオ 5: 非公開・アーカイブルームでの沈黙
メイン講師が下書きとして非公開ルームに投稿しても、通知は発火しない。アーカイブ済みルームも同様。
権限別仕様
権限定義は ../../user-roles.md、用語は ../../terminology.md 参照。
トーク通知は同一ユーザーが投稿(発信)と受信の両方に関わり得るので、操作の性質で分けて整理する。
講座権限軸
発信(トーク投稿 → 通知発火)
| 操作 | 未受講者 | 受講者 | サブ講師 | メイン講師 |
|---|---|---|---|---|
| トーク投稿(通常ルーム) | × | ○(※1) | ○(※2) | ○(※2) |
| トーク投稿(講師限定投稿ルーム) | × | × | ○ | ○ |
| トーク投稿(スレッド限定投稿ルーム、スレッド外) | × | × | ○(※4) | ○(※4) |
| トーク投稿(スレッド限定投稿ルーム、スレッド内) | × | ○ | ○ | ○ |
| 自分の投稿を編集 | × | ○ | ○ | ○ |
| 自分の投稿を削除 | × | ○ | ○ | ○ |
| 他人の投稿を削除 | × | × | ○(※3) | ○(※3) |
| 特定トークをアナウンスに設定 / 解除 | × | × | ○ | ○ |
- ※1: 投稿禁止フラグが立っているユーザーはアクセス拒否で投稿できない
- ※2: アーカイブ済みルームでは投稿できない
- ※3: メイン講師 / サブ講師は講師権限で他ユーザー投稿を削除可能
- ※4: スレッド限定投稿の制約は受講者のみに適用。講師(メイン・サブ)はスレッド外にも投稿可能(スレッドの親トーク作成等)
受信(トーク通知の着信)
| 操作 | 未受講者 | 受講者 | サブ講師 | メイン講師 |
|---|---|---|---|---|
| チャンネル通知の受信 | ×(※1) | ○(※2) | △(※4) | △(※4) |
| DM 通知の受信(DM 相手側) | ×(※1) | ○ | ○(※3) | ○(※3) |
| メンション通知の受信 | ×(※1) | ○ | ○ | ○ |
| スレッド通知の受信 | ×(※1) | ○ | ○ | ○ |
| 通知設定の変更(講座 / ルーム / メンション / DM) | ×(※1) | ○ | ○ | ○ |
- ※1: 未受講者は該当講座の通知設定レコードを持たないため、通知対象外
- ※2: 通知設定が ON の場合のみ。ルーム個別ミュートでさらに抑制可能
- ※3: DM ルームの通知対象は 仕様として 「DM 相手 + メイン講師 + サブ講師」に固定される(自身の通知設定より優先)
- ※4: チャンネル通知は通知設定の購読登録依存。ルーム作成時のデフォルト登録は「契約済み受講者 + ルーム作成者本人」のみで、他の講師は含まれない。自分で通知設定を ON にすれば受信可能
横断軸
| 操作 | 運営アドミン | テストユーザー | 投稿禁止 |
|---|---|---|---|
| トーク投稿 | ×(運営アドミン経由での管理操作のみ、直接投稿権限なし) | (通常と同じ) | × |
| トーク通知の受信 | ×(通常ユーザー経路は未実装) | (通常と同じ) | (通常と同じ、投稿不可が受信に影響しない) |
| 削除済み含むトーク閲覧 | ○(運営アドミン経由) | × | × |
| 通知設定の変更 | ×(自身の通知受信は想定されていない) | ○ | ○ |
投稿禁止フラグの影響範囲: 投稿の入口で弾かれるため、そのユーザーが起点の通知は一切発火しない。受信側の挙動には影響しない。
機能詳細(ふるまい)
通知の発火条件
トーク投稿成功後に非同期で通知が発火する(投稿成功の返却時点では通知未配信)。数秒以内の配信を想定。
投稿が成功しても通知が発火しないケース:
- 非公開ルーム(下書き状態のルーム)への投稿
- アーカイブ済みルームへの投稿(そもそも投稿自体が不可)
- 削除済みトーク(投稿後に削除された場合、後続の通知処理が走っても対象外)
biz/CS で「投稿したのに通知が来ない」問い合わせを受けた場合は、まず上記 3 ケースを確認する。
通知対象者の決定
投稿種別に応じて以下の集合が作られ、マージして通知対象ユーザーリストとなる(投稿者自身は除外):
- チャンネル購読者(通常ルーム時): そのルームの通知設定が ON のユーザー。ルーム作成時のデフォルトは「契約済み受講者 + ルーム作成者本人」。他の講師(メイン・サブ)は自動で含まれない(各自で通知 ON にすれば受信可能)
- DM 対応者(DM ルーム時): 仕様として固定で DM 相手 + メイン講師 + サブ講師。この 3 者は自身の通知設定に関わらず対象(※ただしチャネル ON/OFF 設定は効く)
- メンション対象: 投稿テキストでメンションされ、かつメンション通知 ON のユーザー
- スレッド関連者(スレッド内投稿のみ): 親投稿者 + 兄投稿者 + 親/兄メンション対象
重複は自動的に排除される。
ルーム設定による通知・投稿の制御
| ルーム設定(biz 表記) | 効果 |
|---|---|
| 講師限定投稿 | 受講者は投稿不可。メイン講師 / サブ講師のみ投稿可能 |
| スレッド限定投稿 | 受講者はスレッド外に投稿不可(スレッド内のみ投稿可能)。講師(メイン・サブ)はスレッド外にも投稿可能(親トークの作成等) |
| 公開 / 非公開 | 非公開のルームでは投稿は可能だが通知は発火しない |
| アーカイブ | 投稿不可、通知発火もしない |
| 過去トーク制限 | 契約開始日以前の投稿は受講者側で非表示(通知配信済み分への影響なし) |
通知設定の階層
受講者は以下 4 層で通知の着信を制御できる:
- 講座単位 ON/OFF(その講座の通知全般)
- ルーム個別 ON/OFF(特定ルームのミュート等)
- メンション通知 ON/OFF(講座単位)
- DM 通知 ON/OFF(講座単位)
通知設定は部分更新ではなく「有効にしたい項目のみ」送信するリセット型の更新仕様。チャネル単位(Web プッシュ / PushQuay)でも ON/OFF 可能。
配信チャネル
1 回の投稿通知は、Web プッシュ(Firebase Cloud Messaging) と PushQuay の 2 チャネルに同時送信される。ユーザー側の通知設定で、チャネルごとに ON/OFF できる。
デバイストークン
ユーザーは通知を受け取るデバイス(ブラウザ / PushQuay)を最大 3 件 登録できる。4 件目の登録時は最も古いトークンが自動削除される。講座単位でも Web プッシュ受信を有効化 / 無効化できる。
メンション
- 投稿テキストに特殊タグを埋め込むことでメンション
- メンション対象者のうち、権限制約(投稿禁止等)で除外されたユーザーは
@ユーザー名のテキスト表記に自動変換される - メンション対象ユーザーはトークに紐づけて記録され、後続のスレッド通知でも参照される
スレッド
- スレッド = 特定の親トークにぶら下がる返信のまとまり
- スレッド内投稿時は、親・兄の投稿者とメンション対象が通知対象に追加される
- スレッド内のみ表示の投稿は、通常のチャンネル通知対象からは除外される
投稿の編集・削除
- 自分の投稿はテキスト更新可能
- 削除は論理削除。物理削除は当面非対応
- 講師(メイン / サブ)は他ユーザーの投稿も削除可能
- 編集・削除時に通知は発火しない仕様(再送もされない)。通知は新規投稿時のみ発火する
アナウンス
特定のトークをアナウンスとして昇格・解除できる。アナウンス設定の変更時に通知は発火しない仕様。
admin 操作
運営アドミンがトーク通知機能に対してできる運用操作:
できる操作
- トーク一覧閲覧(削除済み含む): 運営が内容確認・復旧対象特定に使用
- トークアクセス管理情報の一括更新
- 画像サムネイルの再生成: バッチ補修用
- ルームの最新トーク情報の再計算: キャッシュ不整合の対応
- Firestore 側ユーザー情報の同期: 整合性メンテナンス(dry-run オプション付き)
実装されていない / 不明(CS 判定に有用)
- 特定通知の手動再送 / キャンセル: 実装不在 — 今後の改善課題(必要性あり)
- 運営からの一斉プッシュ通知送信: 実装不在 — 今後の改善課題(必要性あり)
- 運営アドミン専用の投稿削除機能: 実装不在。現状、運営が不適切投稿を削除するには講師に依頼するしかない — 今後の改善課題(CS 対応上の必要性あり)
- 削除済みトークの復旧機能: 未確認
品質 / 約束事項
応答性
- 投稿操作は即時応答(通知配信を待たない)
- プッシュ通知の配信は数秒以内を想定(非同期処理)
信頼性
- 配信失敗時の自動リトライ機構は現状未実装 — 今後の改善課題(必要性あり)
- FCM / PushQuay 側の配信失敗は、fincs-api からの能動的再送は行わない
制限値
- デバイストークン: 1 ユーザー最大 3 件(超過分は古いものから自動削除)
- メンション数上限: 明示的な上限なし(運用上の暗黙上限はあり得る)
データ保持
- 投稿の削除は論理削除。内部的には保持されており運営は確認可能
- 物理削除(完全削除)は当面非対応(論理削除のみで運用)
変更履歴(リリースノート候補)
v2.31.0: 2026-05-04
- [修正] プラン限定トークルームで通知が届かないことがある不具合を修正(FIN-441)。追加契約者がいる受講者宛のメンション解決処理が、契約レコードの重複時に内部エラーで打ち切られ、当該ユーザーのメンション通知・チャンネル通知がサイレントに発火しないケースがあった。biz/CS 影響: 「メンションしたのに通知が来ない」問い合わせの一部が該当(特に追加契約のあるユーザー)
v2.29.2: 2026-04-24(PSD 初版)
- [PSD 追加] 本ドキュメント初版作成。v2.29.2 時点の実装を起こし。機能追加・変更は含まない
関連ドキュメント
- Linear: FIN-294(PRD/PSD フレームワーク本体)
- 権限定義:
../../user-roles.md - 用語辞書:
../../terminology.md - 関連 PSD(今後作成):
./room.md(トークルーム機能),./post.md(投稿機能)