]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
app_mixmonitor: Add option to use real Caller ID for voicemail.
authorNaveen Albert <asterisk@phreaknet.org>
Fri, 4 Nov 2022 11:04:08 +0000 (11:04 +0000)
committerFriendly Automation <jenkins2@gerrit.asterisk.org>
Thu, 8 Dec 2022 14:04:35 +0000 (08:04 -0600)
MixMonitor currently uses the Connected Line as the Caller ID
for voicemails. This is due to the implementation being written
this way for use with Digium phones. However, in general this
is not correct for generic usage in the dialplan, and people
may need the real Caller ID instead. This adds an option to do that.

ASTERISK-30286 #close

Change-Id: I3d0ce76dfe75e2a614e0f709ab27acbd2478267c

apps/app_mixmonitor.c
doc/CHANGES-staging/app_mixmonitor_clid.txt [new file with mode: 0644]

index e2b9e8c148bc57307934bec9bb41d03d9a900e4c..1592c4077adadc5fb70edc3b2f366e4c01286000 100644 (file)
                                                <para>Play a periodic beep while this call is being recorded.</para>
                                                <argument name="interval"><para>Interval, in seconds. Default is 15.</para></argument>
                                        </option>
+                                       <option name="c">
+                                               <para>Use the real Caller ID from the channel for the voicemail Caller ID.</para>
+                                               <para>By default, the Connected Line is used. If you want the channel caller's
+                                               real number, you may need to specify this option.</para>
+                                       </option>
                                        <option name="d">
                                                <para>Delete the recording file as soon as MixMonitor is done with it.</para>
                                                <para>For example, if you use the m option to dispatch the recording to a voicemail box,
@@ -413,6 +418,7 @@ enum mixmonitor_flags {
        MUXFLAG_DEPRECATED_RWSYNC = (1 << 14),
        MUXFLAG_NO_RWSYNC = (1 << 15),
        MUXFLAG_AUTO_DELETE = (1 << 16),
+       MUXFLAG_REAL_CALLERID = (1 << 17),
 };
 
 enum mixmonitor_args {
@@ -433,6 +439,7 @@ AST_APP_OPTIONS(mixmonitor_opts, {
        AST_APP_OPTION('a', MUXFLAG_APPEND),
        AST_APP_OPTION('b', MUXFLAG_BRIDGED),
        AST_APP_OPTION_ARG('B', MUXFLAG_BEEP, OPT_ARG_BEEP_INTERVAL),
+       AST_APP_OPTION('c', MUXFLAG_REAL_CALLERID),
        AST_APP_OPTION('d', MUXFLAG_AUTO_DELETE),
        AST_APP_OPTION('p', MUXFLAG_BEEP_START),
        AST_APP_OPTION('P', MUXFLAG_BEEP_STOP),
@@ -1035,20 +1042,37 @@ static int launch_monitor_thread(struct ast_channel *chan, const char *filename,
 
        if (!ast_strlen_zero(recipients)) {
                char callerid[256];
-               struct ast_party_connected_line *connected;
 
                ast_channel_lock(chan);
 
-               /* We use the connected line of the invoking channel for caller ID. */
-
-               connected = ast_channel_connected(chan);
-               ast_debug(3, "Connected Line CID = %d - %s : %d - %s\n", connected->id.name.valid,
-                       connected->id.name.str, connected->id.number.valid,
-                       connected->id.number.str);
-               ast_callerid_merge(callerid, sizeof(callerid),
-                       S_COR(connected->id.name.valid, connected->id.name.str, NULL),
-                       S_COR(connected->id.number.valid, connected->id.number.str, NULL),
-                       "Unknown");
+               /* We use the connected line of the invoking channel for caller ID,
+                * unless we've been told to use the Caller ID.
+                * The initial use for this relied on Connected Line to get the
+                * actual number for recording with Digium phones,
+                * but in generic use the Caller ID is likely what people want.
+                */
+
+               if (ast_test_flag(mixmonitor, MUXFLAG_REAL_CALLERID)) {
+                       struct ast_party_caller *caller;
+                       caller = ast_channel_caller(chan);
+                       ast_debug(3, "Caller ID = %d - %s : %d - %s\n", caller->id.name.valid,
+                               caller->id.name.str, caller->id.number.valid,
+                               caller->id.number.str);
+                       ast_callerid_merge(callerid, sizeof(callerid),
+                               S_COR(caller->id.name.valid, caller->id.name.str, NULL),
+                               S_COR(caller->id.number.valid, caller->id.number.str, NULL),
+                               "Unknown");
+               } else {
+                       struct ast_party_connected_line *connected;
+                       connected = ast_channel_connected(chan);
+                       ast_debug(3, "Connected Line CID = %d - %s : %d - %s\n", connected->id.name.valid,
+                               connected->id.name.str, connected->id.number.valid,
+                               connected->id.number.str);
+                       ast_callerid_merge(callerid, sizeof(callerid),
+                               S_COR(connected->id.name.valid, connected->id.name.str, NULL),
+                               S_COR(connected->id.number.valid, connected->id.number.str, NULL),
+                               "Unknown");
+               }
 
                ast_string_field_set(mixmonitor, call_context, ast_channel_context(chan));
                ast_string_field_set(mixmonitor, call_macrocontext, ast_channel_macrocontext(chan));
diff --git a/doc/CHANGES-staging/app_mixmonitor_clid.txt b/doc/CHANGES-staging/app_mixmonitor_clid.txt
new file mode 100644 (file)
index 0000000..a8331ec
--- /dev/null
@@ -0,0 +1,5 @@
+Subject: app_mixmonitor
+
+Adds the c option to use the real Caller ID on
+the channel in voicemail recordings as opposed
+to the Connected Line.