Merge seconds announcement for queue hold time (bug #1941)

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@3332 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
Mark Spencer
2004-06-28 20:17:20 +00:00
parent 09c41b415d
commit b283a02a7d
4 changed files with 43 additions and 7 deletions

View File

@@ -187,6 +187,7 @@ struct ast_call_queue {
char context[80]; /* Context for this queue */ char context[80]; /* Context for this queue */
int strategy; /* Queueing strategy */ int strategy; /* Queueing strategy */
int announcefrequency; /* How often to announce their position */ int announcefrequency; /* How often to announce their position */
int roundingseconds; /* How many seconds do we round to? */
int announceholdtime; /* When to announce holdtime: 0 = never, -1 = every announcement, 1 = only once */ int announceholdtime; /* When to announce holdtime: 0 = never, -1 = every announcement, 1 = only once */
int holdtime; /* Current avg holdtime for this queue, based on recursive boxcar filter */ int holdtime; /* Current avg holdtime for this queue, based on recursive boxcar filter */
int callscompleted; /* Number of queue calls completed */ int callscompleted; /* Number of queue calls completed */
@@ -200,6 +201,7 @@ struct ast_call_queue {
char sound_calls[80]; /* Sound file: "calls waiting to speak to a representative." (def. queue-callswaiting)*/ char sound_calls[80]; /* Sound file: "calls waiting to speak to a representative." (def. queue-callswaiting)*/
char sound_holdtime[80]; /* Sound file: "The current estimated total holdtime is" (def. queue-holdtime) */ char sound_holdtime[80]; /* Sound file: "The current estimated total holdtime is" (def. queue-holdtime) */
char sound_minutes[80]; /* Sound file: "minutes." (def. queue-minutes) */ char sound_minutes[80]; /* Sound file: "minutes." (def. queue-minutes) */
char sound_seconds[80]; /* Sound file: "seconds." (def. queue-seconds) */
char sound_thanks[80]; /* Sound file: "Thank you for your patience." (def. queue-thankyou) */ char sound_thanks[80]; /* Sound file: "Thank you for your patience." (def. queue-thankyou) */
int count; /* How many entries are in the queue */ int count; /* How many entries are in the queue */
@@ -386,7 +388,7 @@ static int play_file(struct ast_channel *chan, char *filename)
static int say_position(struct queue_ent *qe) static int say_position(struct queue_ent *qe)
{ {
int res = 0, avgholdmins; 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*/ /* Check to see if this is ludicrous -- if we just announced position, don't do it again*/
@@ -408,19 +410,34 @@ static int say_position(struct queue_ent *qe)
res += ast_say_number(qe->chan, qe->pos, AST_DIGIT_ANY, qe->chan->language, (char *) NULL); /* Needs gender */ res += ast_say_number(qe->chan, qe->pos, AST_DIGIT_ANY, qe->chan->language, (char *) NULL); /* Needs gender */
res += play_file(qe->chan, qe->parent->sound_calls); res += play_file(qe->chan, qe->parent->sound_calls);
} }
/* Round hold time to nearest minute */ /* Round hold time to nearest minute */
avgholdmins = ( (qe->parent->holdtime + 30) - (now - qe->start) ) / 60; avgholdmins = abs(( (qe->parent->holdtime + 30) - (now - qe->start) ) / 60);
/* If they have specified a rounding then round the seconds as well */
if(qe->parent->roundingseconds) {
avgholdsecs = (abs(( (qe->parent->holdtime + 30) - (now - qe->start) )) - 60 * avgholdmins) / qe->parent->roundingseconds;
avgholdsecs*= qe->parent->roundingseconds;
} else {
avgholdsecs=0;
}
if (option_verbose > 2) if (option_verbose > 2)
ast_verbose(VERBOSE_PREFIX_3 "Hold time for %s is %d minutes\n", qe->parent->name, avgholdmins); ast_verbose(VERBOSE_PREFIX_3 "Hold time for %s is %d minutes %d seconds\n", qe->parent->name, avgholdmins, avgholdsecs);
/* If the hold time is >1 min, if it's enabled, and if it's not /* If the hold time is >1 min, if it's enabled, and if it's not
supposed to be only once and we have already said it, say it */ supposed to be only once and we have already said it, say it */
if (avgholdmins > 1 && (qe->parent->announceholdtime) && (!(qe->parent->announceholdtime==1 && qe->last_pos)) ) { if ((avgholdmins+avgholdsecs) > 0 && (qe->parent->announceholdtime) && (!(qe->parent->announceholdtime==1 && qe->last_pos)) ) {
res += play_file(qe->chan, qe->parent->sound_holdtime); res += play_file(qe->chan, qe->parent->sound_holdtime);
if(avgholdmins>0) {
res += ast_say_number(qe->chan, avgholdmins, AST_DIGIT_ANY, qe->chan->language, (char*) NULL); res += ast_say_number(qe->chan, avgholdmins, AST_DIGIT_ANY, qe->chan->language, (char*) NULL);
res += play_file(qe->chan, qe->parent->sound_minutes); res += play_file(qe->chan, qe->parent->sound_minutes);
} }
if(avgholdsecs>0) {
res += ast_say_number(qe->chan, avgholdsecs, AST_DIGIT_ANY, qe->chan->language, (char*) NULL);
res += play_file(qe->chan, qe->parent->sound_seconds);
}
}
posout: posout:
/* Set our last_pos indicators */ /* Set our last_pos indicators */
@@ -1708,6 +1725,7 @@ static void reload_queues(void)
q->maxlen = 0; q->maxlen = 0;
q->announcefrequency = 0; q->announcefrequency = 0;
q->announceholdtime = 0; q->announceholdtime = 0;
q->roundingseconds = 0; /* Default - don't announce seconds */
q->holdtime = 0; q->holdtime = 0;
q->callscompleted = 0; q->callscompleted = 0;
q->callsabandoned = 0; q->callsabandoned = 0;
@@ -1724,6 +1742,7 @@ static void reload_queues(void)
strcpy(q->sound_calls, "queue-callswaiting"); strcpy(q->sound_calls, "queue-callswaiting");
strcpy(q->sound_holdtime, "queue-holdtime"); strcpy(q->sound_holdtime, "queue-holdtime");
strcpy(q->sound_minutes, "queue-minutes"); strcpy(q->sound_minutes, "queue-minutes");
strcpy(q->sound_seconds, "queue-seconds");
strcpy(q->sound_thanks, "queue-thankyou"); strcpy(q->sound_thanks, "queue-thankyou");
prev = q->members; prev = q->members;
if (prev) { if (prev) {
@@ -1783,10 +1802,18 @@ static void reload_queues(void)
strncpy(q->sound_holdtime, var->value, sizeof(q->sound_holdtime) - 1); strncpy(q->sound_holdtime, var->value, sizeof(q->sound_holdtime) - 1);
} else if (!strcasecmp(var->name, "queue-minutes")) { } else if (!strcasecmp(var->name, "queue-minutes")) {
strncpy(q->sound_minutes, var->value, sizeof(q->sound_minutes) - 1); strncpy(q->sound_minutes, var->value, sizeof(q->sound_minutes) - 1);
} else if (!strcasecmp(var->name, "queue-seconds")) {
strncpy(q->sound_seconds, var->value, sizeof(q->sound_seconds) - 1);
} else if (!strcasecmp(var->name, "queue-thankyou")) { } else if (!strcasecmp(var->name, "queue-thankyou")) {
strncpy(q->sound_thanks, var->value, sizeof(q->sound_thanks) - 1); strncpy(q->sound_thanks, var->value, sizeof(q->sound_thanks) - 1);
} else if (!strcasecmp(var->name, "announce-frequency")) { } else if (!strcasecmp(var->name, "announce-frequency")) {
q->announcefrequency = atoi(var->value); q->announcefrequency = atoi(var->value);
} else if (!strcasecmp(var->name, "announce-round-seconds")) {
q->roundingseconds = atoi(var->value);
if(q->roundingseconds>60 || q->roundingseconds<0) {
ast_log(LOG_WARNING, "'%s' isn't a valid value for queue-rounding-seconds using 0 instead at line %d of queue.conf\n", var->value, var->lineno);
q->roundingseconds=0;
}
} else if (!strcasecmp(var->name, "announce-holdtime")) { } else if (!strcasecmp(var->name, "announce-holdtime")) {
q->announceholdtime = (!strcasecmp(var->value,"once")) ? 1 : ast_true(var->value); q->announceholdtime = (!strcasecmp(var->value,"once")) ? 1 : ast_true(var->value);
} else if (!strcasecmp(var->name, "retry")) { } else if (!strcasecmp(var->name, "retry")) {

View File

@@ -73,6 +73,12 @@
; Either yes, no, or only once; hold time will not be announced if <1 minute ; Either yes, no, or only once; hold time will not be announced if <1 minute
; ;
;announce-holdtime = yes|no|once ;announce-holdtime = yes|no|once
;
; What's the rounding time for the seconds?
; If this is non zero then we announce the seconds as well as the minutes rounded to this value
;
; announce-round-seconds = 10
; ;
; 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.
@@ -82,6 +88,7 @@
;queue-callswaiting = queue-callswaiting ; ("calls waiting.") ;queue-callswaiting = queue-callswaiting ; ("calls waiting.")
;queue-holdtime = queue-holdtime ; ("The current est. holdtime is") ;queue-holdtime = queue-holdtime ; ("The current est. holdtime is")
;queue-minutes = queue-minutes ; ("minutes.") ;queue-minutes = queue-minutes ; ("minutes.")
;queue-seconds = queue-seconds ; ("seconds.")
;queue-thankyou = queue-thankyou ; ("Thank you for your patience.") ;queue-thankyou = queue-thankyou ; ("Thank you for your patience.")
; ;
; Calls may be recorded using Asterisk's monitor resource ; Calls may be recorded using Asterisk's monitor resource

View File

@@ -82,6 +82,8 @@
%queue-minutes.gsm%Minutes %queue-minutes.gsm%Minutes
%queue-seconds.gsm%Seconds
%queue-thankyou.gsm%Thank you for your patience %queue-thankyou.gsm%Thank you for your patience
%queue-thereare.gsm%You are currently caller number %queue-thereare.gsm%You are currently caller number

BIN
sounds/queue-seconds.gsm Executable file

Binary file not shown.