Re: [asterisk-users] Cascading queues calls not joining unavailable queues.

2007-09-10 Thread Sander Smeenk
Quoting Mark Michelson ([EMAIL PROTECTED]):

  -- Called SCCP/231
  -- Called SCCP/220
  -- SCCP/220-009b is busy
  -- SCCP/231-009a is busy
  I'd like asterisk to quit trying when all agents are busy, but i don't
  think it's possible without scripting it yourself with some AGI-script
  that checks 'show queues' output.

 It sounds as though skinny devices may not be reporting their device 
 state correctly, and so the queue believes that the devices are 
 available.

Looking at the output of 'show queues' everything looks completely OK
when i put the phone in various states of 'being available'. I think
it's more an opinion on what 'unavailable' is.

 Or perhaps they are reporting a state that the queue does not know
 about. If this is the case, we may be dealing with a bug. I will test
 locally when I can get access to a Skinny phone and see what's going on.

We're using chan_sccp.so in combination with Cisco 796x phones (With CTU
ringtone! Whee! :P). Maybe it doesn't really work right because of this,
but as Asterisk *tells me* it knows nobody is answering a queue, i
wonder why it keeps trying ;-)

Kind regards,
Sander.
-- 
| If you jog backwards, will you gain weight?
| 1024D/08CEC94D - 34B3 3314 B146 E13C 70C8  9BDB D463 7E41 08CE C94D

___

Sign up now for AstriCon 2007!  September 25-28th.  http://www.astricon.net/ 

--Bandwidth and Colocation Provided by http://www.api-digital.com--

asterisk-users mailing list
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/asterisk-users


Re: [asterisk-users] Cascading queues calls not joining unavailable queues.

2007-09-10 Thread Sander Smeenk
Quoting James FitzGibbon ([EMAIL PROTECTED]):

 Unfortunately, the patches weren't done against trunk or the head of 1.4,
 and the author didn't file a disclaimer with Mantis, so the bug (
 http://bugs.digium.com/view.php?id=9165) was recently closed.

That's just too bad, as this might be a solution to our 'problems'. :)

-- 
| The less hair I have, the more head I get!
| 1024D/08CEC94D - 34B3 3314 B146 E13C 70C8  9BDB D463 7E41 08CE C94D

___

Sign up now for AstriCon 2007!  September 25-28th.  http://www.astricon.net/ 

--Bandwidth and Colocation Provided by http://www.api-digital.com--

asterisk-users mailing list
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/asterisk-users


Re: [asterisk-users] Cascading queues calls not joining unavailable queues.

2007-09-07 Thread Sander Smeenk
Quoting Mark Michelson ([EMAIL PROTECTED]):

  | app_queue.c: No one is answering queue '511' (7/2/0)
 Have you added additional queue members besides the ones you specified 
 in queues.conf?

Yes. There's a number of dynamic members that logged in to the group by
means of dialing extension '*511' which will call AddQueueMember()
through the dialplan.

But those members were all set to DND or were otherwise engaged at the
time i got the logging information i sent in my original post.

I tried again with a new queue, same config, but *only* the two members
specified as member = and i got this:

-- Called SCCP/231
-- Called SCCP/220
-- SCCP/220-009b is busy
-- SCCP/231-009a is busy
-- Called SCCP/231
-- Called SCCP/220
-- SCCP/220-009d is busy
-- SCCP/231-009c is busy
-- Stopped music on hold on SIP/10.50.0.2-082155b8
-- Playing 'queue-youarenext' (language 'nl')
-- Told SIP/10.50.0.2-082155b8 in test1 their queue position (which was 1)
-- Playing 'queue-thankyou' (language 'nl')
-- Started music on hold, class 'default', on SIP/10.50.0.2-082155b8
-- Called SCCP/231
-- Called SCCP/220
-- SCCP/220-009f is busy
-- SCCP/231-009e is busy

I'd like asterisk to quit trying when all agents are busy, but i don't
think it's possible without scripting it yourself with some AGI-script
that checks 'show queues' output.

Any ideas?

