mirror of
				https://github.com/asterisk/asterisk.git
				synced 2025-10-31 02:37:10 +00:00 
			
		
		
		
	Add reporting of actual hold time (bug #2564)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@3900 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
		| @@ -211,6 +211,7 @@ struct ast_call_queue { | ||||
| 	char sound_lessthan[80];        /* Sound file: "less-than" (def. queue-lessthan) */ | ||||
| 	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_reporthold[80];	/* Sound file: "Hold time" (def. queue-reporthold) */ | ||||
|  | ||||
| 	int count;			/* How many entries are in the queue */ | ||||
| 	int maxlen;			/* Max number of entries in queue */ | ||||
| @@ -227,6 +228,7 @@ struct ast_call_queue { | ||||
| 	int joinempty;			/* Do we care if the queue has no members? */ | ||||
| 	int eventwhencalled;			/* Generate an event when the agent is called (before pickup) */ | ||||
| 	int leavewhenempty;		/* If all agents leave the queue, remove callers from the queue */ | ||||
| 	int reportholdtime;		/* Should we report caller hold time to member? */ | ||||
|  | ||||
| 	struct member *members;		/* Member channels to be tried */ | ||||
| 	struct queue_ent *head;		/* Start of the actual queue */ | ||||
| @@ -1160,16 +1162,28 @@ static int try_calling(struct queue_ent *qe, char *options, char *announceoverri | ||||
| 		member = lpeer->member; | ||||
| 		hanguptree(outgoing, peer); | ||||
| 		outgoing = NULL; | ||||
| 		if (announce) { | ||||
| 		if (announce || qe->parent->reportholdtime) { | ||||
| 			int res2; | ||||
| 			res2 = ast_autoservice_start(qe->chan); | ||||
| 			if (!res2) { | ||||
| 				res2 = ast_streamfile(peer, announce, peer->language); | ||||
| 				if (!res2) | ||||
| 					res2 = ast_waitstream(peer, ""); | ||||
| 				else { | ||||
| 					ast_log(LOG_WARNING, "Announcement file '%s' is unavailable, continuing anyway...\n", announce); | ||||
| 					res2 = 0; | ||||
| 				if (announce) { | ||||
| 					if (play_file(peer, announce)) | ||||
| 						ast_log(LOG_WARNING, "Announcement file '%s' is unavailable, continuing anyway...\n", announce); | ||||
| 				} | ||||
| 				if (qe->parent->reportholdtime) { | ||||
| 					if (!play_file(peer, qe->parent->sound_reporthold)) { | ||||
| 						int holdtime; | ||||
| 						time_t now; | ||||
|  | ||||
| 						time(&now); | ||||
| 						holdtime = abs((now - qe->start) / 60); | ||||
| 						if (holdtime < 2) { | ||||
| 							play_file(peer, qe->parent->sound_lessthan); | ||||
| 							ast_say_number(peer, 2, AST_DIGIT_ANY, peer->language, NULL); | ||||
| 						} else  | ||||
| 							ast_say_number(peer, holdtime, AST_DIGIT_ANY, peer->language, NULL); | ||||
| 						play_file(peer, qe->parent->sound_minutes); | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 			res2 |= ast_autoservice_stop(qe->chan); | ||||
| @@ -1803,6 +1817,7 @@ static void reload_queues(void) | ||||
| 				strncpy(q->sound_seconds, "queue-seconds", sizeof(q->sound_seconds) - 1); | ||||
| 				strncpy(q->sound_thanks, "queue-thankyou", sizeof(q->sound_thanks) - 1); | ||||
| 				strncpy(q->sound_lessthan, "queue-less-than", sizeof(q->sound_lessthan) - 1); | ||||
| 				strncpy(q->sound_reporthold, "queue-reporthold", sizeof(q->sound_reporthold) - 1); | ||||
| 				prev = q->members; | ||||
| 				if (prev) { | ||||
| 					/* find the end of any dynamic members */ | ||||
| @@ -1867,6 +1882,8 @@ static void reload_queues(void) | ||||
| 						strncpy(q->sound_lessthan, var->value, sizeof(q->sound_lessthan) - 1); | ||||
| 					} else if (!strcasecmp(var->name, "queue-thankyou")) { | ||||
| 						strncpy(q->sound_thanks, var->value, sizeof(q->sound_thanks) - 1); | ||||
| 					} else if (!strcasecmp(var->name, "queue-reporthold")) { | ||||
| 						strncpy(q->sound_reporthold, var->value, sizeof(q->sound_reporthold) - 1); | ||||
| 					} else if (!strcasecmp(var->name, "announce-frequency")) { | ||||
| 						q->announcefrequency = atoi(var->value); | ||||
| 					} else if (!strcasecmp(var->name, "announce-round-seconds")) { | ||||
| @@ -1897,6 +1914,8 @@ static void reload_queues(void) | ||||
| 						q->leavewhenempty = ast_true(var->value); | ||||
| 					} else if (!strcasecmp(var->name, "eventwhencalled")) { | ||||
| 						q->eventwhencalled = ast_true(var->value); | ||||
| 					} else if (!strcasecmp(var->name, "reportholdtime")) { | ||||
| 						q->reportholdtime = ast_true(var->value); | ||||
| 					} else { | ||||
| 						ast_log(LOG_WARNING, "Unknown keyword in queue '%s': %s at line %d of queue.conf\n", cat, var->name, var->lineno); | ||||
| 					} | ||||
|   | ||||
| @@ -93,6 +93,7 @@ | ||||
| ;queue-seconds = queue-seconds			;	("seconds.") | ||||
| ;queue-thankyou = queue-thankyou		;	("Thank you for your patience.") | ||||
| ;queue-lessthan = queue-less-than		;       ("less than") | ||||
| ;queue-reporthold = queue-reporthold		;       ("Hold time") | ||||
| ; | ||||
| ; Calls may be recorded using Asterisk's monitor resource | ||||
| ; This can be enabled from within the Queue application, starting recording | ||||
| @@ -123,6 +124,12 @@ | ||||
| ; | ||||
| ; eventwhencalled = yes | ||||
| ; | ||||
| ; If you wish to report the caller's hold time to the member before they are connected | ||||
| ; to the caller, set this to yes. | ||||
| ; | ||||
| ; reportholdtime = no | ||||
| ; | ||||
| ; | ||||
| ; Each member of this call queue is listed on a separate line in | ||||
| ; the form technology/dialstring.  "member" means a normal member of a | ||||
| ; queue.  An optional penalty may be specified after a comma, such that | ||||
|   | ||||
| @@ -82,6 +82,8 @@ | ||||
|  | ||||
| %queue-holdtime.gsm%The estimated hold time is currently | ||||
|  | ||||
| %queue-reporthold.gsm%Hold time | ||||
|  | ||||
| %queue-minutes.gsm%Minutes | ||||
|  | ||||
| %queue-seconds.gsm%Seconds | ||||
|   | ||||
							
								
								
									
										
											BIN
										
									
								
								sounds/queue-reporthold.gsm
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								sounds/queue-reporthold.gsm
									
									
									
									
									
										Executable file
									
								
							
										
											Binary file not shown.
										
									
								
							
		Reference in New Issue
	
	Block a user