Index: asterisk-22.8.2/apps/app_queue.c
===================================================================
--- asterisk-22.8.2.orig/apps/app_queue.c
+++ asterisk-22.8.2/apps/app_queue.c
@@ -6532,7 +6532,7 @@ enum agent_complete_reason {
 /*! \brief Send out AMI message with member call completion status information */
 static void send_agent_complete(const char *queuename, struct ast_channel_snapshot *caller,
 	struct ast_channel_snapshot *peer, const struct member *member, time_t holdstart,
-	time_t callstart, enum agent_complete_reason rsn)
+	time_t callstart, const char *caller_uniqueid, int wrapuptime, enum agent_complete_reason rsn)
 {
 	const char *reason = NULL;	/* silence dumb compilers */
 	RAII_VAR(struct ast_json *, blob, NULL, ast_json_unref);
@@ -6549,16 +6549,21 @@ static void send_agent_complete(const ch
 		break;
 	}
 
-	blob = ast_json_pack("{s: s, s: s, s: s, s: I, s: I, s: s}",
+	blob = ast_json_pack("{s: s, s: s, s: s, s: I, s: I, s: i, s: s}",
 		"Queue", queuename,
 		"Interface", member->interface,
 		"MemberName", member->membername,
 		"HoldTime", (ast_json_int_t)(callstart - holdstart),
 		"TalkTime", (ast_json_int_t)(time(NULL) - callstart),
+		"WrapupTime", wrapuptime,
 		"Reason", reason ?: "");
 
 	queue_publish_multi_channel_snapshot_blob(ast_queue_topic(queuename), caller, peer,
 			queue_agent_complete_type(), blob);
+
+	if (wrapuptime > 0) {
+		ast_queue_log(queuename, caller_uniqueid, member->membername, "WRAPUPSTART", "%d", wrapuptime);
+	}
 }
 
 static void queue_agent_cb(void *userdata, struct stasis_subscription *sub,
@@ -6853,7 +6858,7 @@ static void handle_blind_transfer(void *
 			(long) (time(NULL) - queue_data->starttime), queue_data->caller_pos);
 
 	send_agent_complete(queue_data->queue->name, caller_snapshot, member_snapshot, queue_data->member,
-			queue_data->holdstart, queue_data->starttime, TRANSFER);
+			queue_data->holdstart, queue_data->starttime, queue_data->caller_uniqueid, queue_data->queue->wrapuptime, TRANSFER);
 	update_queue(queue_data->queue, queue_data->member, queue_data->callcompletedinsl,
 			queue_data->starttime);
 	remove_stasis_subscriptions(queue_data);
@@ -6911,7 +6916,7 @@ static void handle_attended_transfer(voi
 	log_attended_transfer(queue_data, atxfer_msg);
 
 	send_agent_complete(queue_data->queue->name, caller_snapshot, member_snapshot, queue_data->member,
-			queue_data->holdstart, queue_data->starttime, TRANSFER);
+			queue_data->holdstart, queue_data->starttime, queue_data->caller_uniqueid, queue_data->queue->wrapuptime, TRANSFER);
 	update_queue(queue_data->queue, queue_data->member, queue_data->callcompletedinsl,
 			queue_data->starttime);
 	remove_stasis_subscriptions(queue_data);
@@ -7117,7 +7122,7 @@ static void handle_hangup(void *userdata
 		(long) (time(NULL) - queue_data->starttime), queue_data->caller_pos);
 
 	send_agent_complete(queue_data->queue->name, caller_snapshot, member_snapshot, queue_data->member,
-			queue_data->holdstart, queue_data->starttime, reason);
+			queue_data->holdstart, queue_data->starttime, queue_data->caller_uniqueid, queue_data->queue->wrapuptime, reason);
 	update_queue(queue_data->queue, queue_data->member, queue_data->callcompletedinsl,
 			queue_data->starttime);
 	remove_stasis_subscriptions(queue_data);
