This change implements a few new features, there's no behavior change at all.
1 - BLF for queues
You can now use BLF for knowing when there are callers waiting on a queue,
the pattern to be subscribed is callcenter+queuename@default or @domain name.
2 - callcenter_track app
Now every agent has an external_calls_count column that will be read upon
selecting agent to offer new calls.
If you start an external call (inbound or outbound) and don't wan't
mod_callcenter to offer new calls for this agent just call this app
passing the agent name as argument:
<action application="callcenter_track" data="agent1"/>
This will increment the external calls count, and to make mod_callcenter look to this variable you need to set this queue parameter:
<param name="skip-agents-with-external-calls" value="true"/>
3 - EXIT_WITH_KEY reason
If the member press a key to exit the queue the cc_cancel_reason will be this now.
4 - xml_curl config loading improvements
Prior to this mod_callcenter query your web server a LOT of times,
this will make it only query once per queue, just watch for CC-Queue
request param and build your xml with everything related to that queue,
including tiers (tiers wasn't loaded before this).
The member can hangup the call while we are playing the outbound announce audio to the agent, this
patch detects this and properly hangup the agent channel to avoid keeping it up with
just a silence call since there's no active bridge.
The agent-bridge-end event now has CC-Agent-Bridged: true if the bridge successfully happens,
variable cc_agent_bridged was added so we can track this in the agent and member CDRs.
If you want to play an audio to the agent to indicate the member hangup the call before the bridge
set the variable cc_bridge_failed_outbound_announce, for example:
<action application="set" data="cc_bridge_failed_outbound_announce=tone_stream://%(250,250,425);loops=3"/>
or
<action application="set" data="cc_bridge_failed_outbound_announce=your-caller-has-gone-away-audio"/>
prior to calling callcenter application.
These variables are documented at https://freeswitch.org/confluence/display/FREESWITCH/mod_callcenter
Before this callcenter_config queue reload [queuename] only reloads the queue
parameters and now it'll include a CC-Queue header with the queuename when using
mod_xml_curl and request a new config for updating agents and tiers related to the
queue.
If you are using mod_xml_curl please make sure to return the raw xml config file
with all the settings, queues, agents and tiers tags when we request the config
without a CC-Queue specified. If this header is present you can build the xml with
items only related to the queue requested.
A new strategy is now available through mod_callcenter, which aim
is to provide a mix between top-down and ring-all strategies.
If set to ring-progressively, the strategy will call an agent, and
then a second agent, and then a third agent, without cancelling
previous calls.
The delay between each call is 10 sec by default, but it can be
changed using the queue variable ring-progressively-delay.
Added counters for answered and abandoned calls for a queue.
Create two vars for cc_queue struct
- calls_answered
- calls_abandoned
These increases when the call is hangup.
This change also :
- refactor long lines of header and body to print the queue information.
- Update year in copyright
Adding a JSON API interface to fetch data in the JSON format. It abides with the JSON command and its implementations by other modules like mod_verto.
It outputs the exactly same column names as the data in CLI.
Various listing of mod_callcenter data such as agents, queues, members, tiers are as follows below.
- Listing of agents
Command: `json {"command": "callcenter_config", "format": "pretty", "data": {"arguments":"agent list"}}`
- Listing of queues
Command: `json {"command": "callcenter_config", "format": "pretty", "data": {"arguments":"queue list"}}`
- Listing of agents for a queue
Command: `json {"command": "callcenter_config", "data": {"arguments":"queue list agents", "queue_name":"support@default"}}`
(`queue_name` is a required)
- Listing of members(callers) for a queue
Command: `json {"command": "callcenter_config", "data": {"arguments":"queue list members", "queue_name":"support@default"}}`
- Listing of tiers for a queue
Command: `json {"command": "callcenter_config","data": {"arguments":"queue list tiers", "queue_name":"support@default"}}`
- Listing of members(callers)
Command: `json {"command": "callcenter_config","data": {"arguments":"member list"}}`
- Listing of tiers
Command: `json {"command": "callcenter_config","data": {"arguments":"tier list"}}`
It handles various errors and also returns back response in JSON as follow
E.g. Send a command without a required field (`queue_name`)
Command: `json {"command": "callcenter_config", "data": {"arguments":"queue list agents"}}`
Output: `{"command":"callcenter_config","data":{"arguments":"queue list agents"},"status":"error","message":"The command returned an error","response":{"error":"Missing data attribute: queue_name"}}`
The new C compiler breaks a lot of things. snprintf and timespec now exist, and redefining causes an error.
Many more things are warnings, so warnings-as-errors will fail - remove it from some projects for now.
V8: don't pass VS version to build batch file.
mod_sofia: Config has too-long if/elseif chain. Break this up to avoid "parser stack overflow; program too complex".
Add mod_conference.h to project and dir to includes.
Sets the agent state to Reserved before calling him. In this case,
the Agent is first updated to state Reserved ONLY if his previous
state was Waiting and status was Available/Available (On Demand).
The purpose is to avoid possible race conditions when external
applications are manipulating `agents` table.
Disabled by default.
* commit 'f63f8686bc8da391b3c46b24e10571215c8b377f':
FS-7049 - Documentation for state optional paramenter in callcenter_config queue list and count
fix FS-7049 - Count and list agents based on their state
If the member do an attended transfer this loop stops and
the agent is set to Available state again, when in fact he still
busy with other channel.
This was happening, for example, when a member calls support queue, then
the support operator do an attended transfer to sales queue, while the sales
operator is talking the member that was transferred, the sales queue will
send calls to the operator, which is not expected.