-Sndr.
-- 
| One nice thing about egotists: They don't talk about other people.
| 1024D/08CEC94D - 34B3 3314 B146 E13C 70C8  9BDB D463 7E41 08CE C94D

___

Sign up now for AstriCon 2007!  September 25-28th.  http://www.astricon.net/ 

--Bandwidth and Colocation Provided by http://www.api-digital.com--

asterisk-users mailing list
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/asterisk-users


Re: [asterisk-users] Cascading queues calls not joining unavailable queues.

2007-09-07 Thread Mark Michelson
Mark Michelson wrote:
 Sander Smeenk wrote:
   
 Quoting Mark Michelson ([EMAIL PROTECTED]):

   
 
 | app_queue.c: No one is answering queue '511' (7/2/0)
   
 
 Have you added additional queue members besides the ones you specified 
 in queues.conf?
 
   
 Yes. There's a number of dynamic members that logged in to the group by
 means of dialing extension '*511' which will call AddQueueMember()
 through the dialplan.

 But those members were all set to DND or were otherwise engaged at the
 time i got the logging information i sent in my original post.

 I tried again with a new queue, same config, but *only* the two members
 specified as member = and i got this:

 -- Called SCCP/231
 -- Called SCCP/220
 -- SCCP/220-009b is busy
 -- SCCP/231-009a is busy
 -- Called SCCP/231
 -- Called SCCP/220
 -- SCCP/220-009d is busy
 -- SCCP/231-009c is busy
 -- Stopped music on hold on SIP/10.50.0.2-082155b8
 -- Playing 'queue-youarenext' (language 'nl')
 -- Told SIP/10.50.0.2-082155b8 in test1 their queue position (which was 1)
 -- Playing 'queue-thankyou' (language 'nl')
 -- Started music on hold, class 'default', on SIP/10.50.0.2-082155b8
 -- Called SCCP/231
 -- Called SCCP/220
 -- SCCP/220-009f is busy
 -- SCCP/231-009e is busy

 I'd like asterisk to quit trying when all agents are busy, but i don't
 think it's possible without scripting it yourself with some AGI-script
 that checks 'show queues' output.

 Any ideas?
   
 

 It sounds as though skinny devices may not be reporting their device 
 state correctly, and so the queue believes that the devices are 
 available. Or perhaps they are reporting a state that the queue does not 
 know about. If this is the case, we may be dealing with a bug. I will 
 test locally when I can get access to a Skinny phone and see what's 
 going on.

 Then again, there may be a necessary setting in skinny.conf in order for 
 the device state to be correct. I know that with SIP, you have to set a 
 call-limit in order for the device state to be changed correctly. 
 Unfortunately, I haven't done any work with skinny devices, so I don't 
 know this information.

   
 -Sndr.
   
 

After talking in #asterisk-dev with those who wrote the joinempty 
option, it appears I was mistaken about its use. joinempty=strict will 
only not allow a caller to join the queue if the members are in a 
permanently unavailable state. A member being busy is not enough to 
trigger the joinempty=strict option. Since DND on most phones works the 
same way as a phone being busy, DND will not trigger the 
joinempty=strict option either.

For the behavior you want, I would suggest replacing the first call to 
Queue() with a call (or calls) to Dial() which ring all the phones you want.

 ___

 Sign up now for AstriCon 2007!  September 25-28th.  http://www.astricon.net/ 

 --Bandwidth and Colocation Provided by http://www.api-digital.com--

 asterisk-users mailing list
 To UNSUBSCRIBE or update options visit:
http://lists.digium.com/mailman/listinfo/asterisk-users
   


___

Sign up now for AstriCon 2007!  September 25-28th.  http://www.astricon.net/ 

--Bandwidth and Colocation Provided by http://www.api-digital.com--

asterisk-users mailing list
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/asterisk-users


Re: [asterisk-users] Cascading queues calls not joining unavailable queues.

