Professional Documents
Culture Documents
Troubleshooting DTMF
By Avinash Sridhar || Kaustubh Inamdar CSE TAC
INDEX
1) Isolating the Issue with DTMF
2) OOB NTE Inband DTMF Issues
I.
INTRODUCTION
II.
DTMF ANALYSIS FROM CUCM TRACES
III.
DTMF TO IVR SYSTEMS LIKE UCCX, UNITY
3) SIP DTMF What to look for ?
4) H323 What to look for ?
5) IP-IP / IP-Analog Gateway DTMF Issues
I.
IP-IP Gateway
II.
IP Analog Gateway
III.
Analyzing in-band DTMF using packet captures
6) MGCP
7) How DTMF can break calls
Check dtmf-relay mechanism on both the voip legs always for every device.
If there is In-Band NTE to Out of Band DTMF (vice versa) conversion happening on CUCM, ensure
MTP Allocation happens without any failures. Most cases, we see Out Of Band to RFC2833 DTMF
Conversion failing due to CUCM failing to allocate MTP correctly. Fixing the MTP can resolve
most DTMF issues.
Check SIP / H.323 Signalling on both legs always to verify which DTMF mechanisms are being
used.
Jotting below the common DTMF mechanisms for SIP, H.323, MGCP respectively :
S
I
H245 Signal ( Similar to below, but adds an extra duration field in the H245 message )
H245 Alphanumeric
INTRODUCTION
As discussed previously, OOB <-> Inband NTE conversion requires a MTP. DTMF relay by NTE mechanism
is common with SIP Signalling.
C
If the endpoint is a phone, verify the DTMF mechanisms supported by the phone. For eg. most
IP phones support RFC2833 and SCCP Out Of Band DTMF, the 7936 however supports only OOB
DTMF.
In the case of SIP Trunk, always verify the configured DTMF Method / DTMF Signalling
Method on SIP Trunk Configuration page :
Verify the default payload type used for telephony-event under the SIP Profile ( for trunk ), we
can use an alternate value too if needed :
http://www.cisco.com/en/US/docs/voice_ip_comm/cucm/srnd/8x/media.html#wp1055839
http://www.cisco.com/en/US/docs/voice_ip_comm/cucm/srnd/8x/media.html#wp1046314
*It is important to note that DTMF can break calls too by unnecessary allocating MTPs if there is a
mismatch in the DTMF capabilityies between endpoints. We will discuss that in later part of document.
II.
H.323 :
Check the H245 userInfoRequest message that goes out / comes in. CUCM by default uses H.245 Signal
for outbound DTMF signaling, eg.
15:22:54.492 |
H245ASN - TtPid=(7413) -Outgoing #66273 -value MultimediaSystemControlMessage ::= indication :
userInput : signal :
{
signalType "5",
duration 100
}
|*^*^*
If we were to use alphanumeric mode, we wouldnt see the duration field in the above message and
the userInput would be alphanumeric .
If MTP is getting allocated due to DTMF, look for the following line that is generally printed by
MediaManager:
20:02:17.442 |DET-MediaManager-(111)::isMTPNeededForMismatchOrConfig,
MTPNeededDueToDTMFCapMismatch(2833/OOB) mtpinsertionReason=1
dtmfMTPSide=2|1,100,63,1.26950^10.106.114.80^*
If we are facing trouble with MTP Allocation, the follow links are very helpful :
https://techzone.cisco.com/t5/Media-Resources/Understanding-AllocateMtpResourceErr/ta-p/135106
https://techzone.cisco.com/t5/General/MTPNeededForDTMF-Enum-Values-in-SDI/ta-p/65620
https://techzone.cisco.com/t5/General/Understanding-DTMF-negotiation-from-SDI-CCM-traces/tap/37759
https://techzone.cisco.com/t5/Media-Resources/Media-Resource-Manager-FAQs/ta-p/53520
Digit going OOB SIP Trunk RFC2833 : In this case, we will see the digit going as a ccUserInfoReq to
SIPCdpc, following which it will get passed on to SIPInterface as SIPOutgoingDTMFTone. Since MTP is
involved in this call, this signal is then passed from SIP Layer to the MediaTerminationPointControl as
MXOutgoingDTMFTone. Eg.
001512705 |2012/10/21 22:19:21.477 |100 |SdlSig |CcUserInfoReq
|active
|SIPCdpc(1,100,74,113)
|SIPD(1,100,73,14)
|1,100,13,1622.731^10.106.117.57^SEP0004F2E3889A |[R:N-H:0,N:0,L:0,V:0,Z:0,D:0] CI=24374275
S
I
In the case of UCCX, since a CTI Routepoint is involved, the DTMF will always go Out Of Band to the
system. So if incoming leg is using RFC2833, MTP is mandatory to get DTMF working. The below
documentation explains this :
http://www.cisco.com/en/US/docs/voice_ip_comm/cucm/srnd/8x/media.html#wp1233309
You may also refer Abhirams Techzone document that explains this pretty neatly :
https://techzone.cisco.com/t5/Call-Routing-and-Agent-Control/How-DTMF-works-in-UCCX-and-whendoes-an-MTP-have-to-be-used/ta-p/156316
In the case of Unity and Unity Connection, please refer the below links :
http://www.cisco.com/en/US/docs/voice_ip_comm/unity/tsp/release/notes/tsp811rn.html
http://www.cisco.com/en/US/docs/voice_ip_comm/connection/8x/gui_reference/guide/8xcucgrg120.h
tml
Identify types of DTMF mechanism supported on the SIP leg, there can be 2-3 types of DTMF
methods supported by an endpoint too.
CUCM will choose the DTMF on the SIP Trunk based on configured DTMF Signalling Method as
mentioned earlier.
Received:
NOTIFY sip:10.75.63.5:5060;transport=tcp SIP/2.0
Date: Tue, 20 Oct 2009 12:58:44 GMT
From: <sip:1034@10.75.63.75>;tag=b600ae1f-74c0-44e4-9eff-fdfb36b7d7b7-24549383
Event: kpml
Content-Length: 336
User-Agent: Cisco-CUCM6.1
To: <sip:119@10.75.63.5>;tag=A7EF92FC-1DB1
Contact: <sip:1034@10.75.63.75:5060;transport=tcp>
Content-Type: application/kpml-response+xml
// INDICATING KPML
Call-ID: 489b4580-add1b400-9-4b3f4b0a@10.75.63.75
Subscription-State: active;expires=7198
Via: SIP/2.0/TCP 10.75.63.75:5060;branch=z9hG4bK323a9c70a1
CSeq: 103 NOTIFY
Max-Forwards: 70
<?xml version="1.0" encoding="UTF-8" ?>
<kpml-response xmlns="urn:ietf:params:xml:ns:kpml-response"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:ietf:params:xml:ns:kpmlresponse kpml-response.xsd" code="200" digits="5" forced_flush="false" suppressed="false" tag="dtmf"
text="Success" version="1.0"/>
Sent:
SIP/2.0 200 OK
Via: SIP/2.0/TCP 10.75.63.75:5060;branch=z9hG4bK323a9c70a1
From: <sip:1034@10.75.63.75>;tag=b600ae1f-74c0-44e4-9eff-fdfb36b7d7b7-24549383
To: <sip:119@10.75.63.5>;tag=A7EF92FC-1DB1
Date: Wed, 20 Oct 2010 10:22:34 GMT
Call-ID: 489b4580-add1b400-9-4b3f4b0a@10.75.63.75
CSeq: 103 NOTIFY
2) SIP-NOTIFY ( OOB ) :
An eg.
Received:
NOTIFY sip:10.75.63.5:5060 SIP/2.0
Date: Tue, 20 Oct 2009 13:00:43 GMT
From: <sip:1034@10.75.63.75>;tag=b600ae1f-74c0-44e4-9eff-fdfb36b7d7b7-24549385
Event: telephone-event
Content-Length: 4
User-Agent: Cisco-CUCM6.1
To: <sip:119@10.75.63.5>;tag=A7F15BC8-E1B
Contact: <sip:10.75.63.75:5060>
Content-Type: audio/telephone-event
// INDICATING TELEPHONY EVENT
Call-ID: 8e580e00-add1b475-a-4b3f4b0a@10.75.63.75
Subscription-State: active
Via: SIP/2.0/UDP 10.75.63.75:5060;branch=z9hG4bK38336558a4
CSeq: 102 NOTIFY
Max-Forwards: 70
*Oct 20 10:24:33.093: //-1/xxxxxxxxxxxx/SIP/Msg/sipDisplayBinaryData:
Receiving: Binary Message Body
*Oct 20 10:24:33.093: Content-Type: audio/telephone-event
05 00 01 F4
*Oct 20 10:24:33.093: //-1/xxxxxxxxxxxx/SIP/Msg/ccsipDisplayMsg:
Sent:
SIP/2.0 200 OK
Via: SIP/2.0/UDP 10.75.63.75:5060;branch=z9hG4bK38336558a4
In-Band
Commonly used payload is 101. This can be altered in CUCM using SIP Profiles or in CUBE by
changing payload type under dial-peers.
Under SDP, look for the payload 101 that generally comes and check if it corresponds to telephoneevent. Eg.
SIP/2.0 183 Session Progress
Via: SIP/2.0/TCP 10.106.117.2:5060;branch=z9hG4bK967f5d700c
From: <sip:3011@10.106.117.2>;tag=26893~d3934981-803b-459e-8641-e9ed9faae81e-24374275
To: <sip:999@10.106.114.80>;tag=71902~44c5f4f6-28dc-48ec-9e85-9428f04621ed-30501601
Date: Mon, 22 Oct 2012 05:19:01 GMT
Call-ID: fbcf5600-841d745-6f-2756a0a@10.106.117.2
In the case of raw in-band DTMF, the payload will not be mentioned and the DTMF will be sent within
the voice stream. Generally, the DTMF tone must be of duration 100-250 ms, else Telco might not
recognize it.
*Refer previous section on what to look for traces in SIP Stack*
Capability receiveRTPAudioTelephonyEventCapability :
{
dynamicRTPPayloadType 101
audioTelephoneEvent "0-16
}
Here is an eg. of DTMF using H245 Signal :
10/20/2009 20:00:38.320 CCM|H245ASN - TtPid=(1,100,14,1) -Incoming -value
MultimediaSystemControlMessage ::= indication : userInput : signal :
{
signalType "2",
duration 4000,
rtp
{
timestamp 3245215934,
logicalChannelNumber 1
}
Below is an eg. for DTMF using Alphanumeric mode :
10/20/2009 20:15:52.066 CCM|H245ASN - TtPid=(1,100,14,4) -Incoming -value
MultimediaSystemControlMessage ::= indication : userInput : alphanumeric : "4"
Troubleshoot checkpoints :
Check DTMF Relay configured at every endpoint and verify at which point the DTMF breaks or
tones dont pass through.
Again, take care of in-band to OOB conversion and use previous chapter to check if MTP gets
selected when needed.
OUT LEG
NOTIFY
NOTIFY
RFC2833
RFC2833
NOTIFY
RFC2833
Voice inband
RFC2833
IN LEG
OUT LEG
KPML
KPML
H245alphanumeric
H245alphanumeric
H245-signal
H245-signal
RFC2833
RFC2833
OUT LEG
H245alphanumeric
RFC2833
H245alphanumeric
NOTIFY
H245-signal
RFC2833
H245-signal
NOTIFY
Voice inband
RFC2833
RFC2833
NOTIFY
H245alphanumeric
RFC2833
H245-signal
RFC2833
RFC2833
RFC2833
Voice inband
RFC2833
H245-alpha
KPML
H245-Signal
KPML
Key Debugs :
Ccapi layer :
H245 :
Dspapi inout :
*Oct 20 10:47:36.205:
s=VoIP d=DSP payload 0x65 ssrc 0x68E sequence 0xD59 timestamp 0x442A0
*Oct 20 10:47:36.205: <<<Rcv> Pt:101 Evt:8
Pkt:08 03 20
*Oct 20 11:34:11.377:
s=DSP d=VoIP payload 0x65 ssrc 0x1C16 sequence 0x6EEB timestamp 0x8448C481
*Oct 20 11:34:11.377:
Pt:101 Evt:8
Pkt:03 00 00 <Snd>>>
The output from "debug voip rtp session named-event" will show the digit sent in 7 packets:
Feb 06 10:03:00.910:
Feb 06 10:03:00.910:
Feb 06 10:03:00.910:
Feb 06 10:03:00.910:
Feb 06 10:03:00.910:
Feb 06 10:03:00.910:
Feb 06 10:03:00.910:
Pt:101
Pt:101
Pt:101
Pt:101
Pt:101
Pt:101
Pt:101
Evt:5
Evt:5
Evt:5
Evt:5
Evt:5
Evt:5
Evt:5
Pkt:04 00 00
Pkt:04 00 00
Pkt:04 00 00
Pkt:04 01 90
Pkt:84 03 20
Pkt:84 03 20
Pkt:84 03 20
<Snd>>>
<Snd>>>
<Snd>>>
<Snd>>>
<Snd>>>
<Snd>>>
<Snd>>>
The first packet says that it is the start of a new NTE digit because it does not have the endbit
set.
The second and third packets are repeats of the first packet for redundancy.
The fourth packet is a refresh packet with a duration of 50ms (00190 = 400 samples * 1sec /
8000 samples). The number of refresh packets can vary depending on the amount of time the
digit is pressed.
The fifth packet is the endbit packet (84) with a duration of 100ms (00320 = 800 samples * 1sec
/ 8000 samples).
The sixth and seventh packets are redundant packets for packet five.
The following command on gateway too helps determine the DTMF negotiated
Avi#show call active voice | in Dtmf
tx_DtmfRelay=inband-voice
Take following into consideration too :
In the cases of RFC2833 OOB DTMF, the dtmf tones are sent twice. To avoid this we configure
digit-drop along with dtmf-relay rtp-nte digit-drop and ensure the dtmf tones are not sent
twic e ( out of band and in-band ) . The in-band digit gets dropped using this command.
For Voice In-band to RFC2833, take care of transcoder allocation. You can use the following
debugs to troubleshoot transcoder allocation :
o Show sccp connections
o Show sccp connection detail
o Debug sccp all
o Debug ephone detail
Ensure the inband voice leg is always configured for g711 codec, however for RTP-NTE this
restriction doesnt apply.
SPI Leg
SPI Leg
Notes
G711a/u + dtmf
inband
G711a/u + rtpnte
G711a/u + dtmf
inband
G729r8 + rtpnte
G711a/u + dtmf
inband
G726 + rtp-nte
G729r8 + dtmf
inband
G729r8 + rtpnte
Not Supported;
inband dtmf is
supported only for
g711
2) IP Analog Gateway :
Troubleshooting Checkpoints :
Use PCM Captures on voice-port / dsp to check if corresponding dtmf tones are heard or sent,
you may use the following guide for taking / analyzing PCM Captures :
https://techzone.cisco.com/t5/Analog-TDM-Gateway/Taking-PCM-Captures-on-Voice-Gateways/tap/46190
Ensure dtmf tones are passed correctly from analog voip, voip analog side correctly. Use
the voip methods described in previous section to troubleshoot.
On gateway we can use the following debug to verify digit being passed successfully :
o Debug voip vtsp all
o Debug vpm signal
After taking a packet capture, open the capture file using Wireshark.
Navigate to
.
Click on
.
Two streams will be displayed, select the direction of stream that we need to analyze, either
voip to Service Provider or vice versa.
Select Analyze Click Player.
Decode the stream and check if we can hear the DTMF Tones.
T
We can also save the audio file by clicking on Save Payload in the RTP Stream Analysis window.
Select file format as .au or raw inband.
MGCP
In most scenarios, customers use OOB mechanism for MGCP DTMF, which is configured as mgcp dtmfrelay out-of-band on gateway. The DTMF digits are relayed across as RQNT from call-agent to gateway .
Here is an eg. :
*May 5 11:42:17.480: MGCP Packet received from 10.10.10.10:2427--->
RQNT 858 S1/DS1-0/31@HQ-1E1-2811 MGCP 0.1
X: 1f
R: D/[0-9ABCD*#]
S: D/8
Q: process,loop
<--The S package indicates the signal going across, in this case it would be 8. R package indicates the
requested events for DTMF : 0 9, A , B, C, D, *, #.
The D that we see is the digit map and is the same for digit collection or DTMF.
In case the DTMF is detected by gateway, it signals the call agent by sending a NTFY message as follows :
01/11/2013 16:11:34.927 CCM|MGCPHandler received msg from: 10.3.38.2
NTFY 782043944 S0/SU0/DS1-0/2@usirvn-rtrvoip-1D.aaitg.com MGCP 0.1
N: ca@10.3.24.7:2427
X: 2
O: D/3
Troubleshooting checkpoints :
Run debug mgcp packets to check if digit goes across to other end.
There is a possibility that DTMF goes via RFC2833 too, verify if mgcp dtmf-relay nse is
configured on gateway side.
PCM Captures on voice ports help isolating DTMF issues on voice ports in case there are issues
with Service Provider.
Very rarely we see circumstances where customers deploy DTMF relay as Cisco that uses payload 121.
Prefer avoiding this DTMF mechanism during troubleshooting and would straight away suggest to test
using OOB or RFC2833 mechanism for further isolation.
We might face unnecessary MTP allocation due to a DTMF mismatch on CUCM, if MTP allocation
fails there is a possibility the call might disconnect. As an alternative we can set the Fail call if
MTP Allocation fails to False to ensure call still progresses after MTP allocation failure.
Normals calls might work, but there might be an issue at times when a conference is initiated.
The conference bridge generally supports only OOB DTMF and hence if the incoming leg uses
RFC2833, MTP will be allocated for every leg with the CFB.
Unecessary allocation of transcoder on CUBE due to DTMF can create wastage of resources and
break calls too.
Also take into consideration calls that go to CTI Route Points as they negotiate only OOB DTMF.
If the incoming leg can support OOB DTMF, always configure OOB else we will bring MTP
resources into picture.