Update 7 Hotfix

FYI, I am loosing confidence that this error is specific to this update. I have been researching this more and I found a thread with similar issue (see link below). I don't know why this stopping working yesterday and/or if it is related to the update.

 
Hi @loyer , we have tried but cannot replicate the behaviour you are seeing. Please open a ticket so the team can take a more detailed look.
 
Hi Kyriacos, I will open a ticket and follow up. Please note that other customers have reached out to us specifically related to outbound calls being rejected by Twilio because the outbound caller id number did not match. We are still trying to narrow down when and why this is occurring. But it does seem to have started with this latest update. Or it is possible that Twilio changed something in their rules/logic around the same time. Again, not sure yet.

This morning I helped a customer who has multiple SIP trunk providers. Inbound calls work fine. Outbound calls to Twilio were failing. They have extensions with DIDs (some of the extensions have DIDs from one SIP provider and some have them from Twilio). Their outbound rules routed the calls based upon destination (e.g. international calls to one provider, specific countries to another, etc). Previously, it didn't seem to matter that the extension's DID outbound caller id didn't match a number in Twilio... the calls were still allowed to be made. Now they are being rejected. To fix this problem, I entered a outbound caller id number in the Twilio outbound rule to force it to use a Twilio number. This works fine except that it doesn't allow extensions do use their own DID outbound caller id if there are multiple Twilio numbers.

Is it possible that the Twilio trunk template was changed in the latest release?
 
If you read this tread in detail, I believe this is exactly our problem:



I have not done enough research on the difference between P-Asserted-Identity and Diversion headers to fully understand how these settings affect the Twilio trunk template parameters.

Are there recommended settings for the Twilio trunk > Options > Caller ID Control parameters to enable this to work? The options I see now (v20) are "From: Display Name", "Remote Party ID - Calling Party : Display Name", and "P-Asserted Identity : Display Name".
 
Is there any documentation on how to configure 3cx use of the Diversion header?


Some notes from my research (AI summary):

Twilio has implemented changes that affect the ability to forward calls while preserving the original caller ID, particularly when the original caller ID is not a number owned or verified within the Twilio account. As of October 2025, Twilio is disabling the Transit Caller ID feature on its SIP Trunk product, which means calls forwarded from a FreePBX system (or similar) with an original Caller ID to a number not owned by the Twilio account are being blocked. This change is part of a broader policy to prevent caller ID spoofing and fraud, which Twilio began enforcing more strictly starting around April 12, 2024.

To successfully forward a call while preserving the original caller ID, the system must use a SIP Diversion header that includes a valid Twilio number (either a DID owned by the account or a verified Caller ID). The Diversion header must be properly formatted and include the original caller ID information. For example, in Asterisk-based systems like FreePBX, the configuration may involve adding a line such as SIPAddHeader(Diversion:;privacy=off;reason=unconditional) to the extensions_custom.conf file, but the semicolon must be escaped as \\; because it is a comment character in Asterisk. However, SIPAddHeader only works with chan_sip; for chan_pjsip, a FreePBX subroutine must be used instead.

Additionally, Twilio requires that the From header in the SIP INVITE must contain a valid Twilio number or verified Caller ID, while the P-Asserted-Identity header can contain the original caller ID. If the P-Asserted-Identity header contains a non-Twilio or unverified number, the call will be rejected with error 32204 – CallerID Unverified/Not Owned. Therefore, the system must be configured to ensure that the From field is set to a valid Twilio number, while the Diversion header carries the original caller ID information.

For systems like 3CX, the default behavior may not preserve the original caller ID during forwarding, and users have reported that the Diversion header is present but uses the Twilio-owned number instead of the original caller ID. To resolve this, users are advised to implement a more standard SIP call forwarding solution using the Diversion header as defined in RFC 5806, ensuring the header contains a valid Twilio number. This approach allows the original caller ID to be passed through while complying with Twilio’s verification requirements.
 
Hello @loyer

The default Twilio template is configured to not send the originator caller ID on forwarded calls. It is designed to always send the outbound caller of the system (unless the inbound call came to a different trunk) as Twilio never really supported CNS.
The diversion header cannot be altered in 3CX as it's functionality is hardcoded.
Please proceed with opening a ticket so we can look at the configuration and see what might be the issue.
 
Hi there

I'm a little confused on this release since it is mentionning "7".
Is this already "Update 7 Final" and also includes the mentionned fixes?
Or is ist just a hotfix with the same version number?
Unfortunately the release note does not state this.
Currently running 20.0.6.724

Thanks!
 
Hello @loyer

The default Twilio template is configured to not send the originator caller ID on forwarded calls. It is designed to always send the outbound caller of the system (unless the inbound call came to a different trunk) as Twilio never really supported CNS.
The diversion header cannot be altered in 3CX as it's functionality is hardcoded.
Please proceed with opening a ticket so we can look at the configuration and see what might be the issue.

Hi Yiannis, I have created Ticket #2245932
Thank you for your help.
 
Hi there

I'm a little confused on this release since it is mentionning "7".
Is this already "Update 7 Final" and also includes the mentionned fixes?
Or is ist just a hotfix with the same version number?
Unfortunately the release note does not state this.
Currently running 20.0.6.724

Thanks!


Hi Aurupper,

This update was a hotfix. It should show on your dashboard:
Version 20.0 Update 7 (Build 1060 Release)

The full version number is of this update is: 20.0.7.1060
 
  • Like
Reactions: KyriacosS_3CX
To recap my issue, I believe it didn't have anything to do with this update. Sorry for filling up the forum thread with unrelated posts.
Twilio started enforcing outbound caller id number matching on 10/20/2025 which is about the same time that this update was released. My issue was related to that and that we had a custom Twilio trunk template which forwarded the original caller's number. If anyone has an issue with outbound forwarded calls to Twilio, try and create a new Twilio trunk using the standard template and update your outbound rules to use that new template.

Thank you 3CX for your help.
 
  • Like
Reactions: KyriacosS_3CX

Forum statistics

Threads
111,990
Messages
590,165
Members
164,929
Latest member
Cloudstar