I’m trying to implement a very simple call queue for a small, low volume helpdesk. We have 2-5 agents, and rarely does the queue get more than 1 or 2 callers deep. I’m using the ringall strategy and I want calls answered in FIFO order.
Say caller A calls the queue, and there is one member logged in. Asterisk rings the member.
Now, caller B calls. Asterisk rings the member. Now the member’s handset is showing two incoming calls.
This particular member is a bit lazy or busy, so he waits 30 seconds, and the first call times out. Asterisk says, “Nobody picked up in 30000 ms”, the caller hears the periodic announcement, and Asterisk stops ringing the member.
Now, the member is unbusy, so he answers a call. But, he’s connected to caller B, even though caller A called first. That’s not what I’d expect – I want callers to be answered in FIFO order.
I suspect there’s some interaction with the “ringinuse” and “timeout” settings here. I had thought, maybe I’ll make the timeout very long. Since I’m using ringall, I don’t have to worry about a lazy/dead member not answering and thus preventing the caller from being presented to the next member. However, if I do this, I can’t seem to make it longer than 60 seconds, and also the caller seems to only be presented with announcements when the timeout expires. I’d like to tell the caller every 30 seconds that they can press 0 to leave a voicemail, regardless of any other queue activity.
ringinuse=no might be nice, also so if there are more than three callers in the queue I don’t eat up all the call appearance buttons on my member’s handsets. However, I read that only SIP channels can report “in use”, and my members are on OOH323 channels. So, that’s out. Coincidentally, I could make my “members” be just one, which is a hunt group implemented in another PBX. I’d then want Asterisk to present one caller to this one member, and keep presenting that caller to the one member until it’s answered, or the caller has been waiting over five minutes, when he’s sent to voicemail. Only then is the next caller presented. Even though I’d think it would be easy for app_queue to know that the member is busy (after all, it’s calling them), there doesn’t seem to be any way to direct app_queue to not throw every caller in the queue at the one member.
Any ideas on how I might approach a better solution?