app_queue: Add announce-position-only-up option

Setting this option will cause the Queue application to only announce
the caller's position if it has improved since the last time that we
announced it.

Change-Id: I173a124121422209485b043e2bf784f54242fce6
This commit is contained in:
Sean Bright
2017-07-26 10:27:00 -04:00
committed by George Joseph
parent 63224d5d9c
commit 1078d4f7f6
3 changed files with 19 additions and 0 deletions

View File

@@ -17,6 +17,11 @@ app_queue
* PAUSEALL/UNPAUSEALL now sets the pause reason in the queue_log if it has * PAUSEALL/UNPAUSEALL now sets the pause reason in the queue_log if it has
been defined. been defined.
* A new option, "announce-position-only-up," has been added that, when set to
yes, causes position announcements to only be played when the caller's
queue position has improved since the last time that we annouced their
position. This default is no.
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
--- Functionality changes from Asterisk 14.6.0 to Asterisk 14.7.0 ------------ --- Functionality changes from Asterisk 14.6.0 to Asterisk 14.7.0 ------------
------------------------------------------------------------------------------ ------------------------------------------------------------------------------

View File

@@ -1683,6 +1683,7 @@ struct call_queue {
unsigned int timeoutrestart:1; unsigned int timeoutrestart:1;
unsigned int announceholdtime:2; unsigned int announceholdtime:2;
unsigned int announceposition:3; unsigned int announceposition:3;
unsigned int announceposition_only_up:1; /*!< Only announce position if it has improved */
int strategy:4; int strategy:4;
unsigned int realtime:1; unsigned int realtime:1;
unsigned int found:1; unsigned int found:1;
@@ -2722,6 +2723,7 @@ static void init_queue(struct call_queue *q)
q->announcefrequency = 0; q->announcefrequency = 0;
q->minannouncefrequency = DEFAULT_MIN_ANNOUNCE_FREQUENCY; q->minannouncefrequency = DEFAULT_MIN_ANNOUNCE_FREQUENCY;
q->announceholdtime = 1; q->announceholdtime = 1;
q->announceposition_only_up = 0;
q->announcepositionlimit = 10; /* Default 10 positions */ q->announcepositionlimit = 10; /* Default 10 positions */
q->announceposition = ANNOUNCEPOSITION_YES; /* Default yes */ q->announceposition = ANNOUNCEPOSITION_YES; /* Default yes */
q->roundingseconds = 0; /* Default - don't announce seconds */ q->roundingseconds = 0; /* Default - don't announce seconds */
@@ -3171,6 +3173,8 @@ static void queue_set_param(struct call_queue *q, const char *param, const char
} else { } else {
q->announceposition = ANNOUNCEPOSITION_NO; q->announceposition = ANNOUNCEPOSITION_NO;
} }
} else if (!strcasecmp(param, "announce-position-only-up")) {
q->announceposition_only_up = ast_true(val);
} else if (!strcasecmp(param, "announce-position-limit")) { } else if (!strcasecmp(param, "announce-position-limit")) {
q->announcepositionlimit = atoi(val); q->announcepositionlimit = atoi(val);
} else if (!strcasecmp(param, "periodic-announce")) { } else if (!strcasecmp(param, "periodic-announce")) {
@@ -3911,6 +3915,11 @@ static int say_position(struct queue_ent *qe, int ringing)
return 0; return 0;
} }
/* Only announce if the caller's queue position has improved since last time */
if (qe->parent->announceposition_only_up && qe->last_pos_said <= qe->pos) {
return 0;
}
if (ringing) { if (ringing) {
ast_indicate(qe->chan,-1); ast_indicate(qe->chan,-1);
} else { } else {

View File

@@ -345,6 +345,11 @@ monitor-type = MixMonitor
; ;
; announce-round-seconds = 10 ; announce-round-seconds = 10
; ;
; Only announce the caller's position if it has improved since the last announcement.
; The default value is no.
;
; announce-position-only-up = yes
;
; Use these sound files in making position/holdtime announcements. The ; Use these sound files in making position/holdtime announcements. The
; defaults are as listed below -- change only if you need to. ; defaults are as listed below -- change only if you need to.
; ;