diff --git a/UPGRADE.txt b/UPGRADE.txt index 2700798e3d..2e7c8ce523 100644 --- a/UPGRADE.txt +++ b/UPGRADE.txt @@ -24,6 +24,12 @@ From 11.4 to 11.5: * The default settings for chan_sip are now overriden properly by the general settings in sip.conf. Please look over your settings upon upgrading. +* It is now possible to play the Queue prompts to the first user waiting in a call queue. + Note that this may impact the ability for agents to talk with users, as a prompt may + still be playing when an agent connects to the user. This ability is disabled by + default but can be enabled on an individual queue using the 'announce-to-first-user' + option. + From 11.3 to 11.4: * Added the 'n' option to MeetMe to prevent application of the DENOISE function to a channel joining a conference. Some channel drivers that vary the number diff --git a/apps/app_queue.c b/apps/app_queue.c index 7f704167e7..0b3c6a31b4 100644 --- a/apps/app_queue.c +++ b/apps/app_queue.c @@ -1243,6 +1243,7 @@ struct call_queue { unsigned int dead:1; unsigned int eventwhencalled:2; unsigned int ringinuse:1; + unsigned int announce_to_first_user:1; /*!< Whether or not we announce to the first user in a queue */ unsigned int setinterfacevar:1; unsigned int setqueuevar:1; unsigned int setqueueentryvar:1; @@ -2008,6 +2009,7 @@ static void init_queue(struct call_queue *q) q->roundingseconds = 0; /* Default - don't announce seconds */ q->servicelevel = 0; q->ringinuse = 1; + q->announce_to_first_user = 0; q->setinterfacevar = 0; q->setqueuevar = 0; q->setqueueentryvar = 0; @@ -2288,6 +2290,8 @@ static void queue_set_param(struct call_queue *q, const char *param, const char ast_string_field_set(q, sound_reporthold, val); } else if (!strcasecmp(param, "announce-frequency")) { q->announcefrequency = atoi(val); + } else if (!strcasecmp(param, "announce-to-first-user")) { + q->announce_to_first_user = ast_true(val); } else if (!strcasecmp(param, "min-announce-frequency")) { q->minannouncefrequency = atoi(val); ast_debug(1, "%s=%s for queue '%s'\n", param, val, q->name); @@ -4589,12 +4593,12 @@ skip_frame:; } /* Make a position announcement, if enabled */ - if (qe->parent->announcefrequency) { + if (qe->parent->announcefrequency && qe->parent->announce_to_first_user) { say_position(qe, ringing); } /* Make a periodic announcement, if enabled */ - if (qe->parent->periodicannouncefrequency) { + if (qe->parent->periodicannouncefrequency && qe->parent->announce_to_first_user) { say_periodic_announcement(qe, ringing); } @@ -9576,6 +9580,7 @@ static struct ast_cli_entry cli_queue[] = { MEMBER(call_queue, dead, AST_DATA_BOOLEAN) \ MEMBER(call_queue, eventwhencalled, AST_DATA_BOOLEAN) \ MEMBER(call_queue, ringinuse, AST_DATA_BOOLEAN) \ + MEMBER(call_queue, announce_to_first_user, AST_DATA_BOOLEAN) \ MEMBER(call_queue, setinterfacevar, AST_DATA_BOOLEAN) \ MEMBER(call_queue, setqueuevar, AST_DATA_BOOLEAN) \ MEMBER(call_queue, setqueueentryvar, AST_DATA_BOOLEAN) \ diff --git a/configs/queues.conf.sample b/configs/queues.conf.sample index f7c05181c0..406d939443 100644 --- a/configs/queues.conf.sample +++ b/configs/queues.conf.sample @@ -317,6 +317,13 @@ monitor-type = MixMonitor ; ;announce-position = yes ; +; If enabled, play announcements to the first user waiting in the Queue. This may mean +; that announcements are played when an agent attempts to connect to the waiting user, +; which may delay the time before the agent and the user can communicate. Disabled by +; default. +; +; announce-to-first-user = no +; ; If you have specified "limit" or "more" for the announce-position option, then the following ; value is what is used to determine what announcement to play to waiting callers. If you have ; set the announce-position option to anything else, then this will have no bearing on queue operation