Free PBX and Contact Center functionality

I have a Free PBX 2.5 server and have set up and tested all my call center features for a mini-call center (2 phones) that we want to deploy. We currently use Polycom IP330 sets for other phones but I need a more robust phone to handle the following call center needs: 1. Agents need to know what state they are in (either logged in or logged out) and 2. if there are calls in queue. Is there a phone that we can program to have a light illuminate if there are callers in queue and when they are logged in? I have read that Asterisk works well in contact centers and I would think that these features are necessary, however, I’ve been told that snom phones will work but I also need to know whether FreePBX is capable of activating those features to the phone. Has anyone implemented a contact center using agent states/queueing buttons?
Thanks for your help.

I think you will find the Aastra phones, either the 6757i or the 6755i to be your best bets. They have an application that works with FreePBX to log in and out of the queue, see the calls in the queue and many other administrative functions.

Any phone that support BLF will allow you to light a light when an agent is logged in. This includes any Polycom with an LED enabled line key such as the 550, SNOM 360/370, Cisco 508/509G’s etc.

thank you very much - that is most helpful!

I now have in my possession the 550IP phone but am having a difficult time finding any documentation on configuring the soft keys to 1. Illuminate when agent logs in and 2. Queue light.
Any help on getting started with this would be greatly appreciated!

The 550 only has 4 buttons and they don’t illuminate.

Read the Polycom documentation, you can enable “buddy watch” to the agent queue login hint.

Just do a “core show hints” from the CLI to get the hin numbers and then subscribe the Polycom button using “buddy watch” mode in the contact information.

You have to have the buddy watch enabled globally in the Polycom sip.cfg file. Did you use the endpoint manager to configure your phone?

I am configuring the phone using the web gui when entering the IP address of the phone. Not sure if that is the same as endpoint manager.

No, that is not the correct way to configure the phone.

Your buddy watch is disabled. The phone needs to pull files from the server.

A brief list of tasks:

1 - Configure DHCP server to send Option 66
2 - Install endpoint manager
3 - Download current SIP software for your device from Polycom
4 - Read administrators manual for sofware
5 - Install software to /tftpboot on server
6 - Configure Polycom device types in endpoint manager

The minimum you can do if you don’t want to do all that is point the phone at your server in the boot server address and put together a minimal sip.cfg file that turns on the buddy watch feature.

I would be happy to do all this, provided I will meet my goal of having the agents know what state they are in and seeing if calls are in queue. Can you confirm that this will happen, especially on FreePBX 2.5? I’ve seen docs for 2.9 so I am hoping I can still do this with what I have. Thanks for your help!

Why are you running such an old version of FreePBX? I can’t even remember what version device states was added.

You need to upgrade for many reasons.

Hi SkykingOH - I accomplished most of the tasks above, however, I am a little puzzled on how to get the same firmware (that I downloaded to Endpoint Manager via the link on FreePBX)to the tftpboot folder (via WinSCP). I also get the error message on my Polycom "error loading (mac address).cfg. All the reading I have done states that I should have a file labeled with the MAC address of the phone inside the tftpboot folder but that is not happening either. What am I doing wrong?

I was missing the (macaddress).cfg file and found one, so now phone is working. Still can’t get endpoint manager to configure my phone though. Will keep investigating.

Okay, I was never able to get Endpoint Manager to talk to tftpboot folder so I configured the sip.cfg within tftpboot and got buddy watch to work. However, I cannot find where I can get buddy watch to work on a queue group. It only seems to work on an extension. How can I manipulate bw to work on a queue group or login status? When I display “core show hints” i am not sure what I am suppose to be looking at, but I don’t see anything in there regarding agent queue login hint.

Agent (5201) logs in to queue 1

