]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
app_queue: Add music on hold option to Queue.
authorNaveen Albert <asterisk@phreaknet.org>
Sat, 22 Jan 2022 15:53:27 +0000 (15:53 +0000)
committerKevin Harwell <kharwell@digium.com>
Fri, 8 Apr 2022 21:33:38 +0000 (16:33 -0500)
Adds the m option to the Queue application, which allows a
music on hold class to be specified at runtime which will
override the class configured in queues.conf.

This option functions like the m option to Dial.

ASTERISK-29876 #close

Change-Id: Ie25a48569cf8755c305c9438b1ed292c3adcf8d7

apps/app_queue.c
configs/samples/queues.conf.sample
doc/CHANGES-staging/app_queue_music.txt [new file with mode: 0644]

index 35054130a437d00fae694a1a65fcc1a8efe963e0..288c0ff066e1b8d95a5c85307000aaddf099467f 100644 (file)
                                        <option name="H">
                                                <para>Allow <emphasis>caller</emphasis> to hang up by pressing <literal>*</literal>.</para>
                                        </option>
-                                       <option name="n">
-                                               <para>No retries on the timeout; will exit this application and
-                                               go to the next step.</para>
-                                       </option>
                                        <option name="i">
                                                <para>Ignore call forward requests from queue members and do nothing
                                                when they are requested.</para>
                                                <para>Asterisk will ignore any connected line update requests or any redirecting party
                                                update requests it may receive on this dial attempt.</para>
                                        </option>
+                                       <option name="k">
+                                               <para>Allow the <emphasis>called</emphasis> party to enable parking of the call by sending
+                                               the DTMF sequence defined for call parking in <filename>features.conf</filename>.</para>
+                                       </option>
+                                       <option name="K">
+                                               <para>Allow the <emphasis>calling</emphasis> party to enable parking of the call by sending
+                                               the DTMF sequence defined for call parking in <filename>features.conf</filename>.</para>
+                                       </option>
+                                       <option name="m">
+                                               <para>Custom music on hold class to use, which will override the music on hold class configured
+                                               in <filename>queues.conf</filename>, if specified.</para>
+                                               <para>Note that CHANNEL(musicclass), if set, will still override this option.</para>
+                                       </option>
+                                       <option name="n">
+                                               <para>No retries on the timeout; will exit this application and
+                                               go to the next step.</para>
+                                       </option>
                                        <option name="r">
                                                <para>Ring instead of playing MOH. Periodic Announcements are still made, if applicable.</para>
                                        </option>
                                                <para>Allow the <emphasis>calling</emphasis> user to write the conversation to
                                                disk via Monitor.</para>
                                        </option>
-                                       <option name="k">
-                                               <para>Allow the <emphasis>called</emphasis> party to enable parking of the call by sending
-                                               the DTMF sequence defined for call parking in <filename>features.conf</filename>.</para>
-                                       </option>
-                                       <option name="K">
-                                               <para>Allow the <emphasis>calling</emphasis> party to enable parking of the call by sending
-                                               the DTMF sequence defined for call parking in <filename>features.conf</filename>.</para>
-                                       </option>
                                        <option name="x">
                                                <para>Allow the <emphasis>called</emphasis> user to write the conversation
                                                to disk via MixMonitor.</para>
@@ -1468,12 +1473,14 @@ enum {
        OPT_CALLER_AUTOMON =         (1 << 18),
        OPT_PREDIAL_CALLEE =         (1 << 19),
        OPT_PREDIAL_CALLER =         (1 << 20),
+       OPT_MUSICONHOLD_CLASS =      (1 << 21),
 };
 
 enum {
        OPT_ARG_CALLEE_GO_ON = 0,
        OPT_ARG_PREDIAL_CALLEE,
        OPT_ARG_PREDIAL_CALLER,
+       OPT_ARG_MUSICONHOLD_CLASS,
        /* note: this entry _MUST_ be the last one in the enum */
        OPT_ARG_ARRAY_SIZE
 };
@@ -1491,6 +1498,7 @@ AST_APP_OPTIONS(queue_exec_options, BEGIN_OPTIONS
        AST_APP_OPTION('I', OPT_IGNORE_CONNECTEDLINE),
        AST_APP_OPTION('k', OPT_CALLEE_PARK),
        AST_APP_OPTION('K', OPT_CALLER_PARK),
+       AST_APP_OPTION_ARG('m', OPT_MUSICONHOLD_CLASS, OPT_ARG_MUSICONHOLD_CLASS),
        AST_APP_OPTION('n', OPT_NO_RETRY),
        AST_APP_OPTION('r', OPT_RINGING),
        AST_APP_OPTION('R', OPT_RING_WHEN_RINGING),
@@ -8625,6 +8633,12 @@ static int queue_exec(struct ast_channel *chan, const char *data)
                ast_app_exec_sub(NULL, chan, opt_args[OPT_ARG_PREDIAL_CALLER], 0);
        }
 
+       /* Music on hold class override */
+       if (ast_test_flag(&opts, OPT_MUSICONHOLD_CLASS)
+               && !ast_strlen_zero(opt_args[OPT_ARG_MUSICONHOLD_CLASS])) {
+               ast_copy_string(qe.moh, opt_args[OPT_ARG_MUSICONHOLD_CLASS], sizeof(qe.moh));
+       }
+
        copy_rules(&qe, args.rule);
        qe.pr = AST_LIST_FIRST(&qe.qe_rules);
 check_turns:
index aa7e03d34b133208256106aa509fc339db3e3a1e..cdaf92342fa8c663045f67af477c88a012602b47 100644 (file)
@@ -64,8 +64,9 @@ monitor-type = MixMonitor
 ;
 ; Musicclass sets which music applies for this particular call queue.
 ; The only class which can override this one is if the MOH class is set
+; using the m option when calling the Queue application or if set
 ; directly on the channel using Set(CHANNEL(musicclass)=whatever) in the
-; dialplan.
+; dialplan (the latter of which overrides everything).
 ;
 ;musicclass = default
 ;
diff --git a/doc/CHANGES-staging/app_queue_music.txt b/doc/CHANGES-staging/app_queue_music.txt
new file mode 100644 (file)
index 0000000..254a45d
--- /dev/null
@@ -0,0 +1,5 @@
+Subject: app_queue
+
+The m option now allows an override music on hold
+class to be specified for the Queue application
+within the dialplan.