Skip to main content

VoIP Phone & Call Center

VoIP Phone & Call Center adds a SIP/WebRTC softphone to the Odoo backend. Agents can place and receive browser calls, work today's phone activities, keep call records, and use standard in-call controls. Supervisors get a live, filtered board built from those call records. This page describes ecosire_voip exactly as version 19.0.1.2.0 ships today.

Technical nameecosire_voip
Odoo version19.0 (Community or Enterprise)
Current shipped version19.019.0.1.2.0
Price$499 USD — one-time
Odoo module licenceOPL-1
CategoryProductivity / Phone & VoIP

Overview

The module provides:

  • A persistent Phone softphone in the Odoo systray with Keypad, Recents, Contacts, and Activities tabs.
  • Outbound click-to-dial from read-only Odoo phone fields and inbound caller matching against contact phone numbers.
  • Mute, hold/resume, DTMF keypad tones, blind transfer, attended-transfer flow, hangup, Do Not Disturb (DND), and output-device selection.
  • voip.call records with direction, outcome, timestamps, duration, agent, provider, contact, source record, notes, chatter, graph, and pivot views.
  • Company-level browser recording policy, optional consent notice, WebM playback, and daily retention cleanup.
  • A supervisor-only live board with call KPIs, agent states, running calls, daily volume, outcomes, and recent calls.
  • A connection doctor for microphone permission, secure WebSocket reachability, STUN/TURN media-path discovery, and SIP registration.

There is no SMS, IVR designer, queue/ACD configuration, or AI transcription in this release.

Requirements