Verbosity is at least 4
– Executing [1*@from-internal:1] Macro(“SIP/5201-b750d9d0”, “agent-add|1|”) in new stack
– Executing [[email protected]:1] Wait(“SIP/5201-b750d9d0”, “1”) in new stack
– Executing [[email protected]:2] Macro(“SIP/5201-b750d9d0”, “user-callerid|SKIPTTL”) in new stack
– Executing [[email protected]:1] Set(“SIP/5201-b750d9d0”, “AMPUSER=5201”) in new stack
– Executing [[email protected]:2] GotoIf(“SIP/5201-b750d9d0”, “0?report”) in new stack
– Executing [[email protected]:3] ExecIf(“SIP/5201-b750d9d0”, “1|Set|REALCALLERIDNUM=5201”) in new stack
– Executing [[email protected]:4] Set(“SIP/5201-b750d9d0”, “AMPUSER=5201”) in new stack
– Executing [[email protected]:5] Set(“SIP/5201-b750d9d0”, “AMPUSERCIDNAME=Air Cargo CC 1”) in new stack
– Executing [[email protected]:6] GotoIf(“SIP/5201-b750d9d0”, “0?report”) in new stack
– Executing [[email protected]:7] Set(“SIP/5201-b750d9d0”, “AMPUSERCID=4142945170”) in new stack
– Executing [[email protected]:8] Set(“SIP/5201-b750d9d0”, “CALLERID(all)=“Air Cargo CC 1” <4142945170>”) in new stack
– Executing [[email protected]:9] GotoIf(“SIP/5201-b750d9d0”, “0?limit”) in new stack
– Executing [[email protected]:10] ExecIf(“SIP/5201-b750d9d0”, “0|Set|GROUP(concurrency_limit)=5201”) in new stack
– Executing [[email protected]:11] ExecIf(“SIP/5201-b750d9d0”, “0|Set|CHANNEL(language)=”) in new stack
– Executing [[email protected]:12] GotoIf(“SIP/5201-b750d9d0”, “1?continue”) in new stack
– Goto (macro-user-callerid,s,25)
– Executing [[email protected]:25] Set(“SIP/5201-b750d9d0”, “CALLERID(number)=4142945170”) in new stack
– Executing [[email protected]:26] Set(“SIP/5201-b750d9d0”, “CALLERID(name)=Air Cargo CC 1”) in new stack
– Executing [[email protected]:3] Read(“SIP/5201-b750d9d0”, “CALLBACKNUM|agent-login||||”) in new stack
– <SIP/5201-b750d9d0> Playing ‘agent-login’ (language ‘en’)
– User entered nothing.
– Executing [[email protected]:4] GotoIf(“SIP/5201-b750d9d0”, “1?a5:a7”) in new stack
– Goto (macro-agent-add,s,5)
– Executing [[email protected]:5] Set(“SIP/5201-b750d9d0”, “CALLBACKNUM=5201”) in new stack
– Executing [[email protected]:6] GotoIf(“SIP/5201-b750d9d0”, “0?a3”) in new stack
– Executing [[email protected]:7] GotoIf(“SIP/5201-b750d9d0”, “0?invalid”) in new stack
– Executing [[email protected]:8] GotoIf(“SIP/5201-b750d9d0”, “0?invalid”) in new stack
– Executing [[email protected]:9] GotoIf(“SIP/5201-b750d9d0”, “0?invalid”) in new stack
– Executing [[email protected]:10] ExecIf(“SIP/5201-b750d9d0”, “0|GotoIf|0?invalid”) in new stack
– Executing [[email protected]:11] ExecIf(“SIP/5201-b750d9d0”, “0|Authenticate|”) in new stack
– Executing [[email protected]:12] AddQueueMember(“SIP/5201-b750d9d0”, “1|Local/[email protected]/n|”) in new stack
– Executing [[email protected]:13] UserEvent(“SIP/5201-b750d9d0”, “Agentlogin|Agent: 5201”) in new stack
– Executing [[email protected]:14] Wait(“SIP/5201-b750d9d0”, “1”) in new stack
– Executing [[email protected]:15] Playback(“SIP/5201-b750d9d0”, “agent-loginok&with&extension”) in new stack
– <SIP/5201-b750d9d0> Playing ‘agent-loginok’ (language ‘en’)
– <SIP/5201-b750d9d0> Playing ‘with’ (language ‘en’)
– <SIP/5201-b750d9d0> Playing ‘extension’ (language ‘en’)
– Executing [[email protected]:16] SayDigits(“SIP/5201-b750d9d0”, “5201”) in new stack
– <SIP/5201-b750d9d0> Playing ‘digits/5’ (language ‘en’)
– <SIP/5201-b750d9d0> Playing ‘digits/2’ (language ‘en’)
– <SIP/5201-b750d9d0> Playing ‘digits/0’ (language ‘en’)
– <SIP/5201-b750d9d0> Playing ‘digits/1’ (language ‘en’)
– Executing [[email protected]:17] Hangup(“SIP/5201-b750d9d0”, “”) in new stack
== Spawn extension (macro-agent-add, s, 17) exited non-zero on ‘SIP/5201-b750d9d0’ in macro ‘agent-add’
== Spawn extension (macro-agent-add, s, 17) exited non-zero on ‘SIP/5201-b750d9d0’

