Martin Pycko
2003-Jul-22 07:45 UTC
[Asterisk-Users] enabling dtmf detection on zap channel?
Use application Background. Martin On 22 Jul 2003, Thilo Salmon wrote:> Hi, > > is there a way to enable dtmf detection on zap channels? I am trying to > pickup, play a ringtone and the dial out. I.e. > > exten => s,1,Wait,1 > exten => s,1,Answer > exten => s,2,Playtones(dial) > exten => s,3,DigitTimeout,5 > exten => s,4,ResponseTimeout,10 > exten => _X,1,StopPlaytones > exten => _X,2,Dial,Zap/g8/BYEXTENSION|10 > > I don't quite recall what I did last, but I remember this used to work. > My current installation of asterisk does not detect dtmf tones as I can > easily verify with debugging turned on. Just to be sure I also dialed in > from different phones, did a fresh checkout of zaptel, libpri and > asterisk and wrote my configuration from scratch. None of that made > asterisk detect dtmf, though. > > Can anybody suggest what to try next? > > Thilo > > > > _______________________________________________ > Asterisk-Users mailing list > Asterisk-Users@lists.digium.com > http://lists.digium.com/mailman/listinfo/asterisk-users >
Thilo Salmon
2003-Jul-22 07:51 UTC
[Asterisk-Users] enabling dtmf detection on zap channel?
Hi, is there a way to enable dtmf detection on zap channels? I am trying to pickup, play a ringtone and the dial out. I.e. exten => s,1,Wait,1 exten => s,1,Answer exten => s,2,Playtones(dial) exten => s,3,DigitTimeout,5 exten => s,4,ResponseTimeout,10 exten => _X,1,StopPlaytones exten => _X,2,Dial,Zap/g8/BYEXTENSION|10 I don't quite recall what I did last, but I remember this used to work. My current installation of asterisk does not detect dtmf tones as I can easily verify with debugging turned on. Just to be sure I also dialed in from different phones, did a fresh checkout of zaptel, libpri and asterisk and wrote my configuration from scratch. None of that made asterisk detect dtmf, though. Can anybody suggest what to try next? Thilo
The Traveller
2003-Jul-23 11:50 UTC
[Asterisk-Users] enabling dtmf detection on zap channel?
Yo Thilo, On Tue, Jul 22, 2003 at 16:51:04 +0200, Thilo Salmon wrote:> Hi, > > is there a way to enable dtmf detection on zap channels? I am trying to > pickup, play a ringtone and the dial out. I.e. > > exten => s,1,Wait,1 > exten => s,1,Answer > exten => s,2,Playtones(dial) > exten => s,3,DigitTimeout,5 > exten => s,4,ResponseTimeout,10 > exten => _X,1,StopPlaytones > exten => _X,2,Dial,Zap/g8/BYEXTENSION|10 > > I don't quite recall what I did last, but I remember this used to work. > My current installation of asterisk does not detect dtmf tones as I can > easily verify with debugging turned on. Just to be sure I also dialed in > from different phones, did a fresh checkout of zaptel, libpri and > asterisk and wrote my configuration from scratch. None of that made > asterisk detect dtmf, though. > > Can anybody suggest what to try next?I encountered the same problem, and first solved it by using "BackGround" to play a recording of a dial-tone, as "Playtones" doesn't do anything with any digits dialled while a tone is beeing played. A while ago, I made some modifications to "Playtones" to allow it to be interrupted by dialling a digit and behave very much like "BackGround" in that respect. The patch to add this new app, called "PlayDialtone", is attached. Grtz, Oliver -------------- next part -------------- Index: pbx.c ==================================================================RCS file: /usr/cvsroot/asterisk/pbx.c,v retrieving revision 1.31 diff -u -r1.31 pbx.c --- pbx.c 1 Jul 2003 20:29:53 -0000 1.31 +++ pbx.c 3 Jul 2003 11:48:33 -0000 @@ -1747,6 +1747,8 @@ /* As long as we're willing to wait, and as long as it's not defined, keep reading digits until we can't possibly get a right answer anymore. */ digit = ast_waitfordigit(c, waittime * 1000); + if (c->writeinterrupt) + ast_deactivate_generator(c); if (c->_softhangup == AST_SOFTHANGUP_ASYNCGOTO) { c->_softhangup = 0; } else { Index: res/res_indications.c ==================================================================RCS file: /usr/cvsroot/asterisk/res/res_indications.c,v retrieving revision 1.2 diff -u -r1.2 res_indications.c --- res/res_indications.c 27 Apr 2003 21:34:27 -0000 1.2 +++ res/res_indications.c 3 Jul 2003 11:48:34 -0000 @@ -201,6 +201,28 @@ } /* + * PlayDialtone command stuff + */ +static int handle_playdialtone(struct ast_channel *chan, void *data) +{ + struct tone_zone_sound *ts; + int res; + + if (!data || !((char*)data)[0]) { + ast_log(LOG_NOTICE,"Nothing to play\n"); + return -1; + } + ts = ast_get_indication_tone(chan->zone, (const char*)data); + if (ts && ts->data[0]) + res = ast_playtones_start(chan, 0, ts->data, 1); + else + res = ast_playtones_start(chan, 0, (const char*)data, 1); + if (res) + ast_log(LOG_NOTICE,"Unable to start playdialtone\n"); + return res; +} + +/* * StopPlaylist command stuff */ static int handle_stopplaytones(struct ast_channel *chan, void *data) @@ -377,6 +399,7 @@ ast_cli_register(&remove_indication_cli); ast_cli_register(&show_indications_cli); ast_register_application("Playtones", handle_playtones, "Play a tone list","Play a tone list, either registered (through indications.conf) or a direct list of tones and durations."); + ast_register_application("PlayDialtone", handle_playdialtone, "Play an interruptable tone list","Play a tone list, either registered (through indications.conf) or a direct list of tones and durations. Interrupt the tones after a digit is dialed."); ast_register_application("StopPlaytones", handle_stopplaytones, "Stop playing a tone list","Stop playing a tone list"); return 0;