Connect modules connect_3cx

Provider integration

Connect 3CX

3CX integration for Oduist Connect.

Connects an existing 3CX V20 PBX to Odoo through 3CX’s own server-side CRM integration. 3CX keeps full ownership of numbering, routing and phones; Odoo gets the contact lookup at call arrival, the call journal at call end, contact creation on request, and click-to-call through the 3CX Web Client.

Setup is deliberately small. Odoo generates a CRM template with your instance URL and a random API key baked in, you upload that one file to the 3CX Admin Console, and the PBX starts calling Odoo. Nothing is installed next to 3CX and no dialplan changes are needed.

For PBXs on the AI edition there is a second, deeper tier: the oduist/3cx-agent sidecar subscribes to the Call Control API and gives live call events, server-side click-to-call and recording downloads. Calls, recordings and transcripts land in the same Connect ledger as every other provider, so 3CX sites get the same AI transcription and reporting as the rest.

What it offers

  • Caller name in the 3CX client

    When a call arrives, the 3CX server asks Odoo who is calling and shows the contact name in every 3CX client, with a link that opens the partner form. The lookup is server-side, so it works on desk phones and softphones alike.

  • Calls journalled into the ledger

    At hangup the call lands in Connect → Calls with direction, answered or missed status, duration, agent and queue. If your 3CX license produces transcripts or summaries, their references are stored on the call record.

  • Create contacts from an unknown caller

    Agents can create an Odoo contact for an unrecognised number straight from the 3CX client, without switching to Odoo. The toggle lives in the CRM template parameters in the 3CX Admin Console.

  • Click-to-call from any phone field

    Clicking a number in Odoo opens the 3CX Web Client dial URL in a new tab and the user's own 3CX client places the call. Set the 3CX Extension on the Connect user, and Click-to-call Provider to 3CX when several telephony modules are installed.

  • Setup is one generated file

    DOWNLOAD CRM TEMPLATE produces odoo_connect_3cx.xml with your instance URL and API key already filled in; you upload it in the 3CX Admin Console under Integrations → CRM. The settings form then shows Last Contact Lookup and Last Call Journal stamps as a health check.

  • Optional live-event agent sidecar

    The oduist/3cx-agent container adds a deeper tier: calls appear in Odoo while they are still ringing, click-to-call rings all of the user's 3CX devices server-side instead of opening a tab, and recording audio is downloaded into Odoo so transcription applies. The end-of-call journal then merges its 3CX transcript into the live call instead of duplicating it.

  • Key-authenticated webhook routes

    Every route under /3cx/webhook/* requires the shared API key with a constant-time comparison, and all of them are rejected while the 3CX Enabled toggle is off. The key can be regenerated from the settings form.

Scope of the current version

  • 3CX V20 is required — the CRM template uses V20-only variables.
  • Server-side CRM integration exists on the 3CX PRO and AI editions only; the Free, Basic and SMB hosted editions cannot run this integration at all.
  • In the base tier calls appear in Odoo only after they end — there are no live call states in the phone widget.
  • Internal 3CX calls are not reported, and recording audio stays on the PBX (Odoo stores a link).
  • No SMS and no web phone: 3CX does not allow third-party WebRTC clients.
  • The deep agent tier needs the 3CX AI edition (8 simultaneous calls or larger) and a dedicated API client application with the System Owner role.
  • The deep agent tier has so far been validated against mocks; it needs live validation on a real 3CX instance, so verify call directions, durations and recording matching before relying on it.

Installs with full features free for 30 days; buy the license inside the module.