[Asterisk-Users] new application Dialtone()

Surfer Dude swell at labranch.com
Wed Jun 4 16:16:49 MST 2003


Hello,

I created a new application for myself called Dialtone() by modifing
res/res_indications.c file.  It can be used as such:

    exten => s,4,Dialtone(30|${CALLERIDNUM})
    exten => s,5,Playback(time-exceeded)
    exten => s,6,Goto(s|1)

It will stutter if you have new voicemail and you have passed the mailbox
number as I did above.  It will stop dialtone the moment you press a key or
the timeout (in seconds) has occured.

This is my first stab at asterisk so I am not 100% that this is where the
code should live.  If there is someone out there that wants to add it to (*)
then please feel free.  I can send you the whole file if you need.

I needed this application because I need to set immediate=yes so that I can
set some variables when the phone is picked up.

Thanks,
Jason


[root at zapata res]# cvs diff res_indications.c
Index: res_indications.c
===================================================================
RCS file: /usr/cvsroot/asterisk/res/res_indications.c,v
retrieving revision 1.2
diff -r1.2 res_indications.c
31a32,33
> #include <asterisk/app.h>
> #include <asterisk/options.h>
212a215,263
>  * Dialtone
>  */
> static int handle_dialtone(struct ast_channel *chan, void *data)
> {
>       struct tone_zone_sound *ts;
>       int res;
>       char tmp[256];
>       char *stringp, *mailbox, *stimeout;
>       int timeout;
>
>       stringp = mailbox = stimeout = NULL;
>       timeout = 10000;
>
>       strncpy(tmp, data, sizeof(tmp)-1),
>       stringp = tmp;
>
>       stimeout = strsep(&stringp, "|");
>       if(stimeout && stimeout[0]) {
>               mailbox = strsep(&stringp, "|");
>               timeout = atoi(stimeout) * 1000;
>       }
>
>
>       if(mailbox && ast_app_has_voicemail(mailbox)) {
>               ts = ast_get_indication_tone(chan->zone, "dialrecall");
>               if (option_verbose > 2)
>                       ast_verbose(VERBOSE_PREFIX_3 "Dialtone: playing
dialrecall for %d mili seconds\n", timeout);
>       } else {
>               ts = ast_get_indication_tone(chan->zone, "dial");
>               if (option_verbose > 2)
>                       ast_verbose(VERBOSE_PREFIX_3 "Dialtone: playing dial
for %d mili seconds\n", timeout);
>       }
>
>       ast_playtones_stop(chan);
>       res = ast_playtones_start(chan, 0, ts->data, 0);
>
>       if (res)
>               ast_log(LOG_NOTICE,"Unable to start playtones\n");
>
>       if (!res) {
>               res = ast_waitfordigit(chan, (const int) timeout);
>               ast_playtones_stop(chan);
>       }
>
>       return 0;
> }
>
>
> /*
380a432,440
>       ast_register_application(
>               "Dialtone",
>               handle_dialtone,
>               "Play a dialtone while awaiting extension",
>               "  Dialtone([timeout[|mailbox]]): Plays a dialtone,
including an initial stutter\n"
>               "on new voicemail, if optional mailbox is specified, while
simultaneously waiting\n"
>               "for the user to begin typing an extension or the timeout
occurs.  Timeout parameter\n"
>               "is in seconds.  Default timeout is 60 seconds.  Returns
0\n"
>       );





More information about the asterisk-users mailing list