Occasionally when using an asterisk based freepbx installation with iSymphony, you will run into problems as you grow your business and dialplan. We will discuss one such hypothetical problem, as we do here:
Suppose you had reps and managers complaining that their iSymphony was blank, or updating so far behind as to be useless. Well i wish this was a less common occurance, however in this story it’s happened. After shutting down the server with
$ /opt/isymphony/server/shutdown.sh
and launching via
$ /opt/isymphony/server/startup.sh
The clients would start up again, but fail shortly after.
The developers thought it might be due to a long dial string, like a long ring group, or possibly a queue with a lot of members, well only if 11 agents and 13 caller is “alot” which it seems like it is unfortunately…
Well it seems that autofill had been enabled on the queue, and it was running around in circles as fast as it could trying to pass calls to agents, even if they were already on the phone or otherwise incapacitated.
Switching to a single call delivery method fixed the whole fiasco, but obviously the drawback is slower call distribution.. if this was for a large anything it would be unacceptable, and only barely so in this case, and only because it’s the 2ndary “lesser” pbx.
It seems this is because FreePBX uses Local channels when it logs members into the queue, this is so that an agent can be any sort of device, however it also means that asterisk doesn’t know that its (most likely) a sip channel, and as such, it doesn’t know it can check it status, so that it would just keep the caller on hold until an agent became available. Instead, it is running through each agent, attempting to deliver X calls (# in queue) constantly to any agent is available.
This was on a asterisk 1.8 , freepbx 2.9 install, however, the same exact problem was observed on Asterisk 11, freepbx 2.11beta. I heard 3rd hand that device hints may be the solution, however my understanding is that those are for programmable buttons on a phone to do 1-click login or similar. Unless there is another type of ‘device hint’. I definitely see the benefit of having Local agents, and I also see why these device hints are necessary, so that if no agents are available, asterisk doesn’t try and deliver calls, it should wait patiently.
Unfortunately there is no good solution yet. I’m currently considering a few options:
1) Logging all agents in as SIP/ and seeing if asterisk gets smarter
2) Rewriting parts of app_queue to that it waits patiently when agents are unavailable (or unknown).
3) Tracing where asterisk may be looking for status of Local channels and filling in the blanks.
I’m not a full-time programmer, though I have done over a thousand hours of programming, so I will need to warm up a bit to tackle the c code inside asterisk, I will practice by trying to follow the code to accomplish #1 and #3.
If you have any comments, ideas, suggestions, or want to collaborate or help, please contact me.
Leave a Reply