Add a min-announce-frequency option to queues.conf which allows you to control the

minimum amount of time between queue announcements for use when the caller's queue
position changes frequently.
(issue #9604, patch by Matthew Roth)


git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@62242 65c4cc65-6c06-0410-ace0-fbb531ad65f3
1.6.0
Russell Bryant 19 years ago
parent c2468b4c32
commit 672fbc1f81

@ -75,7 +75,25 @@ Voicemail Changes
* Added the ability to customize which sound files are used for some of the * Added the ability to customize which sound files are used for some of the
prompts within the Voicemail application by changing them in voicemail.conf prompts within the Voicemail application by changing them in voicemail.conf
* Added the ability for the "voicemail show users" CLI command to show users * Added the ability for the "voicemail show users" CLI command to show users
configured by the dynamic realtime configuration method. configured by the dynamic realtime configuration method.
Queue changes
-------------
* Added QUEUE_VARIABLES function to set queue variables added setqueuevar and
setqueueentryvar options for each queue, see queues.conf.sample for details.
* Added keepstats option to queues.conf which will keep queue
statistics during a reload.
* setinterfacevar option in queues.conf also now sets a variable
called MEMBERNAME which contains the member's name.
* Added 'Strategy' field to manager event QueueParams which represents
the queue strategy in use.
* Added option to run macro when a queue member is connected to a caller,
see queues.conf.sample for details.
* app_queue now has a 'loose' option which is almost exactly like 'strict' except it
does not count paused queue members as unavailable.
* Added min-announce-frequency option to queues.conf which allows you to control the
minimum amount of time between queue announcements for use when the caller's queue
position changes frequently.
Miscellaneous Miscellaneous
------------- -------------
@ -97,16 +115,10 @@ Miscellaneous
can use --with-cap to specify the path. can use --with-cap to specify the path.
* H323 remote hold notification support added (by NOTIFY message * H323 remote hold notification support added (by NOTIFY message
and/or H.450 supplementary service) and/or H.450 supplementary service)
* Added keepstats option to queues.conf which will keep queue
statistics during a reload.
* Added rotatetimestamp option to logger.conf which will use * Added rotatetimestamp option to logger.conf which will use
the time to name the logger files instead of sequence number. the time to name the logger files instead of sequence number.
* setinterfacevar option in queues.conf also now sets a variable
called MEMBERNAME which contains the member's name.
* Added Masquerade manager event for when a masquerade happens between * Added Masquerade manager event for when a masquerade happens between
two channels. two channels.
* Added 'Strategy' field to manager event QueueParams which represents
the queue strategy in use.
* From the to-do lists: straighten out the app timeout args: * From the to-do lists: straighten out the app timeout args:
Wait() app now really does 0.3 seconds- was truncating arg to an int. Wait() app now really does 0.3 seconds- was truncating arg to an int.
WaitExten() same as Wait(). WaitExten() same as Wait().
@ -117,14 +129,8 @@ Miscellaneous
SpeechBackground() -- clarified in the docstrings that the timeout is an integer seconds. SpeechBackground() -- clarified in the docstrings that the timeout is an integer seconds.
* Added 'C' option to Meetme which causes a caller to continue in the dialplan * Added 'C' option to Meetme which causes a caller to continue in the dialplan
when kicked out. when kicked out.
* Added option to run macro when a queue member is connected to a caller,
see queues.conf.sample for details.
* Added QUEUE_VARIABLES function to set queue variables added setqueuevar and
setqueueentryvar options for each queue, see queues.conf.sample for details.
* Brazilian Portuguese (pt-BR) in VM, and say.c was added via patch from cfassoni. * Brazilian Portuguese (pt-BR) in VM, and say.c was added via patch from cfassoni.
* CID matching information is now shown when doing 'dialplan show'. * CID matching information is now shown when doing 'dialplan show'.
* app_queue now has a 'loose' option which is almost exactly like 'strict' except it
does not count paused queue members as unavailable.
* Added maxfiles option to options section of asterisk.conf which allows you to specify * Added maxfiles option to options section of asterisk.conf which allows you to specify
what Asterisk should set as the maximum number of open files when it loads. what Asterisk should set as the maximum number of open files when it loads.
* Added the jittertargetextra configuration option. * Added the jittertargetextra configuration option.

@ -116,6 +116,8 @@ static struct strategy {
#define DEFAULT_TIMEOUT 15 #define DEFAULT_TIMEOUT 15
#define RECHECK 1 /* Recheck every second to see we we're at the top yet */ #define RECHECK 1 /* Recheck every second to see we we're at the top yet */
#define MAX_PERIODIC_ANNOUNCEMENTS 10 /* The maximum periodic announcements we can have */ #define MAX_PERIODIC_ANNOUNCEMENTS 10 /* The maximum periodic announcements we can have */
#define DEFAULT_MIN_ANNOUNCE_FREQUENCY 15 /* The minimum number of seconds between position announcements
The default value of 15 provides backwards compatibility */
#define RES_OKAY 0 /* Action completed */ #define RES_OKAY 0 /* Action completed */
#define RES_EXISTS (-1) /* Entry already exists */ #define RES_EXISTS (-1) /* Entry already exists */
@ -366,6 +368,7 @@ struct call_queue {
unsigned int maskmemberstatus:1; unsigned int maskmemberstatus:1;
unsigned int realtime:1; unsigned int realtime:1;
int announcefrequency; /*!< How often to announce their position */ int announcefrequency; /*!< How often to announce their position */
int minannouncefrequency; /*!< The minimum number of seconds between position announcements (def. 15) */
int periodicannouncefrequency; /*!< How often to play periodic announcement */ int periodicannouncefrequency; /*!< How often to play periodic announcement */
int roundingseconds; /*!< How many seconds do we round to? */ int roundingseconds; /*!< How many seconds do we round to? */
int holdtime; /*!< Current avg holdtime, based on recursive boxcar filter */ int holdtime; /*!< Current avg holdtime, based on recursive boxcar filter */
@ -673,6 +676,7 @@ static void init_queue(struct call_queue *q)
q->timeout = -1; q->timeout = -1;
q->maxlen = 0; q->maxlen = 0;
q->announcefrequency = 0; q->announcefrequency = 0;
q->minannouncefrequency = DEFAULT_MIN_ANNOUNCE_FREQUENCY;
q->announceholdtime = 0; q->announceholdtime = 0;
q->roundingseconds = 0; /* Default - don't announce seconds */ q->roundingseconds = 0; /* Default - don't announce seconds */
q->servicelevel = 0; q->servicelevel = 0;
@ -847,6 +851,9 @@ static void queue_set_param(struct call_queue *q, const char *param, const char
ast_copy_string(q->sound_reporthold, val, sizeof(q->sound_reporthold)); ast_copy_string(q->sound_reporthold, val, sizeof(q->sound_reporthold));
} else if (!strcasecmp(param, "announce-frequency")) { } else if (!strcasecmp(param, "announce-frequency")) {
q->announcefrequency = atoi(val); q->announcefrequency = atoi(val);
} else if (!strcasecmp(param, "min-announce-frequency")) {
q->minannouncefrequency = atoi(val);
ast_log(LOG_DEBUG, "%s=%s for queue '%s'\n", param, val, q->name);
} else if (!strcasecmp(param, "announce-round-seconds")) { } else if (!strcasecmp(param, "announce-round-seconds")) {
q->roundingseconds = atoi(val); q->roundingseconds = atoi(val);
if (q->roundingseconds>60 || q->roundingseconds<0) { if (q->roundingseconds>60 || q->roundingseconds<0) {
@ -1308,9 +1315,9 @@ static int say_position(struct queue_ent *qe)
int res = 0, avgholdmins, avgholdsecs; int res = 0, avgholdmins, avgholdsecs;
time_t now; time_t now;
/* Check to see if this is ludicrous -- if we just announced position, don't do it again*/ /* Let minannouncefrequency seconds pass between the start of each position announcement */
time(&now); time(&now);
if ((now - qe->last_pos) < 15) if ((now - qe->last_pos) < qe->parent->minannouncefrequency)
return 0; return 0;
/* If either our position has changed, or we are over the freq timer, say position */ /* If either our position has changed, or we are over the freq timer, say position */

@ -167,9 +167,18 @@ monitor-type = MixMonitor
; How often to announce queue position and/or estimated ; How often to announce queue position and/or estimated
; holdtime to caller (0=off) ; holdtime to caller (0=off)
; Note that this value is ignored if the caller's queue
; position has changed (see min-announce-frequency)
; ;
;announce-frequency = 90 ;announce-frequency = 90
; ;
; The absolute minimum time between the start of each
; queue position and/or estimated holdtime announcement
; This is useful for avoiding constant announcements
; when the caller's queue position is changing frequently
; (see announce-frequency)
;
;min-announce-frequency = 15
; ;
; How often to make any periodic announcement (see periodic-announce) ; How often to make any periodic announcement (see periodic-announce)
; ;

Loading…
Cancel
Save