diff --git a/content/applications/productivity/discuss.rst b/content/applications/productivity/discuss.rst index 3e0c6328b..df6d1f1fa 100644 --- a/content/applications/productivity/discuss.rst +++ b/content/applications/productivity/discuss.rst @@ -162,13 +162,13 @@ upper-right corner of the database header. .. seealso:: - :doc:`discuss/team_communication` - :doc:`/applications/essentials/activities` - - :doc:`discuss/ice_servers` + - :doc:`discuss/calls` - :doc:`discuss/chatter` .. toctree:: :titlesonly: discuss/team_communication - discuss/ice_servers + discuss/calls discuss/chatter discuss/canned_responses diff --git a/content/applications/productivity/discuss/calls.rst b/content/applications/productivity/discuss/calls.rst new file mode 100644 index 000000000..ab3c3fa00 --- /dev/null +++ b/content/applications/productivity/discuss/calls.rst @@ -0,0 +1,123 @@ +===== +Calls +===== + +The Discuss calls feature enables real-time voice and video communication within Odoo. This +functionality allows team members to collaborate in real time, share screens, and conduct meetings +directly from the Odoo interface. + +Starting a call +=============== + +You can initiate a call from different places in Odoo: + +From a Discuss channel +---------------------- + +1. Open the **Discuss** app. +2. Select a channel from the sidebar. +3. Click the :icon:`fa-phone` :guilabel:`(phone)` icon in the top-right corner to start a call + or the :icon:`fa-video-camera` :guilabel:`(video camera)` icon to start directly with the camera. + +.. image:: calls/discuss-call.png + :align: center + :alt: Start a call from a Discuss channel + +From a chat window +------------------ + +(this includes live chat) + +1. Click on a chat window. +2. Click the :icon:`fa-phone` :guilabel:`(phone)` icon or the :icon:`fa-video-camera` + :guilabel:`(video camera)` icon in the top-right corner of the chat window. + +.. image:: calls/chat-window-call.png + :align: center + :alt: Start a call from a chat window + +Receiving a call +================ + +When someone starts a call in a direct message or group chat: + +1. An invitation notification appears in the upper-right corner of your screen. +2. You can: + + - Click :guilabel:`Accept` to join with audio only + - Click :guilabel:`Accept with camera` to join with video + - Click :guilabel:`Preview my camera` to check your video before accepting + - Click :guilabel:`Refuse` to decline the call + +Call settings +============= + +.. image:: calls/call-settings.png + :align: center + :alt: Settings button in the top right of the Discuss app + +.. image:: calls/call-settings-menu.png + :align: center + :alt: Settings menu + +Audio Settings +-------------- + +- **Input Device**: Select the microphone to use. +- **Voice Detection**: Select this option to activate your microphone only when you speak. +- **Voice Detection Sensitivity**: Adjust the sensitivity of the voice detection, the lower the value, + the more sensitive the detection. +- **Push-to-Talk**: Activate this option to use the push-to-talk feature. +- **Push-To-Talk Key**: Select the key to use for push-to-talk. +- **Delay after releasing push-to-talk**: Set the delay before the microphone is muted after releasing + the push-to-talk key. + +.. note:: + `The Push-to-Talk extension `_ + is available in Chrome to enable this functionality when not focused on the Odoo tab. + +Video Settings +-------------- + +- **Show video participants only**: Activate to only display the videos of the call (the participants + who do not have a video (screen share/webcam) will no longer be visible in the call. +- ** Blur video background**: Toggle the video background blurring feature, for which the + sensitivity (how precisely the shape of your head/body is matched) and the intensity (how intense + the blur is) can be adjusted. + +Technical Settings +------------------ + +- **Log RTC Events**: Activate to enable logging of RTC events in the browser's console (verbose) + and in the internal file logger. + +.. note:: + Errors are always logged, even when the setting is off. + +Advanced features +================= + +For larger organizations or environments with specific network requirements: + +- **SFU server**: For improved performance in calls with many participants. + See :doc:`calls/sfu_server` for configuration details. +- **ICE servers**: For calls between networks with restrictive firewalls. + See :doc:`calls/ice_servers` for configuration details. + +Troubleshooting +=============== + +If you experience issues with calls, refer to the :doc:`calls/troubleshooting` guide for +diagnostic steps and solutions. + +.. seealso:: + - :doc:`calls/sfu_server` + - :doc:`calls/ice_servers` + - :doc:`calls/troubleshooting` + +.. toctree:: + :titlesonly: + + calls/sfu_server + calls/ice_servers + calls/troubleshooting diff --git a/content/applications/productivity/discuss/calls/call-settings-menu.png b/content/applications/productivity/discuss/calls/call-settings-menu.png new file mode 100644 index 000000000..f98fe54f5 Binary files /dev/null and b/content/applications/productivity/discuss/calls/call-settings-menu.png differ diff --git a/content/applications/productivity/discuss/calls/call-settings.png b/content/applications/productivity/discuss/calls/call-settings.png new file mode 100644 index 000000000..af46c25dc Binary files /dev/null and b/content/applications/productivity/discuss/calls/call-settings.png differ diff --git a/content/applications/productivity/discuss/calls/chat-window-call.png b/content/applications/productivity/discuss/calls/chat-window-call.png new file mode 100644 index 000000000..fca2087a6 Binary files /dev/null and b/content/applications/productivity/discuss/calls/chat-window-call.png differ diff --git a/content/applications/productivity/discuss/calls/discuss-call.png b/content/applications/productivity/discuss/calls/discuss-call.png new file mode 100644 index 000000000..bf99a6941 Binary files /dev/null and b/content/applications/productivity/discuss/calls/discuss-call.png differ diff --git a/content/applications/productivity/discuss/ice_servers.rst b/content/applications/productivity/discuss/calls/ice_servers.rst similarity index 100% rename from content/applications/productivity/discuss/ice_servers.rst rename to content/applications/productivity/discuss/calls/ice_servers.rst diff --git a/content/applications/productivity/discuss/ice_servers/connect-twilio-to-odoo.png b/content/applications/productivity/discuss/calls/ice_servers/connect-twilio-to-odoo.png similarity index 100% rename from content/applications/productivity/discuss/ice_servers/connect-twilio-to-odoo.png rename to content/applications/productivity/discuss/calls/ice_servers/connect-twilio-to-odoo.png diff --git a/content/applications/productivity/discuss/ice_servers/custom-ice-servers-list.png b/content/applications/productivity/discuss/calls/ice_servers/custom-ice-servers-list.png similarity index 100% rename from content/applications/productivity/discuss/ice_servers/custom-ice-servers-list.png rename to content/applications/productivity/discuss/calls/ice_servers/custom-ice-servers-list.png diff --git a/content/applications/productivity/discuss/ice_servers/ice-servers-page.png b/content/applications/productivity/discuss/calls/ice_servers/ice-servers-page.png similarity index 100% rename from content/applications/productivity/discuss/ice_servers/ice-servers-page.png rename to content/applications/productivity/discuss/calls/ice_servers/ice-servers-page.png diff --git a/content/applications/productivity/discuss/ice_servers/twilio-acct-info.png b/content/applications/productivity/discuss/calls/ice_servers/twilio-acct-info.png similarity index 100% rename from content/applications/productivity/discuss/ice_servers/twilio-acct-info.png rename to content/applications/productivity/discuss/calls/ice_servers/twilio-acct-info.png diff --git a/content/applications/productivity/discuss/ice_servers/twilio-welcome.png b/content/applications/productivity/discuss/calls/ice_servers/twilio-welcome.png similarity index 100% rename from content/applications/productivity/discuss/ice_servers/twilio-welcome.png rename to content/applications/productivity/discuss/calls/ice_servers/twilio-welcome.png diff --git a/content/applications/productivity/discuss/calls/sfu_server.rst b/content/applications/productivity/discuss/calls/sfu_server.rst new file mode 100644 index 000000000..ba21aee30 --- /dev/null +++ b/content/applications/productivity/discuss/calls/sfu_server.rst @@ -0,0 +1,58 @@ +========== +SFU server +========== + +In Odoo Discuss, the Selective Forwarding Unit (SFU) server enables efficient handling of calls with +many participants. Unlike peer-to-peer connections which can become resource-intensive with multiple +users, the SFU server receives media streams from each participant and selectively forwards them to +others, significantly improving call quality and scalability. Its sources can be found in the +`odoo/sfu repository `_. + +.. note:: + In Odoo.sh and Odoo SaaS, the SFU servers are already provided. Adding your own in the + settings will override the default one. + +What is a Selective Forwarding Unit (SFU)? +------------------------------------------ + +An SFU server is a type of media server that receives audio and video streams from each participant +in a call and selectively forwards them to other participants. This approach is more efficient than +peer-to-peer connections, especially in calls with many participants. + +.. image:: sfu_server/sfu-diagram.png + :align: center + :alt: Diagram of p2p vs sfu connection layout + +.. image:: sfu_server/sfu-graph-scaling.png + :align: center + :alt: Graph showing the bandwidth scaling of p2p vs sfu + +When to use an SFU server +------------------------- + +Consider deploying an SFU server when: + +- Your organization conducts calls with more than 5-10 participants +- You frequently use video in calls with multiple participants +- Your users are distributed across different networks or locations +- You need to support users behind restrictive firewalls or complex NAT configurations + +Without an SFU server, Odoo will fall back to peer-to-peer connections, which work well for smaller +calls but may lead to performance issues with larger groups. + +Deployment +---------- + +Follow the instructions in the `odoo-SFU README +`_. + +Connecting to Odoo +------------------ + +Once your SFU server is running, you need to configure your Odoo server to use it: + +1. Go to :menuselection:`Settings --> General Settings --> Discuss` +2. Enter the URL of your SFU server in the :guilabel:`SFU Server URL` field +3. Enter the same AUTH_KEY value in the :guilabel:`SFU Server Key` field +4. Click :guilabel:`Save` + diff --git a/content/applications/productivity/discuss/calls/sfu_server/sfu-diagram.png b/content/applications/productivity/discuss/calls/sfu_server/sfu-diagram.png new file mode 100644 index 000000000..effc82313 Binary files /dev/null and b/content/applications/productivity/discuss/calls/sfu_server/sfu-diagram.png differ diff --git a/content/applications/productivity/discuss/calls/sfu_server/sfu-graph-scaling.png b/content/applications/productivity/discuss/calls/sfu_server/sfu-graph-scaling.png new file mode 100644 index 000000000..2ad0ab3ca Binary files /dev/null and b/content/applications/productivity/discuss/calls/sfu_server/sfu-graph-scaling.png differ diff --git a/content/applications/productivity/discuss/calls/troubleshooting.rst b/content/applications/productivity/discuss/calls/troubleshooting.rst new file mode 100644 index 000000000..32e35da10 --- /dev/null +++ b/content/applications/productivity/discuss/calls/troubleshooting.rst @@ -0,0 +1,128 @@ +=============== +Troubleshooting +=============== + +This guide will help you diagnose and resolve issues with Odoo Discuss calls. Follow the checklist +first, then use the diagnostic tools if needed. + +Checklist +========= + +Before exploring advanced troubleshooting options, verify these common issues: + +- Is the issue related to a **user setting**? + - Has microphone and camera **access** been granted in the browser permissions? + - Are call participants missing from the view? Check if "Show video participants only" is enabled + in the call settings. +- Is the **browser up to date**? + - Check your browser's settings --> "about Chrome" or "about Firefox". +- Are there any network-limiting **browser extensions** installed? +- Is the **Odoo bus** operational? + - There should be a "connection lost" warning in the UI. +- Are you behind a strong **firewall, VPN, or asymmetric NAT**? + - If so, is a **TURN** or **SFU server** available to handle this network situation? + (on the SaaS and odoo.sh, TURN/SFU servers should already be provided). + +Gathering diagnostic information +================================ + +When you encounter problems with Discuss calls, follow these steps to collect important +diagnostic data: + +1. Enable **debug mode** +2. Activate RTC logging in the call settings + +.. note:: + Critical errors are always logged, even without RTC logging enabled. Note that the logging option + is not saved and must be activated after each page reload (to avoid forgetting it and using + memory and resources when not necessary). + +Diagnostic information sources +============================== + +Source 1: Console command +------------------------- + +Enter this code in your browser's console (CTRL+Shift+I): + +.. code-block:: javascript + + const rtc = odoo.__WOWL_DEBUG__.root.env.services["mail.store"].rtc; + rtc.state.channel?.rtcSessions.map((session) => ({ + name: session.name, + id: session.id, + session: { ...session }, + consumers: rtc.sfuClient?._consumers.get(session.id), + peer: rtc.p2pService?.peers.get(session.id), + })); + +This command provides a list of all sessions in your current call, showing important information for +each participant, such as the state of the Media elements, of the streams, of the connection to each +peer, of the connection to the sfu,... + +This is particularly useful for examining participants with connection issues. + +.. image:: troubleshooting/command-output.png + :align: center + :alt: Console output showing a list of session data for call participants + +Source 2: Context menu +---------------------- + +Check connection status through the participant options menu: + +1. While in a call, hover over a participant's video +2. Click the **context menu** button that appears in the top-right corner + +The menu shows connection details for: +- Yourself when connected to the SFU +- Other participants when you have a peer-to-peer connection with them + +.. image:: troubleshooting/context-menu-button.png + :align: center + :alt: The context menu button appears when hovering over a participant video + +.. image:: troubleshooting/context-menu.png + :align: center + :alt: The context menu shows connection details for the participant + +.. warning:: + In a peer-to-peer connection, if the ICE connection is stuck at "new", it typically indicates the + absence of TURN servers, which are needed to traverse certain types of NATs and firewalls. + +Source 3: Logs +-------------- + +Detailed logs that contain information on the state of calls and the technical events/errors. + +Browser console +~~~~~~~~~~~~~~~ + +Access through your browser's developer tools: + +.. image:: troubleshooting/devtools-console.png + :align: center + :alt: Browser developer tools console showing RTC-related log entries + +Downloaded logs +~~~~~~~~~~~~~~~ + +Obtain logs for the calls that were recorded during the **last 24 hours**. +User information in the logs are **anonymized**. + +The amount of information contained in the logs depends on the "log RTC events" settings mentioned +above. If the setting is not activated, the logs will only contain errors. + +1. Go to Discuss settings +2. Click the "Download logs" button + +.. image:: troubleshooting/rtc-logs.png + :align: center + :alt: RTC logs download button in Discuss settings + +.. note:: + All tabs log to the same file (which can be downloaded from any other tab) + and are stored for 24h. + +You can send these logs in a support ticket or analyze them with the +`RTC Log Viewer `_. diff --git a/content/applications/productivity/discuss/calls/troubleshooting/command-output.png b/content/applications/productivity/discuss/calls/troubleshooting/command-output.png new file mode 100644 index 000000000..ded74b0b7 Binary files /dev/null and b/content/applications/productivity/discuss/calls/troubleshooting/command-output.png differ diff --git a/content/applications/productivity/discuss/calls/troubleshooting/context-menu-button.png b/content/applications/productivity/discuss/calls/troubleshooting/context-menu-button.png new file mode 100644 index 000000000..2bfcb8c36 Binary files /dev/null and b/content/applications/productivity/discuss/calls/troubleshooting/context-menu-button.png differ diff --git a/content/applications/productivity/discuss/calls/troubleshooting/context-menu.png b/content/applications/productivity/discuss/calls/troubleshooting/context-menu.png new file mode 100644 index 000000000..0d075f4c7 Binary files /dev/null and b/content/applications/productivity/discuss/calls/troubleshooting/context-menu.png differ diff --git a/content/applications/productivity/discuss/calls/troubleshooting/devtools-console.png b/content/applications/productivity/discuss/calls/troubleshooting/devtools-console.png new file mode 100644 index 000000000..a072c1a5e Binary files /dev/null and b/content/applications/productivity/discuss/calls/troubleshooting/devtools-console.png differ diff --git a/content/applications/productivity/discuss/calls/troubleshooting/rtc-logs.png b/content/applications/productivity/discuss/calls/troubleshooting/rtc-logs.png new file mode 100644 index 000000000..c74ef8916 Binary files /dev/null and b/content/applications/productivity/discuss/calls/troubleshooting/rtc-logs.png differ