diff --git a/CHANGES b/CHANGES
index e391d1e1749402037ea92bd7b1b3a8bc1a42bf5a..ea67101eaac92011fe5aa19d783f09857b637c59 100644
--- a/CHANGES
+++ b/CHANGES
@@ -118,6 +118,13 @@ app_voicemail
  * Added 'fromstring' field to the voicemail boxes. If set, it will override
    the global 'fromstring' field on a per-mailbox basis.
 
+func_channel
+------------------
+ * Added CHANNEL(callid) to retrieve the call log tag associated with the
+   channel.  e.g., [C-00000000]  Dialplan now has access to the call log
+   search key associated with the channel so it can be saved in case there
+   is a problem with the call.
+
 res_pjsip
 ------------------
  * A new transport parameter 'symmetric_transport' has been added.
diff --git a/funcs/func_channel.c b/funcs/func_channel.c
index 27e9f41bf7d2f341b2d92336f4b180b3cfe4c1bf..eb3ceddb45aeae58a3adc6857905dcbad87e95e3 100644
--- a/funcs/func_channel.c
+++ b/funcs/func_channel.c
@@ -233,6 +233,10 @@
 					<enum name="max_forwards">
 						<para>R/W The maximum number of forwards allowed.</para>
 					</enum>
+					<enum name="callid">
+						<para>R/O Call identifier log tag associated with the channel
+						e.g., <literal>[C-00000000]</literal>.</para>
+					</enum>
 				</enumlist>
 				<xi:include xpointer="xpointer(/docs/info[@name='CHANNEL'])" />
 			</parameter>
@@ -450,6 +454,16 @@ static int func_channel_read(struct ast_channel *chan, const char *function,
 		ast_channel_lock(chan);
 		snprintf(buf, len, "%d", ast_max_forwards_get(chan));
 		ast_channel_unlock(chan);
+	} else if (!strcasecmp(data, "callid")) {
+		ast_callid callid;
+
+		buf[0] = '\0';
+		ast_channel_lock(chan);
+		callid = ast_channel_callid(chan);
+		if (callid) {
+			ast_callid_strnprint(buf, len, callid);
+		}
+		ast_channel_unlock(chan);
 	} else if (!ast_channel_tech(chan) || !ast_channel_tech(chan)->func_channel_read || ast_channel_tech(chan)->func_channel_read(chan, function, data, buf, len)) {
 		ast_log(LOG_WARNING, "Unknown or unavailable item requested: '%s'\n", data);
 		ret = -1;