Registered Asterisk Dial Plan Hints =-
[email protected] : SIP/5223&Custom:DND5 State:Idle Watchers 0
[email protected] : SIP/5222&Custom:DND5 State:Idle Watchers 0
[email protected] : SIP/5221&Custom:DND5 State:Idle Watchers 0
[email protected] : SIP/5220&Custom:DND5 State:Idle Watchers 0
[email protected] : SIP/5205&Custom:DND5 State:Idle Watchers 0
[email protected]l : SIP/5204&Custom:DND5 State:Idle Watchers 0
[email protected] : SIP/5203&Custom:DND5 State:Idle Watchers 0
[email protected] : SIP/5202&Custom:DND5 State:Idle Watchers 0
[email protected] : SIP/5201&Custom:DND5 State:Idle Watchers 0
[email protected] : SIP/5179&Custom:DND5 State:Idle Watchers 0
[email protected] : SIP/5178&Custom:DND5 State:Idle Watchers 0
[email protected] : SIP/5177&Custom:DND5 State:Idle Watchers 1
[email protected] : SIP/5170&Custom:DND5 State:Idle Watchers 0
[email protected] : SIP/5167&Custom:DND5 State:Idle Watchers 0
[email protected] : SIP/5165&Custom:DND5 State:Idle Watchers 0
[email protected] : SIP/5164&Custom:DND5 State:Idle Watchers 0
[email protected] : SIP/5162&Custom:DND5 State:Idle Watchers 0
[email protected] : SIP/5161&Custom:DND5 State:Idle Watchers 0
*[email protected] : Custom:DEVCF5223 State:Idle Watchers 0
*[email protected] : Custom:DEVCF5222 State:Idle Watchers 0
*[email protected] : Custom:DEVCF5221 State:Idle Watchers 0
*[email protected] : Custom:DEVCF5220 State:Idle Watchers 0
*[email protected] : Custom:DEVCF5205 State:Idle Watchers 0
*[email protected] : Custom:DEVCF5204 State:Idle Watchers 0
*[email protected] : Custom:DEVCF5203 State:Idle Watchers 0
*[email protected] : Custom:DEVCF5202 State:Idle Watchers 0
*[email protected] : Custom:DEVCF5201 State:Idle Watchers 0
*[email protected] : Custom:DEVCF5179 State:Idle Watchers 0
*[email protected] : Custom:DEVCF5178 State:Idle Watchers 0
*[email protected] : Custom:DEVCF5177 State:Idle Watchers 0
*[email protected] : Custom:DEVCF5170 State:Idle Watchers 0
*[email protected] : Custom:DEVCF5167 State:Idle Watchers 0
*[email protected] : Custom:DEVCF5165 State:Idle Watchers 0
*[email protected] : Custom:DEVCF5164 State:Idle Watchers 0
*[email protected] : Custom:DEVCF5162 State:Idle Watchers 0
*[email protected] : Custom:DEVCF5161 State:Idle Watchers 0
*[email protected] : Custom:FOLLOWME5223 State:Idle Watchers 0
*[email protected] : Custom:FOLLOWME5222 State:Idle Watchers 0
*[email protected] : Custom:FOLLOWME5221 State:Idle Watchers 0
*[email protected] : Custom:FOLLOWME5220 State:Idle Watchers 0
*[email protected] : Custom:FOLLOWME5205 State:Idle Watchers 0
*[email protected] : Custom:FOLLOWME5204 State:Idle Watchers 0
*[email protected] : Custom:FOLLOWME5203 State:Idle Watchers 0
*[email protected] : Custom:FOLLOWME5202 State:Idle Watchers 0
*[email protected] : Custom:FOLLOWME5201 State:Idle Watchers 0
*[email protected] : Custom:FOLLOWME5179 State:Idle Watchers 0
*[email protected] : Custom:FOLLOWME5178 State:Idle Watchers 0
*[email protected] : Custom:FOLLOWME5177 State:Idle Watchers 0
*[email protected] : Custom:FOLLOWME5170 State:Idle Watchers 0
*[email protected] : Custom:FOLLOWME5167 State:Idle Watchers 0
*[email protected] : Custom:FOLLOWME5165 State:Idle Watchers 0
*[email protected] : Custom:FOLLOWME5164 State:Idle Watchers 0
*[email protected] : Custom:FOLLOWME5162 State:Idle Watchers 0
*[email protected] : Custom:FOLLOWME5161 State:Idle Watchers 0
*[email protected] : Custom:DEVDND5223 State:Idle Watchers 0
*[email protected] : Custom:DEVDND5222 State:Idle Watchers 0
*[email protected] : Custom:DEVDND5221 State:Idle Watchers 0
*[email protected] : Custom:DEVDND5220 State:Idle Watchers 0
*[email protected] : Custom:DEVDND5205 State:Idle Watchers 0
*[email protected] : Custom:DEVDND5204 State:Idle Watchers 0
*[email protected] : Custom:DEVDND5203 State:Idle Watchers 0
*[email protected] : Custom:DEVDND5202 State:Idle Watchers 0
*[email protected] : Custom:DEVDND5201 State:Idle Watchers 0
*[email protected] : Custom:DEVDND5179 State:Idle Watchers 0
*[email protected] : Custom:DEVDND5178 State:Idle Watchers 0
*[email protected] : Custom:DEVDND5177 State:Idle Watchers 0
*[email protected] : Custom:DEVDND5170 State:Idle Watchers 0
*[email protected] : Custom:DEVDND5167 State:Idle Watchers 0
*[email protected] : Custom:DEVDND5165 State:Idle Watchers 0
*[email protected] : Custom:DEVDND5164 State:Idle Watchers 0
*[email protected] : Custom:DEVDND5162 State:Idle Watchers 0
*[email protected] : Custom:DEVDND5161 State:Idle Watchers 0

FreePBX 2.5 does not support all of the device hints. You set buddy watch to the digits in front of the @ symbol.

Why are you running such an old version?

I upgraded to 2.9 a few weeks ago - all indications on server show that I am at 2.9 but still cannot get Endpoint Manager to upload files to tftpboot and obviously the hints are not showing up. What else can I do to get the phone to show agents status and queue status? I see your name everywhere, so want you to know how much I appreciate your taking the time to respond to my posts.

So since I am on 2.9 and my hints are not showing up, is there no way then to have login states or queue indication on the Polycom IP550? Should I then just return the phones since I cannot find any documentation anywhere on how to set up these phones for a call center even though it was suggested that the 550 would work?

goto tools
advanced settings
Enable Custom Device States set to yes and click the little green check mark
goto the queue and you should have a Generate Device Hints: its the 5 item
just check and submit then apply

the tool tip has the way to add the blf

That worked, I can now see the hints for the queue, thank you very much! Now, I just have to figure out how to show agent states on the phone.

Well, the buddy watch on queue hints works great for login/logout agent, so thank you very much. Still looking to see if there is a way I can program a button that will light up when a call hits the queue and is on hold for an available agent. Any ideas?