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
@@ -1879,6 +1879,7 @@ struct queue_ent {
 	char announce[PATH_MAX];               /*!< Announcement to play for member when call is answered */
 	char context[AST_MAX_CONTEXT];         /*!< Context when user exits queue */
 	char digits[AST_MAX_EXTENSION];        /*!< Digits entered while in queue */
+	char chan_uniqueid[AST_MAX_UNIQUEID];
 	const char *predial_callee;            /*!< Gosub app arguments for outgoing calls.  NULL if not supplied. */
 	int valid_digits;                      /*!< Digits entered correspond to valid extension. Exited */
 	int pos;                               /*!< Where we are in the queue */
@@ -2428,6 +2429,20 @@ static struct ast_manager_event_blob *qu
 	RAII_VAR(struct ast_str *, event_string, NULL, ast_free);
 
 	channel_string = ast_manager_build_channel_state_string(obj->snapshot);
+	if (!channel_string) {
+		struct ast_json *json_obj = obj->blob;
+		const char *uniqueid;
+
+		json_obj = ast_json_object_get(json_obj, "Ast11Uniqueid");
+		uniqueid = ast_json_string_get(json_obj);
+		if (uniqueid) {
+			channel_string = ast_str_create(AST_MAX_UNIQUEID + 16);
+			if (channel_string) {
+				ast_str_set(&channel_string, 0, "Uniqueid: %s\r\n", uniqueid);
+			}
+		}
+	}
+
 	event_string = ast_manager_str_from_json_object(obj->blob, NULL);
 	if (!channel_string || !event_string) {
 		return NULL;
@@ -4793,10 +4808,11 @@ static void leave_queue(struct queue_ent
 				ast_devstate_changed(AST_DEVICE_NOT_INUSE, AST_DEVSTATE_CACHABLE, "Queue:%s", q->name);
 			}
 
-			blob = ast_json_pack("{s: s, s: i, s: i}",
+			blob = ast_json_pack("{s: s, s: i, s: i, s : s}",
 					     "Queue", q->name,
 					     "Position", qe->pos,
-					     "Count", q->count);
+					     "Count", q->count,
+					     "Ast11Uniqueid", qe->chan_uniqueid);
 			ast_channel_publish_cached_blob(qe->chan, queue_caller_leave_type(), blob);
 			ast_debug(1, "Queue '%s' Leave, Channel '%s'\n", q->name, ast_channel_name(qe->chan));
 			/* Take us out of the queue */
@@ -9112,6 +9128,8 @@ static int queue_exec(struct ast_channel
 	} else {
 		raise_penalty = INT_MAX;
 	}
+
+	ast_copy_string(qe.chan_uniqueid, ast_channel_uniqueid(chan), sizeof(qe.chan_uniqueid));
 	ast_channel_unlock(chan);
 
 	if (ast_test_flag(&opts, OPT_RINGING)) {
