Fix External Call Transfer in Direct Routing with Microsoft Teams – AudioCodes Mediant SBC with SIP Trunk


In my previous post, i have described what the root cause to make external call transfers and forward fail, in Direct Routing with Teams. In that article, i have explained how to fix call forwarding by setting up manipulation rules in AudioCodes Mediant SBC.

In this post, i’m going to explain how to fix call transfer function. As the same way i fixed the call forwarding, i will use message manipulation here as well. But, i will be using a different SIP header, instead of  Call History.

If you are familiar with Skype for Business or Lync, you would know that they both use REFER to handle call transfers. Teams is exactly the same. It use REFER for call transfers. But unfortunately, most of the SIP Trunk providers does not support this function. So, we either disable REFER in on-premises Skype for Business\Lync servers, or set the SBC to take care of it locally.

But, in Teams environment, you can’t disable REFER. The Trunk configuration does not have any such parameter to alter. So instead, we set the SBC to handle REFER locally. I don’t cover that configuration here. I have already mentioned that in my previous article that explains how to configure Direct Routing with Teams, using AudioCodes SBC.

So to fix Transfer, i use REFER related headers in SBC. Idea is to manipulate the FROM User header, replace with SIP Trunk Pilot DID, if the session referred-by header contains sip.pstnhub.microaoft.com. This way, the rule will only allow to externally transferred calls.capture

After configuring this, the Manipulation Set ID must be assigned to the Outbound Message Manipulation setting of the IP group of the SIP Trunk. capture1

Once this is done, the call transfer to PSTN destinations should work. In my test call below, i’m making a call from +61451xxxxxx, to my DID +61249xxxxxx and transfer to +61131313. Capture2.JPG

As expected, the call get accepted by the SIP Trunk and connected with +61131313.The Source DID of the call was manipulated to the Pilot number of the Trunk.capture3

That fixed the external transfer issue for me.

If you still having issues with PSTN Transfer, check the SYSLOG of a failed calls to identify what could be the root cause. Post in comments if you still have issues with PSTN call transfer setup in Teams (with Direct Routing).

Leave a comment