Troubleshooting DTMF in MGCP and PRI
Troubleshooting DTMF in MGCP and PRI
WHAT IS DTMF?
DTMF (Dual Tone Multiple Frequency ) is used to send to signals for button presses on
telephones. The data is typically sent over voice channels and so in order to distinguish from
human voice, when you hit a button the phone generates two tones of different frequencies -
one lower frequency and one high frequency.
DTMF keypad is placed out on 4 cross 4 matrices, in which each row represents low frequency,
each column represents high frequency, with DTMF, each key passed on a phone generates two
tones of the specific frequencies. So that a voice can't imitate the tones, one tone is generated
from a high-frequency group of tones and the other from a low frequency group.
Before we discuss the types of DTMF-Relay methods, which can be used over MGCP, following
are some key-points that are to be kept in mind:
1. MGCP Gateway pulls XML configuration from the Cisco Unified Communications
Manager and configures itself after parsing the XML file downloaded into IOS CLIs.
ccm-manager config
If the above commands are not present, the MGCP Gateway doesn’t download any
configuration file and operates based on the configuration manually put into IOS by the user.
3. If the system has been designed for the MGCP Gateway to download the configuration
file, we configure the DTMF-Relay method on the CUCM Gateway Configuration page
(default is ‘Current GW Config’).
4. If the system has been designed for the MGCP Gateway not to download the
configuration files, we configure the DTMF-Relay method on IOS CLI:
Router(config)#mgcp dtmf-relay voip codec all mode ?
This point is also applicable if we have selected “Current GW Config” in the dropdown for “Type
of DTMF Relay” on the CUCM Gateway Configuration page (Point 3).
Real-time Transport Protocol (RTP) digit events are encoded using a proprietary format similar to
Frame Relay as described in the FRF.11 specification. The events are transmitted in the same
RTP stream as nondigit voice samples, using payload type 121. This is Cisco proprietary.
015223: Jan 15 12:14:33.948: s=DSP d=VoIP payload 0x79 ssrc 0x1E74 sequence 0x4B5B
timestamp 0xAE738050
015252: Jan 15 12:14:33.964: s=DSP d=VoIP payload 0x79 ssrc 0x1E74 sequence 0x4B5C
timestamp 0xAE7380F0
015227: Jan 15 12:14:33.984: s=DSP d=VoIP payload 0x79 ssrc 0x1E74 sequence 0x4B5D
timestamp 0xAE738190
015229: Jan 15 12:14:34.008: s=DSP d=VoIP payload 0x79 ssrc 0x1E74 sequence 0x4B5E
timestamp 0xAE738230
015231: Jan 15 12:14:34.024: s=DSP d=VoIP payload 0x79 ssrc 0x1E74 sequence 0x4B5F
timestamp 0xAE7382D0
014905: Jan 15 11:53:56.324: s=DSP d=VoIP payload 0x63 ssrc 0x1E88 sequence 0x52B1
timestamp 0xB1A870B1
014907: Jan 15 11:53:56.372: s=DSP d=VoIP payload 0x63 ssrc 0x1E88 sequence 0x52D6
timestamp 0xB1A870B1
014909: Jan 15 11:53:56.428: s=DSP d=VoIP payload 0x63 ssrc 0x1E88 sequence 0x52D7
timestamp 0xB1A870B1
014911: Jan 15 11:53:56.476: s=DSP d=VoIP payload 0x63 ssrc 0x1E88 sequence 0x52D8
timestamp 0xB1A870B1
014917: Jan 15 11:53:56.524: s=DSP d=VoIP payload 0x63 ssrc 0x1E88 sequence 0x52D9
timestamp 0xB1A870B1
Identical to the nte-gw keyword behaviour except that the call agent's local connection options
a: line is used to enable or disable DTMF relay.
CA will negotiate DTMF relay capabilities on behalf of the gateways (SDP messages are sent to
CA). This is required in a setup where the other GW/Endpoint is non-MGCP. After negotiation,
CA instructs the MGCP gateway to use the negotiated PT values.
003283: Jan 14 18:15:04.909: s=DSP d=VoIP payload 0x65 ssrc 0x1ED4 sequence 0xA26
timestamp 0xB1D350B0
003285: Jan 14 18:15:04.957: s=DSP d=VoIP payload 0x65 ssrc 0x1ED4 sequence 0xA27
timestamp 0xB1D350B0
003287: Jan 14 18:15:05.009: s=DSP d=VoIP payload 0x65 ssrc 0x1ED4 sequence 0xA28
timestamp 0xB1D350B0
003288: Jan 14 18:15:05.009: Pt:101 Evt:1 Pkt:03 03 20 <Snd>>>
003289: Jan 14 18:15:05.057: s=DSP d=VoIP payload 0x65 ssrc 0x1ED4 sequence 0xA29
timestamp 0xB1D350B0
003295: Jan 14 18:15:05.109: s=DSP d=VoIP payload 0x65 ssrc 0x1ED4 sequence 0xA2A
timestamp 0xB1D350B0
003297: Jan 14 18:15:05.109: s=DSP d=VoIP payload 0x65 ssrc 0x1ED4 sequence 0xA2B
timestamp 0xB1D350B0
003299: Jan 14 18:15:05.117: s=DSP d=VoIP payload 0x65 ssrc 0x1ED4 sequence 0xM4B
timestamp 0xB1D350B0
RTP digit events are encoded using the named telephony event (NTE) format specified in RFC
2833, Section 3.0, and are transmitted in the same RTP stream as nondigit voice samples. The
payload type is negotiated by the gateways before use. The configured value for payload type is
presented as the preferred choice at the beginning of the negotiation.
011793: Jan 15 10:30:45.909: s=DSP d=VoIP payload 0x65 ssrc 0x1ED4 sequence 0xA26
timestamp 0xB1D350B0
011795: Jan 15 10:30:45.957: s=DSP d=VoIP payload 0x65 ssrc 0x1ED4 sequence 0xA27
timestamp 0xB1D350B0
011797: Jan 15 10:30:45.009: s=DSP d=VoIP payload 0x65 ssrc 0x1ED4 sequence 0xA28
timestamp 0xB1D350B0
011799: Jan 15 10:30:45.057: s=DSP d=VoIP payload 0x65 ssrc 0x1ED4 sequence 0xA29
timestamp 0xB1D350B0
011801: Jan 15 10:30:45.109: s=DSP d=VoIP payload 0x65 ssrc 0x1ED4 sequence 0xA2A
timestamp 0xB1D350B0
In OOB method, DTMF events will be signalled to CUCM using MGCP protocol messages. To be
more specific MGCP NTFY messages will be sent to CA. After any digit is received by MGCP GW
and signalled to CUCM, CUCM will send RQNT message to the GW. This message will ask the
GW to monitor the events of DTMF Digits, Fax-Relay (FXR), and T.38 Relay.
N: [email protected]:2427
X: 1
O: D/1
<---
200 197096098
<---
X: 1
R: D/[0-9ABCD*#], FXR/t38
Q: process,loop
<---
200 154 OK
<---
X: 1
R: D/[0-9ABCD*#], FXR/t38
S: D/9
Q: process,loop
<---
200 155 OK
<---
“At VoIP call leg, Packet Captures can also be used to troubleshoot DTMF issues.”
Important note: Telco does not send the DTMF digits but tone for every digit pressed by caller. It
is up to the VG to recognize the tones and convert the tones to appropriate digits.
Calling party ---- PSTN ---- ISDN PRI ---- Cisco VoiCE Gateway ---- CUCM----called party
Please go through my document to learn how to collect and read ISDN debugs:
https://community.cisco.com/t5/collaboration-voice-and-video/pri-troubleshooting/ta-
p/3959544
What to look for in debugs? (Below output shows when DTMF is working fine and digit is
received successfully)
967784: Jan 27 04:40:42: ISDN Se0/0/0:23 Q931: RX <- CONNECT_ACK pd = 8 callref = 0x0302
For failed DTMF call, capture the above debugs and search for “cc_api_call_digit_begin”
and “cc_api_call_digit_end” events but you will notice there are no such events generated
that means DTMF is not being received.
If you still have doubts on DTMF digits being received, please collect PCM captures on ISDN.
Please go through my document to learn how to collect PCM captures.
https://community.cisco.com/t5/collaboration-voice-and-video/fxo-disconnect-issue-how-to-
configure-custom-cptone/ta-p/3926564
After collecting PCM captures, analyze the tones in Audacity tool to find the frequency of
received tone on the VG.
2. Analyze the PCM using pcet.cisco.com and find the SIN, RIN and SOUT tones.
4. Extract the SIN tone from PCM and use Audacity tool to open it.
5. You will see something like the below snippet. Rectangular bar represents the tone
pressed during the call.
6. To analyze the frequency of the tone received, place the cursor on the top of rectangular bar.
7. Go to Analyze >>> Plot Spectrum, you will find the below output.
8. Place the pointer on top of the higher frequency first and note down the cursor value. Then
place the pointer on top of the lower frequency and note down the cursor value.
9. Now, try to compare the combination of frequency using below table. For an example, if you
find the higher frequency cursor value as 1477 Hz (or near to 1477 Hz) and lower frequency
cursor value as 852 Hz (or near to 852 Hz), then DTMF digit would be “9”.