Telnyx warm transfers failing

We’re getting the error {"status":"Transfer call cannot be completed, the other side is busy.. Please inform the customer that the transfer did not go through and offer to try again or assist them directly."} (log: error: Error transferring call, SIP status code: 486 SIP error category: user_busy Error: twirp error unknown: INVITE failed: sip status: 486: User Busy) with Telnyx numbers when trying to do a warm transfer, we have everything setup correctly, what’s the issue here? (call IDs: call_e68261f49354cd8229e8231b2db, call_ef47842831b8f3be289afd0c39c).

Twilio transfers are working fine

Hey @tech

Thank you for the details. I’ve forwarded them to our team for review.

We’ll get back to you as soon as we have an update.

Best regards

Hey @tech

The number the user is transferring to is busy or their phone provider is rejecting the call; there is no error on your side.

Thank You

That’s not the case, I’ve tried with different numbers on my end and seeing the same results for all of them. Twilio, however, works fine so it looks like Retell treats Telnyx differently?

Hey @tech

Can you share more call IDs with your Agent ID ?

Sure, Agent ID is `agent_ebebd897dd74fe863a23ddcfc6` and more call IDs:

  • call_fbe744cfb009f62cabdfdfa54f8
  • call_307b6b75b6f5c43150835a0c310
  • call_e68261f49354cd8229e8231b2db
  • call_ef47842831b8f3be289afd0c39c
  • call_a05b788105b14f63a236fa52f9f
  • call_7240aa90e9d1619dc6a3282827f
  • call_1c737e824a7d224bccc5337f4ee
  • call_08f1b467de132f5e6951d6351db

I’ve privately DM’d you our exact Telnyx config/setup to help

For more context: We’re trying to use Telnyx instead of Twilio because Telnyx explicitly supports Caller ID override which should allow us to do warm transfers with the original Caller ID

I’d like to follow the resolution of this ticket. We have similar issues.

Hi @tech

We’ll get back to you as soon as we have an update.

Best regards

Hello @tech

This is a custom number, and the errors returned are coming from your provider. From our side, everything is functioning correctly. The issue is that the transferred phone number is rejecting the Telnyx number for some reason (DND, provider is rejecting it …), so you will need to check with Telnyx support for this.

Thank You

@shaw (cc: @mark1 ) we reached out to Telnyx support and here’s what they replied with:

Thanks for your patience. We’ve reviewed the SIP traces for your failed calls and have a clear picture of what’s happening.

The 486 User Busy is being returned by your downstream endpoint (sip.retellai.com (http://sip.retellai.com/)), not by Telnyx. Here’s what the PCAP shows:

• On failed transfers, Telnyx sends the B-leg INVITE to sip.retellai.com (http://sip.retellai.com/) as expected. Retell responds with 180 Ringing, then 486 Rejected (Q.850 cause=17, USER_BUSY). The call never establishes on that leg.
• On successful calls to the same number, the same flow completes normally with 200 OK, and the call connects fine.

There is no inbound concurrent call limit configured on your Telnyx SIP connection that would cause this. The rejection is coming from the Retell side.

Since this works on Twilio but not Telnyx, the most likely explanation is one of the following:

  1. Retell limits concurrent SIP sessions per agent/endpoint. During a warm transfer, the original call leg to Retell is still active when the second INVITE arrives. If Retell doesn’t support two simultaneous sessions to the same agent, it rejects the second one as busy. Twilio may handle this differently at the application layer.

  2. SIP header differences. Twilio and Telnyx may send different headers on the transfer INVITE (e.g., Replaces, Referred-By, P-Asserted-Identity format). Retell could be keying off a header or format that differs between providers.

I’d recommend comparing the raw SIP INVITE from both Twilio and Telnyx for a transfer leg to identify any differences that Retell may be reacting to. Your Retell support team would be best positioned to check why their endpoint is returning 486 when a second session arrives while the first is still active.

Let me know if you need any additional details from the SIP traces.

Does Retell limits concurrent SIP sessions per agent/endpoint? Can you also check if there are SIP header differences that could be causing this?

Appreciate the support. Thanks.

Hey @tech

Can you share the Pcap of the Call with us ?

Thank You

@shaw sure thing - I’ve exported them from Telnyx and uploaded them to the gdrive folder here:

I’ve exported both the inbound and outbound and clearly labelled them _inbound and _outbound_transfer respectively.

Hey @tech

I have shared this with our team to look further

Thank You

Hello @tech

Thanks for providing the PCAP file

After checking them

You can see that the 486 user is busy coming from your provider not coming from us

These are all number owned by me and they are for a fact not busy when I try to test with them - it works fine on Twilio.

I just tried calling again trying to transfer to a different phone number I own but same results (call IDs: call_f36be75b60c77ac1125657f0b19, call_f1142f6a76ea4c0515bbbe39d61) getting error: Error transferring call, SIP status code: 486 SIP error category: user_busy Error: twirp error unknown: INVITE failed: sip status: 486: User Busy

Can you please try calling our Telnyx number yourself (it’s the number ending in 8884 in the call details) and check for yourself?

Cold transfers are working (test call: call_7f9cf572c71f72458480147d0ce) but warm are not.

Ok I setup a minimal warm call transfer test agent (agent ID: agent_d3a0c81833e7da1ad3cb764b39) and just made 2 calls with both Twilio and Telnyx with the exact setup and number to transfer (mine):

  • Twilio (call ID: call_fb6a4e71f75b26e05ac794c868d) - warm transfer SUCCESSFUL
  • Telnyx (call ID: call_18a0c178ffe132d7a4e5dc5272b) - warm transfer FAILED

Both calls were made with the exact same config.

Hopefully this helps you debug it better (compare the pcaps side-by-side).

Let me know if you need anything else.

cc: @shaw

here are the pcap files:

+1 to this thread, having similar issues w/ warm transfer w/ caller id spoofing.

Hello @tech

I just tested it with the Tylnex number, and it worked fine ( You answered the phone).
You had the wrong **Termination URI for Telnyx
**

Thanks for fixing that Omar!

However, the issue with the Caller ID override still persist - we’re seeing the following error when trying to set the warm transfer with the User's Number called ID:

error: Error transferring call, SIP status code: 403 SIP error category: telephony_provider_permission_denied Error: twirp error unknown: unexpected status from INVITE response: sip status: 403: Unverified origination number D51

Telnyx officially supports caller ID override but requires the Diversion header to be set from Retell’s end but you don’t give us the ability to set it. We can only set custom headers with the X prefix. Telnyx’s anti-spoofing firewall strictly looks for the standard SIP Diversion Diversion header on the outbound leg - can you please set that for us or give us the ability to set it? VAPI allows us to do this but we want to use Retell instead

Telnyx Caller ID override docs: https://developers.telnyx.com/docs/voice/sip-trunking/features/external-transfers#validation-requirements

Hello @tech

I’ve made a feature request for it