The 'R' argument stops moh and indicates ringing once the agent is
ringing. This allows the person in the queue to know their call
is potentially about to be answered.
(closes issue #16384)
Reported by: haakon
Patches:
new_app_queue.c.patch uploaded by haakon (license 880)
Tested by: haakon, loloski, dvossel
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@236304
65c4cc65-6c06-0410-ace0-
fbb531ad65f3
<option name="r">
<para>Ring instead of playing MOH. Periodic Announcements are still made, if applicable.</para>
</option>
<option name="r">
<para>Ring instead of playing MOH. Periodic Announcements are still made, if applicable.</para>
</option>
+ <option name="R">
+ <para>Ring instead of playing MOH when a member channel is actually ringing.</para>
+ </option>
<option name="t">
<para>Allow the <emphasis>called</emphasis> user to transfer the calling user.</para>
</option>
<option name="t">
<para>Allow the <emphasis>called</emphasis> user to transfer the calling user.</para>
</option>
int pos; /*!< Where we are in the queue */
int prio; /*!< Our priority */
int last_pos_said; /*!< Last position we told the user */
int pos; /*!< Where we are in the queue */
int prio; /*!< Our priority */
int last_pos_said; /*!< Last position we told the user */
+ int ring_when_ringing; /*!< Should we only use ring indication when a channel is ringing? */
time_t last_periodic_announce_time; /*!< The last time we played a periodic announcement */
int last_periodic_announce_sound; /*!< The last periodic announcement we made */
time_t last_pos; /*!< Last time we told the user their position */
time_t last_periodic_announce_time; /*!< The last time we played a periodic announcement */
int last_periodic_announce_sound; /*!< The last periodic announcement we made */
time_t last_pos; /*!< Last time we told the user their position */
static void rna(int rnatime, struct queue_ent *qe, char *interface, char *membername, int pause)
{
ast_verb(3, "Nobody picked up in %d ms\n", rnatime);
static void rna(int rnatime, struct queue_ent *qe, char *interface, char *membername, int pause)
{
ast_verb(3, "Nobody picked up in %d ms\n", rnatime);
+
+ /* Stop ringing, and resume MOH if specified */
+ if (qe->ring_when_ringing) {
+ ast_indicate(qe->chan, -1);
+ ast_moh_start(qe->chan, qe->moh, NULL);
+ }
+
if (qe->parent->eventwhencalled) {
char vars[2048];
if (qe->parent->eventwhencalled) {
char vars[2048];
break;
case AST_CONTROL_RINGING:
ast_verb(3, "%s is ringing\n", ochan_name);
break;
case AST_CONTROL_RINGING:
ast_verb(3, "%s is ringing\n", ochan_name);
+
+ /* Start ring indication when the channel is ringing, if specified */
+ if (qe->ring_when_ringing) {
+ ast_moh_stop(qe->chan);
+ ast_indicate(qe->chan, AST_CONTROL_RINGING);
+ }
break;
case AST_CONTROL_OFFHOOK:
/* Ignore going off hook */
break;
case AST_CONTROL_OFFHOOK:
/* Ignore going off hook */
if (args.options && (strchr(args.options, 'r')))
ringing = 1;
if (args.options && (strchr(args.options, 'r')))
ringing = 1;
+ if (ringing != 1 && args.options && (strchr(args.options, 'R'))) {
+ qe.ring_when_ringing = 1;
+ } else {
+ qe.ring_when_ringing = 0;
+ }
+
if (args.options && (strchr(args.options, 'c')))
qcontinue = 1;
if (args.options && (strchr(args.options, 'c')))
qcontinue = 1;