Index: asterisk-22.8.2/main/ccss.c
===================================================================
--- asterisk-22.8.2.orig/main/ccss.c
+++ asterisk-22.8.2/main/ccss.c
@@ -2698,6 +2698,8 @@ struct cc_generic_agent_pvt {
 static int cc_generic_agent_init(struct ast_cc_agent *agent, struct ast_channel *chan)
 {
 	struct cc_generic_agent_pvt *generic_pvt = ast_calloc(1, sizeof(*generic_pvt));
+	const char *exten;
+	const char *context;
 
 	if (!generic_pvt) {
 		return -1;
@@ -2710,8 +2712,18 @@ static int cc_generic_agent_init(struct
 	if (ast_channel_caller(chan)->id.name.valid && ast_channel_caller(chan)->id.name.str) {
 		ast_copy_string(generic_pvt->cid_name, ast_channel_caller(chan)->id.name.str, sizeof(generic_pvt->cid_name));
 	}
-	ast_copy_string(generic_pvt->exten, ast_channel_exten(chan), sizeof(generic_pvt->exten));
-	ast_copy_string(generic_pvt->context, ast_channel_context(chan), sizeof(generic_pvt->context));
+	exten = pbx_builtin_getvar_helper(chan, "CC_EXTEN");
+	if (!exten || ast_strlen_zero(exten)) {
+		exten = ast_channel_exten(chan);
+	}
+
+	context = pbx_builtin_getvar_helper(chan, "CC_CONTEXT");
+	if (!context || ast_strlen_zero(context)) {
+		context = ast_channel_context(chan);
+	}
+
+	ast_copy_string(generic_pvt->exten, exten, sizeof(generic_pvt->exten));
+	ast_copy_string(generic_pvt->context, context, sizeof(generic_pvt->context));
 	agent->private_data = generic_pvt;
 	ast_set_flag(agent, AST_CC_AGENT_SKIP_OFFER);
 	return 0;
