📞 diskuzコール – Discourse内での音声・ビデオ通話 (P2P、外部アプリ不要)

:information_source: 概要 Discourse内にピアツーピアの音声・ビデオ通話(WebRTC)を追加します。 フローティングボタンまたは1対1チャット作成ウィンドウからの1対1通話。組み込みのウィジェット通話UI外部アプリは不要。Discourseサーバーはシグナリング(メディアなし)のみを行います。可能な限り、音声/ビデオは2つのブラウザ間で直接(P2P)流れます。管理画面でオプションのTURNサーバーを追加できます。これにより、直接P2Pが失敗した場合(厳密なNAT/ファイアウォールなど)、メディアはTURN経由で中継され、通話は引き続き機能します。
:hammer_and_wrench: リポジトリリンク GitHub - idiskuz/diskuz-call: Voice calls (WebRTC) for Discourse. P2P calls between users, built-in UI. Created for diskuz.com. · GitHub
:open_book: インストールガイド Discourseにプラグインをインストールする方法
:busts_in_silhouette: コミュニティ diskuz Call この新しいプラグインに関するサポートコミュニティはdiskuz.comにあります。

特徴

  • P2P音声・ビデオ(WebRTC) — Discourseはシグナリング(オファー/アンサー、ICE)のみを処理し、音声/ビデオを受信または保存することはありません。STUN(デフォルト:Google)は、2つのブラウザがお互いを見つけるのを助け、その後メディアは直接フローします(真のP2P)。TURN(オプション、管理画面 → ICEサーバーで設定可能)は中継です。直接P2Pが失敗した場合(対称型NAT、企業ファイアウォールなど)、メディアはA → TURNサーバー → Bと流れ、通話は機能し続けます。P2Pが失敗した、または片側音声の問題をユーザーが報告した場合は、TURNを追加してください。
  • フローティングボタン(右下) — ユーザー名を入力して通話を開始するためのウィジェットを開きます。トピック作成ウィンドウまたはチャットが開いているときは非表示になります。管理者はサイト全体で無効にできます。
  • 1対1チャットの通話ボタン — 通話を開始するための、チャット作成ウィンドウ内のアイコン。管理者はサイト全体で無効にできます。有効な場合、許可されたグループにのみ表示されます。
  • グループベースのアクセス — 設定されたグループのユーザーのみがdiskuz Callを表示・使用できます。オプションで「通話相手が発信者をフォローしている必要がある」(Discourse Followが必要)を設定できます。
  • 個別の「ビデオ許可グループ」 — 通話中にカメラをオンにできるユーザーを制御します。
  • 設定可能な着信音 — 通話が着信したときの音:なし、デフォルト、ディン、ベル、チャット、カスタム(最大10個のMP3 URLがあり、ユーザーがウィジェットで1つ選択)、または組み込みの代替プリセット。別途、Discourseの通知(ベルアイコン)では、着信時に「呼び出し中」と表示され、不在着信の場合は時間とともに「不在着信」が表示されます。
  • ウィジェット — 2つのページ:「友人を呼ぶ」(ホーム)と通知(受信、送信、最近、不在着信。各タブ最大10件。ユーザー名をクリックすると再度発信可能)。デスクトップ:上部のバーでドラッグ可能。モバイル:フルスクリーン。
  • 通話中 — 時間表示、ミュート、スピーカー、ビデオのオン/オフ、ブラー(デスクトップ/Android)、モバイルでのイヤホンモード(暗いオーバーレイ。3回タップでロック解除)。ブラウザ内のユーザー状況(オンライン、ビジー、オフライン)。ビジー/オフライン時には着信を自動拒否可能。ユーザーが別のタブに切り替えると60秒のタイマーが開始され、戻らない場合は通話が終了します。
  • ローカライズ — 英語とイタリア語(クライアントとサーバー)。

ステータス: ベータ版。通話失敗または片側音声の場合は、管理画面 → プラグイン → ICEサーバーでTURNを設定してください。

設定

  1. インストール — プラグインを追加します(例:app.ymlフックまたはプラグインディレクトリへの手動追加):
    • git clone https://github.com/idiskuz/diskuz-call.git
    • アプリケーションをリビルドします(例:./launcher rebuild app)。
  2. 有効化 — 管理画面 → プラグイン:diskuz Callを有効化します(リストされている場合)。管理画面 → 設定 → プラグイン:Enable diskuz Callを有効化します。
  3. アクセスWho can see and use diskuz Callを目的のグループに設定します(例:管理者、モデレーター、スタッフの場合は1|2|3)。
  4. オプション — 必要に応じて、Show floating button / Show chat buttonRequire the callee to follow the callerDiscourse Followを使用)、Sound for incoming callsCustom ringtones または Alternative ringtoneGroups that can enable videoPrimary colorICE servers(NAT/ファイアウォール用)を設定します。

要件: Discourse(シグナリングに組み込みのリアルタイムメッセージングを使用)。オプション:Discourse Follow(「通話相手が発信者をフォローしている必要がある」機能のため)。WebRTC対応ブラウザ、マイク(ビデオの場合はカメラも)。

設定項目

名前 説明
Enable diskuz Call プラグインのマスタースイッチ。
Who can see and use diskuz Call グループリスト(例:管理者、モデレーター、スタッフをIDで指定)。これらのユーザーのみがプラグインを表示し、通話を発信/受信できます。
Require the callee to follow the caller 有効な場合(Discourse Followが必要)、通話を受信するには、通話相手は発信者をフォローしている必要があります。
Show floating button ON:フローティングボタンが許可されたグループにのみ表示されます。OFF:全員に非表示になります。
Show chat button ON:1対1チャットの通話ボタンが許可されたグループにのみ表示されます。OFF:全員に非表示になります。
Groups that can enable video 通話中にビデオボタンを使用できるグループのリスト。
Primary color ボタンやアクセントに使用する16進数の色(例:#13c98c)。
Sound for incoming calls none、default、ding、bell、chat、custom、またはalternative。
Custom ringtones 1–10 MP3 URL。Soundがcustomの場合に使用されます。ユーザーはウィジェットで1つ選択します。
Alternative ringtone Soundがalternativeの場合のプリセット(例:soft、classic、modern、festivo、marimba、relax1~5)。
ICE servers STUN/TURN用のオプションのJSON配列。空の場合はGoogle STUNのみ。
Debug log ONの場合、ブラウザコンソール(F12)に\[diskuz-call\]メッセージが出力されます。サポート用。本番環境では無効にしてください。

作者: diskuz.com, Cristian Deraco
謝辞: コンセプト、機能、デザインはCristian Deraco (diskuz.com)による。AI支援開発により実装。
バージョン: 0.4.0-beta

これは公式のDiscourseプラグインではありません。

この度diskuz Callを公開できることを大変嬉しく思います。皆様からのご意見をお待ちしています :star_struck:

「いいね!」 2