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 name | ecosire_voip |
| Odoo version | 19.0 (Community or Enterprise) |
| Current shipped version | 19.0 → 19.0.1.2.0 |
| Price | $499 USD — one-time |
| Odoo module licence | OPL-1 |
| Category | Productivity / 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.callrecords 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
| Requirement | Detail |
|---|---|
| Odoo | 19.0 Community or Enterprise, self-hosted or Odoo.sh. Odoo Online cannot install third-party modules |
| Odoo apps | base, web, mail, and phone_validation — Odoo installs missing dependencies |
| Voice service | A SIP provider or PBX that supports browser WebRTC clients and SIP signaling over a secure WebSocket (wss://) |
| Per-user credentials | A SIP username and secret for every agent |
| Browser | A current browser with microphone, WebRTC, Web Audio, and MediaRecorder support; output-device selection also requires browser support for setSinkId |
| Network | HTTPS 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
- Extract the archive so
/opt/odoo/addons/ecosire_voip/__manifest__.pyexists. - Restart Odoo, enable developer mode, and choose Apps → Update Apps List.
- Search for VoIP Phone & Call Center and click Install.
- 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:
| Field | Required | Purpose |
|---|---|---|
| Name | Yes | Unique provider label within the company |
| SIP Domain | Yes | Registrar/domain used to construct SIP addresses |
| Secure WebSocket URL | Yes | Browser-reachable SIP signaling endpoint, such as wss://pbx.example.com/ws |
| Mode | Yes | Demo or Production label shown in the softphone |
| Company | Yes | Company that owns the provider |
| STUN URL | No | ICE discovery server, such as stun:stun.example.com:3478 |
| TURN URL | No | ICE relay server, such as turn:turn.example.com:3478 |
| TURN Username / Secret | No | Credentials for the configured TURN relay |
Provider records and calls are company-scoped. Users only see providers for their allowed companies.
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:
- VoIP Provider
- SIP Username
- 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
| Tab | What it shows |
|---|---|
| Keypad | An international-number field, contact-name suggestions, DTMF keypad, and Connect/Call button |
| Recents | The current user's latest 30 voip.call records; selecting one copies its number to the keypad |
| Contacts | Up to 30 contacts with a phone value, optionally filtered by contact name |
| Activities | Up 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:
| Policy | On answer | Agent controls | Server upload rule |
|---|---|---|---|
| Enforced | Recording starts automatically after the call is answered | No Start/Stop buttons | WebM uploads accepted |
| User controlled | Recording starts only when the agent clicks Record | Record and Stop recording are available during an active call | WebM uploads accepted |
| Off | No recording starts | Recording controls are hidden | Uploads are rejected |
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.
Consent notice
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 check | Failure class | What to verify |
|---|---|---|
| Microphone | Browser permission or missing input device | Allow microphone access for the Odoo site, confirm a microphone exists, and reload the page after changing permission |
| Secure WebSocket | Wrong WSS path, DNS/firewall block, timeout, TLS trust failure, or endpoint not speaking the expected WebSocket protocol | Copy the PBX's exact wss:// URL, allow it through firewalls/proxies, and install a publicly trusted certificate |
| STUN/TURN media path | NAT traversal failed; no server-reflexive (srflx) or relay candidate was gathered | Verify STUN reachability. On symmetric/restricted NAT or blocked UDP networks, configure a reachable TURN relay and correct TURN credentials/firewall rules |
| SIP registration | Bad SIP username/secret/domain, wrong PBX WebRTC endpoint, or registration rejected | Recheck the user's credentials, SIP Domain, WSS endpoint, and the PBX registration logs |
Additional symptoms:
| Symptom | Cause and fix |
|---|---|
| Phone says Set up your phone | Provider, SIP username, or SIP secret is missing in the current user's Preferences |
| WSS passes but registration fails | Network signaling is reachable, but SIP authentication or domain configuration is wrong |
| Registration succeeds but there is no audio | Signaling 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 another | The 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 it | The active SIP session does not expose REFER; enable transfer support on the PBX or do not use that control |
| Recording cannot start | Both local and remote audio tracks must be ready, and the browser must support MediaRecorder and AudioContext |
| Output-device choice has no effect | The 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.
Does the consent option announce recording to the caller?
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.