RequirementDetail
Odoo19.0 Community or Enterprise, self-hosted or Odoo.sh. Odoo Online cannot install third-party modules
Odoo appsbase, web, mail, and phone_validation — Odoo installs missing dependencies
Voice serviceA SIP provider or PBX that supports browser WebRTC clients and SIP signaling over a secure WebSocket (wss://)
Per-user credentialsA SIP username and secret for every agent
BrowserA current browser with microphone, WebRTC, Web Audio, and MediaRecorder support; output-device selection also requires browser support for setSinkId
NetworkHTTPS access to Odoo, outbound access to the PBX WSS endpoint, and a usable ICE path through STUN and, where needed, TURN

WSS, STUN, and TURN

The browser connects directly to the provider's SIP-over-WebSocket endpoint. Enter the exact wss:// address supplied by the PBX administrator and use a publicly trusted TLS certificate. A normal sip:, ws://, UDP, or TCP registrar address is not a substitute for the required WSS endpoint.

STUN helps a browser behind NAT discover a public-facing media candidate. TURN relays media when direct peer-to-peer traversal is blocked by symmetric NAT, restrictive corporate firewalls, carrier-grade NAT, or similar network policies. Configure TURN, including its username and secret, when agents cannot establish a usable media path with STUN alone. The module passes the configured ICE servers to the browser; it does not include or operate a STUN/TURN server.

Installation and access

  1. Extract the archive so /opt/odoo/addons/ecosire_voip/__manifest__.py exists.
  2. Restart Odoo, enable developer mode, and choose Apps → Update Apps List.
  3. Search for VoIP Phone & Call Center and click Install.
  4. Under Settings → Users & Companies → Users, grant the appropriate Phone & VoIP access level:
    • VoIP User — use the phone and work with call records.
    • VoIP Supervisor — includes user access and permits the Live Board.
    • VoIP Administrator — includes supervisor access and can manage providers and settings.

The module installs standalone. It has no separate ECOSIRE licence-client dependency or activation screen.

Setup

1. Create the provider

As a VoIP Administrator, open Phone → Configuration → Providers, create a provider, and fill in:

FieldRequiredPurpose
NameYesUnique provider label within the company
SIP DomainYesRegistrar/domain used to construct SIP addresses
Secure WebSocket URLYesBrowser-reachable SIP signaling endpoint, such as wss://pbx.example.com/ws
ModeYesDemo or Production label shown in the softphone
CompanyYesCompany that owns the provider
STUN URLNoICE discovery server, such as stun:stun.example.com:3478
TURN URLNoICE relay server, such as turn:turn.example.com:3478
TURN Username / SecretNoCredentials for the configured TURN relay

Provider records and calls are company-scoped. Users only see providers for their allowed companies.

Demo mode is a label, not a simulator

The mode changes the Demo or Production badge in the phone. It does not create a test PBX, fake media, or bypass registration. The optional Odoo demo data uses .invalid addresses and intentionally contains no live credentials; it cannot place calls. Use a provider-controlled test extension or test PBX for a real trial.

2. Assign each user's SIP credentials

Each agent opens their user menu and selects Preferences. In the VoIP section, set:

  1. VoIP Provider
  2. SIP Username
  3. SIP Secret

The secret is masked. A regular user can access only their own secret; a VoIP Administrator can administer user settings. The phone shows a setup prompt until all three values are present.

The same Preferences section stores Ring Device and Do Not Disturb, but it is easier to choose the output device from the softphone after the browser has enumerated devices.

3. Register the phone

Open the phone icon in the top bar and click Connect. The status changes from idle to connecting and then registered when the SIP server accepts the credentials. Registration is not automatic merely because the preferences are saved.

Using the softphone

Tabs

TabWhat it shows
KeypadAn international-number field, contact-name suggestions, DTMF keypad, and Connect/Call button
RecentsThe current user's latest 30 voip.call records; selecting one copies its number to the keypad
ContactsUp to 30 contacts with a phone value, optionally filtered by contact name
ActivitiesUp to 30 phone-call activities assigned to the current user and due today, with Call, Open, and Done actions

Numbers must normalize to international E.164 form, for example +12025550123. A number beginning with 00 is converted to +; short or otherwise invalid numbers are rejected.

Outbound and click-to-dial

  • Enter a number or select a contact in the softphone, ensure the status is registered, and click Call.
  • Clicking a read-only phone field anywhere in the Odoo backend opens the softphone with that number and remembers the source record.
  • When a source-linked call ends, the module posts its direction, number, outcome, and duration to that record's chatter.

Inbound calls

While the browser phone is registered, an inbound SIP session opens the phone and shows the matched contact or caller number with Accept and Reject. Contact matching uses the last nine digits of the caller number against the contact's phone field.

If DND is enabled, the module declines the session and records it as Missed without showing the accept flow. DND persists in the user's preferences.

In-call controls and transfers

  • Mute disables the outgoing audio track.
  • Hold and Resume use the SIP.js session hold controls.
  • Keypad presses during an active call send DTMF.
  • Blind transfer sends the current session to the entered SIP target.
  • Attended starts a call to the target before attempting the transfer.
  • End hangs up the current session.

Transfers require the provider/PBX to support SIP REFER. Attended-transfer behavior is especially provider-specific, so test it with your PBX before relying on it in production.

DND and ring/output device

Use the DND switch in the phone header to enable or disable Do Not Disturb. Under Connection doctor & audio, choose a detected audio-output device or System default. The selection is saved to the user's preferences and applied through the browser's output-device API when that API is available. Browser permission and device-label behavior varies; if selection is unavailable, use the operating system's default output device.

Call recording

Recording is performed in the agent's browser. The module merges the active call's local and remote audio tracks, creates a WebM recording, and uploads it to the owned voip.call record when recording stops or the call ends. The recording is playable from Phone → Calls. An upload is limited to 100 MB and the server accepts WebM content only.

Configure the policy under Phone → Configuration → Settings:

PolicyOn answerAgent controlsServer upload rule
EnforcedRecording starts automatically after the call is answeredNo Start/Stop buttonsWebM uploads accepted
User controlledRecording starts only when the agent clicks RecordRecord and Stop recording are available during an active callWebM uploads accepted
OffNo recording startsRecording controls are hiddenUploads are rejected
Recording law and consent

You are responsible for choosing a lawful policy and notice for every jurisdiction and participant. The optional notice is an on-screen browser notification for the Odoo agent; the code does not play an audio announcement to the remote party and does not capture affirmative consent.

Enable Consent Notice and edit its text to show an accessible warning immediately before browser recording starts. It is off by default. The shipped default says that the call may be recorded and reminds the agent to follow applicable consent and privacy requirements.

Retention

Set Recording Retention to the number of days recordings should remain attached. A daily scheduled action, VoIP: Purge Expired Recordings, deletes attachments from ended calls older than that cutoff. Set the value to 0 to retain recordings indefinitely. The purge still applies to recordings captured under an earlier policy if recording is later switched off.

Supervisor board

Users with VoIP Supervisor access can open Phone → Live Board. It shows:

  • KPIs for total calls, answered calls, missed calls, average answered-call duration, calls live now, and answer rate.
  • Agent tiles showing DND, on-call, or available status together with Odoo presence.
  • Running calls with live elapsed duration.
  • Daily call volume, answered-versus-missed outcomes, and up to 100 recent calls.
  • Date, allowed-company, and agent filters.

The board refreshes from Odoo bus notifications when calls or DND state change; the one-second browser timer only advances displayed running durations. Date ranges are limited to 366 days, and results are bounded to 100 call rows and 100 agents. A regular VoIP User cannot open the board.

Connection doctor and troubleshooting

Open the phone, expand Connection doctor & audio, and click Run diagnostics. The doctor checks four independent layers:

Failed checkFailure classWhat to verify
MicrophoneBrowser permission or missing input deviceAllow microphone access for the Odoo site, confirm a microphone exists, and reload the page after changing permission
Secure WebSocketWrong WSS path, DNS/firewall block, timeout, TLS trust failure, or endpoint not speaking the expected WebSocket protocolCopy the PBX's exact wss:// URL, allow it through firewalls/proxies, and install a publicly trusted certificate
STUN/TURN media pathNAT traversal failed; no server-reflexive (srflx) or relay candidate was gatheredVerify STUN reachability. On symmetric/restricted NAT or blocked UDP networks, configure a reachable TURN relay and correct TURN credentials/firewall rules
SIP registrationBad SIP username/secret/domain, wrong PBX WebRTC endpoint, or registration rejectedRecheck the user's credentials, SIP Domain, WSS endpoint, and the PBX registration logs

Additional symptoms:

SymptomCause and fix
Phone says Set up your phoneProvider, SIP username, or SIP secret is missing in the current user's Preferences
WSS passes but registration failsNetwork signaling is reachable, but SIP authentication or domain configuration is wrong
Registration succeeds but there is no audioSignaling and media take different paths. Run the STUN/TURN check; a TURN relay is commonly required on restrictive or symmetric NAT
Calls work on one network but not anotherThe failing network likely blocks WebSocket/TLS or WebRTC ICE traffic. Compare doctor results and provide TURN for restricted networks
Transfer reports that the provider does not support itThe active SIP session does not expose REFER; enable transfer support on the PBX or do not use that control
Recording cannot startBoth local and remote audio tracks must be ready, and the browser must support MediaRecorder and AudioContext
Output-device choice has no effectThe browser does not support setSinkId, device permission is incomplete, or the selected device disappeared; use System default and check OS audio routing

FAQ

Does the module include a SIP service or PBX?

No. It is a browser client and Odoo call-record layer. Supply a compatible SIP provider/PBX, WSS endpoint, extensions, and any needed STUN/TURN service.

Does Demo mode make test calls without a provider?

No. Demo and Production are labels displayed in the phone. Both use the provider values and credentials you configure.

Does it support Odoo 17 or 18?

This shipped page and module build are for Odoo 19.0 only: 19.0.1.2.0.

Can agents call local-format numbers?

The dial contract requires a number that normalizes to E.164. Store numbers in international form such as +12025550123; a 00 international prefix is converted to +.

Are calls automatically recorded?

Only when the company policy is Enforced, and only after the browser call is answered and both audio streams are available. User controlled requires the agent to start recording; Off disables it.

No. It displays text to the Odoo agent immediately before recording. It does not play an audio prompt or collect the remote party's response.

Can supervisors listen to live calls?

No. The Live Board shows status, duration, numbers, agents, and aggregate call data. It does not provide live monitoring, whisper, or barge controls.

Does this version provide SMS, IVR, queues, or transcription?

No. Version 19.0.1.2.0 provides the browser phone, call records and reporting, recording, diagnostics, and supervisor board described above. It has no SMS, IVR/ACD designer, or AI transcription feature.

Support