2007-09-07 Thread James FitzGibbon
On 9/7/07, Mark Michelson [EMAIL PROTECTED] wrote:

 After talking in #asterisk-dev with those who wrote the joinempty
 option, it appears I was mistaken about its use. joinempty=strict will
 only not allow a caller to join the queue if the members are in a
 permanently unavailable state. A member being busy is not enough to
 trigger the joinempty=strict option. Since DND on most phones works the
 same way as a phone being busy, DND will not trigger the
 joinempty=strict option either.


It's also important to distinguish between DND-style busy (where in the case
of SIP the INVITE is rejected with a 480 temporarily unavailable) and the
internal channel state AST_CONTROL_BUSY.  For SIP, the latter occurs when
the use count exceeds the configured call-limit, and results in no INVITE
being sent.  The two also have drastically different behaviours when you
have members with penalties.

Assume we have five agents with penalty zero (A-E) and five agents with
penalty 1 (F-J). Assume also that 'ringinuse=no' is set for the queue.  If
A-D are in use and E is available but their phone is set to DND, then
app_queue will continually attempt to dequeue to agent E, never trying
agents F-J.  If E is busy because they have a call-limit of 2 and they have
two calls active, then app_queue will attempt to dequeue to agents F-J.

This has been a source of confusion for my users on several occasions.  IMO,
It also puts an unrealistic burden on agents to always put themselves on
pause before they walk away from their desk, and since agents are human and
sometimes forget to do this, prevents me from using agent penalties
extensively.  I just can't explain to non-technical people why one phone
keeps ringing while five other agents sit idle.  It makes no sense to them.

Someone developed a new strategy for app_queue they called XRRMEMORY that
will seek to higher-penalty agents after trying all lower-penalty agents.
They posted details about it on voip-info:

http://www.voip-info.org/wiki/index.php?page=Asterisk+cmd+Queue

(look at the second comment)

Unfortunately, the patches weren't done against trunk or the head of 1.4,
and the author didn't file a disclaimer with Mantis, so the bug (
http://bugs.digium.com/view.php?id=9165) was recently closed.

-- 
j.
___

Sign up now for AstriCon 2007!  September 25-28th.  http://www.astricon.net/ 

--Bandwidth and Colocation Provided by http://www.api-digital.com--

asterisk-users mailing list
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/asterisk-users

Re: [asterisk-users] Cascading queues calls not joining unavailable queues.

2007-09-07 Thread Atis
On 9/7/07, James FitzGibbon [EMAIL PROTECTED] wrote:
 On 9/7/07, Atis [EMAIL PROTECTED] wrote:
  Well, for that case i have a   RemoveQueueMember() after Dial, in case
  of ${DIALSTATUS}!=ANSWERED. That works great, except for agent
  complaints - that they are logged out from queue :D Would be a bit
  better to be able to set agent's status to Unavailable.
 

 This only works if you're using Local channels to bridge calls to agents.

 It doesn't work if you're using AddQueueMember with SIP channels, because
 the Dial() is implicit, so you have no control over what happens after that
 implicit Dial() finishes.

Nop, it works for Dial to SIP channels, if you set g option in Dial.

 And yes, I have good reason for using SIP channels.  We have externally
 driven automatic pausing (because the built-in wrapuptime is per-queue and
 therefore broken for any agent who is assigned to more than one queue), and
 neither form of Local (with or without /n) perform properly under this
 configuration.

