<tt><font size=2>asterisk-users-bounces@lists.digium.com wrote on 03/25/2015
01:38:26 PM:<br>
> I'm looking at enabling autopause on one of my queues where my queue<br>
> members are bad about leaving their desks without pausing.<br>
</font></tt>
<br><tt><font size=2>> The problem I see is that when the queue pauses
an Member it doesn't<br>
> jump into the dialplan to do so which means my handy device state
<br>
> and asterisk database driven Light for the Member showing their <br>
> paused status won't update.<br>
</font></tt>
<br><tt><font size=2>> My idea for solving this problem is to check
the status of my Member<br>
> in the queue before I send the calls into it and toggle on the <br>
> Members Paused light at that point in time if they are paused.<br>
</font></tt>
<br><tt><font size=2>> Sadly I don't see a way to determine if my Staff
are paused or not <br>
> from the dialplan, There doesn't appear to be a function to retrieve<br>
> the status of the members in the queue.<br>
</font></tt>
<br><tt><font size=2>> Does the list have any suggestions?</font></tt>
<br>
<br><tt><font size=2>First, let me say I feel dirty for even posting this.
It is probably far from ideal, but it does get the job done. I had the
same issue. Also, I am using Asterisk 11. I just looked and it doesn't
appear that the QUEUE_MEMBER function supports the paused option in 1.8.
To be honest, I am not sure if there is a good replacement for what I have
done below in the 1.8 series.</font></tt>
<br>
<br><tt><font size=2>[sub_autopause_status]</font></tt>
<br><tt><font size=2>exten => s,1,NoOp(Checking for autopaused members
for ${arg1} queue)</font></tt>
<br><tt><font size=2>  same => n,Set(MEMBERS=${QUEUE_MEMBER_LIST(${arg1})})</font></tt>
<br><tt><font size=2>  same => n,Set(i=1)</font></tt>
<br><tt><font size=2>  same => n,Set(max=${FIELDQTY(MEMBERS,,)})</font></tt>
<br>
<br><tt><font size=2>  same => n,While($[${i} <= ${max}])</font></tt>
<br><tt><font size=2>  same => n,Set(MEMBER=${CUT(MEMBERS,\,,${i})})</font></tt>
<br><tt><font size=2>  same => n,Set(STATUS=${QUEUE_MEMBER(${arg1},paused,${MEMBER})})</font></tt>
<br><tt><font size=2>  same => n,Set(MEMBER_EXT=${CUT(MEMBER,\/,2)})</font></tt>
<br><tt><font size=2>  same => n,ExecIf($["${STATUS}"
= "0"]?System(echo "IN" > /var/spool/asterisk/status/agent-${MEMBER_EXT}-status.txt))</font></tt>
<br><tt><font size=2>  same => n,ExecIf($["${STATUS}"
= "1"]?System(echo "PAU" > /var/spool/asterisk/status/agent-${MEMBER_EXT}-status.txt))</font></tt>
<br><tt><font size=2>  same => n,NoOp(${MEMBER}: ${STATUS})</font></tt>
<br><tt><font size=2>  same => n,Set(i=$[${i} + 1])</font></tt>
<br><tt><font size=2>  same => n,EndWhile()</font></tt>
<br>
<br><tt><font size=2>  same => n,Return()</font></tt>
<br>
<br>
<br><tt><font size=2>So, as an explanation, I have multiple queues and
agents who autopause. I show their status on their phones, hence the System(echo...)
commands to the /var/spool/asterisk/status directory. Those files are used
to generate a simple web page that is shown on their phones that lets them
see their status. You should be able to adapt that to what you do.</font></tt>
<br>
<br><tt><font size=2>Basically, you pass the queue name into the subroutine
as arg1. The subroutine gets a list of every person logged into that queue
and then loops through checking the status of each person using the QUEUE_MEMBER
function.</font></tt>
<br>
<br><tt><font size=2>It isn't elegant and if you have a lot of queues/queue
members to check, it will constitute a lot of looping, but it does work.
Like you, I would like to have a way to check the pause status of a member
easier. If the queue application could call a subroutine with it autopaused
someone, that would actually make an elegant solution, but for now, this
was the way I could see to do it.</font></tt>
<br>
<br><tt><font size=2>You could maybe call a script that would parse the
queue_log file looking for an agents status and pass that back into the
dialplan.</font></tt>