diff --git a/CHANGES b/CHANGES index 1721ed14c98bdf68990ba60214b8012b70d47332..fb54ca6400c53f9293618c7bf39f19eddfbcef59 100644 --- a/CHANGES +++ b/CHANGES @@ -17,6 +17,11 @@ app_queue * PAUSEALL/UNPAUSEALL now sets the pause reason in the queue_log if it has 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 ------------ ------------------------------------------------------------------------------ diff --git a/apps/app_queue.c b/apps/app_queue.c index 762119e9413cd10e01d760f0a5c4641d8d8b36a4..f297dad8d7d954243af55d7bc7f60f8c792c873d 100644 --- a/apps/app_queue.c +++ b/apps/app_queue.c @@ -1683,6 +1683,7 @@ struct call_queue { unsigned int timeoutrestart:1; unsigned int announceholdtime:2; unsigned int announceposition:3; + unsigned int announceposition_only_up:1; /*!< Only announce position if it has improved */ int strategy:4; unsigned int realtime:1; unsigned int found:1; @@ -2722,6 +2723,7 @@ static void init_queue(struct call_queue *q) q->announcefrequency = 0; q->minannouncefrequency = DEFAULT_MIN_ANNOUNCE_FREQUENCY; q->announceholdtime = 1; + q->announceposition_only_up = 0; q->announcepositionlimit = 10; /* Default 10 positions */ q->announceposition = ANNOUNCEPOSITION_YES; /* Default yes */ 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 { 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")) { q->announcepositionlimit = atoi(val); } else if (!strcasecmp(param, "periodic-announce")) { @@ -3911,6 +3915,11 @@ static int say_position(struct queue_ent *qe, int ringing) 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) { ast_indicate(qe->chan,-1); } else { diff --git a/configs/samples/queues.conf.sample b/configs/samples/queues.conf.sample index b34a8d87014a106da3aed3587bcc65e068cc9f7d..3e7cbd809b666dfe40c6bfecde6f0f4793ad5d9b 100644 --- a/configs/samples/queues.conf.sample +++ b/configs/samples/queues.conf.sample @@ -345,6 +345,11 @@ monitor-type = MixMonitor ; ; 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 ; defaults are as listed below -- change only if you need to. ;