I have worked on many Lync Enterprise Voice Implementations that utilize Internet Trunking Service Providers or ITSP for short. When working with any Microsoft Lync voice integrated product or service it is important to work with vendors that have gone through the certification process via the Open Interoperability Program. You can find a list of certified providers here.
A common issue I have run into is calls dropping when placed on hold or in call park orbits. The reason is linked to the the default Lync Trunk Configuration that the SIP Trunk you configure uses.
Issue
It appears that when a call is on hold or in a call park situation the default trunk settings don’t allow for Real Time Control Protocol (RTCP) Packets to be processed correctly by the ITSP provider. When RTCP packets are not handled correctly, you generally get undesirable results and dropped calls after a specific lengths of time is no exception.
Lync Default Settings
When you setup a new Trunk or use the Global trunk the default settings the default settings for a Lync Trunk are as follows:
EnableSessionTimer = False
RTCPActiveCalls = True
RTCPCallsOnHold = True
You can look at your Trunk Configuration Settings by opening a Lync Server Management Shell and typing Get-CSTrunkConfiguration.
PS C:\Users\admin1.ENABLEUC> Get-CsTrunkConfiguration
Identity : Global
OutboundTranslationRulesList : {}
SipResponseCodeTranslationRulesList : {}
OutboundCallingNumberTranslationRulesList : {}
PstnUsages : {}
Description :
ConcentratedTopology : True
EnableBypass : False
EnableMobileTrunkSupport : False
EnableReferSupport : True
EnableSessionTimer : True
EnableSignalBoost : False
MaxEarlyDialogs : 20
RemovePlusFromUri : False
RTCPActiveCalls : False
RTCPCallsOnHold : False
SRTPMode : Required
EnablePIDFLOSupport : False
EnableRTPLatching : False
EnableOnlineVoice : False
ForwardCallHistory : False
Enable3pccRefer : False
ForwardPAI : False
EnableFastFailoverTimer : True
EnableLocationRestriction : False
NetworkSiteID :
Corrective Measure
In the testing I have done I found I needed to set the following options in order to allow calls to be placed on hold without being dropped.
EnableSessionTimer = True
RTCPActiveCalls = False
RTCPCallsOnHold = False
You can do this by using the Set-CsTrunkConfiguration cmdlet
Set-CsTrunkConfiguration -EnableSessionTimer $True -RTCPActiveCalls $false -RTCPCallsOnHold $false
From the technet definition of the above parameters it appears the enabling of the SessionTimer parameter is required likely because the ITSP is not providing this during the call. The RTCPActiveCalls and RTCPCallsOnHold setting to false disables the Mediation Server from being able to terminate a call if it does not receive RTCP packets for a period exceeding 30 seconds. These settings needed to be disabled or calls would drop after 30 seconds in my testing.
If anyone else has any other experiences or behaviors with dropped calls after a certain amount of time using an ITSP I would love to hear about them.