app_queue: periodic announcement configurable start time.

This newly introduced periodic-announce-startdelay makes it possible to
configure the initial start delay of the first periodic announcement
after which periodic-announce-frequency takes over.

ASTERISK-30437 #close
Change-Id: Ia79984b6377ef78f167ad9ea2ac084bec29955d0
Signed-off-by: Jaco Kroon <jaco@uls.co.za>
(cherry picked from commit 3fd0b65bae)
This commit is contained in:
Jaco Kroon 2023-02-21 14:24:36 +02:00 committed by Asterisk Development Team
parent bd1f8b89da
commit d6e733d4bc
3 changed files with 24 additions and 0 deletions

View File

@ -1856,6 +1856,7 @@ struct call_queue {
int announcepositionlimit; /*!< How many positions we announce? */
int announcefrequency; /*!< How often to announce their position */
int minannouncefrequency; /*!< The minimum number of seconds between position announcements (def. 15) */
int periodicannouncestartdelay; /*!< How long into the queue should the periodic accouncement start */
int periodicannouncefrequency; /*!< How often to play periodic announcement */
int numperiodicannounce; /*!< The number of periodic announcements configured */
int randomperiodicannounce; /*!< Are periodic announcments randomly chosen */
@ -2987,6 +2988,7 @@ static void init_queue(struct call_queue *q)
q->weight = 0;
q->timeoutrestart = 0;
q->periodicannouncefrequency = 0;
q->periodicannouncestartdelay = -1;
q->randomperiodicannounce = 0;
q->numperiodicannounce = 0;
q->relativeperiodicannounce = 0;
@ -3445,6 +3447,8 @@ static void queue_set_param(struct call_queue *q, const char *param, const char
ast_str_set(&q->sound_periodicannounce[0], 0, "%s", val);
q->numperiodicannounce = 1;
}
} else if (!strcasecmp(param, "periodic-announce-startdelay")) {
q->periodicannouncestartdelay = atoi(val);
} else if (!strcasecmp(param, "periodic-announce-frequency")) {
q->periodicannouncefrequency = atoi(val);
} else if (!strcasecmp(param, "relative-periodic-announce")) {
@ -8613,6 +8617,10 @@ static int queue_exec(struct ast_channel *chan, const char *data)
qe.last_pos_said = 0;
qe.last_pos = 0;
qe.last_periodic_announce_time = time(NULL);
if (qe.parent->periodicannouncestartdelay >= 0) {
qe.last_periodic_announce_time += qe.parent->periodicannouncestartdelay;
qe.last_periodic_announce_time -= qe.parent->periodicannouncefrequency;
}
qe.last_periodic_announce_sound = 0;
qe.valid_digits = 0;
if (join_queue(args.queuename, &qe, &reason, position)) {

View File

@ -291,6 +291,13 @@ monitor-type = MixMonitor
;
;periodic-announce-frequency=60
;
; If given indicates the number of seconds after entering the queue the first
; periodic announcement should be played. The default (and historic) behavior
; is to play the first periodic announcement at periodic-announce-frequency
; seconds after entering the queue.
;
;periodic-announce-startdelay=10
;
; Should the periodic announcements be played in a random order? Default is no.
;
;random-periodic-announce=no

View File

@ -0,0 +1,9 @@
Subject: app_queue
Introduce a new queue configuration option called
'periodic-announce-startdelay' which will vary the normal (historic) behavior
of starting the periodic announcement cycle at periodic-announce-frequency
seconds after entering the queue to start the periodic announcement cycle at
period-announce-startdelay seconds after joining the queue.
The default behavior if this config option is not set remains unchanged.