Problems with DTMF Pound Key (#)

572 views
Skip to first unread message

Ando Bagando

unread,
Dec 21, 2014, 2:49:22 PM12/21/14
to sip...@googlegroups.com
Hi, I am testing DTMF with sip.js.

It works good for all keys except Pound (#).
I am not sure if error is on sip.js side but I asume so as Asterisk normaly handles DTMF just fine.

JS / HTML:

<div id="dtmfcontainer" class="dtmfcontainer">
<button class="dtmf" id="dtmf1">1</button>
<button class="dtmf" id="dtmf2">2</button>
<button class="dtmf" id="dtmf3">3</button>
<br>
<button class="dtmf" id="dtmf4">4</button>
<button class="dtmf" id="dtmf5">5</button>
<button class="dtmf" id="dtmf6">6</button>
<br>
<button class="dtmf" id="dtmf7">7</button>
<button class="dtmf" id="dtmf8">8</button>
<button class="dtmf" id="dtmf9">9</button>
<br>
<button class="dtmf" id="dtmf0">0</button>
<button class="dtmf" id="dtmfs">*</button>
<button class="dtmf" id="dtmfh">#</button>
</div>

document.getElementById('dtmf1').addEventListener("click", function() { session.dtmf("1");}, false);
document.getElementById('dtmf2').addEventListener("click", function() { session.dtmf("2");}, false);
document.getElementById('dtmf3').addEventListener("click", function() { session.dtmf("3");}, false);
document.getElementById('dtmf4').addEventListener("click", function() { session.dtmf("4");}, false);
document.getElementById('dtmf5').addEventListener("click", function() { session.dtmf("5");}, false);
document.getElementById('dtmf6').addEventListener("click", function() { session.dtmf("6");}, false);
document.getElementById('dtmf7').addEventListener("click", function() { session.dtmf("7");}, false);
document.getElementById('dtmf8').addEventListener("click", function() { session.dtmf("8");}, false);
document.getElementById('dtmf9').addEventListener("click", function() { session.dtmf("9");}, false);
document.getElementById('dtmf0').addEventListener("click", function() { session.dtmf("0");}, false);
document.getElementById('dtmfs').addEventListener("click", function() { session.dtmf("*");}, false);
document.getElementById('dtmfh').addEventListener("click", function() { session.dtmf("#");}, false);


Asterisk Dialplan:
exten => dtmf,1,Answer()
exten => dtmf,2,Wait(2)
exten => dtmf,3,Playback(please-enter-the)
exten => dtmf,4,Playback(digits)
exten => dtmf,5,Read(digito,,1)
exten => dtmf,n,SayDigits(${digito})
exten => dtmf,n,GoTo(5)
exten => dtmf,n,Hangup()

Asterisk failing with Pound key:
    -- Executing [dtmf@default:5] Read("SIP/3333-00000001", "digito,,1") in new stack
    -- Accepting a maximum of 1 digits.
    -- User entered nothing.
    -- Executing [dtmf@default:6] SayDigits("SIP/3333-00000000", "") in new stack
    -- Executing [dtmf@default:7] Goto("SIP/3333-00000000", "5") in new stack


Asterisk working just fine with other keys:
-- Executing [dtmf@default:5] Read("SIP/3333-00000000", "digito,,1") in new stack
    -- Accepting a maximum of 1 digits.
    -- User entered '7'
    -- Executing [dtmf@default:6] SayDigits("SIP/3333-00000000", "7") in new stack
    -- <SIP/3333-00000000> Playing 'digits/7.gsm' (language 'en')
    -- Executing [dtmf@default:7] Goto("SIP/3333-00000000", "5") in new stack
    -- Goto (default,dtmf,5)
  


Will Mitchell

unread,
Dec 22, 2014, 9:33:42 AM12/22/14
to sip...@googlegroups.com
This happens because of how Asterisk (and FreeSWITCH as well) treat the pound/hash/octothorpe character.  When they receive a '#', they treat it as an end-of-string marker.  This lets them avoid longer pauses to make sure you are done entering digits.  So, just a single '#' is parsed as "0 characters, followed by a pound."

I'm not sure that there is a way to change this on the Asterisk side.  I believe SIP.js sends the DTMF accurately as defined in your JavaScript snippet.

-Will
Reply all
Reply to author
Forward
0 new messages