Bitrix24-3CX Integration: Setup, Cases, Solutions

Integrating Bitrix24 with 3CX Imagine: your company uses 3CX and Bitrix24, but calls are not logged in the CRM. Managers waste time manually entering data, leads get lost, and service quality is hard to track. This is a typical scenario requiring seamless telephony integration. We solve this — sy

Our competencies:

Frequently Asked Questions

Integrating Bitrix24 with 3CX

Imagine: your company uses 3CX and Bitrix24, but calls are not logged in the CRM. Managers waste time manually entering data, leads get lost, and service quality is hard to track. This is a typical scenario requiring seamless telephony integration. We solve this — syncing calls, recordings, and automatically creating CRM cards. Here we break down the technical details of two official integration methods and share pitfalls we encountered in practice. Our team holds certifications with 10+ years in Bitrix24 and 3CX, having completed over 50 telephony integrations. Through automation, you save up to 20 working hours per manager per month — that's up to $600 monthly savings per manager.

3CX is a commercial IP PBX with a polished web interface and its own client application ecosystem. Unlike Asterisk, 3CX offers a structured API for integrations — simplifying the task but imposing architectural constraints.

Setting Up Custom CRM Integration in 3CX for Bitrix24

  1. In the 3CX Management Console, go to CRM Integration → Custom CRM.
  2. Set the URL for the "Call Answered" event:
    https://your_portal.bitrix24.ru/rest/KEY/telephony.externalcall.register/ 
    Parameters are sent in the POST body:
    { "USER_PHONE_INNER": "%Ext%", "PHONE_NUMBER": "%CallerNumber%", "CALL_START_DATE": "%CallStarted%", "CRM_CREATE": "Y", "TYPE": "%Direction%" } 
  3. Set the URL for the "Call Ended" event:
    https://your_portal.bitrix24.ru/rest/KEY/telephony.externalcall.finish/ 
    Parameters:
    { "CALL_ID": "%call_id_saved%", "DURATION": "%TalkDuration%", "STATUS_CODE": "200" } 

    Problem: Custom CRM Integration in 3CX does not provide state storage — you cannot save the CALL_ID from Bitrix24's response and pass it on completion. This is a key limitation: for full integration with CALL_ID persistence, you need an intermediate server.

    Why an Intermediate Server Is Needed for CALL_ID

    An architecture with an intermediate handler solves the problem:

    3CX → webhook → PHP/Node.js handler ↓ Bitrix24 REST API → get CALL_ID ↓ Store CALL_ID in Redis/DB with key = call UNIQUEID ↓ 3CX → call end webhook → handler ↓ Retrieve CALL_ID from Redis ↓ telephony.externalcall.finish ↓ Attach recording 

    This adds an infrastructure component but gives full control over integration. We use this approach on every project — it's more reliable and scalable. Average cost is recovered within 3-6 months by eliminating manual entry.

    Call Recording: How to Transfer to Bitrix24

    3CX stores recordings in a server directory or cloud storage (depending on version and settings). Access files via the 3CX Recording Storage API or directly via the filesystem. To transfer to Bitrix24, a script runs after the call ends, queries the 3CX API for the recording URL, and uploads it via telephony.externalCall.attachRecord.

    3CX returns the recording URL through its call API:

    GET /api/recordings?callId={callId} 

    Authentication uses JWT token (3CX version 18+): Authorization: Bearer <token>.

    3CX SBC and NAT Issues: What to Check

    3CX often deploys with an SBC (Session Border Controller) for NAT traversal. When integrating with Bitrix24 via a SIP trunk, ensure the SBC's external IP is set in Bitrix24's SIP trunk settings. Otherwise, one-way audio occurs during calls from Bitrix24 to 3CX. This is a common mistake we catch during audit. Need help with your infrastructure? Contact us — we'll review your configuration.

    Comparing Integration Methods

    Method Flexibility Additional Server Needed Setup Complexity
    Custom CRM Integration Low (basic events only) Yes (for CALL_ID) Low
    Call Flow Designer + Webhooks High (any scenario) Optional Medium

    Typical Errors and Solutions

    Error Cause Solution
    One-way audio NAT misconfiguration Set SBC external IP in SIP trunk
    No CRM card created Missing USER_PHONE_INNER Ensure extension is linked to a Bitrix24 user
    Recording not attached CALL_ID mismatch Use intermediate server to store mappings

    Case Study: Distributed Team, 3CX in the Cloud

    An IT company with offices in two cities used 3CX Hosted (cloud version). Requirement: when a client calls the Moscow number and reaches a St. Petersburg manager, the call in Bitrix24 must be created for the St. Petersburg manager but linked to the Moscow inbound number.

    3CX Custom CRM Integration does not support mapping internal extensions to Bitrix24 users. We solved it with an intermediate handler containing a lookup table: 3CX extension → Bitrix24 user ID. On call registration, the handler checks the table and sets the correct USER_ID. Setup took 7 business days. The client now has fully automated telephony with correct routing.

    What Our Integration Service Includes

    • Audit of current 3CX and Bitrix24 configuration.
    • Architecture design (intermediate server, mapping, recording).
    • Configuration of Custom CRM Integration or CFD for your needs.
    • Development of intermediate handler (PHP/Node.js) with CALL_ID persistence.
    • Recording integration: 3CX API → upload to Bitrix24.
    • Troubleshooting NAT/SBC and SIP trunks.
    • Testing and user training.
    • 30-day warranty support.

    We evaluate your project within 1-2 days. Contact us — we'll find the best solution for your infrastructure.