メインコンテンツまでスキップ

チャンネル

チャンネルは、チームでの会話を Libre WebUI に集約します。公開ルーム、非公開ルーム、ダイレクトメッセージに加え、スレッド、リアクション、ピン留め、未読管理、ファイル添付、@model 返信を利用できます。いずれもチャットと同じ、永続的で暗号化された基盤上で動作します。

チャンネルの種類とメンバーシップ

種類閲覧できる人参加方法
public誰でも閲覧可能各自で参加
privateメンバーのみオーナーがメンバーを招待
dm2 人の参加者のみ自動的に開かれ、参加者は常に 2 人

チャンネル内容へのアクセス権限は、メンバーシップだけで決まります。添付ファイルのダウンロードやライブイベント配信を含むすべての読み書きで、まず呼び出し元のメンバーシップを確認します。メンバーでない場合は、存在の有無を推測できない 404 を返します。グローバル管理者ロールにも、チャンネル内容へのアクセス権は意図的に付与されません。

公開または非公開チャンネルの作成者が、そのオーナーになります。オーナーは名前変更、アーカイブ、招待(非公開の場合)、メンバーの削除、メッセージのモデレーション、チャンネルの削除を行えます。オーナーが退出するにはチャンネルを削除する必要があり、チャンネルを放置したまま退出することはできません。ダイレクトメッセージは参加者の組み合わせごとに重複排除されるため、同じ相手との DM を開くと、必ず同じ会話に移動します。

タイムライン

メッセージは、永続的で順序付けられたタイムラインを形成します。読み取りでは、created_at とメッセージ ID を組み合わせたキーセットカーソルを双方向に使用するため、ページ移動で項目が抜けたり重複したりしません。

  • 冪等な投稿。 クライアントがメッセージ ID を指定します。同じリクエストを再試行しても、タイムラインには同じ項目として 1 回だけ記録されます。
  • 墓標化による削除。 メッセージを削除すると内容は消去されますが、タイムライン上の項目は残ります。そのため、スレッドの参照切れや並び順の変化が起きません。作成者は自分のメッセージを削除でき、チャンネルオーナーは任意のメッセージをモデレーションできます。
  • 編集は作成者だけが行え、editedAt マーカーが付きます。
  • スレッドは 1 階層だけです。 どのルートメッセージにもスレッドを作成できますが、返信への返信は拒否されます。ルートメッセージには最新の返信数が表示されます。
  • リアクションはユーザーと絵文字の組み合わせごとに 1 つで、重複せず集計されます。
  • ピン留めはメンバーが管理し、チャンネル単位で一覧表示されます。

チャンネル名、説明、メッセージ本文は、チャットメッセージと同じ境界で保存時に暗号化されます。

未読状態

各メンバーシップには、単調増加する既読カーソルがあります。未読数はチャンネルごとにサーバー側で計算され、自分のメッセージが未読になることはありません。POST /api/channels/:channelId/read はカーソルを前へ進めるだけで、後退させません。そのため、古い状態のクライアントが既読メッセージを未読へ戻すことはできません。

リアルタイム配信

タイムラインの変更はすべて、永続イベントストリーム channel:<id> に追記され、GET /api/channels/:channelId/events(SSE)から配信されます。配信のたびにメンバーシップを再確認するため、削除されたメンバーのライブストリームは安全側に閉じられます。SQL タイムラインが常に正本です。イベントを受信できなかった購読者は、タイムラインを読み直すだけで回復できます。イベント台帳は配信手段であり、正本ではありません。

添付ファイル

ファイルは先に POST /api/channels/:channelId/attachments へアップロードされ、共有クレームキャッシュに短時間保管されます。メッセージを投稿した時点で添付されます。アップロードクレームは 1 回だけ使用でき、未使用のまま 15 分経過すると失効します。Blob のバイト数はアップロードしたユーザーの容量として計上され、ダウンロードのたびにチャンネルメンバーシップを再確認します。

@model 返信

入力欄から、特定のモデル宛てにメッセージを送れます。返信は、モデルが作成した保留中のメッセージとしてすぐ表示され、永続ジョブを通じて完了します。ジョブは呼び出したメンバー本人の ID と権限だけで実行されます。使用するのは、その人のモデルアクセス権、その人のプロバイダー資格情報、その人のルーティングです。チャンネルオーナーや別のメンバーの権限は決して使いません。メンションがキューにある間にメンバーを外された場合も、ジョブは生成前にメンバーシップを再確認し、目に見える失敗として記録します。モデルの失敗はキューの中へ消えず、返信自体に表示されます。

モデル返信では、直近のチャンネル会話(最大 30 メッセージ)をコンテキストに使用します。1 回限りの補完として実行され、チャットツール、ナレッジ検索、ウェブ検索は、まだチャンネルメンションに接続されていません。

上限

上限
ユーザー 1 人が作成できるチャンネル数50
チャンネルあたりのメンバー数200
チャンネルあたりのメッセージ数50,000
メッセージの長さ8,000 文字
メッセージあたりの添付ファイル5 × 10 MB
メッセージあたりのリアクション数200

境界

  • プレゼンス表示と入力中状態は実装されていません。
  • チャンネル内容のエクスポートと保持ポリシーは、インスタンス全体のバックアップ方針に従います。チャンネル単位のエクスポートはまだありません。
  • メンションはアプリ内通知サービスから通知されます。チャンネルを退出する以外に、チャンネルごとの通知設定はまだありません。