This is something new for me. Are you sure about this? Isn't
wrapuptime taking in account agent state change? Because then, it's
really bad for direct calls (for me it's rare that agent have several
queues).

 It would be great if you could define arbitrary states in queues.conf, then
 have dialplan logic to set an agent to given state.  If you could indicate
 in the definition what things a state means (able to take a call, counted as
 part of ${QUEUE_MEMBER_COUNT()}, etc. that would truly be useful.

I think, it's too much complexity.. Do you need more statuses than
Unavailable, Pause or Busy. Combined with processing failed Dial(s) it
should be ok.

Regards,
Atis

-- 
Atis Lezdins,
IT Responsible of BEST Riga,
[EMAIL PROTECTED]
ICQ: 142239285
Skype: atis.lezdins
Cell Phone: +371 28806004 [Tele2, Latvia]
Work phone: +1 800 7502835 [Toll free, USA]
?BEST? - www.BEST.eu.org

___

Sign up now for AstriCon 2007!  September 25-28th.  http://www.astricon.net/ 

--Bandwidth and Colocation Provided by http://www.api-digital.com--

asterisk-users mailing list
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/asterisk-users


Re: [asterisk-users] Cascading queues calls not joining unavailable queues.

2007-09-07 Thread Mark Michelson
Sander Smeenk wrote:
 Quoting Mark Michelson ([EMAIL PROTECTED]):

   
 | app_queue.c: No one is answering queue '511' (7/2/0)
   
 Have you added additional queue members besides the ones you specified 
 in queues.conf?
 

 Yes. There's a number of dynamic members that logged in to the group by
 means of dialing extension '*511' which will call AddQueueMember()
 through the dialplan.

 But those members were all set to DND or were otherwise engaged at the
 time i got the logging information i sent in my original post.

 I tried again with a new queue, same config, but *only* the two members
 specified as member = and i got this:

 -- Called SCCP/231
 -- Called SCCP/220
 -- SCCP/220-009b is busy
 -- SCCP/231-009a is busy
 -- Called SCCP/231
 -- Called SCCP/220
 -- SCCP/220-009d is busy
 -- SCCP/231-009c is busy
 -- Stopped music on hold on SIP/10.50.0.2-082155b8
 -- Playing 'queue-youarenext' (language 'nl')
 -- Told SIP/10.50.0.2-082155b8 in test1 their queue position (which was 1)
 -- Playing 'queue-thankyou' (language 'nl')
 -- Started music on hold, class 'default', on SIP/10.50.0.2-082155b8
 -- Called SCCP/231
 -- Called SCCP/220
 -- SCCP/220-009f is busy
 -- SCCP/231-009e is busy

 I'd like asterisk to quit trying when all agents are busy, but i don't
 think it's possible without scripting it yourself with some AGI-script
 that checks 'show queues' output.

 Any ideas?
   

It sounds as though skinny devices may not be reporting their device 
state correctly, and so the queue believes that the devices are 
available. Or perhaps they are reporting a state that the queue does not 
know about. If this is the case, we may be dealing with a bug. I will 
test locally when I can get access to a Skinny phone and see what's 
going on.

Then again, there may be a necessary setting in skinny.conf in order for 
the device state to be correct. I know that with SIP, you have to set a 
call-limit in order for the device state to be changed correctly. 
Unfortunately, I haven't done any work with skinny devices, so I don't 
know this information.

 -Sndr.
   


___

Sign up now for AstriCon 2007!  September 25-28th.  http://www.astricon.net/ 

--Bandwidth and Colocation Provided by http://www.api-digital.com--

asterisk-users mailing list
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/asterisk-users


Re: [asterisk-users] Cascading queues calls not joining unavailable queues.

2007-09-07 Thread Atis
On 9/7/07, James FitzGibbon [EMAIL PROTECTED] wrote:
 It's also important to distinguish between DND-style busy (where in the case
 of SIP the INVITE is rejected with a 480 temporarily unavailable) and the
 internal channel state AST_CONTROL_BUSY.  For SIP, the latter occurs when
 the use count exceeds the configured call-limit, and results in no INVITE
 being sent.  The two also have drastically different behaviours when you
 have members with penalties.

 Assume we have five agents with penalty zero (A-E) and five agents with
 penalty 1 (F-J). Assume also that 'ringinuse=no' is set for the queue.  If
 A-D are in use and E is available but their phone is set to DND, then
 app_queue will continually attempt to dequeue to agent E, never trying
 agents F-J.  If E is busy because they have a call-limit of 2 and they have
 two calls active, then app_queue will attempt to dequeue to agents F-J.

 This has been a source of confusion for my users on several occasions.  IMO,
 It also puts an unrealistic burden on agents to always put themselves on
 pause before they walk away from their desk, and since agents are human and
 sometimes forget to do this, prevents me from using agent penalties
 extensively.  I just can't explain to non-technical people why one phone
 keeps ringing while five other agents sit idle.  It makes no sense to them.

