📞 diskuz Call – Voice and video calls inside Discourse (P2P, no external apps)

:information_source: Summary Adds peer‑to‑peer voice and video calls (WebRTC) inside Discourse. One‑on‑one calls from a floating button or from the 1:1 chat composer; built‑in widget and call UI. No external apps. Your Discourse server only does signaling (no media). Audio/video goes directly between the two browsers (P2P) when possible; you can add optional TURN servers in Admin so that when direct P2P fails (e.g., strict NAT/firewall), media is relayed via TURN and the call still works.
:hammer_and_wrench: Repository Link GitHub - idiskuz/diskuz-call: Voice calls (WebRTC) for Discourse. P2P calls between users, built-in UI. Created for diskuz.com. · GitHub
:open_book: Install Guide How to install plugins in Discourse
:busts_in_silhouette: Community diskuz Call Support Community on diskuz.com for this new plugin.

Features

  • P2P voice and video (WebRTC) — Discourse only handles signaling (offer/answer, ICE); it never receives or stores audio/video. STUN (default: Google) helps the two browsers find each other; media then flows directly between them (true P2P). TURN (optional, configurable in Admin → ICE servers) is a relay: when direct P2P fails (symmetric NAT, corporate firewall, etc.), media goes A → TURN server → B so the call still works. Add TURN if users report failed calls or one-way audio.
  • Floating button (bottom right) — Opens a widget to type a username and start a call. Hidden when the topic composer or chat is open. Admin can disable it site-wide.
  • Call button in 1:1 chat — Icon in the chat composer to start a call with the other user. Admin can disable it site-wide. Visible only to allowed groups when enabled.
  • Group-based access — Only users in configured groups see and use diskuz Call. Optional “callee must follow caller” (requires Discourse Follow).
  • Separate “video allowed” groups — Control who can turn the camera on during a call.
  • Configurable ringtone — Sound when a call arrives: none, default, ding, bell, chat, custom (up to 10 MP3 URLs; user picks one in the widget), or built-in alternative presets. Separately, Discourse notifications (bell icon) show “is calling you” for incoming and “Missed call” with time for missed calls.
  • Widget — Two pages: “Call a friend” (home) and Notifications (Received, Sent, Recent, Missed; up to 10 per tab; usernames clickable to call again). Desktop: draggable by the top bar. Mobile: full-screen.
  • During a call — Duration, mute, speaker, video on/off, blur (desktop/Android), ear mode on mobile (dark overlay; tap 3Ă— to unlock). User status (Online, Busy, Offline) in browser; incoming calls can be auto-rejected when Busy/Offline. If the user switches to another tab, a 60-second timer starts; if they don’t return, the call ends.
  • Localization — English and Italian (client and server).

Status: Beta. For failed calls or one-way audio, configure TURN in Admin → Plugins → ICE servers.

Configuration

  1. Install — Add the plugin (e.g. via app.yml hooks or manually in the plugins directory):
    • git clone https://github.com/idiskuz/diskuz-call.git
    • Rebuild the app (e.g. ./launcher rebuild app).
  2. Enable — Admin → Plugins: enable diskuz Call (if listed). Admin → Settings → Plugins: enable Enable diskuz Call.
  3. Access — Set Who can see and use diskuz Call to the desired groups (e.g. 1|2|3 for admins, moderators, staff).
  4. Optional — Configure Show floating button / Show chat button, Require the callee to follow the caller (with Discourse Follow), Sound for incoming calls, Custom ringtones or Alternative ringtone, Groups that can enable video, Primary color, and ICE servers (TURN JSON) if needed for NAT/firewall.

Requirements: Discourse (uses built-in real-time messaging for signaling). Optional: Discourse Follow (for “callee must follow caller”). Browser with WebRTC, microphone (and camera for video).

Settings

Name Description
Enable diskuz Call Master switch for the plugin.
Who can see and use diskuz Call Group list (e.g. admins, moderators, staff by ID). Only these users see the plugin and can make/receive calls.
Require the callee to follow the caller When enabled (with Discourse Follow), the callee must follow the caller to receive calls.
Show floating button ON: floating button visible only to allowed groups. OFF: hidden for everyone.
Show chat button ON: Call button in 1:1 chat visible only to allowed groups. OFF: hidden for everyone.
Groups that can enable video Group list for who can use the Video button during a call.
Primary color Hex color (e.g. #13c98c) for button and accents.
Sound for incoming calls none, default, ding, bell, chat, custom, or alternative.
Custom ringtones 1–10 MP3 URLs. Used when Sound is custom; user picks one in the widget.
Alternative ringtone Preset when Sound is alternative (e.g. soft, classic, modern, festivo, marimba, relax1–5).
ICE servers Optional JSON array for STUN/TURN. Empty = Google STUN only.
Debug log When ON, [diskuz-call] messages in browser console (F12). For support; disable in production.

Authors: diskuz.com, Cristian Deraco
Credits: Concept, features, and design by Cristian Deraco (diskuz.com). Implementation with AI-assisted development.
Version: 0.4.0-beta

This is not an official Discourse plugin.

I’d love to see how the widget looks on your site. You can set the main diskuz Call color directly in the plugin’s options panel :hugs:

Super excited to share this with you all — diskuz Call is finally live! Can’t wait to hear what you think :star_struck:

2 Likes