Fincs

トーク通知

トーク通知

本ページは 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 ケースを確認する。

通知対象者の決定

投稿種別に応じて以下の集合が作られ、マージして通知対象ユーザーリストとなる(投稿者自身は除外):

  1. チャンネル購読者(通常ルーム時): そのルームの通知設定が ON のユーザー。ルーム作成時のデフォルトは「契約済み受講者 + ルーム作成者本人」。他の講師(メイン・サブ)は自動で含まれない(各自で通知 ON にすれば受信可能)
  2. DM 対応者(DM ルーム時): 仕様として固定で DM 相手 + メイン講師 + サブ講師。この 3 者は自身の通知設定に関わらず対象(※ただしチャネル ON/OFF 設定は効く)
  3. メンション対象: 投稿テキストでメンションされ、かつメンション通知 ON のユーザー
  4. スレッド関連者(スレッド内投稿のみ): 親投稿者 + 兄投稿者 + 親/兄メンション対象

重複は自動的に排除される。

ルーム設定による通知・投稿の制御

ルーム設定(biz 表記) 効果
講師限定投稿 受講者は投稿不可。メイン講師 / サブ講師のみ投稿可能
スレッド限定投稿 受講者はスレッド外に投稿不可(スレッド内のみ投稿可能)。講師(メイン・サブ)はスレッド外にも投稿可能(親トークの作成等)
公開 / 非公開 非公開のルームでは投稿は可能だが通知は発火しない
アーカイブ 投稿不可、通知発火もしない
過去トーク制限 契約開始日以前の投稿は受講者側で非表示(通知配信済み分への影響なし)

通知設定の階層

受講者は以下 4 層で通知の着信を制御できる:

  1. 講座単位 ON/OFF(その講座の通知全般)
  2. ルーム個別 ON/OFF(特定ルームのミュート等)
  3. メンション通知 ON/OFF(講座単位)
  4. 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 時点の実装を起こし。機能追加・変更は含まない

関連ドキュメント


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