Well, for that case i have a   RemoveQueueMember() after Dial, in case
of ${DIALSTATUS}!=ANSWERED. That works great, except for agent
complaints - that they are logged out from queue :D Would be a bit
better to be able to set agent's status to Unavailable.

Regards,
Atis

-- 
Atis Lezdins,
IT Responsible of BEST Riga,
[EMAIL PROTECTED]
ICQ: 142239285
Skype: atis.lezdins
Cell Phone: +371 28806004 [Tele2, Latvia]
Work phone: +1 800 7502835 [Toll free, USA]
?BEST? - www.BEST.eu.org

___

Sign up now for AstriCon 2007!  September 25-28th.  http://www.astricon.net/ 

--Bandwidth and Colocation Provided by http://www.api-digital.com--

asterisk-users mailing list
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/asterisk-users


Re: [asterisk-users] Cascading queues calls not joining unavailable queues.

2007-09-07 Thread James FitzGibbon
On 9/7/07, Atis [EMAIL PROTECTED] wrote:

 Well, for that case i have a   RemoveQueueMember() after Dial, in case
 of ${DIALSTATUS}!=ANSWERED. That works great, except for agent
 complaints - that they are logged out from queue :D Would be a bit
 better to be able to set agent's status to Unavailable.


This only works if you're using Local channels to bridge calls to agents.

It doesn't work if you're using AddQueueMember with SIP channels, because
the Dial() is implicit, so you have no control over what happens after that
implicit Dial() finishes.

And yes, I have good reason for using SIP channels.  We have externally
driven automatic pausing (because the built-in wrapuptime is per-queue and
therefore broken for any agent who is assigned to more than one queue), and
neither form of Local (with or without /n) perform properly under this
configuration.

