Frequently Asked Questions

How does CCM route calls?

CCM provides routing instructions to the NobelBiz CCOps ACD via a REST API. The instructions include the Sytel tenant designation, agent ID, inbound queue, and the address of the Sytel Telephony Gateway (STG).

What criteria are used to select the agent to which a call is assigned?

Calls queued for CCM routing by SMRT are tagged with the skills required. CCM searches for an available agent with the appropriate skills. If multiple agents with the required skills are available, the one with the highest proficiency is selected. Note: Due to a Sytel issue, this algorithm has been temporarily modified to choose the agent that has been waiting for the shortest period of time because they are the least likely to be allocated to an outbound call.

How can calls be routed to specific tenants?

When an agent is logged into a Sytel tenant, the name of the tenant is dynamically added as a pseudo-skill for the agent. By including the tenant name as a skill in the SMRT configuration (skill container), routing to a specific tenant can be achieved.

What happens if no agent meets the skill requirements of a queued call?

Calls for which no agent with the required skills is available remain in the queue until they time out. After a timeout period, the call can be routed via skill container that contains a skill exclusion. This results in the removal of one more more skills originally assigned to the call, effectively relaxing the requirements. The call may then be requeued. Skill exclusions are done by adding the skill to be excluded prefixed by an "x" (e.g. xSales excludes Sales).

How does CCM keep track of agent states?

CCM subscribes to Sytel SDMP messages. An instance of the ccm "gem" process subscribes to the Sytel CallGem associated with each tenant in the operating environment. State data is stored in Redis and the CCM router process subscribes to all changes to agent state data in Redis.

How is CCM informed when inbound calls are queued?

CCM subscribes to webhooks that provide call status updates via an ACD REST API.

Some older installations of CCM run a process called CCMX. What is this?

CCMX was responsible for matching SMRT and Sytel CDR IDs and passing the cross-reference to VitalSigns before the consolidated Webhook was developed. This has been a persistent problem. SMRT assigns a CDR to identify each call. So does Sytel, but there isn't a mechanism available to pass identifying data from SMRT to Sytel (e.g. via SIP headers) that is retained within the Sytel log records. Matching is done via timestamps, ANIs, and DNISs, which is only probabilistically correct and breaks down when many calls originate from the same ANI (as is the case when ELead dealers forward service or sales calls when they are closed for business).

What languages are CCM components written in?

Web server component are written in node.js. The Monitor is ES6 via Babbel and React/JSX. List progress ES6 via Babbel with jquery. Background processes are Python 2.7.

Under what conditions is it necessary to restart CCM processes?

The web app must be restarted after reconfiguration of the list process databases.

The gem processes must be restarted after the corresponding Sytel Softdial systems are restarted. They generally reconnect automatically when connections are lost during operations, but may not do so after an extended loss of the Sytel servers.

The router must be restarted when dialer campaigns or queues are reconfigured in CCM. The ccmReset initialization process must be executed before the router is restarted. ccmReset propagates campaign and queue information from the CCMAdmin database to Redis.

Where are the CCM logs located?

CCM logs locations are configured in the supervisor config files.

What is the role of CCM for outbound-only operations?

CCM monitors agent states in near real time for all configured agents.

Why is it necessary to define agents in CCM when there is no inbound routing?

The CCM monitor organizes agent data according to the call centers and supervisors' groups to which agents are assigned. Both of these classifiers are attributes of individual agents and therefore require an agent database.