It would be great if you could define arbitrary states in queues.conf, then
have dialplan logic to set an agent to given state.  If you could indicate
in the definition what things a state means (able to take a call, counted as
part of ${QUEUE_MEMBER_COUNT()}, etc. that would truly be useful.

-- 
j.
___

Sign up now for AstriCon 2007!  September 25-28th.  http://www.astricon.net/ 

--Bandwidth and Colocation Provided by http://www.api-digital.com--

asterisk-users mailing list
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/asterisk-users

Re: [asterisk-users] Cascading queues calls not joining unavailable queues.

2007-09-07 Thread James FitzGibbon
On 9/7/07, Atis [EMAIL PROTECTED] wrote:

  It doesn't work if you're using AddQueueMember with SIP channels,
 because
  the Dial() is implicit, so you have no control over what happens after
 that
  implicit Dial() finishes.

 Nop, it works for Dial to SIP channels, if you set g option in Dial.


I call AddQueueMember like this:

AddQueueMember(queuename,SIP/1234)

When I then call

Queue(queuename)

from my dialplan, the Dial() of SIP/1234 is implicit.  There is no priority
and extension that I control where Dial() is being executed, and thus there
is no priority + 1 for me to go to by using the 'g' option to Dial.

What you're talking about only works if I do this instead:

AddQueueMember(queuename,Local/[EMAIL PROTECTED])

And then somewhere in my dialplan I have:

[agents]
exten = 1234,1,Dial(SIP/1234,20)
exten = 1234,n,DoSomethingHereIfDollarDialStatusIsNotANSWERED

And then of course it makes no difference that agent 1234 is on SIP - they
could be Zap, IAX, Skinny, whatever.

 And yes, I have good reason for using SIP channels.  We have externally
  driven automatic pausing (because the built-in wrapuptime is per-queue
 and
  therefore broken for any agent who is assigned to more than one queue),
 and
  neither form of Local (with or without /n) perform properly under this
  configuration.

 This is something new for me. Are you sure about this? Isn't
 wrapuptime taking in account agent state change? Because then, it's
 really bad for direct calls (for me it's rare that agent have several
 queues).


Wrapuptime isn't a state in app_queue.  You'd think it was (agent goes from
in-use to in-wrapup, then back to available after the configured
number of seconds).  But what really happens is that the last time a member
took a call is part of the member struct, which is subordinate to the queue
struct (i.e. the last time a member took a call is stored
per-member-per-queue, not per-member).  You can test this easily by adding a
member to two queues, then sending a call to each queue spaced a minute
apart.  Then run 'queue show' on the CLI.  You'll see that the last was xxx
seconds ago differs for the same member in  the two queues.

When app_queue is attempting to dequeue a call to an available agent, it
checks if the current time minus the time of the last call for the member in
this queue is less than the wrapuptime, and if it is, it skips that member
and goes onto the next.

Because the last call time is per queue, you can have an agent take a call
on queue foo, hang up that call, and receive a call for queue bar one second
later, even if both queue foo and queue bar have a wrapuptime of 60 seconds
configured.

So, the built in wrapup has three major problems compared to the ACD system
we moved to Asterisk from:

- wrapuptime is per-queue-per-member, not per-member
- wrapuptime is invisible (the internal state of the member during the
wrapup is not in use, and only by looking at the last was xxx seconds
ago and knowing what the configured wrapuptime for the queue is can you
tell that a member is not actually eligible to take a call)
- wrapuptime cannot be shortened or extended by the agent (or anyone else
for that matter - I once mused with writing a dialplan function to set the
last call time to some arbitrary epoch value to make this viable)

These problems led to me developing this external wrapuptime system.

My original implementation for doing external auto-pause was to have an AMI
client watch for Hangup events.  When I did that, Local channels caused
problems.  If I used one form of Local channel (with or without the /n, I
forget now) then the hangup event was fired when the call was bridged to the
agent.  The other way, the hangup didn't fire until the agent was done with
the caller, but some equally unpleasant side effect manifested.  This was
all months ago, so I don't recall the specific problems I faced.

The AMI solution was too CPU intensive, so I switched to a system that
essentially tails queue_log.  When it seems COMPLETEAGENT or COMPLETECALLER
or TRANSFER, it uses AMI to pause the member, and schedules an unpause for x
seconds in the future.By using PauseQueueMember without a queue name, it
pauses an agent in all their queues, and if the agent needs to, he can
unpause themselves early or cancel the pending unpause to give themselves
more time to write notes.

This way of doing things might not be incompatible with Local channels, but
I'd have to do some tests.

-- 
j.
___

Sign up now for AstriCon 2007!  September 25-28th.  http://www.astricon.net/ 

--Bandwidth and Colocation Provided by http://www.api-digital.com--

asterisk-users mailing list
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/asterisk-users

Re: [asterisk-users] Cascading queues calls not joining unavailable queues.

2007-09-07 Thread Atis
On 9/7/07, James FitzGibbon [EMAIL PROTECTED] wrote:
 On 9/7/07, Atis [EMAIL PROTECTED] wrote:
   It doesn't work if you're using AddQueueMember with SIP channels,
 because
   the Dial() is implicit, so you have no control over what happens after
 that
   implicit Dial() finishes.
 
  Nop, it works for Dial to SIP channels, if you set g option in Dial.

 I call AddQueueMember like this:

 AddQueueMember(queuename,SIP/1234)

 When I then call

 Queue(queuename)

 from my dialplan, the Dial() of SIP/1234 is implicit.  There is no priority
 and extension that I control where Dial() is being executed, and thus there
 is no priority + 1 for me to go to by using the 'g' option to Dial.

 What you're talking about only works if I do this instead:

 AddQueueMember(queuename,Local/[EMAIL PROTECTED])

 And then somewhere in my dialplan I have:

 [agents]
 exten = 1234,1,Dial(SIP/1234,20)
 exten =
 1234,n,DoSomethingHereIfDollarDialStatusIsNotANSWERED

 And then of course it makes no difference that agent 1234 is on SIP - they
 could be Zap, IAX, Skinny, whatever.

   And yes, I have good reason for using SIP channels.  We have externally
   driven automatic pausing (because the built-in wrapuptime is per-queue
 and
   therefore broken for any agent who is assigned to more than one queue),
 and
   neither form of Local (with or without /n) perform properly under this
   configuration.
 
  This is something new for me. Are you sure about this? Isn't
  wrapuptime taking in account agent state change? Because then, it's
  really bad for direct calls (for me it's rare that agent have several
  queues).

 Wrapuptime isn't a state in app_queue.  You'd think it was (agent goes from
 in-use to in-wrapup, then back to available after the configured
 number of seconds).  But what really happens is that the last time a member
 took a call is part of the member struct, which is subordinate to the queue
 struct ( i.e. the last time a member took a call is stored
 per-member-per-queue, not per-member).  You can test this easily by adding a
 member to two queues, then sending a call to each queue spaced a minute
 apart.  Then run 'queue show' on the CLI.  You'll see that the last was xxx
 seconds ago differs for the same member in  the two queues.

 When app_queue is attempting to dequeue a call to an available agent, it
 checks if the current time minus the time of the last call for the member in
 this queue is less than the wrapuptime, and if it is, it skips that member
 and goes onto the next.

 Because the last call time is per queue, you can have an agent take a call
 on queue foo, hang up that call, and receive a call for queue bar one second
 later, even if both queue foo and queue bar have a wrapuptime of 60 seconds
 configured.

 So, the built in wrapup has three major problems compared to the ACD system
 we moved to Asterisk from:

 - wrapuptime is per-queue-per-member, not per-member
 - wrapuptime is invisible (the internal state of the member during the
 wrapup is not in use, and only by looking at the last was xxx seconds
 ago and knowing what the configured wrapuptime for the queue is can you
 tell that a member is not actually eligible to take a call)
 - wrapuptime cannot be shortened or extended by the agent (or anyone else
 for that matter - I once mused with writing a dialplan function to set the
 last call time to some arbitrary epoch value to make this viable)

 These problems led to me developing this external wrapuptime system.
 My original implementation for doing external auto-pause was to have an AMI
 client watch for Hangup events.  When I did that, Local channels caused
 problems.  If I used one form of Local channel (with or without the /n, I
 forget now) then the hangup event was fired when the call was bridged to the
 agent.  The other way, the hangup didn't fire until the agent was done with
 the caller, but some equally unpleasant side effect manifested.  This was
 all months ago, so I don't recall the specific problems I faced.

 The AMI solution was too CPU intensive, so I switched to a system that
 essentially tails queue_log.  When it seems COMPLETEAGENT or COMPLETECALLER
 or TRANSFER, it uses AMI to pause the member, and schedules an unpause for x
 seconds in the future.By using PauseQueueMember without a queue name, it
 pauses an agent in all their queues, and if the agent needs to, he can
 unpause themselves early or cancel the pending unpause to give themselves
 more time to write notes.

 This way of doing things might not be incompatible with Local channels, but
 I'd have to do some tests.

Wow, hearing this is really interesting, and probably very valuable
for a lot of people. I just wrote a function to pause agent after
receiving call - business didn't wanted to have wrapuptime, as it
varies a lot for agents, and they also are writing notes after call.
So, they manually have to do unpause. I'm not sure about cancel
pending unpause, because that way agent is distracted from taking

Re: [asterisk-users] Cascading queues calls not joining unavailable queues.

2007-09-07 Thread Atis
 I'd like asterisk to quit trying when all agents are busy, but i don't
 think it's possible without scripting it yourself with some AGI-script
 that checks 'show queues' output.

There was recent discussion on asterisk-dev about adding
QUEUE(AVAILABLE), QUEUE(MEMBERS) and QUEUE(TOTAL).. or something that
way. You just need to wait a bit, because there was already volunteer
ready to code it.

Also there was something about available members, but i'm not quite
sure that it's true.. you can read more here:
http://lists.digium.com/pipermail/asterisk-dev/2007-September/029322.html

Regards,
Atis

-- 
Atis Lezdins,
IT Responsible of BEST Riga,
[EMAIL PROTECTED]
ICQ: 142239285
Skype: atis.lezdins
Cell Phone: +371 28806004 [Tele2, Latvia]
Work phone: +1 800 7502835 [Toll free, USA]
?BEST? - www.BEST.eu.org

___

Sign up now for AstriCon 2007!  September 25-28th.  http://www.astricon.net/ 

--Bandwidth and Colocation Provided by http://www.api-digital.com--

asterisk-users mailing list
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/asterisk-users


[asterisk-users] Cascading queues calls not joining unavailable queues.

2007-09-06 Thread Sander Smeenk
Hi! - Trying a repost, my first message didn't seem to make the list.

I have one main queue with agents that take calls to our main
phonenumber. Now i want to cascade calls through to the fallback queue
immediately when all the agents in the first queue are 'unreachable' in
any way (be it OffHook, DND, Paused, etc...)

Somehow calls still keep hanging around in the main queue even if agents
are Busy or 'DND' for the specified timeout before returning to the
dialplan which then calls the next queue.

The extensions.conf section that places the call on the main queue and
afterwards the second queue:

| exten = 511,n,Queue(511,t,,,30)  ; Main queue
| exten = 511,n,Queue(611,t,,,30)  ; Fallback queue

And this is my queues.conf accordingly. I'll only show the main queue
config, as the fallback queue config is EXACTLY the same, except for the
queuemembers ofcourse.

| [511]
| servicelevel = 30
| announce = voice/connected
| musiconhold = default
| strategy = ringall
| context = vanuit-queues
| timeout = 10 
| wrapuptime = 10
| announce-frequency = 10
| announce-holdtime = no
| joinempty = strict
| leavewhenempty = yes
| member = SCCP/206
| member = SCCP/210

This selection of loglines shows Asterisk is aware that noone is answering
the queue:

| logger.c: -- Goto (groepen,511,1)
| logger.c: -- Called SCCP/210
| logger.c: -- Called SCCP/206
| logger.c: -- SCCP/206 is busy
| logger.c: -- SCCP/210 is busy
| app_queue.c: No one is answering queue '511' (7/2/0)
| logger.c: -- Stopped music on hold on SIP/10.10.1.1
| logger.c: -- Told SIP/10.10.1.1 in 511 their queue position (which was 1)
| logger.c: -- Started music on hold, class 'default', on SIP/10.10.1.1
| logger.c: -- Called SCCP/210
| logger.c: -- Called SCCP/206
| logger.c: -- SCCP/206-0021 is busy
| logger.c: -- SCCP/210-0020 is busy
| app_queue.c: No one is answering queue '511' (7/2/0)
| [ ... etc ... ]

What am i doing wrong here? Can anyone shed some light?

Thanks!
Sander.
-- 
| The short fortune teller who escaped from prison: a small medium at large.
| 1024D/08CEC94D - 34B3 3314 B146 E13C 70C8  9BDB D463 7E41 08CE C94D


-- 
| The story of my life; warm beer and cold women.
| 1024D/08CEC94D - 34B3 3314 B146 E13C 70C8  9BDB D463 7E41 08CE C94D

___

Sign up now for AstriCon 2007!  September 25-28th.  http://www.astricon.net/ 

--Bandwidth and Colocation Provided by http://www.api-digital.com--

asterisk-users mailing list
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/asterisk-users


Re: [asterisk-users] Cascading queues calls not joining unavailable queues.

2007-09-06 Thread Mark Michelson

 | app_queue.c: No one is answering queue '511' (7/2/0)
   

The 7/2/0 indicates that you have 7 members in your queue and 2 are 
busy. This would indicate that even though those 2 members are busy, 
there are still 5 more available members for taking calls. Since there 
are available members, you stay in the queue.

Have you added additional queue members besides the ones you specified 
in queues.conf?

Mark Michelson

___

Sign up now for AstriCon 2007!  September 25-28th.  http://www.astricon.net/ 

--Bandwidth and Colocation Provided by http://www.api-digital.com--

asterisk-users mailing list
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/asterisk-users