---
version: "5.9.0"
language: "en"
---
# Expertflow CX

## Expertflow CX

Expertflow CX is a complete contact center solution for voice, chat and video

[CX Release Notes 5.9.0](https://docs.expertflow.com/cx/5.9.0/cx-release-notes-5-9-0.md)

### Documentation

#### [CX Release Notes](https://docs.expertflow.com/cx/5.9.0/cx-release-notes.md)

---
version: "5.9.0"
language: "en"
---
# Cisco Connector DB migration

1. Exec into Postgres pod

       kubectl -n ef-external exec -it ef-postgresql-0 -- bash

2. Execute the environment setup for `ef-postgresql-0` *( Only needed when PostgreSQL is running in non-HA mode, like no pgpool and multiple replicas of PostgreSQL are running )*

       /opt/bitnami/scripts/postgresql/entrypoint.sh /bin/bash

3. Log into Postgres using the following command

       psql --host ef-postgresql -U sa postgres -p 5432

       Enter the password for the sa user, default password is "Expertflow123"

4.

       \connect "cisco_connector"

5.

       ALTER TABLE jtapi_events ADD COLUMN IF NOT EXISTS connection_address VARCHAR(255);

6.

       \q
       exit
       exit

---
version: "5.9.0"
language: "en"
---
# CX Release Notes

|  **Release Name**   |                                                                                                                                                                                                                                                                                                                                            CX5.9.0                                                                                                                                                                                                                                                                                                                                             |
|  **Release Date**   |                                                                                                                                                                                                                                                                                                                                           2026-08-11                                                                                                                                                                                                                                                                                                                                           |
| **Release Summary** | Expands outbound campaign capabilities with agent-first Preview dialling for CX Voice, IVR-based outbound campaigns, independently configurable Saturday and Sunday compliance windows, and a new Non-Voice Campaign Report covering Email, SMS, and WhatsApp campaigns. Introduces Workforce Management (WFM) as a native add-on for Expertflow CX, extending WFM beyond Cisco UCCE with multi-tenant support and EFCX-native adherence tracking. Also extends Quality Management support for Cisco UCCX to a broader range of call scenarios, including hold, transfer, and consult calls. Includes a fix for a reporting dashboard compatibility error caused by a plugin version mismatch. |
|---------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|

## 🚀 Deployment \& Upgrade

|       **Scenario**       |                             **Guide**                              |
|   **Deployment Guide**   |         [Deployment Guide](https://docs.expertflow.com/cx/5.9.0/deployment-guide.md)          |
| **Upgrade from CX5.8.0** | [CX5.8.0 → CX5.9.0](https://docs.expertflow.com/cx/5.9.0/upgrade-guide-cx5-8-0-to-cx5-9-0.md) |
|--------------------------|--------------------------------------------------------------------|

## New in CX5.9.0

### Outbound Campaigns

|                                                                                            **Feature(s)**                                                                                             |                                                                                                                                                                                                              **Description**                                                                                                                                                                                                              |
|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [**Introduce Preview Dialling for CX Voice Campaigns**](https://docs.expertflow.com/cx-knowledgebase/latest/cx-voice-campaign-preview-mode.md)                                                                                   | CX Voice Campaigns now support Preview dialing mode, in which the dialer connects to the agent first and places the customer call only after the agent accepts. This gives agents the chance to review customer context before every call and ensures each attempt is deliberate, useful for high-value or compliance-sensitive outbound calling. Calls the agent skips or doesn't answer are excluded from future dialing automatically. |
| [**Add IVR-Based Outbound Campaigns**](https://docs.expertflow.com/cx-knowledgebase/latest/outbound-campaign-setup-and-flow-configuration-guide.md#5.2.-CX-IVR-Campaign)                                                         | CX now supports IVR-based outbound campaigns that automatically dial contacts and route answered calls to an IVR script rather than a live agent. This enables outbound communication such as notifications or surveys without requiring agent availability for every call.                                                                                                                                                               |
| [**Enable Independent Saturday and Sunday Calling Windows**](https://docs.expertflow.com/cx-knowledgebase/latest/automated-regional-compliance-for-outbound-calling.md#Step-2-%25E2%2580%2594-Configure-Calling-Windows-(Admin)) | Compliance calling-window schedules now support independent Saturday and Sunday windows instead of a single combined weekend schedule. Admins can configure province-specific rules where Saturday and Sunday have different calling hours, and can fully disable calling on either day where local regulations require it.                                                                                                               |
| [**Add Non-Voice Campaign Summary Report**](https://docs.expertflow.com/cx-knowledgebase/latest/non-voice-campaign-summary-report.md)                                                                                            | Adds a new report that tracks non-voice campaign performance across Email, SMS, WhatsApp, and other non-voice channels, broken down by day, campaign, and channel. Shows how many contacts were reached and how each message resolved; sent, delivered, failed, bounced, or replied to; giving campaign managers a clear view of non-voice outcomes alongside existing voice campaign reporting.                                          |

### Workforce Management

|                    **Feature**                    |                                                                                                                                                      **Description**                                                                                                                                                      |
|---------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| **Introduce Workforce Management as a CX Add-on** | Introduces Workforce Management (WFM) as a native add-on for Expertflow CX, extending WFM beyond Cisco UCCE to work directly with EFCX agents, teams, and states. Adds multi-tenant support and EFCX-native adherence tracking, with WFM reporting migrated to Metabase to align with the rest of the CX reporting stack. |

### Quality Management

|                                                               **Feature**                                                               |                                                                                                                                                                                 **Description**                                                                                                                                                                                  |
|-----------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [**Expand Quality Management Support for Cisco UCCX Call Scenarios**](https://docs.expertflow.com/cx-knowledgebase/latest/supported-call-flows-cisco-connector.md) | Supports recording ingestion from Cisco UCCX 15 across a broader range of call scenarios, including simple calls, calls with hold, direct transfers, consults, and consult transfers, for both inbound and outbound calls. This gives quality evaluators and supervisors more complete recording coverage for UCCX-based interactions, improving coaching and compliance review. |

### Bug Fixes

|                 **Feature**                 |                                                                                                                                                  **Description**                                                                                                                                                  |
|---------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Fix Reporting Dashboard Compatibility Error | **Issue:** After a platform component upgrade, reporting dashboards displayed an error caused by an incompatible plugin version. **Resolution:** The affected plugin has been updated to a compatible version, and dashboards have been redeployed with the corrected configuration, resolving the display error. |

### ✅ Compatible with

This release has been thoroughly tested with various [environments and tools](https://docs.expertflow.com/cx-knowledgebase/latest/compatibility-guides).

---
version: "5.9.0"
language: "en"
---
# CX Release Notes 5.9.0

|  **Release Name**   |                                                                                                                                                                                                                                                                                                                                            CX5.9.0                                                                                                                                                                                                                                                                                                                                             |
|  **Release Date**   |                                                                                                                                                                                                                                                                                                                                           2026-08-11                                                                                                                                                                                                                                                                                                                                           |
| **Release Summary** | Expands outbound campaign capabilities with agent-first Preview dialling for CX Voice, IVR-based outbound campaigns, independently configurable Saturday and Sunday compliance windows, and a new Non-Voice Campaign Report covering Email, SMS, and WhatsApp campaigns. Introduces Workforce Management (WFM) as a native add-on for Expertflow CX, extending WFM beyond Cisco UCCE with multi-tenant support and EFCX-native adherence tracking. Also extends Quality Management support for Cisco UCCX to a broader range of call scenarios, including hold, transfer, and consult calls. Includes a fix for a reporting dashboard compatibility error caused by a plugin version mismatch. |
|---------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|

## 🚀 Deployment \& Upgrade

|       **Scenario**       |                             **Guide**                              |
|   **Deployment Guide**   |         [Deployment Guide](https://docs.expertflow.com/cx/5.9.0/deployment-guide.md)          |
| **Upgrade from CX5.8.0** | [CX5.8.0 → CX5.9.0](https://docs.expertflow.com/cx/5.9.0/upgrade-guide-cx5-8-0-to-cx5-9-0.md) |
|--------------------------|--------------------------------------------------------------------|

## New in CX5.9.0

### Outbound Campaigns

|                                                                                            **Feature(s)**                                                                                             |                                                                                                                                                                                                              **Description**                                                                                                                                                                                                              |
|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [**Introduce Preview Dialling for CX Voice Campaigns**](https://docs.expertflow.com/cx-knowledgebase/latest/cx-voice-campaign-preview-mode.md)                                                                                   | CX Voice Campaigns now support Preview dialing mode, in which the dialer connects to the agent first and places the customer call only after the agent accepts. This gives agents the chance to review customer context before every call and ensures each attempt is deliberate, useful for high-value or compliance-sensitive outbound calling. Calls the agent skips or doesn't answer are excluded from future dialing automatically. |
| [**Add IVR-Based Outbound Campaigns**](https://docs.expertflow.com/cx-knowledgebase/latest/outbound-campaign-setup-and-flow-configuration-guide.md#5.2.-CX-IVR-Campaign)                                                         | CX now supports IVR-based outbound campaigns that automatically dial contacts and route answered calls to an IVR script rather than a live agent. This enables outbound communication such as notifications or surveys without requiring agent availability for every call.                                                                                                                                                               |
| [**Enable Independent Saturday and Sunday Calling Windows**](https://docs.expertflow.com/cx-knowledgebase/latest/automated-regional-compliance-for-outbound-calling.md#Step-2-%25E2%2580%2594-Configure-Calling-Windows-(Admin)) | Compliance calling-window schedules now support independent Saturday and Sunday windows instead of a single combined weekend schedule. Admins can configure province-specific rules where Saturday and Sunday have different calling hours, and can fully disable calling on either day where local regulations require it.                                                                                                               |
| [**Add Non-Voice Campaign Summary Report**](https://docs.expertflow.com/cx-knowledgebase/latest/non-voice-campaign-summary-report.md)                                                                                            | Adds a new report that tracks non-voice campaign performance across Email, SMS, WhatsApp, and other non-voice channels, broken down by day, campaign, and channel. Shows how many contacts were reached and how each message resolved; sent, delivered, failed, bounced, or replied to; giving campaign managers a clear view of non-voice outcomes alongside existing voice campaign reporting.                                          |

### Workforce Management

|                    **Feature**                    |                                                                                                                                                      **Description**                                                                                                                                                      |
|---------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| **Introduce Workforce Management as a CX Add-on** | Introduces Workforce Management (WFM) as a native add-on for Expertflow CX, extending WFM beyond Cisco UCCE to work directly with EFCX agents, teams, and states. Adds multi-tenant support and EFCX-native adherence tracking, with WFM reporting migrated to Metabase to align with the rest of the CX reporting stack. |

### Quality Management

|                                                               **Feature**                                                               |                                                                                                                                                                                 **Description**                                                                                                                                                                                  |
|-----------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [**Expand Quality Management Support for Cisco UCCX Call Scenarios**](https://docs.expertflow.com/cx-knowledgebase/latest/supported-call-flows-cisco-connector.md) | Supports recording ingestion from Cisco UCCX 15 across a broader range of call scenarios, including simple calls, calls with hold, direct transfers, consults, and consult transfers, for both inbound and outbound calls. This gives quality evaluators and supervisors more complete recording coverage for UCCX-based interactions, improving coaching and compliance review. |

### Bug Fixes

|                 **Feature**                 |                                                                                                                                                  **Description**                                                                                                                                                  |
|---------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Fix Reporting Dashboard Compatibility Error | **Issue:** After a platform component upgrade, reporting dashboards displayed an error caused by an incompatible plugin version. **Resolution:** The affected plugin has been updated to a compatible version, and dashboards have been redeployed with the corrected configuration, resolving the display error. |

### ✅ Compatible with

This release has been thoroughly tested with various [environments and tools](https://docs.expertflow.com/cx-knowledgebase/latest/compatibility-guides).

---
version: "5.9.0"
language: "en"
---
# CX Voice Upgrade Guide

## Outbound Dialer

Changes required:

1. Add these environment variables in the docker-variables.env file of outbound-dialer:

       GOVERNOR_ENDPOINT=/campaigns
       ROUTING_ENGINE_ENDPOINT=/routing-engine

       #And Remove this Variable
       GOVERNOR_URL

2. Update the outbound dialer tag in the docker-compose.yml file, and run/start this Docker image.

       # Outbound Dialer: rtc/outbound-dialer
       tag: 5.9.0 

       docker compose up -d

## **Jtapi Connector**

Changes required:

Update the Jtapi Connector tag in the file and run the script.

    Jtapi Connector Tag: 14.8

Navigate to the directory where the recording solution is deployed:

    cd recording-solution/

Open the docker-compose-cisco.yml file:

    vi docker/docker-compose-cisco.yml

Update the image in the jtapi-connector container section:

    image: gitlab.expertflow.com:9242/voice-recording-solution/jtapi-connector:14.8

Save and exit the file by pressing Esc, then type:

    :wq

Run the following script in the recording-solution directory:

    ./install-cisco.sh

The script will start the new jtapi-connector container successfully.

---
version: "5.9.0"
language: "en"
---
# Data Platform Deployment Guide

## Prerequisites for EF Data Platform Deployment

1. **Fully Qualified Domain Name (FQDN)**

   A dedicated FQDN is required for CX, EF Data Platform (Transflux), to ensure proper routing and secure communication.

2. **Database Setup**

   1. For MYSQL

      1. Edit the file `kubernetes/pre-deployment/reportingConnector/dbScripts/dbcreation/_historical_reports_db_creation_script_MySQL.sql` and update the following, then execute

             -- ----------------------------------------------------------------------------
             -- NOTE : CX-4.9 creation script  
             -- ----------------------------------------------------------------------------
             SET FOREIGN_KEY_CHECKS = 0;
             -- ----------------------------------------------------------------------------
             -- ----------------------------------------------------------------------------
             CREATE SCHEMA IF NOT EXISTS `<tenant-name>`;
             USE `<tenant-name>`;
             -- In case of username other then 'root', update the following with current database username (at line 396)
             CREATE DEFINER=<username>@%  PROCEDURE InsertWeekDays(IN start_year INT, IN end_year INT ,IN week_start_day VARCHAR(10))

   2. For MSSQL

      1. Edit the file `kubernetes/pre-deployment/reportingConnector/dbScripts/dbcreation/_historical_reports_db_creation_script_MSSQL.sql` and update the following then execute

             USE master
             GO
             IF NOT EXISTS (
                 SELECT [name]
                     FROM sys.databases
                     WHERE [name] = N'<tenant-name>'
             )
             CREATE DATABASE "<tenant-name>"
             COLLATE SQL_Latin1_General_CP1_CI_AS
             GO
             USE "<tenant-name>"
             GO

3. Ensure that the executing user has sufficient privileges to create databases and tables.

Follow this [++guide++](https://docs.expertflow.com/cx-knowledgebase/latest/guide-for-setting-up-or-upgrading-mysql-database.md) to create a database

3. **Resource Requirements (For EF Cloud):**

   * **Minimum CPU:** 4 cores

   * **Minimum Memory:** 12 GB RAM

   * These resources are essential for optimal performance of the EF Data Platform components during data processing and ETL operations.

### Deployment

Clone CX-Transflux Repository

    git clone -b 5.9.0 https://efcx:RecRpsuH34yqp56YRFUb@gitlab.expertflow.com/cim/transflux.git transflux

    cd transflux

Add the Expertflow Helm charts repository.

    helm repo add expertflow https://expertflow.github.io/charts

Update the charts repository

    helm repo update expertflow

Create a folder to save the Helm chart's values

    mkdir helm-values

Customise the deployment by creating the `custom-values.yaml` file and add the custom configurations as per the requirements.

    vi helm-values/cx-transflux-custom-values.yaml 

Use the following command to see the default values.yaml

    helm show values expertflow/transflux --version 5.9.0

Open the file `helm-values/cx-transflux-custom-values.yaml` and edit it according to the given information, which is required for the CX Transflux to work properly.  
The `airflow` metadata database is already created when PostgreSQL is deployed  

|            **Value**            |                                                                                                          **Updated Value**                                                                                                          |
|---------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ingressRouter                   | Dedicated Fully Qualified Domain Name (FQDN)                                                                                                                                                                                        |
| tag                             | `5.9.0`                                                                                                                                                                                                                             |
| MONGODB_PASSWORD                | Update the local MongoDB password when using a non-default password                                                                                                                                                                 |
| AIRFLOW__CORE__SQL_ALCHEMY_CONN | Update the local PostgreSQL password when using a non-default password as below postgresql+psycopg2://sa:\<your-non-default-password\>@ef-postgresql.ef-external.svc:5432/airflow?sslmode=verify-ca\&sslrootcert=/postgresql/ca.crt |

Below is the sample snippet after editing `helm-values/cx-transflux-custom-values.yaml`

    global:
      ingressRouter: "transflux-rm-02.expertflow.com"
    image:
      tag: "5.9.0"

Use the following to export TLS certificates from the MongoDB pod. The certificates will be exported to `/tmp/mongodb_certs`

    mkdir /tmp/mongodb_certs
    CERTFILES=($(kubectl get secret mongo-mongodb-ca -n ef-external -o go-template='{{range $k,$v := .data}}{{$k}}{{"\n"}}{{end}}'))
    for f in ${CERTFILES[*]}; do   kubectl get secret mongo-mongodb-ca  -n ef-external -o go-template='{{range $k,$v := .data}}{{ if eq $k "'$f'"}}{{$v  | base64decode}}{{end}}{{end}}' > /tmp/mongodb_certs/${f} 2>/dev/null; done

Create a directory for TLS certificates

    mkdir -p certificates/mongo_certs
    mkdir -p certificates/mysql_certs

Copy all the certificate files present in `/tmp/mongodb_certs` directory and place them in the newly created directory `certificates/mongo_certs` in the transflux directory. These certificate files should include the following:

* `mongodb-ca-key.pem`

* `mongodb-ca-cert.pem`

* `client-pem.pem`

For a non-SSL target database, the `certificates/mysql_certs` directory will remain empty, but still, the secrets will be created as per the given command

Place all certificate files in the `certificates/mysql_certs` directory and create a ConfigMap for MySQL certificates to enable TLS encryption. The certificates should include the following files:

* `ca.pem`

* `client-cert.pem`

* `client-key.pem`

    kubectl -n expertflow create secret generic  ef-transflux-mysql-certs-secret  --from-file=certificates/mysql_certs

### For On-Prem (Single tenant) Deployment

Edit the file `transflux/config/tenants.yaml` and configure the following

1. By default, the single tenant's name is `expertflow` else it would be the user define defined \<tenant-id\>

2. `FQDN_URL` in api

3. `TARGET_TYPE` (mysql or mssql) as per the dedicated target database

4. Edit the existing `transflux/config/tenants.yaml`

|                                                                                                                                                                           **Before**                                                                                                                                                                           |                                                                                **After (For MYSQL)**                                                                                 |                                                                              **After (For MSSQL)**                                                                               |
|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| TARGET_TYPE: "mysql" MYSQL: TARGET_HOST: "192.168.2.18" TARGET_PORT: "3306" TARGET_USERNAME: "monty" TARGET_PASSWORD: "Expertflow#143" TARGET_SSL_ENABLED: false TARGET_DATABASE: "hold_db" MSSQL: TARGET_HOST: "192.168.1.77" TARGET_PORT: "1433" TARGET_USERNAME: "sa" TARGET_PASSWORD: "Expertflow464" TARGET_SSL_ENABLED: false TARGET_DATABASE: "hold_db" | TARGET_TYPE: "mysql" TARGET_HOST: "192.168.2.18" TARGET_PORT: "3306" TARGET_USERNAME: "monty" TARGET_PASSWORD: "Expertflow#143" TARGET_SSL_ENABLED: false TARGET_DATABASE: "hold_db" | TARGET_TYPE: "mssql" TARGET_HOST: "192.168.1.77" TARGET_PORT: "1433" TARGET_USERNAME: "sa" TARGET_PASSWORD: "Expertflow464" TARGET_SSL_ENABLED: false TARGET_DATABASE: "hold_db" |

The new `tenants.yaml` file will look something like this for **MYSQL**.

    tenants:
      expertflow: # or user defined <tenant-id>
        mongodb:
          SOURCE_HOST: "mongo-mongodb.ef-external.svc"
          SOURCE_PORT: "27017"
          SOURCE_USERNAME: "root"
          SOURCE_PASSWORD: "Expertflow123"
          SOURCE_TLS_ENABLED: true
          SOURCE_DATABASE: "expertflow" # or user defined <tenant-id> (database)
        postgre:
          SOURCE_HOST: "ef-postgresql.ef-external.svc"
          SOURCE_PORT: "5432"
          SOURCE_USERNAME: "sa"
          SOURCE_PASSWORD: "Expertflow123"
          SOURCE_DATABASE: "qm_db"
        api:
          FQDN_URL: "<FQDN URL>"
          REALM: "expertflow"       
        TARGET_TYPE: "mysql"
        TARGET_HOST: "192.168.2.18"
        TARGET_PORT: "3306"
        TARGET_USERNAME: "monty"
        TARGET_PASSWORD: "Expertflow#143"
        TARGET_SSL_ENABLED: false
        TARGET_DATABASE: "hold_db"

### For Cloud (Multi-tenant) Deployment

1. In order to register new tenants, replicate the previous tenant configuration and append the new settings afterward, set the `TARGET_TYPE` as per the dedicated target database, and configure the database credentials accordingly. You can also update the existing tenant's information as per the following setup.

   The new `tenants.yaml` file will look something like this for **MYSQL**.

         <tenant_name>:
           mongodb:
             SOURCE_HOST: "mongo-mongodb.ef-external.svc"
             SOURCE_PORT: "27017"
             SOURCE_USERNAME: "root"
             SOURCE_PASSWORD: "Expertflow123"
             SOURCE_TLS_ENABLED: true
             SOURCE_DATABASE: "<tenant_name>"
           postgre:
             SOURCE_HOST: "ef-postgresql.ef-external.svc"
             SOURCE_PORT: "5432"
             SOURCE_USERNAME: "sa"
             SOURCE_PASSWORD: "Expertflow123"
             SOURCE_DATABASE: "<tenant_name>"
           api:
             FQDN_URL: "https://<tenant_name>.expertflow.com"
             REALM: "<tenant_name>"
           TARGET_TYPE: "mysql"
           TARGET_HOST: "82.208.20.221"
           TARGET_PORT: "30801"
           TARGET_USERNAME: "root"
           TARGET_PASSWORD: "Expertflow123$#"
           TARGET_SSL_ENABLED: false
           TARGET_DATABASE: "<tenant_name>"

### For Cisco Sync Job Configuration

Edit the file `transflux/config/qm_cisco_team_sync_config.yaml` and update the endpoint with FQDN on which cisco sync job is configured

    endpoint: "https://{FQDN}/cisco-sync-service/api/v1/sync"

Create configuration ConfigMaps for CX-Transflux pipelines with multi-tenancy configurations.

    kubectl -n expertflow create configmap ef-transflux-config-cm --from-file=config

Create configuration ConfMaps for `dbt_schema` in transflux

    kubectl -n expertflow create configmap ef-transflux-dbt-schema-cm --from-file=dbt_schema

Finally, deploy CX-Transflux.

    helm upgrade --install --namespace expertflow   --set global.efCxReleaseName="ef-cx"  cx-transflux --debug --values helm-values/cx-transflux-custom-values.yaml  expertflow/transflux --version 5.9.0

Follow the [++User Manual++](https://docs.expertflow.com/cx-knowledgebase/latest/data-platform-user-manual.md) to control pipelines from the Data Platform

---
version: "5.9.0"
language: "en"
---
# Deployment Guide

This guide details how to deploy Expertflow CX on Kubernetes using Helm. It covers prerequisites (Kubernetes setup, namespaces, FQDNs, TLS/SSL), and provides step-by-step instructions for deploying all CX components and required external services (MongoDB, Redis, PostgreSQL, MinIO, Keycloak, Vault) via Helm charts. The guide also explains multi-tenancy setup, component configuration, and post-deployment checks to ensure a stable environment for both on-premises and cloud deployments.

## Prerequisites

The following table describes the prerequisites for using Helm for deployment.  

|        **Item**        |                                                                                                                                                                                                                          **Description**                                                                                                                                                                                                                           |                                                                                  **When changed**                                                                                  |
|------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Kubernetes Setup       | a standard and compatible release of kubernetes is available                                                                                                                                                                                                                                                                                                                                                                                                       | A clean installed Kubernetes Engine . This can be performed using guide [RKE2 Control plane Deployment](https://docs.expertflow.com/cx-knowledgebase/latest/rke2-single-node-installation-without-ha.md)      |
| Storage Solution       |                                                                                                                                                                                                                                                                                                                                                                                                                                                                    | you can find the details guide [++here++](https://expertflow-docs.atlassian.net/wiki/spaces/DTDO/pages/2526989/Storage+Solution+-+Getting+Started)                                 |
| Wildcard Domain (FQDN) | A valid FQDN is required to deploy the solution for example "[++devops.ef.com++](http://devops.ef.com/)" But for MTT deployment a valid wildcard FQDN (e.g `*.expertflow.com`) is required for multi-tenancy deployment. This allows automatic mapping of tenant subdomains like `tenant1.expertflow.com`, `tenant2.expertflow.com`                                                                                                                                | by default there is no FQDN associated, and the helm chart(s) will exit with failure if the default value is used.                                                                 |
| External Components    | All external components have their own helm charts available.                                                                                                                                                                                                                                                                                                                                                                                                      | if you are using externally managed components such as mongo, minio, redis and postgresql, relevant values should be updated in the helm chart values. details are provided below. |
| TLS/SSL certificate    | It is mandatory to have a valid SSL certificate already create in both expertflow and ef-external namespaces. Default Ingress certificate name is "`ef-ingress-tls-secret`" For multi-tenancy, a **wildcard certificate** for the domain (e.g., `*.expertflow.com`) must be used. The certificate and private key (`server.crt` and `server.key`) are provided by IT and must be created as a Kubernetes secret in both `expertflow` and `ef-external` namespaces. | It is by default required and must be created before the actual helm chart deployment. Update when certificate is renewed or replaced by IT.                                       |
| Custom configurations  | All components requiring custom changes should be updated in their respective values file                                                                                                                                                                                                                                                                                                                                                                          | Mandatory, and upgrade of the helm chart is required when updated.                                                                                                                 |
| ingress controller     | by default both resident and ef-cx helm charts are using nginx as ingress controller                                                                                                                                                                                                                                                                                                                                                                               | if using other ingress controller for example nginx or traefik, update all the relevant tags and annotations to reflect appropriate values. details                                |

## EF CX Helm Chart

### Global Chart Details

In addition to sub-chart details, below given are the details for this meta chart. Any key: value pair present in this file supersedes the values file in sub-chart's values file.  

|   **Section**    |                  **Item**                   |                               **Details**                               |                            **default**                             |
|------------------|---------------------------------------------|-------------------------------------------------------------------------|--------------------------------------------------------------------|
| global           | ingressRouter                               | Wildcard FQDN used for the EF-CX Solution                               | "\*.expertflow.com"                                                |
| global           | imageRegistry                               | default container registry to pull images from                          | "[++gitimages.expertflow.com++](http://gitimages.expertflow.com/)" |
| global           | ingressCertName                             | default ingress certificate secret name. must be created before install | "ef-ingress-tls-secret"                                            |
| global           | ingressClassName                            | ingress class name                                                      | "nginx"                                                            |
| global           | commonIngressAnnotations                    | common annotations for all ingress resources                            | ""                                                                 |
| global           | efCommonVars_IS_WRAP_UP_ENABLED             | Common Environment Variable                                             | true                                                               |
| global           | efCommonVars_WRAPUP_TIME                    | Common Environment Variable                                             | "60"                                                               |
| global           | efCommonVars_DEFAULT_ROOM_NAME              | Common Environment Variable                                             | CC                                                                 |
| global           | efCommonVars_DEFAULT_ROOM_LABEL             | Common Environment Variable                                             | CC                                                                 |
| global           | efCommonVars_DEFAULT_ROOM_DESCRIPTION       | Common Environment Variable                                             | Contact Center Room                                                |
| global           | efCommonVars_CONVERSATION_SEARCH_WINDOW_HRS | Common Environment Variable                                             | "24"                                                               |
| global           | efCommonVars_TZ                             | Common Environment Variable                                             | UTC                                                                |
| global           | efCommonVars_MASK_ATTRIBUTES_PATH           | Common Environment Variable                                             | /sensitive.js                                                      |
| global           | efCommonVars_LOGGING_CONFIG                 | Common Environment Variable                                             | /logback/logback-spring.xml                                        |
| global           | efCommonVars_ROOM_IS_USER_ID                | Common Environment Variable                                             | false                                                              |
| clusterDomain    |                                             | root domain for the cluster DNS                                         | "cluster.local"                                                    |
| imageCredentials | registry                                    | container image registry, must be same as global.imageRegistry          | [++gitimages.expertflow.com++](http://gitimages.expertflow.com/)   |
| imageCredentials | username                                    | username for the registry                                               | efcx                                                               |
| imageCredentials | password                                    | password for the user of the registry                                   | RecRpsuH34yqp56YRFUb                                               |
| imageCredentials | email                                       | email address for the registry config                                   | [++devops@expertflow.com++](mailto:devops@expertflow.com)          |
| efConnectionVars |                                             | Contains list of all the sub-charts related connection parameters       | list of parameters.                                                |
| sub-chart        |                                             |                                                                         |                                                                    |
| sub-chart        | enabled                                     | enable of disable a sub-chart deployment. true \| false                 | true                                                               |

Image Pull Secret is created at runtime based on these variables, a valid dockerconfig in JSON format is created at runtime and added to the kubernetes engine as secret with the name of `ef-gitlab-secret`  
All sub-charts are named after the component name for which it is developed and its values are evaluated from meta chart's values.yaml file

### Sub-Chart Details

All sub-charts have below given details available.
Sub-charts details  

## Parameters

### Global parameters

|                         Name                          |                                                                                                                                                                             Description                                                                                                                                                                             | Value  |
|-------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------|
| `global.ingressRouter`                                | Global FQDN mapping                                                                                                                                                                                                                                                                                                                                                 | `""`   |
| `global.ingressCertName`                              | Ingress TLS Certificate secret must be created before deployment                                                                                                                                                                                                                                                                                                    | `""`   |
| `global.ingressClassName`                             | ingress class name for all the ingress resources deployed using this helm chart                                                                                                                                                                                                                                                                                     | `""`   |
| `global.commonIngressAnnotations`                     | Common Annotations for all the ingress resources, add/update for individual resources if not common                                                                                                                                                                                                                                                                 | `{}`   |
| `global.imageRegistry`                                | default image registry to images from                                                                                                                                                                                                                                                                                                                               | `""`   |
| `global.imagePullSecrets`                             | Global Docker registry secret names as an array                                                                                                                                                                                                                                                                                                                     | `[]`   |
| `global.compatibility.openshift.adaptSecurityContext` | Adapt the securityContext sections of the deployment to make them compatible with Openshift restricted-v2 SCC: remove runAsUser, runAsGroup and fsGroup and let the platform use their allowed default IDs. Possible values: auto (apply if the detected running cluster is Openshift), force (perform the adaptation always), disabled (do not perform adaptation) | `auto` |

### Common parameters

|           Name           |                                              Description                                               |      Value      |
|--------------------------|--------------------------------------------------------------------------------------------------------|-----------------|
| `nameOverride`           | String to partially override ***COMPONENT___NAME***.fullname template (will maintain the release name) | `""`            |
| `fullnameOverride`       | String to fully override ***COMPONENT___NAME***.fullname template                                      | `""`            |
| `namespaceOverride`      | String to fully override common.names.namespace                                                        | `""`            |
| `kubeVersion`            | Force target Kubernetes version (using Helm capabilities if not set)                                   | `""`            |
| `clusterDomain`          | Kubernetes Cluster Domain                                                                              | `cluster.local` |
| `extraDeploy`            | Extra objects to deploy (value evaluated as a template)                                                | `[]`            |
| `commonLabels`           | Add labels to all the deployed resources                                                               | `{}`            |
| `commonAnnotations`      | Add annotations to all the deployed resources                                                          | `{}`            |
| `diagnosticMode.enabled` | Enable diagnostic mode (all probes will be disabled and the command will be overridden)                | `false`         |
| `diagnosticMode.command` | Command to override all containers in the the deployment(s)/statefulset(s)                             | `["sleep"]`     |
| `diagnosticMode.args`    | Args to override all containers in the the deployment(s)/statefulset(s)                                | `["infinity"]`  |

### ***COMPONENT___NAME*** parameters

|              Name              |                                                      Description                                                       |                  Value                   |
|--------------------------------|------------------------------------------------------------------------------------------------------------------------|------------------------------------------|
| `image.registry`               | ***COMPONENT___NAME*** image registry                                                                                  | `REGISTRY_NAME`                          |
| `image.repository`             | ***COMPONENT___NAME*** image repository                                                                                | `REPOSITORY_NAME/___COMPONENT___NAME___` |
| `image.digest`                 | ***COMPONENT___NAME*** image digest in the way sha256:aa.... Please note this parameter, if set, will override the tag | `""`                                     |
| `image.pullPolicy`             | ***COMPONENT___NAME*** image pull policy                                                                               | `IfNotPresent`                           |
| `image.pullSecrets`            | Specify docker-registry secret names as an array                                                                       | `[]`                                     |
| `automountServiceAccountToken` | Mount Service Account token in pod                                                                                     | `false`                                  |
| `hostAliases`                  | Deployment pod host aliases                                                                                            | `[]`                                     |
| `command`                      | Override default container command (useful when using custom images)                                                   | `[]`                                     |
| `args`                         | Override default container args (useful when using custom images)                                                      | `[]`                                     |
| `extraEnvVars`                 | Extra environment variables to be set on ***COMPONENT___NAME*** containers                                             | `[]`                                     |
| `extraEnvVarsCM`               | ConfigMap with extra environment variables                                                                             | `""`                                     |
| `extraEnvVarsSecret`           | Secret with extra environment variables                                                                                | `""`                                     |
| `efConnectionVars`             | Configmap true false                                                                                                   | `false`                                  |
| `efEnvironmentVars`            | ConfigMap true false                                                                                                   | `false`                                  |

### ***COMPONENT___NAME*** deployment parameters

|                        Name                         |                                                                                                    Description                                                                                                    |      Value       |
|-----------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------|
| `replicaCount`                                      | Number of ***COMPONENT___NAME*** replicas to deploy                                                                                                                                                               | `1`              |
| `revisionHistoryLimit`                              | The number of old history to retain to allow rollback                                                                                                                                                             | `10`             |
| `updateStrategy.type`                               | ***COMPONENT___NAME*** deployment strategy type                                                                                                                                                                   | `RollingUpdate`  |
| `updateStrategy.rollingUpdate`                      | ***COMPONENT___NAME*** deployment rolling update configuration parameters                                                                                                                                         | `{}`             |
| `podLabels`                                         | Additional labels for ***COMPONENT___NAME*** pods                                                                                                                                                                 | `{}`             |
| `podAnnotations`                                    | Annotations for ***COMPONENT___NAME*** pods                                                                                                                                                                       | `{}`             |
| `podAffinityPreset`                                 | Pod affinity preset. Ignored if `affinity` is set. Allowed values: `soft` or `hard`                                                                                                                               | `""`             |
| `podAntiAffinityPreset`                             | Pod anti-affinity preset. Ignored if `affinity` is set. Allowed values: `soft` or `hard`                                                                                                                          | `""`             |
| `nodeAffinityPreset.type`                           | Node affinity preset type. Ignored if `affinity` is set. Allowed values: `soft` or `hard`                                                                                                                         | `""`             |
| `nodeAffinityPreset.key`                            | Node label key to match Ignored if `affinity` is set.                                                                                                                                                             | `""`             |
| `nodeAffinityPreset.values`                         | Node label values to match. Ignored if `affinity` is set.                                                                                                                                                         | `[]`             |
| `affinity`                                          | Affinity for pod assignment                                                                                                                                                                                       | `{}`             |
| `hostNetwork`                                       | Specify if host network should be enabled for ***COMPONENT___NAME*** pod                                                                                                                                          | `false`          |
| `hostIPC`                                           | Specify if host IPC should be enabled for ***COMPONENT___NAME*** pod                                                                                                                                              | `false`          |
| `dnsPolicy`                                         | Specifies the DNS policy for the ***COMPONENT___NAME*** pod                                                                                                                                                       | `""`             |
| `dnsConfig`                                         | Allows users more control on the DNS settings for a Pod. Required if `dnsPolicy` is set to `None`                                                                                                                 | `{}`             |
| `nodeSelector`                                      | Node labels for pod assignment. Evaluated as a template.                                                                                                                                                          | `{}`             |
| `tolerations`                                       | Tolerations for pod assignment. Evaluated as a template.                                                                                                                                                          | `[]`             |
| `priorityClassName`                                 | ***COMPONENT___NAME*** pods' priorityClassName                                                                                                                                                                    | `""`             |
| `schedulerName`                                     | Name of the k8s scheduler (other than default)                                                                                                                                                                    | `""`             |
| `terminationGracePeriodSeconds`                     | In seconds, time the given to the ***COMPONENT___NAME*** pod needs to terminate gracefully                                                                                                                        | `""`             |
| `topologySpreadConstraints`                         | Topology Spread Constraints for pod assignment                                                                                                                                                                    | `[]`             |
| `podSecurityContext.enabled`                        | Enabled ***COMPONENT___NAME*** pods' Security Context                                                                                                                                                             | `false`          |
| `podSecurityContext.fsGroupChangePolicy`            | Set filesystem group change policy                                                                                                                                                                                | `Always`         |
| `podSecurityContext.supplementalGroups`             | Set filesystem extra groups                                                                                                                                                                                       | `[]`             |
| `podSecurityContext.fsGroup`                        | Set ***COMPONENT___NAME*** pod's Security Context fsGroup                                                                                                                                                         | `1001`           |
| `podSecurityContext.sysctls`                        | sysctl settings of the ***COMPONENT___NAME*** pods                                                                                                                                                                | `[]`             |
| `containerSecurityContext.enabled`                  | Enabled containers' Security Context                                                                                                                                                                              | `false`          |
| `containerSecurityContext.seLinuxOptions`           | Set SELinux options in container                                                                                                                                                                                  | `nil`            |
| `containerSecurityContext.runAsUser`                | Set containers' Security Context runAsUser                                                                                                                                                                        | `1001`           |
| `containerSecurityContext.runAsGroup`               | Set containers' Security Context runAsGroup                                                                                                                                                                       | `1001`           |
| `containerSecurityContext.runAsNonRoot`             | Set container's Security Context runAsNonRoot                                                                                                                                                                     | `true`           |
| `containerSecurityContext.privileged`               | Set container's Security Context privileged                                                                                                                                                                       | `false`          |
| `containerSecurityContext.readOnlyRootFilesystem`   | Set container's Security Context readOnlyRootFilesystem                                                                                                                                                           | `true`           |
| `containerSecurityContext.allowPrivilegeEscalation` | Set container's Security Context allowPrivilegeEscalation                                                                                                                                                         | `false`          |
| `containerSecurityContext.capabilities.drop`        | List of capabilities to be dropped                                                                                                                                                                                | `["ALL"]`        |
| `containerSecurityContext.seccompProfile.type`      | Set container's Security Context seccomp profile                                                                                                                                                                  | `RuntimeDefault` |
| `containerPorts`                                    | Array of additional container ports for the Nginx container                                                                                                                                                       | `[]`             |
| `resourcesPreset`                                   | Set container resources according to one common preset (allowed values: none, nano, micro, small, medium, large, xlarge, 2xlarge). This is ignored if resources is set (resources is recommended for production). | `none`           |
| `resources`                                         | Set container requests and limits for different resources like CPU or memory (essential for production workloads)                                                                                                 | `{}`             |
| `lifecycleHooks`                                    | Optional lifecycleHooks for the ***COMPONENT___NAME*** container                                                                                                                                                  | `{}`             |
| `startupProbe.enabled`                              | Enable startupProbe                                                                                                                                                                                               | `false`          |
| `startupProbe.initialDelaySeconds`                  | Initial delay seconds for startupProbe                                                                                                                                                                            | `30`             |
| `startupProbe.periodSeconds`                        | Period seconds for startupProbe                                                                                                                                                                                   | `10`             |
| `startupProbe.timeoutSeconds`                       | Timeout seconds for startupProbe                                                                                                                                                                                  | `5`              |
| `startupProbe.failureThreshold`                     | Failure threshold for startupProbe                                                                                                                                                                                | `6`              |
| `startupProbe.successThreshold`                     | Success threshold for startupProbe                                                                                                                                                                                | `1`              |
| `livenessProbe.enabled`                             | Enable livenessProbe                                                                                                                                                                                              | `true`           |
| `livenessProbe.initialDelaySeconds`                 | Initial delay seconds for livenessProbe                                                                                                                                                                           | `30`             |
| `livenessProbe.periodSeconds`                       | Period seconds for livenessProbe                                                                                                                                                                                  | `10`             |
| `livenessProbe.timeoutSeconds`                      | Timeout seconds for livenessProbe                                                                                                                                                                                 | `5`              |
| `livenessProbe.failureThreshold`                    | Failure threshold for livenessProbe                                                                                                                                                                               | `6`              |
| `livenessProbe.successThreshold`                    | Success threshold for livenessProbe                                                                                                                                                                               | `1`              |
| `readinessProbe.enabled`                            | Enable readinessProbe                                                                                                                                                                                             | `true`           |
| `readinessProbe.initialDelaySeconds`                | Initial delay seconds for readinessProbe                                                                                                                                                                          | `5`              |
| `readinessProbe.periodSeconds`                      | Period seconds for readinessProbe                                                                                                                                                                                 | `5`              |
| `readinessProbe.timeoutSeconds`                     | Timeout seconds for readinessProbe                                                                                                                                                                                | `3`              |
| `readinessProbe.failureThreshold`                   | Failure threshold for readinessProbe                                                                                                                                                                              | `3`              |
| `readinessProbe.successThreshold`                   | Success threshold for readinessProbe                                                                                                                                                                              | `1`              |
| `autoscaling.enabled`                               | Enable autoscaling for ***COMPONENT___NAME*** deployment                                                                                                                                                          | `false`          |
| `autoscaling.minReplicas`                           | Minimum number of replicas to scale back                                                                                                                                                                          | `""`             |
| `autoscaling.maxReplicas`                           | Maximum number of replicas to scale out                                                                                                                                                                           | `""`             |
| `autoscaling.targetCPU`                             | Target CPU utilization percentage                                                                                                                                                                                 | `""`             |
| `autoscaling.targetMemory`                          | Target Memory utilization percentage                                                                                                                                                                              | `""`             |
| `extraVolumes`                                      | Array to add extra volumes                                                                                                                                                                                        | `[]`             |
| `extraVolumeMounts`                                 | Array to add extra mount                                                                                                                                                                                          | `[]`             |
| `serviceAccount.create`                             | Enable creation of ServiceAccount for ***COMPONENT___NAME*** pod                                                                                                                                                  | `false`          |
| `serviceAccount.name`                               | The name of the ServiceAccount to use.                                                                                                                                                                            | `""`             |
| `serviceAccount.annotations`                        | Annotations for service account. Evaluated as a template.                                                                                                                                                         | `{}`             |
| `serviceAccount.automountServiceAccountToken`       | Auto-mount the service account token in the pod                                                                                                                                                                   | `false`          |
| `sidecars`                                          | Sidecar parameters                                                                                                                                                                                                | `[]`             |
| `sidecarSingleProcessNamespace`                     | Enable sharing the process namespace with sidecars                                                                                                                                                                | `false`          |
| `initContainers`                                    | Extra init containers                                                                                                                                                                                             | `[]`             |
| `pdb.create`                                        | Created a PodDisruptionBudget                                                                                                                                                                                     | `false`          |
| `pdb.minAvailable`                                  | Min number of pods that must still be available after the eviction.                                                                                                                                               | `""`             |
| `pdb.maxUnavailable`                                | Max number of pods that can be unavailable after the eviction.                                                                                                                                                    | `""`             |

### Traffic Exposure parameters

|                  Name                   |                                                           Description                                                            |                 Value                  |
|-----------------------------------------|----------------------------------------------------------------------------------------------------------------------------------|----------------------------------------|
| `service.type`                          | Service type                                                                                                                     | `ClusterIP`                            |
| `service.enabled`                       | whether the service object should be created for this component                                                                  | `true`                                 |
| `service.type`                          | Type of the Service port exposed                                                                                                 | `ClusterIP`                            |
| `service.port`                          | Port Number of the service                                                                                                       | `""`                                   |
| `service.targetPort`                    | targetPort for the container where this service will route the traffic to                                                        | `""`                                   |
| `service.portName`                      | Name of the Service's port -- should be same as targetPort                                                                       | `""`                                   |
| `service.protocol`                      | Type of the protocol for this service TCP or UDP                                                                                 | `TCP`                                  |
| `service.nodePort`                      | Valid if the type is set to NodePort -- range 30000 to 32676                                                                     | `""`                                   |
| `service.clusterIP`                     | ***COMPONENT___NAME*** service Cluster IP                                                                                        | `""`                                   |
| `service.extraPorts`                    | Extra ports to expose (normally used with the `sidecar` value)                                                                   | `[]`                                   |
| `service.sessionAffinity`               | Session Affinity for Kubernetes service, can be "None" or "ClientIP"                                                             | `None`                                 |
| `service.sessionAffinityConfig`         | Additional settings for the sessionAffinity                                                                                      | `{}`                                   |
| `service.annotations`                   | Service annotations                                                                                                              | `{}`                                   |
| `service.externalTrafficPolicy`         | Enable client source IP preservation                                                                                             | `Cluster`                              |
| `networkPolicy.enabled`                 | Specifies whether a NetworkPolicy should be created                                                                              | `false`                                |
| `networkPolicy.allowExternal`           | Don't require server label for connections                                                                                       | `true`                                 |
| `networkPolicy.allowExternalEgress`     | Allow the pod to access any range of port and all destinations.                                                                  | `true`                                 |
| `networkPolicy.extraIngress`            | Add extra ingress rules to the NetworkPolicy                                                                                     | `[]`                                   |
| `networkPolicy.extraEgress`             | Add extra ingress rules to the NetworkPolicy (ignored if allowExternalEgress=true)                                               | `[]`                                   |
| `networkPolicy.ingressNSMatchLabels`    | Labels to match to allow traffic from other namespaces                                                                           | `{}`                                   |
| `networkPolicy.ingressNSPodMatchLabels` | Pod labels to match to allow traffic from other namespaces                                                                       | `{}`                                   |
| `ingress.enabled`                       | Set to true to enable ingress record generation                                                                                  | `true`                                 |
| `ingress.pathType`                      | Ingress path type                                                                                                                | `ImplementationSpecific`               |
| `ingress.apiVersion`                    | Force Ingress API version (automatically detected if not set)                                                                    | `""`                                   |
| `ingress.hostname`                      | Default host for the ingress resource                                                                                            | `fqdn.com`                             |
| `ingress.path`                          | The Path to Nginx. You may need to set this to '/\*' in order to use this with ALB ingress controllers.                          | `""`                                   |
| `ingress.annotations`                   | Additional annotations for the Ingress resource. To enable certificate autogeneration, place here your cert-manager annotations. | `{}`                                   |
| `ingress.ingressClassName`              | Set the ingerssClassName on the ingress record for k8s 1.18+                                                                     | `nginx`                                |
| `ingress.extraHosts`                    | The list of additional hostnames to be covered with this ingress record.                                                         | `[]`                                   |
| `ingress.extraPaths`                    | Any additional arbitrary paths that may need to be added to the ingress under the main host.                                     | `nil`                                  |
| `ingress.tlsSecretName`                 | If you're providing your own certificates, please use this to add the certificates as secrets                                    | `{{ .Values.global.ingressCertName }}` |
| `ingress.extraRules`                    | The list of additional rules to be added to this ingress record. Evaluated as a template                                         |                                        |

## Add helm repository

    helm repo add expertflow https://expertflow.github.io/charts/

update helm repo

    helm repo update expertflow

### Helm chart functional groups

CX helm charts are divided into functional groups.  

|   **Group**    |                                            **Description**                                             |   **Dependency**    |
|----------------|--------------------------------------------------------------------------------------------------------|---------------------|
| CX             | serves the basic and core functionality of the CX Solution.                                            | External Components |
| Web Channels   | Provides CX enhadncements for digital Channels                                                         | CX                  |
| AgentDesk      | Provides separate deployment for customers where AgentDesk is optional                                 | CX                  |
| Campaigns      | Functional group provides Campaigns Collaborations.                                                    | CX                  |
| Reporting      | Reporting related to the CX                                                                            | CX                  |
| Eleveo         | Eleveo functional group                                                                                | CX                  |
| CiscoScheduler | Cisco functional group                                                                                 | CX                  |
| CiscoConnector | Cisco functional group                                                                                 | CX                  |
| mtt-single     | Functional group to host all non-MTT components that are deployed separately for each tenant instance. | CX                  |
| QM             | QM functional group                                                                                    | CX                  |
| Metabase       | Reporting                                                                                              | CX                  |

## Prepare for CX Deployment

### Step 1: Clone the Expertflow CX repository

    git clone -b CX-5.9.0 https://efcx:RecRpsuH34yqp56YRFUb@gitlab.expertflow.com/cim/cim-solution.git CX-5.9.0

    cd CX-5.9.0/kubernetes/

### Step 2: Create Namespaces

1. Create a [++namespace++](https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/) `expertflow` for all Expertflow components

Run the following command on the control-plane node.

    kubectl create namespace expertflow

Create a namespace `ef-external` for all the external elements of the Expertflow CX solution such as Mongo, Redis, MinIO, etc.  
Run the following command on the control-plane node.

    kubectl create namespace ef-external

### Ingress Controller Selection

* Default ingressClass is set to "nginx" in all helm charts' global section. if you prefer to use other ingress controller, please update the ingressClassName to appropriate value.

* All helm charts served at expertflow helm repository ( CX groups/components and external components ) by default are compatible with ingress-nginx ingress controller using ingress-nginx annotations. Should there be requirement for any other ingress controller like traefik, HA-Proxy or contour etc, please adjust the annotations for all components accordingly. A coordinated guide for [++using Traefik as Ingress Controller++](https://docs.expertflow.com/cx-knowledgebase/latest/using-traefik-as-ingress-controller.md) is available for CX solution's compatibility.

Add TLS Certificates

* For Self Signed please use [++this guide++](https://docs.expertflow.com/cx-knowledgebase/latest/create-self-signed-certificates-for-ingress.md) in both `ef-external` and `expertflow` namespaces **(Use for lab VMs)**

* **(Only For Multitenancy)**

  For multi-tenancy deployments, a **wildcard SSL certificate** is required (e.g., `*.expertflow.com`).

  The certificate (`server.crt`) and private key (`server.key`) will be provided by the IT department.

  You must create a Kubernetes secret with these files in both namespaces (expertflow \& ef-external)

  The default secret name must be `ef-ingress-tls-secret`

      kubectl -n expertflow create secret tls ef-ingress-tls-secret --key  server.key --cert server.crt
      kubectl -n ef-external create secret tls ef-ingress-tls-secret --key  server.key --cert server.crt

* For Commercial Certificates, please import them as `tls.crt` and `tls.key` and create secret with the name of `ef-ingress-tls-secret` in both `ef-external` and `expertflow` namespaces

* For [++Lets Encrypt SSL for EFCX++](https://docs.expertflow.com/cx-knowledgebase/latest/letsencrypt-ssl-for-ef-cx.md) **(Use for any VM other than lab i.e AWS, Contabo, etc.)**

**NOTE:** When using LE based TLS Certificates, you will have to enable correct annotations in all the relevant values file.

`sed -i -e 's/#cert-manager.io\/cluster-issuer: /cert-manager.io\/cluster-issuer: /g' helm-values/ef-keycloak-custom-values.yaml` to enable it.

`sed -i -e 's/#cert-manager.io\/cluster-issuer: /cert-manager.io\/cluster-issuer: /g' helm-values/apisix-custom-values.yaml` to enable it

This procedure is required for both externals and all CX group charts being deployed.

### Step 3: Apply Image Pull secret

1. Run the following commands for applying ImagePullSecrets of Expertflow CX images.

    kubectl apply -f pre-deployment/registryCredits/ef-imagePullSecret-ef-external.yaml

Create a directory to hold values files for all the helm charts.

    mkdir helm-values

### Custom Password Interpolations

Below are the interpolations when using custom or not-default password for mongodb, minio, redis, postgresql and activeMQ  

| **Component with custom password** |                                                                     **update required in**                                                                     |
|------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------|
| MongoDB                            | 1. Update `CX -> values.yaml -> efConnectionVars -> MONGODB_PASSWORD`                                                                                          |
| PostgreSQL                         | 1. Update `keycloak -> keycloak-custom-values.yaml -> externalDatabase -> password` 2. Update `CX -> values.yaml -> license-manager -> extraEnvVars-> DB_PASS` |
| minio                              | 1. Update `CX -> values.yaml -> file-engin -> extraEnvVars -> ACCESSKEY,SECRETKEY`                                                                             |
| Redis (ACL enabled)                | 1. Update `CX -> values.yaml -> efConnectionVars ->` 2. update `ActiveMQ -> active-custom-values.yaml -> extraEnvVars -> REDIS_PASSWORD`                       |
| keycloak                           | N/A                                                                                                                                                            |
| activeMQ                           | N/A                                                                                                                                                            |

### Setup SQL Database

Expertflow CX requires any of the following **PostgreSQL** for Expertflow CX deployment for storing configuration data.  
If you are deploying external components with provided TLS certificates, you must run the following command before deployment.

    kubectl apply -f pre-deployment/static-tls

| **PostgreSQL** recommended | If you do not have PostgreSQL in your environment, create Config-Map of PostgreSQL to create necessary databases and preload it with bootstrap configurations. kubectl -n ef-external  create configmap ef-postgresql-license-manager-cm --from-file=./pre-deployment/licensemanager/licensemanager.sql download the values.yaml file locally to customize the parameter values. helm show values expertflow/postgresql --version 5.0 > helm-values/ef-postgresql-custom-values.yaml Update the following values file `helm-values/ef-postgresql-custom-values.yaml` as mentioned below:- auth: password: "<CHANGE_PASSWORD>" For Worker HA deployment, add the following tolerations:- tolerations: - key: "node.kubernetes.io/unreachable" operator: "Exists" effect: "NoExecute" tolerationSeconds: 60 # Evict after 60 seconds of being unreachable - key: "node.kubernetes.io/not-ready" operator: "Exists" effect: "NoExecute" tolerationSeconds: 60 # Evict after 60 seconds of being not-ready Deploy the postgresql helm upgrade --install=true --namespace=ef-external --values=helm-values/ef-postgresql-custom-values.yaml  ef-postgresql expertflow/postgresql --version 5.0 For managed Postgresql, see [++this guide++](https://docs.expertflow.com/cx-knowledgebase/latest/using-managed-postgresql.md) for configuring PostgreSQL for Expertflow CX. |
|----------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|

## Deploy CX External Components

Expertflow CX requires the following 3rd party components.  

| **Cache - Redis**(ACL enabled) |     Key-Values based Caching engine, used by most of the EF-CX components.     |
|          **MongoDB**           | NoSQL Database, maintains and serves as primary back store for EF-CX solution. |
|           **MinIO**            |                          S3 compliant object storage.                          |
|       **IAM (Keycloak)**       |                       Realm based auth management tool.                        |
|--------------------------------|--------------------------------------------------------------------------------|

You may use them from your existing environment or from a cloud provider .

### Setup IAM (Keycloak)

#### Prerequisites

Before proceeding with the keycloak deployment, please update the backend database connection string parameters ( when using non-default passwords )

clone the values file and update the parameter values

    helm show values expertflow/keycloak --version 5.1.0 > helm-values/ef-keycloak-custom-values.yaml

edit `helm-values/ef-keycloak-custom-values.yaml` and update the password for postgresql database

    global:
      ingressRouter: <DEFAULT-FQDN>
    externalDatabase:
      password: "Expertflow123"

Default Keycloak deployment uses postgresql running inside the same kubernetes cluster. When using managed postgresql database instance, update above parameters with relevant information

For Worker HA deployments, add the following tolerations:-

    Feconds of being not-ready

#### IAM (Keycloak) Deployment

IAM (Keycloak) is used as the centralized authentication and authorization component for Expertflow CX. Follow these steps to setup KeyCloak.

Now, deploy Keycloak by running the following command

    helm upgrade --install=true  --debug --namespace=ef-external  --values=helm-values/ef-keycloak-custom-values.yaml keycloak expertflow/keycloak --version 5.1.0

This pod will remain Pending until Vault is deployed later in this guide --- this is expected and not an error.

Check the Keycloak installation status. You can check the status of deployment by using the following command:

    kubectl -n ef-external rollout status sts keycloak

### Setup MongoDB

Expertflow CX uses MongoDB for storing all CX events, activities, and some configuration data as well.  
Skip this step if you already have MongoDB in your environment that can be used by Expertflow CX. For using MongoDB from a managed environment, see [++this guide++](https://docs.expertflow.com/cx-knowledgebase/latest/using-managed-mongodb.md) for necessary configurations.

Clone the values file to update the parameter values

    helm show values expertflow/mongodb --version 5.0 > helm-values/ef-mongodb-custom-values.yaml

Update the following values file `helm-values/ef-mongodb-custom-values.yaml` as mentioned below

    auth:
      rootPassword: "Expertflow123"

For Worker HA deployments, add the following tolerations:-

    tolerations:
        - key: "node.kubernetes.io/unreachable"
          operator: "Exists"
          effect: "NoExecute"
          tolerationSeconds: 60 # Evict after 60 seconds of being unreachable
        - key: "node.kubernetes.io/not-ready"
          operator: "Exists"
          effect: "NoExecute"
          tolerationSeconds: 60 # Evict after 60 seconds of being not-ready

Deploy MongoDB by running the following command.

    helm upgrade --install=true --namespace=ef-external --values=helm-values/ef-mongodb-custom-values.yaml mongo expertflow/mongodb --version 5.0

Check the MongoDB deployment status by running the following command:

    kubectl -n ef-external rollout status sts mongo-mongodb

### Setup MinIO as S3 Storage

Expertflow CX uses MinIO for storing files exchanged between agents, customers, and/or bots. Install using Helm using following command:

Clone the values file for updating the parameter values

    helm show values expertflow/minio --version 5.0 > helm-values/ef-minio-custom-values.yaml

Update the minio helm chart `helm-values/ef-minio-custom-values.yaml` files with the required ACCESSKEY and PASSKEY values

    auth:
      rootUser: minioadmin
      rootPassword: "minioadmin"

Deploy the minio helm chart

    helm upgrade --install=true --namespace=ef-external --values=helm-values/ef-minio-custom-values.yaml minio expertflow/minio --version 5.0

Wait for the minio deployment to get ready

    kubectl -n ef-external  rollout status deployment  minio --timeout=5m

#### Digital Channel Icons Bootstrapping

Proceed with icons bootstrapping.

    kubectl apply -f scripts/minio-helper.yaml

    kubectl -n ef-external --timeout=90s wait --for=condition=ready pod minio-helper

    kubectl -n ef-external cp post-deployment/data/minio/bucket/default minio-helper:/tmp/

      kubectl -n ef-external cp scripts/icon-helper.sh minio-helper:/tmp/

    kubectl -n ef-external exec -it minio-helper -- /bin/sh /tmp/icon-helper.sh

    kubectl delete -f scripts/minio-helper.yaml

### Setup Redis

CX uses Redis for storing active system state of most of the CX objects. Redis is deployed with **Access Control Lists (ACLs)** to manage multiple users and credentials securely.

Clone the values file to update the parameter values

    helm show values expertflow/redis --version 5.1.0 > helm-values/ef-redis-custom-values.yaml

Update the following values `helm-values/ef-redis-custom-values.yaml` as mentioned below:-  
The Artemis deployment requires Redis to be exposed via a NodePort. Please change the service type from `ClusterIP` to `NodePort` in the `ef-redis-custom-values.yaml` file. Please ensure this NodePort is configured so that it is only accessible by Artemis, and strictly blocked from any external access outside of the VM.

    auth:
      password: "Expertflow123"  # Change this to match the requirements
    acl:
        users:
             password: "Expertflow464" # Change this to match the requirements 
    service:
        type: NodePort
        nodePorts:
          redis: "32054"

For Worker HA deployments, add the following tolerations:-

    tolerations:
        - key: "node.kubernetes.io/unreachable"
          operator: "Exists"
          effect: "NoExecute"
          tolerationSeconds: 60 # Evict after 60 seconds of being unreachable
        - key: "node.kubernetes.io/not-ready"
          operator: "Exists"
          effect: "NoExecute"
          tolerationSeconds: 60 # Evict after 60 seconds of being not-ready 

**Create Redis ACL Secret**

    kubectl -n ef-external create secret generic ef-redis-acl-secret --from-literal=superuser=Expertflow464

Run the following command to deploy Redis.

    helm upgrade --install=true  --namespace=ef-external --values=helm-values/ef-redis-custom-values.yaml  redis expertflow/redis --version 5.1.0

### Setup Application Gateway (APISIX)

Clone the apisix values.yaml file

    helm show values expertflow/apisix --version 5.6.0  > helm-values/apisix-custom-values.yaml

update the `apisix-custom-values.yaml` file for given parameters

    global:
      ingressRouter: "*.expertflow.com"   # * for MTT & for Single Tenant replace FQDN
      ingressClassName: "nginx"
      ingressTlsCertName: "ef-ingress-tls-secret"

Deploy the apisix using updated custom-values.yaml file

    helm upgrade --install --namespace ef-external --values helm-values/apisix-custom-values.yaml apisix expertflow/apisix --version 5.6.0

Verify the deployment of the apisix

    kubectl -n ef-external get deploy

**For MTT Setup Nginx Router for Multi deployments Routing (Non-MTT Components)**

This file typically includes: (Service, Configmap \& Deployment)

Run the following command to deploy the tenant router:  
If you're not using domain name [++expertflow.com++](http://expertflow.com/), update the domain name in `nginx-router-manifests.yaml`

    kubectl -n expertflow apply -f pre-deployment/nginx-router/nginx-router-manifests.yaml

### Setup CX Bus (ActiveMQ Artemis)

Please use this [++guide++](https://docs.expertflow.com/cx-knowledgebase/latest/apache-activemq-artemis-system-service-deployment-guide.md) to deploy artemis as a System Service.

when need to uninstall artimis use this [++guide++](https://docs.expertflow.com/cx-knowledgebase/latest/apache-artemis-system-service-uninstallation-guide.md) .

### CX Clamav

Clamav is an optional scanning service to scan the files before uploading to the file engine. You can enable/disable the scanning in the file engine's environment variable `IS_SCAN_ENABLED`; by default, it's **disabled**.

Customize the deployment by fetching the values.yaml file and edit it as per the requirements.

    helm show values expertflow/clamav --version 5.0   > helm-values/cx-clamav-values.yaml

Edit/update the values file `helm-values/cx-clamav-values.yaml` with

    global:
      ingressRouter: <DEFAULT-FQDN>

Deploy the Clamav helm chart by

    helm upgrade --install --namespace ef-external --set global.efCxReleaseName="ef-cx"  clamav --debug --values helm-values/cx-clamav-values.yaml   helm/clamav --version 5.0 

### Setup Vault

### Create Vault Namespace

    # Create Vault Namespace
    k create namespace vault

### Configure Secrets

    # Vault TLS secrets
      kubectl apply -f pre-deployment/static-tls/vault-tls/tls-ca.yaml  
      kubectl apply -f pre-deployment/static-tls/vault-tls/tls-server-client.yaml
      kubectl apply -f pre-deployment/static-tls/vault-tls/tls-server-vault.yaml
    # Create secrets related to vault
      kubectl get secret tls-ca -n vault -o yaml | sed 's/namespace: vault/namespace: ef-external/' | kubectl create -f -
      kubectl get secret tls-server-client -n vault -o yaml | sed 's/namespace: vault/namespace: ef-external/' | kubectl create -f -
      kubectl get secret tls-server-vault -n vault -o yaml | sed 's/namespace: vault/namespace: ef-external/' | kubectl create -f -
      kubectl get secret expertflow-reg-cred -n ef-external  -o yaml | sed 's/namespace: ef-external/namespace: vault/' | kubectl create -f -
      kubectl get secret mongo-mongodb-ca -n ef-external  -o yaml | sed 's/namespace: ef-external/namespace: vault/' | kubectl create -f -
      kubectl get secret redis-crt -n ef-external  -o yaml | sed 's/namespace: ef-external/namespace: vault/' | kubectl create -f -
      kubectl get secret ef-postgresql-crt -n ef-external  -o yaml | sed 's/namespace: ef-external/namespace: vault/' | kubectl create -f -
      kubectl get secret activemq-tls -n ef-external  -o yaml | sed 's/namespace: ef-external/namespace: vault/' | kubectl create -f -

### Customize `values.yaml`

Customize values.yaml  
You must first edit `ef-vault-custom-values.yaml` file to define your minimum required configurations.

#### Step 1: Create the Values File

Run the following command to edit a new file:

    helm show values expertflow/vault --version 5.7.0 > helm-values/ef-vault-custom-values.yaml

Deploy the Vault

    helm upgrade --install --namespace vault --create-namespace vault --debug --values helm-values/ef-vault-custom-values.yaml expertflow/vault --version 5.7.0

Use the following vault [++configuration guide++](https://docs.expertflow.com/cx-knowledgebase/latest/configuring-vault-for-encryption.md) for its configuration.

**Automate Vault Unseal and Token Recovery for EF CX \<Optional\>**

To configure auto unseal using transit auto unseal (On Prem), refer to this [++guide++](https://expertflow-docs.atlassian.net/wiki/spaces/EF/pages/2029780993/Vault+Transit+Auto-Unseal+Guide+On-Prem).

To configure auto unseal using Google Cloud KMS (Cloud), refer to this [++guide++](https://expertflow-docs.atlassian.net/wiki/spaces/EF/pages/2039578635/Vault+Auto-Unseal+Using+Google+Cloud+KMS).

To troubleshoot ActiveMQ and Keycloak issues, refer to this [++guide.++](https://expertflow-docs.atlassian.net/wiki/spaces/EF/pages/2083127298/Vault+Kubernetes+Authentication+Failure+Troubleshooting)

## Deploy CX Components

### Custom Configuration

For detailed guidelines on applying environment-specific configurations using custom `values.yaml` layering, refer to the **CX Helm Chart Custom Configuration Strategy** [++guide++](https://docs.expertflow.com/cx-knowledgebase/latest/customizing-cx-helm-chart-deployments.md).

**SSl/TLS Import in Namespaces**

Transfer the Mongo, Redis, PostgreSQL and ActiveMQ Certificates from the ef-external namespace

    kubectl get secret mongo-mongodb-ca -n ef-external  -o yaml | sed 's/namespace: ef-external/namespace: expertflow/' | kubectl create -f -
    kubectl get secret redis-crt -n ef-external  -o yaml | sed 's/namespace: ef-external/namespace: expertflow/' | kubectl create -f -
    kubectl get secret ef-postgresql-crt -n ef-external  -o yaml | sed 's/namespace: ef-external/namespace: expertflow/' | kubectl create -f -
    kubectl get secret activemq-tls -n ef-external  -o yaml | sed 's/namespace: ef-external/namespace: expertflow/' | kubectl create -f -

### CX Core

Setup default translation file for customer widget

    kubectl -n expertflow  create configmap ef-widget-translations-cm --from-file=pre-deployment/app-translations/customer-widget/i18n/

Apply ConfigMap to enable log masking for all components in `expertflow` namespace:-

    kubectl apply -f pre-deployment/logback/
    kubectl -n expertflow create configmap ef-logback-cm --from-file=pre-deployment/logback/logback-spring.xml

Setup graphql schemas and mongodb rules configmaps

    kubectl create configmap -n expertflow conversation-manager-graphql-schemas --from-file=pre-deployment/conversation-manager/graphql/schemas

    kubectl create configmap -n expertflow conversation-manager-graphql-mongodb-rules --from-file=pre-deployment/conversation-manager/graphql/graphql-mongodb-rules.json

    kubectl create configmap -n expertflow routing-engine-graphql-schemas --from-file=./pre-deployment/routing-engine/graphql/schemas

    kubectl create configmap -n expertflow routing-engine-graphql-memory-rules --from-file=./pre-deployment/routing-engine/graphql/graphql-memory-rules.json

    kubectl create configmap -n expertflow routing-engine-graphql-redis-rules --from-file=./pre-deployment/routing-engine/graphql/graphql-redis-rules.json

#### Create and Customize `ef-cx-custom-values.yaml`

Customize ef-cx-custom-values.yaml  
You must first create custom `values.yaml` file to define your minimum required configurations.

#### Step 1: Create the Values File

Run the following command to create a new file:

    vi helm-values/ef-cx-custom-values.yaml 

You can extend the same `ef-cx-custom-values.yaml` file with additional configurations as needed, including environment variables, replica counts, etc.

To view all available default configurations and decide what you want to override:

    helm show values expertflow/cx --version 5.9.0

This command prints the full default `values.yaml` file used by the CX chart, which serves as a reference for all configurable parameters.
We recommend only overriding the values you need in your custom file to keep the configuration lean and maintainable.  
For Single tenant, update the following configuration in `ef-cx-custom-values.yaml`

* global:

  ingressRouter: \<CUSTOM-FQDN\>

* In EF-Connection Vars you need to update the following vars as per your valid domain \& DBs

      ROOT_DOMAIN: "<TenantID>" // your <tenantId>
      ENABLE_CLOUD_MANAGED_CONNECTIONS: "false" // if using managed services, set to true
      MONGODB_URI_PREFIX: "mongodb" // set to mongodb+srv if using DNS Seedlist to manage replicas
      KEYCLOAK_REALM: expertflow // In case of single tenant, if tenantId is not default "expertflow" then use <tenandId> instead of expertflow.
      # In Conversation Studio Chart, update TENANT_ID with the <tenandId> which is default to `expertflow`.

* In conversation-studio

      conversation-studio:
         siteEnvVars:
           - name: TENANT_ID
             value: <tenantId> // default is expertflow"

* In real time reports change the following extraEnvVars as per your reporting DB

  * DATASOURCE_URL

  * DATASOURCE_USERNAME

  * DATASOURCE_PASSWORD

* Below variables are added in cx-tenant service

      # Modify below values according to the cloud instance
      - name: ENCRYPTION_KEY
        value: "6f3a2f95b7c0e4b1f37c0a9df8b68d7ea7d5bfbf41e2d88b3b9b55f4a6d1c2f3"
      - name: AZURE_STORAGE_ACCOUNT
        value: "efcxblobstorage"
      - name: AZURE_STORAGE_KEY
        value: "R/RYZ+knJWlYKr6fzWSLRSoauiY7/62K1n7kZ80d0zWPYqaZabokDCbJjFMgL20YhYYmGD4LxDre+AStFhKsqA=="
      - name: FS_URL
        value: "http://20.123.60.36:8000/add-domain" //Replace values with voice

For Multi-tenant, update the following configuration in `ef-cx-custom-values.yaml`

* global:

  ingressRouter: \<\*.expertflow.com\>

* In EF-Connection Vars you need to update the following vars as per you valid domain \& DBs

      ROOT_DOMAIN: "expertflow.com" // your root domain
      ENABLE_CLOUD_MANAGED_CONNECTIONS: "false"
      MONGODB_URI_PREFIX: "mongodb"

* In real time reports change the following extraEnvVars as per your reporting DB

  * DATASOURCE_URL

  * DATASOURCE_USERNAME

  * DATASOURCE_PASSWORD

* Below variables are added in cx-tenant service

      #Modify below values according to the cloud instance
      - name: ENCRYPTION_KEY
        value: "6f3a2f95b7c0e4b1f37c0a9df8b68d7ea7d5bfbf41e2d88b3b9b55f4a6d1c2f3"
      - name: AZURE_STORAGE_ACCOUNT
        value: "efcxblobstorage"
      - name: AZURE_STORAGE_KEY
        value: "R/RYZ+knJWlYKr6fzWSLRSoauiY7/62K1n7kZ80d0zWPYqaZabokDCbJjFMgL20YhYYmGD4LxDre+AStFhKsqA=="
      - name: FS_URL
        value: "http://20.123.60.36:8000/add-domain" //Replace values with voice

For **MTT** change the CONTROLLER_URL \& CAMPAIGN_STUDIO_URL in conversation manager

    - name: CONTROLLER_URL
      value: "http://tenantId-conversation-studio-svc.tenantId.svc:1880"

    - name: CAMPAIGN_STUDIO_URL
      value: "http://tenantId-campaign-studio-svc.tenantId.svc:1880"

For MTT Disable the flag of conversation studio from ef-cx-custom file

    conversation-studio:
      enabled: false

For Call

Deploy the CX Core using default values.

    helm upgrade --install --namespace expertflow --create-namespace   ef-cx  --debug --values helm-values/ef-cx-custom-values.yaml expertflow/cx --version 5.9.0

"ef-cx" in above command is the release name which will referenced in all subsequent functional groups' deployments.

check the status of CX components

    kubectl -n expertflow get pods

Copy the icons to the cx-tenant pod once deployed in the icons directory to persist

      kubectl -n expertflow cp post-deployment/data/minio/bucket/default <cx-tenant-pod-name>:/icons

### CX Agent Desk

Setup default translation file for Agent Desk

    kubectl -n expertflow  create configmap ef-app-translations-cm --from-file=pre-deployment/app-translations/unified-agent/i18n

Setup default canned messages translations file for Agent Desk

    kubectl -n expertflow  create configmap ef-canned-messages-cm --from-file=pre-deployment/app-translations/unified-agent/canned-messages

Apply CRM ConfigMap for Agent Desk

    kubectl -n expertflow create configmap ef-crm-service-cm --from-file=pre-deployment/crm-service/

**Note: For Single Tenant**

Update the **FQDN** of the machine against `url` in `supervisor_dashboard_cim_json_api` field in file `post-deployment/config/grafana/supervisor-dashboards/datasource.yml`

    ############################################  JSON API CONFIGURATION ##########################################
      - name: supervisor_dashboard_cim_json_api
        url : https://devops234.ef.com ## Update with the FQDN of the machine
    ############################################  INFINITY API PLUGIN CONFIGURATION ##########################################
      - name: infinity_cim_json_api
        jsonData:
          allowedHosts: #Add the FQDN of the registered Tenants
            - "https://example1.com"

**Note: For Multi-tenant**

1. Update the **FQDN** of `CX_TENANT_URL` against `url` field under `supervisor_dashboard_cim_json_api` in file `post-deployment/config/grafana/supervisor-dashboards/datasource.yml`.

2. Add the **FQDN** of all tenants against `allowedHosts` field under `infinity_cim_json_api` in file `post-deployment/config/grafana/supervisor-dashboards/datasource.yml`

    ############################################  JSON API CONFIGURATION ##########################################
     - name: supervisor_dashboard_cim_json_api
       url : https://devops234.ef.com ##Update with the CX_TENANT_URL FQDN. Note: Don't use svc name
    ############################################  INFINITY API PLUGIN CONFIGURATION ##########################################
      - name: infinity_cim_json_api
        jsonData:
          allowedHosts: #Add the FQDN of all the registered Tenants
            - "*"  
            - "https://example1.com"
            - "https://example2.com"
            - "https://example3.com"
            - "https://example4.com"

Apply the Grafana data-source manifest.

    kubectl -n expertflow  create secret generic ef-grafana-datasource-secret --from-file=post-deployment/config/grafana/supervisor-dashboards/datasource.yml

Apply Grafana provider manifest.

    kubectl -n expertflow create cm ef-grafana-dashboard-provider-cm --from-file=post-deployment/config/grafana/supervisor-dashboards/dashboard.yml

Apply Config-map for the dashboards files using the steps below.

    ###### SUPERVISOR DASHBOARD ######
    kubectl -n expertflow create configmap ef-grafana-supervisor-dashboard --from-file=post-deployment/config/grafana/supervisor-dashboards/Supervisor_Dashboard_CIM.json
    ###### AGENT DASHBOARD ######
    kubectl -n expertflow create configmap ef-grafana-agent-dashboard --from-file=post-deployment/config/grafana/supervisor-dashboards/Agent_Dashboard_CIM.json
    ###### AGENT TEAMS DASHBOARD ######
    kubectl -n expertflow create configmap ef-grafana-agent-teams-dashboard --from-file=post-deployment/config/grafana/supervisor-dashboards/agent_teams_dashboard.json
    ###### AGENT PERFORMANCE DASHBOARD ######
    kubectl -n expertflow create configmap ef-grafana-agent-performance-dashboard --from-file=post-deployment/config/grafana/supervisor-dashboards/agent_performance_dashboard.json
    ###### SOCIAL MEDIA PERFORMANCE DASHBOARD ######
    kubectl -n expertflow create configmap ef-grafana-social-media-performance-trend-dashboard --from-file=post-deployment/config/grafana/supervisor-dashboards/social_media_performance_trend_dashboard.json
    ###### TEAM STATISTICS DASHBOARD ######
    kubectl -n expertflow create configmap ef-grafana-team-statistics-dashboard --from-file=post-deployment/config/grafana/supervisor-dashboards/team_statistics_dashboard.json 

**Install the Agent Desk using helm chart**

Customize `values.yaml`
Customize values.yaml  
You must first edit `values.yaml` file to define your minimum required configurations.

#### Step 1: Create the Values File

Run the following command to edit a new file:

    vi helm-values/cx-agent-desk-custom-values.yaml

#### Step 2: Add Required Minimum Configuration

In the opened file, add the following section to define the FQDN (Fully Qualified Domain Name) for ingress routing:
> 🔁 Replace `<CUSTOM-FQDN>` and \<IP\>with your actual domain \& IP, e.g., `devops.example.com`.

    global:   
      ingressRouter: <CUSTOM-FQDN> 

>     grafana:  
>       hostAliases: 
>         - ip: "<IP>"
>           hostnames:
>             - "{{ .Values.global.ingressRouter }}"
>
This is the **minimum required customisation** for the CX Helm chart to work.

#### Optional: Add Further Customisations

You can extend the same `cx-agent-desk-custom-values.yaml` file with additional configurations as needed, including environment variables, replica counts, etc.

To view all available default configurations and decide what you want to override:

    helm show values expertflow/agent-desk --version 5.9.0

This command prints the full default `values.yaml` file used by the CX chart, which serves as a reference for all configurable parameters.
> We recommend only overriding the values you need in your custom file to keep the configuration lean and maintainable.

    helm upgrade --install --namespace expertflow   --set global.efCxReleaseName="ef-cx"  cx-agent-desk  --debug --values helm-values/cx-agent-desk-custom-values.yaml expertflow/agent-desk --version 5.9.0

### CX Channels
Customize `values.yaml`

Customize values.yaml  
You must first edit `values.yaml` file to define your minimum required configurations.

#### Step 1: Create the Values File

Run the following command to edit a new file:

    vi helm-values/cx-channels-custom-values.yaml

#### Step 2: Add Required Minimum Configuration

In the opened file, add the following section to define the FQDN (Fully Qualified Domain Name) for ingress routing:

    global:   
      ingressRouter: <CUSTOM-FQDN> 

> 🔁 Replace `<CUSTOM-FQDN>` with your actual domain, e.g., `devops.example.com`.

This is the **minimum required customization** for the CX Helm chart to work.

#### Optional: Add Further Customizations

You can extend the same `cx-channels-custom-values.yaml` file with additional configurations as needed, including environment variables, replica counts, etc.

To view all available default configurations and decide what you want to override:

    helm show values expertflow/channels --version 5.9.0

This command prints the full default `values.yaml` file used by the CX chart, which serves as a reference for all configurable parameters.
> We recommend only overriding the values you need in your custom file to keep the configuration lean and maintainable.

Deploy the Channels helm chart by

    helm upgrade --install --namespace expertflow  --set global.efCxReleaseName="ef-cx"   --debug   cx-channels --values  helm-values/cx-channels-custom-values.yaml  expertflow/channels --version 5.9.0

### CX Campaigns

#### Customize `values.yaml`

Customize values.yaml  
You must first edit `values.yaml` file to define your minimum required configurations.

#### Step 1: Create the Values File

Run the following command to edit a new file:

    vi helm-values/cx-campaigns-custom-values.yaml

#### Step 2: Add Required Minimum Configuration

In the opened file, add the following section to define the FQDN (Fully Qualified Domain Name) for ingress routing:

    global:   
      ingressRouter: <CUSTOM-FQDN> 
    campaign-studio:
      siteEnvVars:
        - name: TENANT_NAME
          value: <TenantId> // default is expertflow

> 🔁 Replace `<CUSTOM-FQDN>` with your actual domain, e.g., `devops.example.com`.

This is the **minimum required customisation** for the CX Helm chart to work.

#### Optional: Add Further Customisations

You can extend the same `cx-campaigns-custom-values.yaml` file with additional configurations as needed, including environment variables, replica counts, etc.

To view all available default configurations and decide what you want to override:

    helm show values expertflow/campaigns --version 5.9.0

This command prints the full default `values.yaml` file used by the CX chart, which serves as a reference for all configurable parameters.
> We recommend only overriding the values you need in your custom file to keep the configuration lean and maintainable.

Deploy the CX Campaigns helm chart by

    helm upgrade --install --namespace expertflow   --set global.efCxReleaseName="ef-cx"  cx-campaigns --debug --values helm-values/cx-campaigns-custom-values.yaml expertflow/campaigns --version 5.9.0 

Make sure to assign the role `conversation-studio-admin` to the Keycloak user `admin`*.*

If you want to create an explicit user for campaigns, update the user in the campaigns siteEnvVars.

### Deployment of QM

The Quality Management (QM) backend is the core engine for evaluating and improving agent performance in Expertflow Contact Center. It enables evaluators to score agent-customer interactions, provide feedback, and ensure high-quality service delivery. This deployment is the first step to enable comprehensive quality assurance for your contact center operations.

### Create and Customize `values.yaml`

Create the database for Qm  

### Create the database in Postgres

QM Backend requires a db named `qm_backend` in Postgres, already deployed in the `ef-external` namespace. Follow the steps below to create one.

1. `exec` into the `ef-postgresql-0` pod in the `ef-external` namespace

    kubectl -n ef-external exec -it ef-postgresql-0 -- bash

2. execute the environment setup for `ef-postgresql-0` ( Only needed when the postgresql is running in non-HA mode , like no pgpool and multiple replicas of postgresql are running )

    /opt/bitnami/scripts/postgresql/entrypoint.sh /bin/bash

3. Log into Postgres using the following command

    psql --host ef-postgresql -U sa postgres -p 5432

4. The system will ask for the password for the user `sa`. Enter the password, configured during deployment of Postgres. You should now be logged into the Postgres shell.

5. Create the required database and extensions using the following commands.

If you are creating the database for **MTT** deployment, the name of the db must be different for each tenant. Replace the name **"qm_db"** in the commands below with the **ID of the tenant** in case of **MTT** ***only***.

    CREATE DATABASE qm_db;
    \c qm_db;
    CREATE EXTENSION IF NOT EXISTS "uuid-ossp";

6. Then to exit from the shell

    \q
    exit
    exit

Customize cx-qm-custom-values.yaml  
You must first create custom values.yaml file to define your minimum required configurations.

**Step 1: Create the Values File**

Run the following command to create a new file:

    vi helm-values/cx-qm-custom-values.yaml

**Step 2: Add Required Minimum Configuration**

In the opened file, add the following section to define the FQDN (Fully Qualified Domain Name) for ingress routing:

    global:   
      ingressRouter: <CUSTOM-FQDN> 
    qm-backend:
      siteEnvVars: 
        - name: KEYCLOAK_REALM
          value: <TenantId> // default is expertflow
        - name: TENANT_NAME
          value: <TenantId> // default is expertflow       
    qm-connector:    
      siteEnvVars: 
        - name: KEYCLOAK_REALM_NAME
          value: <TenantId> // default is expertflow
        - name: TENANT_NAME
          value: <TenantId> // default is expertflow    

🔁 Replace \<CUSTOM-FQDN\> with your actual domain, e.g., [++devops.example.com++](http://devops.example.com/).

This is the **minimum required customisation** for the CX Helm chart to work.

**Optional: Add Further Customisations**

You can extend the same `cx-qm-custom-values.yaml` file with additional configurations as needed, including environment variables, replica counts, etc.

To view all available default configurations and decide what you want to override:

    helm show values expertflow/qm --version 5.3.0

This command prints the full default `values.yaml`file used by the CX chart, which serves as a reference for all configurable parameters.

We recommend only overriding the values you need in your custom file to keep the configuration lean and maintainable.

Finally, deploy the QM using the following command.

    helm upgrade --install --namespace=expertflow --set global.efCxReleaseName="ef-cx" qm  --debug --values=helm-values/cx-qm-custom-values.yaml expertflow/qm --version 5.3.0

To see the QM-related options in Unified Admin, you also need to do some configuration on IAM (Keycloak) and assign related roles to the users. Follow [++these instructions++](https://docs.expertflow.com/cx-knowledgebase/latest/iam-configuration-for-qm.md) for the configurations once IAM (Keycloak) configuration is completed.  
Optionally, If you want to configure QM with CISCO follow [++this++](https://docs.expertflow.com/cx-knowledgebase/latest/cisco-support-for-quality-management-solution.md) guide. This is only required when CISCO interaction are not handled via Unified Agent

#### For MTT Setup Non-MTT Components (Per Tenant)

To deploy **CX Campaigns Studio, Conversation Studio, and QM** for a tenant, use the `mtt-single`Helm chart.

For **MTT** , you have to disable Campaigns Studio, Conversation Studio, QM-Backend and QM-Connector from existing charts or custom values, by first setting the `enabled` key to `false` for these components in their respective charts.

    enabled : false

For QM Backend, we need to manually create the PostgreSQL database first. The steps to create the database are mentioned in this [++guide++](https://docs.expertflow.com/cx-knowledgebase/latest/deployment-guide.md).

First you need to create the namespace for new tenant

    kubectl create namespace <tenant-name>

For **MTT** , you have to transfer the Mongo, Redis, PostgreSQL Certificates from the ef-external namespace to newly created tenant namespace.

please change \<namespace\> with the specific tenant namespace.

    kubectl get secret mongo-mongodb-ca -n ef-external  -o yaml | sed 's/namespace: ef-external/namespace: <namespace>/' | kubectl create -f -
    kubectl get secret redis-crt -n ef-external  -o yaml | sed 's/namespace: ef-external/namespace: <namespace>/' | kubectl create -f -
    kubectl get secret ef-postgresql-crt -n ef-external  -o yaml | sed 's/namespace: ef-external/namespace: <namespace>/' | kubectl create -f -
    kubectl get configmap ef-logback-cm -n expertflow  -o yaml | sed 's/namespace: expertflow/namespace: <namespace>/' | kubectl create -f -
    kubectl get configmap ef-cx-efconnections-cm -n expertflow  -o yaml | sed 's/namespace: expertflow/namespace: <namespace>/' | kubectl create -f -
    kubectl get secret ef-gitlab-secret -n expertflow  -o yaml | sed 's/namespace: expertflow/namespace: <namespace>/' | kubectl create -f -
    kubectl get secret conversation-studio-approle-secret -n expertflow -o yaml | sed 's/namespace: expertflow/namespace: <namespace>/' | kubectl create -f -
    kubectl get secret tls-ca -n vault -o yaml | sed 's/namespace: vault/namespace: <namespace>/' | kubectl create -f -
    kubectl get secret tls-server-client -n vault -o yaml | sed 's/namespace: vault/namespace: <namespace>/' | kubectl create -f -
    kubectl get secret tls-server-vault -n vault -o yaml | sed 's/namespace: vault/namespace: <namespace>/' | kubectl create -f -

### Customize `values.yaml`

Customize values.yaml  
You must first edit `values.yaml` file to define your minimum required configurations.

#### Step 1: Create the Values File

Run the following command to edit a new file:

    vi helm-values/mtt-single-custom-values.yaml

#### Step 2: Add Required Minimum Configuration

In the opened file, add the following section to define the FQDN (Fully Qualified Domain Name) for ingress routing:

    global:   
      ingressRouter: <CUSTOM-FQDN> 
      tenantId: "<tenantId>"  

> 🔁 Replace `<CUSTOM-FQDN>` with your actual domain, e.g., `devops.example.com`

This is the **minimum required customisation** for the CX Helm chart to work.

#### Optional: Add Further Customisations

You can extend the same `mtt-single-custom-values.yaml` file with additional configurations as needed, including environment variables, replica counts, etc.

To view all available default configurations and decide what you want to override:

    helm show values expertflow/MTT-single --version 5.9.0

This command prints the full default `values.yaml` file used by the CX chart, which serves as a reference for all configurable parameters.
> We recommend only overriding the values you need in your custom file to keep the configuration lean and maintainable.

Update namespace and apply MTT-single helm chart

    helm upgrade --install --namespace <tenant-ns>  --debug  <tenant-id> --values helm-values/mtt-single-custom-values.yaml  expertflow/MTT-single --version 5.9.0

### CX Reporting

**Before proceeding with Reporting module setup, ensure that:** **MySQL Server is deployed on a separate, dedicated VM**

#### Configure TLS connection for MySQL

For MTT, each tenant has their dedicated namespace where the respective commands will be deployed. For on-prem, the \<tenant-namespace\> will be expertflow

Get the MySQL `key-store (.jsk)` \& `certificate(.cert)` files for mysql. The `.jsk` file is required for configuration of the reporting connector, whereas the `.cert` file is required for Apache Superset SSL configuration. Skeleton Project (cim-solution) already contains the default .jks files in the keystore directory. Replace the` mykeystore.jks `file acquired with the actual file in `cim-solution/kubernetes/pre-deployment/reportingConnector/keystore/ `directory.

Create `keystore.jks` used for MySQL TLS

    kubectl create configmap -n <tenant-namespace> ef-reporting-connector-keystore-cm --from-file=pre-deployment/reportingConnector/keystore/mykeystore.jks

Create directory with \<`tenant_config_directory`\> in `pre-deployment/reportingConnector/<tenant_config_directory>` and place `reporting-connector.conf` specific to each tenant and set the `mysql_dbms_additional_params`value as shown below.

    mkdir pre-deployment/reportingConnector/<tenant_config_directory>

    mysql_dbms_additional_params=noDatetimeStringSync=true&useSSL=true&requireSSL=true&trustServerCertificate=true&clientCertificateKeyStoreUrl=file:///root/config/certs/mykeystore.jks&clientCertificateKeyStorePassword={KEYSTORE_PASSWORD}
     
    # Replace the {KEYSTORE_PASSWORD} with your original keystore password. Use "changeit" in case of default password.

#### Reporting Connector Config-Map Setupkubectl create configmap -n expertflow ef-reporting-connector-keystore-cm --from-file=pre-deployment/reportingConnector/keystore/mykeystore.jks

For database creation on MTT, refer to the pre-requisite of [++EF Data Platform++](https://docs.expertflow.com/cx/5.9.0/data-platform-deployment-guide.md)

Create the database in target Database Management System using the scripts from `pre-deployment/reportingConnector/dbScripts/dbcreation` directory. Name of each database will be varied from tenant to tenant.

Update the config present in `pre-deployment/reportingConnector/<tenant_config_directory>/reporting-connector.conf` as per the below mentioned parameters  

|                                  **Parameter**                                   |                                                                           **Requirement**                                                                           |
|----------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| fqdn                                                                             | Use (FQDN) of the CX Solution specific to each tenant.                                                                                                              |
| svc_name                                                                         | [++http://ef-cx-historical-reports-svc.expertflow.svc.cluster.local:8081++](http://ef-cx-historical-reports-svc.expertflow.svc.cluster.local:8081/)                 |
| tenant_id                                                                        | unique identifier for each tenant In case of MTT, the tenant_id will be the name of tenant, for on-prem, tenant_id will be expertflow or user-defined \<tenant_id\> |
| browser_language                                                                 | en-US or ar                                                                                                                                                         |
| connection_type                                                                  | mysql or mssql                                                                                                                                                      |
| sql_dbms_server_ip                                                               | mysql.ef-mysql.svc.cluster.local                                                                                                                                    |
| sql_dbms_port                                                                    | for mysql 3306 / for msql 1433                                                                                                                                      |
| sql_dbms_username                                                                | \<username\>                                                                                                                                                        |
| sql_dbms_password                                                                | \<password\>                                                                                                                                                        |
| sql_database_name                                                                | \<database name specific to each tenant\>                                                                                                                           |
| **In case of MTT, Update the following parameters as well**                      |                                                                                                                                                                     |
| conversation_manager_db_name                                                     | \<tenant_id\>                                                                                                                                                       |
| bot_framework_db_name                                                            | \<tenant_id\>                                                                                                                                                       |
| ccm_db_name                                                                      | \<tenant_id\>                                                                                                                                                       |
| routing_engine_db_name                                                           | \<tenant_id\>                                                                                                                                                       |
| cim_customer_db_name                                                             | \<tenant_id\>                                                                                                                                                       |
| business_calendars_db_name                                                       | \<tenant_id\>                                                                                                                                                       |
| state_events_logger_db_name                                                      | \<tenant_id\>                                                                                                                                                       |
| admin_panel_db_name                                                              | \<tenant_id\>                                                                                                                                                       |
| **In case of Single tenant deployment, Update the following parameters as well** |                                                                                                                                                                     |
| conversation_manager_db_name                                                     | expertflow or user-defined \<tenant_id\>                                                                                                                            |
| bot_framework_db_name                                                            | expertflow or user-defined \<tenant_id\>                                                                                                                            |
| ccm_db_name                                                                      | expertflow or user-defined \<tenant_id\>                                                                                                                            |
| routing_engine_db_name                                                           | expertflow or user-defined \<tenant_id\>                                                                                                                            |
| cim_customer_db_name                                                             | expertflow or user-defined \<tenant_id\>                                                                                                                            |
| business_calendars_db_name                                                       | expertflow or user-defined \<tenant_id\>                                                                                                                            |
| state_events_logger_db_name                                                      | expertflow or user-defined \<tenant_id\>                                                                                                                            |
| admin_panel_db_name                                                              | expertflow or user-defined \<tenant_id\>                                                                                                                            |

Apply configuration for Reporting-Connector (For On Prem)

    kubectl -n expertflow create configmap ef-reporting-connector-conf-cm --from-file=pre-deployment/reportingConnector/reporting-connector.conf

#### Apply configuration for Reporting-Connector on the desired tenant's namespace

Create a directory for each tenant for MTT

    mkdir -p pre-deployment/reportingConnector/<tenant_config_directory>

Please copy this file in this directory

    cp -r pre-deployment/reportingConnector/reporting-connector.conf  pre-deployment/reportingConnector/<tenant_config_directory>/reporting-connector.conf

Edit this file according to your configuration

    vi pre-deployment/reportingConnector/<tenant_config_directory>/reporting-connector.conf

Apply this file after updating \<tenant_config_directory\> and namespace

    kubectl -n <tenant-namespace> create configmap ef-reporting-connector-conf-cm --from-file=pre-deployment/reportingConnector/<tenant_config_directory>/reporting-connector.conf

### Customize `values.yaml`

Customize values.yaml  
You must first edit `values.yaml` file to define your minimum required configurations.

#### Step 1: Create the Values File

Run the following command to edit a new file:

    vi helm-values/cx-reporting-scheduler-custom-values.yaml

#### Step 2: Add Required Minimum Configuration

In the opened file, add the following section to define the FQDN (Fully Qualified Domain Name) for ingress routing:

    global:   
      ingressRouter: <CUSTOM-FQDN> 

> 🔁 Replace `<CUSTOM-FQDN>` with your actual domain, e.g., `devops.example.com`.
>
This is the **minimum required customisation** for the CX Helm chart to work.

#### Optional: Add Further Customisations

You can extend the same `cx-reporting-scheduler-custom-values.yaml` file with additional configurations as needed, including environment variables, replica counts, etc.

To view all available default configurations and decide what you want to override:

    helm show values expertflow/reporting --version 5.4.0

This command prints the full default `values.yaml` file used by the CX chart, which serves as a reference for all configurable parameters.

We recommend only overriding the values you need in your custom file to keep the configuration lean and maintainable.

Deploy the Reporting Scheduler

    helm upgrade --install --namespace <tenant-namespace> --set global.efCxReleaseName="ef-cx"   cx-reporting --debug --values helm-values/cx-reporting-scheduler-custom-values.yaml  expertflow/reporting  --version 5.4.0

### Expertflow ETL

For ETL deployment, see [++this guide++](https://docs.expertflow.com/cx/5.9.0/data-platform-deployment-guide.md)

### CX Eleveo Middleware

#### Create and Customize `cx-middleware-custom-values.yaml`

Customize cx-middleware-custom-values.yaml  
You must first create custom `values.yaml` file to define your minimum required configurations.

#### Step 1: Create the Values File

Run the following command to create a new file:

    vi helm-values/cx-middleware-custom-values.yaml

#### Step 2: Add Required Minimum Configuration

In the opened file, add the following section to define the FQDN (Fully Qualified Domain Name) for ingress routing:

    global:   
      ingressRouter: <CUSTOM-FQDN> 

> 🔁 Replace `<CUSTOM-FQDN>` with your actual domain, e.g., `devops.example.com`.

This is the **minimum required customisation** for the CX Helm chart to work.

#### Optional: Add Further Customisations

You can extend the same `cx-middleware-custom-values.yaml` file with additional configurations as needed, including environment variables, replica counts, etc.

To view all available default configurations and decide what you want to override:

    helm show values expertflow/eleveo-middleware --version 5.0

This command prints the full default `values.yaml` file used by the CX chart, which serves as a reference for all configurable parameters.
> We recommend only overriding the values you need in your custom file to keep the configuration lean and maintainable.

#### Create and Customize `cx-middleware-cronjob-custom-values.yaml`

Customize cx-middleware-cronjob-custom-values.yaml  
You must first create custom `values.yaml` file to define your minimum required configurations.

#### Step 1: Create the Values File

Run the following command to create a new file:

    vi helm-values/cx-middleware-cronjob-custom-values.yaml

#### Step 2: Add Required Minimum Configuration

In the opened file, add the following section to define the FQDN (Fully Qualified Domain Name) for ingress routing:

    global:   
      ingressRouter: <CUSTOM-FQDN> 

> 🔁 Replace `<CUSTOM-FQDN>` with your actual domain, e.g., `devops.example.com`.

This is the **minimum required customization** for the CX Helm chart to work.

#### Optional: Add Further Customizations

You can extend the same `cx-middleware-cronjob-custom-values.yaml` file with additional configurations as needed, including environment variables, replica counts, etc.

To view all available default configurations and decide what you want to override:

    helm show values expertflow/middleware-cronjob --version 5.0

This command prints the full default `values.yaml` file used by the CX chart, which serves as a reference for all configurable parameters.
> We recommend only overriding the values you need in your custom file to keep the configuration lean and maintainable.

Open the `helm-values/cx-middleware-custom-values.yaml` and `helm-values/cx-middleware-cronjob-custom-values.yaml` files and update the variables as documented [++here++](https://docs.expertflow.com/cx-knowledgebase/latest/eleveo-middleware-deployment-guide.md).

Run the following commands:

    helm upgrade --install --namespace expertflow  --set global.efCxReleaseName="ef-cx"  eleveo-middleware  --values helm-values/cx-middleware-custom-values.yaml expertflow/eleveo-middleware  --version 5.0
    helm upgrade --install --namespace expertflow  --set global.efCxReleaseName="ef-cx"  middleware-cronjob --debug --values helm-values/cx-middleware-cronjob-custom-values.yaml   expertflow/middleware-cronjob --version 5.0 

### **CiscoSyncService**

#### Create and Customize `cx-ciscosyncservice-custom-values.yaml`

Customize cx-ciscosyncservice-custom-values.yaml  
You must first create custom `values.yaml` file to define your minimum required configurations.

#### Step 1: Create the Values File

Run the following command to create a new file:

    vi helm-values/cx-ciscosyncservice-custom-values.yaml

#### Step 2: Add Required Minimum Configuration

In the opened file, add the following section to define the FQDN (Fully Qualified Domain Name) for ingress routing:

    global:   
      ingressRouter: <CUSTOM-FQDN> 
    siteEnvVars:
        - name: AUTH_SERVER_URL
          value: "https://{{ .Values.global.ingressRouter  }}/auth/"
        - name: EF_SERVER_URL
          value: "https://{{ .Values.global.ingressRouter  }}/unified-admin/"   

> 🔁 Replace `<CUSTOM-FQDN>` with your actual domain, e.g., `devops.example.com`.

This is the **minimum required customization** for the CX Helm chart to work.

#### Optional: Add Further Customizations

You can extend the same `cx-ciscosyncservice-custom-values.yaml` file with additional configurations as needed, including environment variables, replica counts, etc.

To view all available default configurations and decide what you want to override:

    helm show values expertflow/cisco-sync-service --version 5.1.0

This command prints the full default `values.yaml` file used by the CX chart, which serves as a reference for all configurable parameters.
> We recommend only overriding the values you need in your custom file to keep the configuration lean and maintainable.

Deploy the CiscoSyncService helm chart by

    helm upgrade --install --namespace expertflow  --set global.efCxReleaseName="ef-cx"  cisco-sync-service  --values helm-values/cx-ciscosyncservice-custom-values.yaml expertflow/cisco-sync-service --version 5.1.0 

### **Fluent Bit (Optional)**

This is optional and required only to enable audit log monitoring.

Deploy the **Fluent-Bit** helm chart by:

    helm show values expertflow/fluent-bit --version 5.1.0 > helm-values/cx-fluent-bit-custom-values.yaml
    helm upgrade --install --namespace ef-external --set global.efCxReleaseName="ef-cx" cx-fluent-bit --debug --values helm-values/cx-fluent-bit-custom-values.yaml expertflow/fluent-bit --version 5.1.0

### **Cisco Connector (Optional)**

Cisco Connector is a pre-req for **Multi Step Post Call Survey for Cisco** \& **QM with UCCX** . Deploy the **Cisco Connector** helm chart by following the below instructions:
Customise cx-ciscoConnector-custom-values.yaml  
You must first create custom values.yaml file to define your minimum required configurations.

**Step 1: Create the Values File**

Run the following command to create a new file:

    vi helm-values/cx-ciscoConnector-custom-values.yaml

**Step 2: Add Required Minimum Configuration**

In the opened file, add the following section to define the FQDN (Fully Qualified Domain Name) for ingress routing:

    global:   
      ingressRouter: <CUSTOM-FQDN> 
    siteEnvVars: 
      - name: KEYCLOAK_REALM
        value: <TenantId> // default is expertflow
      - name: TENANT_ID
        value: <TenantId> // default is expertflow         

🔁 Replace \<CUSTOM-FQDN\> with your actual domain, e.g., [++devops.example.com++](http://devops.example.com/).

This is the **minimum required customisation** for the CX Helm chart to work.

**Optional: Add Further Customisations**

You can extend the same `cx-ciscoConnector-custom-values.yaml` file with additional configurations as needed, including environment variables, replica counts, etc.

To view all available default configurations and decide what you want to override:

    helm show values expertflow/cisco-connector --version 5.9.0

This command prints the full default `values.yaml`file used by the CX chart, which serves as a reference for all configurable parameters.

We recommend only overriding the values you need in your custom file to keep the configuration lean and maintainable.

Please follow this [++guide++](https://docs.expertflow.com/cx-knowledgebase/latest/configuration-guide-cisco-connector.md) for the configuration of Cisco Connector, and then proceed for deployment by:

    helm upgrade --install --set global.efCxReleaseName="ef-cx" cisco-connector --namespace expertflow --values helm-values/cx-ciscoConnector-custom-values.yaml  expertflow/cisco-connector --version 5.9.0

### AI Deployment Guide \<Optional\>

The following [++guide++](https://docs.expertflow.com/cx-knowledgebase/latest/agent-co-pilot-deployment-guide.md) use to deploy Agent Co-Piolt.

The following [++guide++](https://docs.expertflow.com/cx-knowledgebase/latest/qm-by-ai-deployment-guide.md) use to deploy QM-by-AI.

### WFM Deployment \<Optional\>

Use the following [++guide++](https://docs.expertflow.com/cx/5.9.0/wfm-upgrade-guide.md) for deployment.

### **Rasa-X deployment**

For deployment of Rasa-x AI Assistant, refer to [RASA-X Deployment using helm chart](https://docs.expertflow.com/cx-knowledgebase/latest/rasa-x-deployment-using-helm-chart.md) .

### **EFBI Server (Metabase)**

It is recommended to not deploy the Metabase on same server where CX is deployed

**For deployment on separate server:** [++follow this guide++](https://docs.expertflow.com/cx-knowledgebase/latest/deploy-cx-analyser.md)

Login with [++superadmin@admin.com++](mailto:superadmin@admin.com)

### **EFCX-Bootstrapping (For both On-Prem \& MTT Deployment)**

Upon successful completion of the CX deployment, follow following guide to perform bootstrapping for the tenant.

**Deployments \& Configurations for Tenant**

This section covers the post-deployment steps needed to configure and initialize each tenant environment within the CX solution.

**Step1: Webhook's Registration**

First of all, we need to add webhook's information in the mongo database for the components which required bootstrapping upon tenant registration.

* Export mongo certs using

      mkdir /tmp/mongodb_certs
      CERTFILES=($(kubectl get secret mongo-mongodb-ca -n ef-external -o go-template='{{range $k,$v := .data}}{{$k}}{{"\n"}}{{end}}'))
      for f in ${CERTFILES[*]}; do   kubectl get secret mongo-mongodb-ca  -n ef-external -o go-template='{{range $k,$v := .data}}{{ if eq $k "'$f'"}}{{$v  | base64decode}}{{end}}{{end}}' > /tmp/mongodb_certs/${f} 2>/dev/null; done

* Go inside Kubernetes directory and execute command to import data inside webhook collections. Following are commands

      cd <Curret Working Dir>/kubernetes
      kubectl -n ef-external run mongo-tools --image=mongo:6.0 --restart=Never -- sleep 3600
      kubectl -n ef-external cp ./post-deployment/cim-tenant.webhooks.json mongo-tools:/tmp/cim-tenant.webhooks.json
      kubectl -n ef-external cp /tmp/mongodb_certs/mongodb-ca-cert mongo-tools:/tmp/mongodb-ca-cert
      kubectl -n ef-external cp /tmp/mongodb_certs/client-pem mongo-tools:/tmp/combined.pem
      kubectl -n ef-external exec mongo-tools -- \
        mongoimport \
        --host mongo-mongodb.ef-external.svc.cluster.local \
        --port 27017 \
        --db cim-tenant \
        --collection webhooks \
        --file /tmp/cim-tenant.webhooks.json \
        --jsonArray \
        --ssl \
        --sslCAFile /tmp/mongodb-ca-cert \
        --sslPEMKeyFile /tmp/combined.pem \
        --username root \
        --password Expertflow123 \
        --authenticationDatabase admin
      kubectl -n ef-external delete pod mongo-tools

### 🧪 New Environment Variables (`efConnectionVars`)

Following are the env variables we need to manage based on single tenant (on prem) or multi-tenant solution. These vars are available in connection vars of all the components eg (agent-desk, campaigns, core, Amq)

    ENABLE_CLOUD_MANAGED_CONNECTIONS: "false"     # true if testing with managed cloud DBs
    CX_TENANT_URL: "http://ef-cx-cx-tenant-svc:3000" # reference to the cx tenant component
    ROOT_DOMAIN: "expertflow.com"                 # Root domain of the multitenant provider, and <tenantId> in case of on prem single tenant

* If the incoming FQDN **matches** the `ROOT_DOMAIN`, the solution operates in **multi-tenant mode** eg [++tenant1.expertflow.com++](http://tenant1.expertflow.com/) here root domain is matching with fqdn domain.

* If it **does not match** , the solution defaults to **on-premises mode** , using the tenantId defined as **ROOT_DOMAIN**

### **Tenant Onboarding**

This section provides the required steps and references for [++onboarding tenants++](https://docs.expertflow.com/cx-knowledgebase/latest/tenant-onboarding.md) after completing the CX deployment.

### Post Deployment

Before run this script please verify file-engine and minio pod should be running. `Update FQDN and run script`

Update FQDN and run this script to bootstrap the translations

    chmod +x scripts/upload_agent_desk_translations.sh
    ./scripts/upload_agent_desk_translations.sh

## Configurations

1. Keycloak [++User Creation Guide++](https://docs.expertflow.com/cx-knowledgebase/latest/keycloak-configuration.md)

2. Conversation-Studio [++configuration guide++](https://docs.expertflow.com/cx-knowledgebase/latest/conversation-studio-control-flow-configuration-gui.md)

3. Run Expertflow ETL pipelines mentioned [++here++](https://docs.expertflow.com/cx-knowledgebase/latest/data-platform-user-manual.md)

4. For customer channel configuration, see [++customer channels++](https://docs.expertflow.com/cx-knowledgebase/latest/customer-channels.md).

5. For CX-Voice deployment configurations, use [++this++](https://docs.expertflow.com/cx-knowledgebase/latest/cx-voice-deployment.md) guide.

6. For the Campaigns [++Keycloak Configuration Guide++](https://docs.expertflow.com/cx-knowledgebase/latest/deployment-cx-campaigns.md)

7. For Campaigns, Surveys and QM [++reports++](https://docs.expertflow.com/cx/5.4.0/setting-up-campaigns-survey-and-qm-reports.md) (Optional)

8. API [++Authentication and Authorization Configuration Guide++](https://docs.expertflow.com/cx-knowledgebase/latest/configuring-api-authentication-and-authorization.md).

---
version: "5.9.0"
language: "en"
---
# Upgrade Guide CX5.8.0 to CX5.9.0

Before upgrading, ensure that the system is idle, i.e, all agents are logged out of the AgentDesk.

## Custom Configuration Strategy

For detailed guidelines on applying environment-specific configurations using custom `values.yaml` layering,

Refer to the **CX Helm Chart Custom Configuration Strategy** [++guide++](https://docs.expertflow.com/cx/4.10/customizing-cx-helm-chart-deployments.md).

1. **Update Helm repo**

       helm repo update expertflow

2. **Clone the CX repository on the target server**

   Bash

       # Create CX-5.9.0 directory from root
       mkdir CX-5.9.0
       # Navigate to CX-5.9.0
       cd CX-5.9.0
       # Clone the CX-5.9.0 branch of the cim-solution repository
       git clone -b CX-5.9.0 https://efcx:RecRpsuH34yqp56YRFUb@gitlab.expertflow.com/cim/cim-solution.git $HOME/CX-5.9.0
       # Navigate to the current release /kubernetes
       cd <current-release>/kubernetes

3. **Deploy the AgentDesk Helm chart**

       # Copy the unified agent translation directory to the current release
         Copy from 5.9.0/kubernetes/pre-deployment/app-translations/unified-agent/i18n/   To ./pre-deployment/app-translations/unified-agent
         
       # Run script from <kubernetes> diectory, to update the translations
         chmod +x scripts/upload_agent_desk_translations.sh
         ./scripts/upload_agent_desk_translations.sh
         
       # Deploy the new chart version using the helm-values/cx-agent-desk-custom-values.yaml 
         helm upgrade --install --namespace expertflow --set global.efCxReleaseName="ef-cx" cx-agent-desk --debug --values helm-values/cx-agent-desk-custom-values.yaml expertflow/agent-desk --version 5.9.0

4. **Deploy the Campaigns Helm chart**

       # Deploy the new chart version using the helm-values/cx-campaigns-custom-values.yaml

         helm upgrade --install --namespace expertflow   --set global.efCxReleaseName="ef-cx"  cx-campaigns --debug --values helm-values/cx-campaigns-custom-values.yaml expertflow/campaigns --version 5.9.0

5. **Deploy the Core Helm chart**

       # Deploy the new chart version using the helm-values/ef-cx-custom-values.yaml  

         helm upgrade --install --namespace expertflow --create-namespace ef-cx --debug --values helm-values/ef-cx-custom-values.yaml expertflow/cx --version 5.9.0

6. **Deploy the Channels Helm chart**

       # Deploy the new chart version using the helm-values/cx-channels-custom-values.yaml 

         helm upgrade --install --namespace expertflow --set global.efCxReleaseName="ef-cx" --debug cx-channels --values helm-values/cx-channels-custom-values.yaml expertflow/channels --version 5.9.0

7. **Deploy the MTT Helm chart**

       # Deploy the new chart version using the helm-values/mtt-single-custom-values.yaml

         helm upgrade --install --namespace <tenant-ns> --debug  <tenant-id> --values helm-values/mtt-single-custom-values.yaml  expertflow/MTT-single --version 5.9.0

8. **Deploy the Transflux Helm Chart**

       # Clone CX-Transflux Repository
         git clone -b 5.9.0 https://efcx:RecRpsuH34yqp56YRFUb@gitlab.expertflow.com/cim/transflux.git 5.9.0
       # Copy the following files to your current directory
         Copy from 5.9.0/config/gold_15_minutes_queries_config_template.yaml  
         To <current-transflux-directory>/config/
         Copy from 5.9.0/config/campaigns_data_pipeline_config_template.yaml  
         To <current-transflux-directory>/config/
         Copy from 5.9.0/config/state_event_logger_data_pipeline_config_template.yaml 
         To <current-transflux-directory>/config/

       # Delete the existing ConfigMaps 'ef-transflux-config-cm'
         kubectl -n expertflow delete configmap ef-transflux-config-cm
         
       # Now re-create the ConfigMaps using the following commands from the transflux directory:
         kubectl -n expertflow create configmap ef-transflux-config-cm --from-file=config

       # Re-deploy CX-Transflux
         helm upgrade --install --namespace expertflow   --set global.efCxReleaseName="ef-cx"  cx-transflux --debug --values helm-values/cx-transflux-custom-values.yaml  expertflow/transflux --version 5.9.0

9. **Deploy the CiscoConnector Helm Chart**

       # Deploy the new chart version using the helm-values/cx-ciscoConnector-custom-values.yaml 
         helm upgrade --install --set global.efCxReleaseName="ef-cx" cisco-connector --namespace expertflow --values helm-values/cx-ciscoConnector-custom-values.yaml expertflow/cisco-connector --version 5.9.0

   DB Migration [Guide](https://docs.expertflow.com/cx/5.9.0/cisco-connector-db-migration.md) for Cisco-Connector.
10. **Deploy the WFM Helm Chart \<Optional\>**

    First migrate the PostgreSQL DB using this [guide](/cx-knowledgebase/latest/postgresql-db-migration-for-wfm.md).

        # Deploy WFM using the updated helm-values/ef-wfm-custom-values.yaml  file
          helm upgrade --install --namespace expertflow --values helm-values/ef-wfm-custom-values.yaml wfm expertflow/WFM --version 5.9.0

11. **Voice-related changes:**

    CX Voice and Outbound Dialer Upgrade [guide](/cx/5.9.0/cx-voice-upgrade-guide.md).

12. **Metabase reports**

        # Clone the repo
          git clone -b 5.9.0  https://efcx:RecRpsuH34yqp56YRFUb@gitlab.expertflow.com/cim/cim-solution.git 5.9.0
          
        # Copy the Reports Folder
          Copy 5.9.0/kubernetes/external/metabase-reports/metabase_reporting_update_tool/metabase.py  
          To <current-active-directory>/external/metabase-reports/metabase_reporting_update_tool/
          Copy 5.9.0/kubernetes/external/metabase-reports/metabase_reporting_update_tool/non_voice_campaigns/  
          To <current-active-directory>/external/metabase-reports/metabase_reporting_update_tool/

        # Run the following command to import the new reports
          python3 metabase_import.py https://<Metabase-FQDN>/metabase/api/ <admin-email> <admin-password> <metabase-db-display-name> non_voice_campaigns <collection-name-on-metabase>

### Configurations

**Compliance regulation weekend window segregation:**

We updated the compliance object in Mongo. Use /post-deployment/compliance_US.json as the baseline to update existing profiles.

The following objects are added to the profile:

        "saturdayWindow": [
          {
            "start": "09:00",
            "end": "21:00",
            "enabled": true
          }
        ],
        "sundayWindow": [
          {
            "start": "09:00",
            "end": "21:00",
            "enabled": true
          }
        ],

If **"enabled": true,** the day will be enabled, and the time rule applies; if **"enabled": false,** then it will be considered off/disabled

---
version: "5.9.0"
language: "en"
---
# WFM Upgrade Guide

This document describes the procedure to deploy the Workforce Management (WFM) module on Kubernetes.  
CX must be installed before WFM deployment. The required compatible CX release is **5.5.0**.

## Prepare for Deployment

**Pre-Requisites:**

* Data Platform deployed and running.

* Reporting Connector must be deployed and running in order to ensure that your database has all the pre-requisite tables being used in the WFM gold queries.

### Setup WFM

Update the `helm-values/ef-wfm-custom-values.yaml` file.

Update the global variable

    global:
      ingressRouter: "devops.ef.com"

Ensure the PostgreSQL configs are set if you're using customised values for the DB.
YAML

        - name: DB_USER
          value: "sa"
        - name: DB_PASSWORD
          value: "Expertflow123"

Deploy WFM using the updated `helm-values/ef-wfm-custom-values.yaml` file

    helm upgrade --install --namespace expertflow --values helm-values/ef-wfm-custom-values.yaml wfm expertflow/WFM --version 5.9.0

### Metabase Reports Deployment

    cd ~/CX-5.9.0/kubernetes/external/metabase-reports/metabase_reporting_update_tool
    python3 metabase_import.py https://<Metabase-FQDN>/metabase/api/ <admin-email> <admin-password> <db-display-name> <directory-path> "<Tenent-collection-name>"

    Example : python3 metabase_import.py https://abc.expertflow.com/metabase/api/ email@expertflow.com admin@123 WFM_REPORTS WFM "WFM"

---
version: "1.0"
language: "en"
---
# Workforce Management Solution

## Workforce Management Solution

Provides a structured approach to optimize your contact center operations. This enables you to forecast interaction volumes accurately, anticipate future demand, andallocate resources accordingly.

### Documentation

*

  #### [Datasheet](https://docs.expertflow.com/wfms/1.0/datasheet.md)

*

  #### [Solution Architecture](https://docs.expertflow.com/wfms/1.0/solution-architecture.md)

*

  #### [Compatibility Guide](https://docs.expertflow.com/wfms/1.0/compatibility-guide.md)

*

  #### [System Requirements](https://docs.expertflow.com/wfms/1.0/system-requirements.md)

*

  #### [WFM Deployment on Kubernetes](https://docs.expertflow.com/wfms/1.0/wfm-deployment-on-kubernetes.md)

*

  #### [User Guide](https://docs.expertflow.com/wfms/1.0/user-guide.md)

*

  #### [FAQs](https://docs.expertflow.com/wfms/1.0/faqs.md)

---
version: "1.0"
language: "en"
---
# Compatibility Guide

The solution is designed to integrate seamlessly with specific contact center environments, ensuring optimal performance and efficiency. Below is an overview of the current and future compatibility of our solution:  

|                                                                                                        **Current Compatibility**                                                                                                         |           **Future Compatibility**            |
|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------|
| * Cisco Unified Contact Center Enterprise (UCCE):                                                                                                                                                                                        | * Cisco Unified Contact Center Express (UCCX) |
| * Fully compatible with Cisco Unified Contact Center Enterprise (UCCE). * Enables direct access to and utilization of contact data within UCCE, facilitating seamless integration with Cisco's enterprise-level contact center solution. | * Expertflow Contact Center (EFCX)            |

## **Flexible Data Import**

* **Excel File Uploads**:

  * EF-WFM supports data import from any system via Excel file uploads.

  * Ensures broad compatibility, allowing for easy data migration and integration, even with systems not directly integrated.

---
version: "1.0"
language: "en"
---
# Datasheet

Our Workforce Management (WFM) solution offers a range of features designed to optimize workforce operations and ensure efficient management of employees. Below is an overview of the key functionalities:  

|         **Features**         |                                                                                                                                                  **Description**                                                                                                                                                   |
|------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| **Contract Adherence**       | * Specifies the agreed-upon working hours for an agent. * Determines contract type (full-time, part-time, temporary, etc.). * Outlines expected work time (daily, weekly, average) and rest time. * Sets acceptable tolerance for deviations in working hours. * Defines the working days in the agent's schedule. |
| **Shift Categories**         | * Group shifts into categories like Early, Day, and Late. * Helps in managing schedules based on business needs and employee preferences. * Each category is represented by a color and a short name in schedules.                                                                                                 |
| **Activities**               | * Serves as the building blocks of an agent's shift that s. * Includes skill-related tasks (e.g., phone, email, chat). * Covers non-skill-related tasks (e.g., administration, meetings, breaks).                                                                                                                  |
| **Organizational Hierarchy** | * Provides a structured representation of the organization. * Helps manage and optimize workforce resources effectively by organizing employees into levels and units.                                                                                                                                             |
| **Shifts Adherence**         | * Automatically schedules agents with designed shifts. * Each shift includes a base activity, start and end times, and duration segments. * Ensures shifts are compliant with contractual agreements and labor laws.                                                                                               |
| **Skills**                   | * Manages the creation and organization of skills necessary for WFM operations. * Includes parameters like service level thresholds, occupancy rates, shrinkage, and efficiency.                                                                                                                                   |
| **Queue Volume**             | * Manages workloads such as calls, chats, and emails linked to queues. * Ensures accurate forecasting and resource allocation to meet service levels.                                                                                                                                                              |
| **Forecasting**              | * Uses historical data to estimate contact volumes and staffing needs. * Separate forecasts are created for different activities like phone or chat support.                                                                                                                                                       |
| **Smart Scheduling**         | * Balances business needs with employee well-being through optimized scheduling. * Offers options for optimizing schedules, such as days off and agent shuffling.                                                                                                                                                  |
| **Calendar**                 | * Allows employees to view and manage their individual work schedules. * Enhances transparency and communication in scheduling.                                                                                                                                                                                    |
| **Resource Management**      | * Facilitates user management within a team-based structure. * Includes functionalities like user import and management of user settings.                                                                                                                                                                          |
| **User Settings**            | * Divides settings into General Information, Person Period, and Schedule Period. * Provides a structured approach to manage user data efficiently.                                                                                                                                                                 |
| **Reports**                  | * Offers a variety of reports for analyzing and optimizing workforce operations. * Covers key areas like scheduling, adherence, performance, and forecasting. * Can download reports in various templates (PDF, EXCEL, CSV, HTML) for detailed analysis                                                            |

## Deployment and Scalability

### Microservices

* **Kubernetes**: All services (auth, core, connector, reporting) are deployed as microservices on Kubernetes, ensuring scalability and resilience.

* **Docker**: Each service is containerized using Docker, which allows for consistent and isolated environments across all stages of deployment (development, staging, production).

* **Helm Charts**: Helm charts are used to manage Kubernetes deployments, providing a templated approach to deploy and manage the microservices.

## Security Considerations

* **OAuth2 \& JWT**: Secure user authentication using OAuth2 and JWT, with token validation in every request.

* **Database Security**: Encryption of sensitive data in PostgreSQL, with strict access controls.

* **Kubernetes Security**: Implementation of network policies and secrets management for secure service communication.

## Performance and Scalability

### Microservices Architecture

* **Service Communication**: RESTful APIs for communication between services.

* **Load Balancing**: Kubernetes-managed load balancing across service instances.

* **Horizontal Scaling**: Services scale horizontally in Kubernetes using the Horizontal Pod Autoscaler (HPA).

## Kubernetes Deployment

### Containerization

* **Docker**: Services are containerized using Docker, with Dockerfiles for each service.

* **Helm Charts**: Helm charts are used for managing Kubernetes deployments, ensuring consistent and repeatable deployments across environments.

---
version: "1.0"
language: "en"
---
# FAQs

How do I create a new contract?  
To create a new contract, navigate to \*\*Configuration \> Contracts\*\*, then click the \*\*Create Contract\*\* button. Fill in the required details and click \*\*Save\*\*.

How can I edit an existing contract?  
To edit an existing contract, go to \*\*Configuration \> Contracts\*\*. Find the contract in the list, hover over it, and click the \*\*Edit\*\* icon. Make your changes and click \*\*Save\*\*.
What should I do if I encounter validation errors?  
Check the form for any fields highlighted in red or accompanied by an error message. Ensure all required fields are filled out correctly and that all inputs adhere to the specified formats and constraints.
Can I delete a contract permanently?  
Yes, contracts can be deleted permanently. Navigate to \*\*Configuration \> Contracts\*\*, hover over the contract you want to delete, and click the \*\*Delete\*\* icon. Confirm the deletion in the dialog that appears.
How do I search for a specific contract?  
Use the search input field at the top of the \*\*Manage Contracts\*\* page. Type in the name or part of the name of the contract you are looking for to filter the results.
What are the acceptable formats for time inputs?  
* Weekly Rest Time: HHH:MM (max 167:59)

* Nightly Rest Time: HH:MM (max 23:59)

* Minimum/Maximum Time Per Week: HHH:MM (max 167:59)

* Average Work Time Per Day: HH:MM (max 23:59)

How do I create a new shift category?  
To create a new shift category, navigate to **Configuration \> Shift Categories** , then click the **Create** button. Fill in the required details and click **Save**.
How can I edit an existing shift category?  
To edit an existing shift category, go to **Configuration \> Shift Categories** . Find the category in the list, hover over it, and click the **Edit** icon. Make your changes and click **Save**.
What should I do if I encounter validation errors?  
Check the form for any fields highlighted in red or accompanied by an error message. Ensure all required fields are filled out correctly and that all inputs adhere to the specified formats and constraints.
Can I delete a shift category permanently?  
Yes, shift categories can be deleted permanently. Navigate to **Configuration \> Shift Categories** , hover over the category you want to delete, and click the **Delete** icon. Confirm the deletion in the dialog that appears.
How do I search for a specific shift category?  
Use the search input field at the top of the **Manage Shift Categories** page. Type in the name or part of the name of the category you are looking for to filter the results.
What are the acceptable lengths for the Name and Short Name fields?  
o **Name:** Maximum length of 25 characters.

o **Short Name:** Maximum length of 3 characters

---
version: "1.0"
language: "en"
---
# Solution Architecture

## Overview

This document provides a detailed software design for the Workforce Management (WFM) system, built using a combination of Python/Django and Node.js, and deployed as microservices over Kubernetes. The system is designed to handle workforce management, reporting, and seamless integration with external contact center solutions.

## Scope

The solution comprises several microservices, each with a distinct function, including authentication, core business logic, reporting, and external system integration. The document details the architecture, components, data flows, security, deployment strategy, and considerations for performance and scalability.

## System Overview

### Architecture

![Fig 1.0 Architecture Diagram](https://docs.expertflow.com/__attachments/a_d6b8b04fa872df2afde6d3ef5a4ea9ccd7fb1bc958cb10c2be9f798dcc7e3d13/EF%20WFM%20(3).jpg?cb=8faf4333710dbafbcf88245f801ca5f0)
Fig 1.0 Architecture Diagram

The architecture diagram illustrates the components of the Workforce Management (WFM) system, their interactions, and how they connect with external contact center solutions:

1. **WFM**: This is the core of the system and includes the Frontend and Backend Services.

2. **Frontend**: It provides the user interface to the users to perform their required actions.

3. **Auth**: It manages user authentication and authenticates the requests from the frontend and other backend services.

4. **Core**: It handles the core business logic of WFM.

5. **Connector**: It is an intermediary service between WFM and contact center solutions.

6. **Reporting**: It generates reports based on the data from core and connector services.

7. **WFM Connector**: A middleware component that facilitates communication between the WFM and external contact center solutions.

8. **Contact Center Solutions**: External systems that the WFM interacts with, including UCCX, UCCE, and EFCX.

### Components and Interactions

#### WFM

#### Frontend

* **Functionality**: The Frontend serves as the user interface for interacting with the WFM system. It provides access to the features like scheduling, reporting, and user management.

* **Interaction**: The Frontend communicates directly with the backend services via RESTful APIs. It sends user requests (e.g., login, scheduling) to the respective services and displays the results.

#### Backend Services

The backend services are the core of the WFM system, responsible for handling all business logic, data processing, and system interactions. These services include:

|     **Component**     |     **Technology**      |                                                                                                                                                                       **Functionality**                                                                                                                                                                       |                                                                                **Interaction**                                                                                 |
|-----------------------|-------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| **Auth Service**      | Node.js with Express.js | Manages user authentication using OAuth2 and JWT . It ensures secure access to the system after verifying JWT tokens in each request. It interacts with Keycloak for user authentication and manages internal service communication using a secure key in request headers. It interacts with the Keycloak API to generate admin tokens for appropriate users. | The auth service authenticates requests from the frontend and other backend services. It returns JWT tokens that are used to authorize further interactions within the system. |
| **Connector Service** | Python, Django          | Acts as the intermediary between the WFM system and external contact centers. It receives data from external systems like UCCX, UCCE, and EFCX, processes it, and forwards it to the core service for further action.                                                                                                                                         | The connector service interacts with external contact centers through the WFM Connector. It also communicates with the core service to relay external data.                    |
| **Core Service**      | Python, Django          | The core service handles the main business logic of the WFM system, including user management, scheduling, and skill matching. It processes data from the connector service and manages all critical operations such as shift assignments and user skill validations.                                                                                         | The core service receives requests from the frontend and the connector service.                                                                                                |
| **Reporting Service** | Python, Django          | Generates reports based on data from the core and connector services. It aggregates data from multiple sources to provide insights into workforce management, performance, and other critical metrics.                                                                                                                                                        | The reporting service fetches data from its own database, the core service, and the connector service. It provides the results back to the frontend for user access.           |

#### WFM Connector

* **Functionality**: The WFM Connector is a middleware that facilitates communication between the WFM system and external contact center solutions. It acts as a bridge, ensuring that data flows smoothly between the internal systems and external entities.

* **Interaction**: The WFM Connector interacts with the connector service within WFM and external contact centers (UCCX, UCCE, EFCX). It retrieves data from external systems, which it passes to the connector service for further processing.

## Detailed Workflow

### User Authentication and Authorization

* **Login Request**: A user attempts to log in via the Frontend.

* **Auth Service Interaction**: The login request is forwarded to the auth service, which authenticates the user using OAuth2 through Keycloak.

* **Token Issuance**: Upon successful authentication, the auth service issues a JWT token.

* **Token Usage**: The JWT token is used in subsequent requests to backend services for authorization.

* **Admin Token:**Admin token is generated for admin users through Keycloak.

* **Admin Token Usage:** The admin token is used in subsequent requests to backend service for administrative tasks.

### Data Integration from External Contact Centers

* **Data Transmission**: The WFM Connector extracts data from the external contact centers (UCCX, UCCE, EFCX) and sends operational data to the WFM connector service.

* **WFM Connector Role**: The WFM Connector acts as a conduit, transmitting the data to the connector service within the WFM system.

* **Data Processing**: The connector service processes the data and stores it in its own database. This data is then available for use by the core service.

### Core Working

* **Core Service Processing**: The core service processes the request, considering the data received from the connector service (e.g., queue data, agents data) and the internal workforce data (e.g., user skills, roles).

* **Frontend Communication:**This service uses the JWT token that is provided by auth service for all communication.

### Reporting and Analytics

* **Data Aggregation**: The reporting service aggregates data from the core and connector services.

* **Report Generation**: Reports are generated, analyzing workforce performance, scheduling efficiency, and other key metrics.

* **Report Access**: These reports are made available to users via the frontend, where they can view or download them.

### Secure Communication and Data Handling

* **Internal Communication**: All internal service communications are secured using a special key in the request headers, ensuring that only authorized services can communicate with each other.

* **Data Security**: Sensitive data, such as user credentials and communication between services, is encrypted and handled with strict security protocols.

### External and Internal Communication

* **Internal Protocol:**HTTP is used for internal communication.

* **Internal Authentication:** An internal authentication key is used for communication between the services.

* **External Protocol:**HTTPS is used for external communication

* **External Authentication:**For external communication, the JWT generated by the auth service is utilized.

## Exhibit

| **Abbreviation** |                           **Full-form**                           |
|------------------|-------------------------------------------------------------------|
| WFM              | Workforce Management                                              |
| JWT              | JSON Web Token                                                    |
| REST API         | Representational State Transfer Application Programming Interface |
| DB               | Database                                                          |

---
version: "1.0"
language: "en"
---
# System Requirements

## Overview

This document outlines the window based hardware and software requirements for deploying frontend and backend systems either on-premise or in the cloud, providing guidance on optimal configurations for both environments.

## Frontend Requirements

### **Hardware Requirement**

|   **Component**    |                           **Minimum Requirement**                           |                        **Recommended Requirement**                         |
|--------------------|-----------------------------------------------------------------------------|----------------------------------------------------------------------------|
| Agents             | 50                                                                          | 300                                                                        |
| Processor          | 4 vCPUs                                                                     | 16 vCPUs                                                                   |
| Memory (RAM)       | 8 GB                                                                        | 16 GB                                                                      |
| Storage            | SSD with at least **5** GB of free space                                    | **25**GB of free space                                                     |
| Operating System   | Windows Server 2019 or higher, Linux (any modern distribution)              | Same as minimum                                                            |
| Supported Browsers | Google Chrome 127.0.6533.73 (64-bit) Microsoft Edge 127.0.2651.105 (64-bit) | Google Chrome 128.0.6613.85 (64-bit) Microsoft Edge 128.0.2739.42 (64-bit) |

#### **Software Requirement**

| **Component**  |                                                                                                         **Version**                                                                                                         |
|----------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| **Node.js**    | Version 10.13.0 or higher                                                                                                                                                                                                   |
| **npm**        | Version 6.0.0 or higher                                                                                                                                                                                                     |
| **Web Server** | Any one web server is required, recommended version of some commonly used web servers are given below * **Apache HTTP Server**: Version 2.4 or higher * **Nginx**: Version 1.14 or higher * **IIS**: Version 2019 or higher |

## Backend Requirements

### **Hardware Requirements for Kubernetes Deployment**

There are two kinds of nodes requirement; Master Node(s) and Worker Node(s).

**Master Node(s):**  

| **Component** |          **Minimum Requirements**           |                 **Recommended Requirements**                 |
|---------------|---------------------------------------------|--------------------------------------------------------------|
| **Agents**    | 50                                          | 300                                                          |
| **Processor** | 4 vCPUs (e.g., Intel Core i5 or equivalent) | 8 vCPUs Octa-core processor (e.g., Intel Xeon or equivalent) |
| **RAM**       | 16 GB                                       | 32 GB or more                                                |
| **Storage**   | 100 GB SSD                                  | 500 GB SSD with NVMe                                         |
| **Network**   | 1 Gbps Ethernet                             | 10 Gbps Ethernet                                             |

**Worker Node(s):**  

| **Component** |                **Minimum Requirements**                 |             **Recommended Requirements**             |
|---------------|---------------------------------------------------------|------------------------------------------------------|
| **CPU**       | Quad-core processor (e.g., Intel Core i5 or equivalent) | Octa-core processor (e.g., Intel Xeon or equivalent) |
| **RAM**       | 8 GB                                                    | 16 GB or more                                        |
| **Storage**   | 100 GB SSD                                              | 500 GB SSD with NVMe                                 |
| **Network**   | 1 Gbps Ethernet                                         | 10 Gbps Ethernet                                     |

#### **Software Requirements**

| **Software Component** |                                   **Requirement**                                   |
|------------------------|-------------------------------------------------------------------------------------|
| **Operating System**   | Minimum: Ubuntu 20.04 LTS or equivalent Recommended: Ubuntu 22.04 LTS or equivalent |
| **Kubernetes**         | Version 1.22 or higher                                                              |
| **Docker**             | Version 20.10 or higher                                                             |
| **Helm**               | Version 3.0 or higher                                                               |
| **Kubeadm**            | For setting up the Kubernetes cluster                                               |

#### **Network Requirements**

* **Internal Networking:**

  * Secure and stable network connection between master and worker nodes

  * Network plugins such as Calico, Flannel, or Weave for pod networking.

* **External Access:**

  * Configurations for load balancing (e.g., Nginx, HAProxy).

  * Secure communication channels (e.g., HTTPS, VPN).

#### **Database Configuration**

* **PostgreSQL:** Version 16+ for each microservice.

* Each microservice should have its own PostgreSQL instance.

* Secure and configure cross-service database access.

* Persistent Storage: Use Persistent Volume Claims **(PVC) in Kubernetes** for database storage.

## **Environment Setup**

* **Container Orchestration:**

  * Kubernetes cluster with at least one master node and multiple worker nodes

* **Containerization:**

  * Docker or similar container runtime

* **Namespace Configuration:**

  * Separate namespaces for different environments (e.g., development, staging, production)

---
version: "1.0"
language: "en"
---
# User Guide

## Login

Welcome to Workforce Management Solution, our solution starts with a login page and given below are the information about how to login:

* Navigate to deployed URL or {{ URL }}/#/Login

![image-20240827-185551.png](https://docs.expertflow.com/__attachments/a_f54bd4fc93dd4f120d56eb4e85e95f57b970c681074b4fdb3a0d80cc3967ca74/image-20240827-185551.png?cb=a92bbe4b9fef90ebb36568419e6de108)

* Provide Username and Password to Log in to system.

* Check Remember me if you want to save provided credentials.

* Press LOGIN button.

  * If user is authenticated successfully user will move to welcome screen.

  * If provided credentials are incorrect error message will be displayed.

## User Interface

* Dashboard Layout

The **Dashboard Layout** of the WFM application is designed to be user-friendly and efficient, providing a clear and organized workspace. The main area of the dashboard is reserved for displaying the currently selected module, ensuring that users have ample space to view and interact with the content relevant to their tasks. This layout is intended to minimize clutter and distractions, allowing users to focus on their work. The design is responsive, adapting to different screen sizes, which makes it accessible whether users are working on a desktop or tablets.  
![image-20240827-185450.png](https://docs.expertflow.com/__attachments/a_f82ffa15b6a7f263acd1d70ff9b121e901c2685c7dabdb102200041ef74bf73e/image-20240827-185450.png?cb=ae22c9cc6d478b7b88f11bd78bff5d44)

* Navigation Menu

The **Navigation Menu** is located on the left side of the dashboard and serves as the primary means of navigating through the WFM application. This vertical menu provides quick access to all the major modules of the system, such as the Scheduler, User Management, Reporting, and Settings. Each menu item is clearly labeled and grouped logically, enabling users to find the functions they need with ease. The Navigation Menu is always visible, making it easy for users to switch between different parts of the application without losing their place. This persistent menu design ensures a smooth and intuitive user experience, facilitating efficient navigation throughout the application.  
![image-20240827-185505.png](https://docs.expertflow.com/__attachments/a_4e018c420407a9c63766e26582e851b5379c62c2a6a821ac72259c8c9952a34f/image-20240827-185505.png?cb=4ee1f9e03b272d237f643b4b93e3c673)

## Configuration Module

### Managing Contracts

The Contract Submodule is an integral part of our workforce management application, designed to streamline the creation, management, and administration of employment contracts. This submodule allows administrators to define detailed employment terms, ensuring compliance with organizational policies and legal standards.

#### Creating Contracts

Log in to workforce management [web page](https://docs.expertflow.com/wfms/1.0/user-guide.md#Web-page) .

* Go to the **Configuration** heading in the sidebar menu and select the **Contracts** subheading.

![image-20240828-075213.png](https://docs.expertflow.com/__attachments/a_8e72248266cabbc085d5a851486354a22e2174d17b5890ff02c71b6380a8e479/image-20240828-075213.png?cb=db9ec71330ee5c9fc8b2b8c0918fdfc8)

* Click the **Create Contract** button located at the top right of the main page to open the Create Contract page.

![image-20240827-185632.png](https://docs.expertflow.com/__attachments/a_7c8ca43fbbb9940cff75fe1ce60c877ba10d4e47a3538efa43f6bcbbb9bc0723/image-20240827-185632.png?cb=508221991fe2fcbdd4cb0b591bc1dc70)

* Enter the required information in the provided fields and select the applicable open days for the contract.

  * **Employment Type:** Choose the type of employment from the dropdown.

  * **Name:** Enter the name of the contract. This field is mandatory and has a maximum length of 25 characters.

  * **Description:** Provide a description for the contract (optional, max 250 characters).

  * **Weekly Rest Time:** Set the hours and minutes for weekly rest. The format should be HHH:MM, with a maximum of 167 hours and 59 minutes.

  * **Nightly Rest Time:** Set the hours and minutes for nightly rest. The format should be HH:MM, with a maximum of 23 hours and 59 minutes.

  * **Minimum Time Per Week:** Define the minimum hours and minutes per week. The format should be HHH:MM, with a maximum of 167 hours and 59 minutes.

  * **Maximum Time Per Week:** Define the maximum hours and minutes per week. The format should be HHH:MM, with a maximum of 167 hours and 59 minutes.

  * **Average Work Time Per Day:** Set the average daily work hours and minutes. The format should be HH:MM, with a maximum of 23 hours and 59 minutes.

  * **Target Tolerance:** Specify the negative and positive target tolerances.

  * **Days of Tolerance:** Define the negative and positive days of tolerance.

  * **Working Days:** Toggle the days the contract will be active.

* Click the **Save** button to create the contract.

#### Deleting Contracts

* Go to the **Configuration** heading in the sidebar menu and select the **Contracts** subheading.

* On the **Manage Contract** page, locate the contract you want to delete in the table. Hover over the contract row to reveal the **Edit** and **Delete** icons.

![image-20240827-185757.png](https://docs.expertflow.com/__attachments/a_be9b3a6c7aeef6c7c511fc6ff9ea1bf8c8eed6dc14727fd4394acf0565c84b9c/image-20240827-185757.png?cb=834a6fabe7d2d67a725e78207b1e4fe4)

* Click the **Delete** icon for the specific contract. A confirmation dialog will appear; click **Yes** to confirm and delete the contract.

![image-20240827-185808.png](https://docs.expertflow.com/__attachments/a_b62ef2656d1cae038fc6129d0eb7b402204e47b596919f0b36cffc6c0bab9d3e/image-20240827-185808.png?cb=715f51d8e3a902949bcb8865b1c4e421)

#### Editing Contracts

* Go to the **Configuration** heading in the sidebar menu and select the **Contracts** subheading.

* On the **Manage Contract** page, locate the contract you want to edit in the table. Hover over the contract row to reveal the **Edit** and **Delete** icons.

![image-20240827-185819.png](https://docs.expertflow.com/__attachments/a_b0759ad43c00c12c99d03e398ba7d6e7a5540052ffc4d7d3539a5570490f2183/image-20240827-185819.png?cb=834a6fabe7d2d67a725e78207b1e4fe4)

* Click the **Edit** icon for the specific contract to open the Edit Contract page.

* Make the necessary changes to the contract fields and open days.

* Click the **Save** button to apply the changes.

![image-20240827-185827.png](https://docs.expertflow.com/__attachments/a_dc6acecd6b3d1f14a41710b3953bb009b648ec05bd5e6899b106b1d668ef57d4/image-20240827-185827.png?cb=8139865ba7f330231ca4edf38be106d3)

### Managing Shift Categories

This section outlines the process of creating, editing, and deleting shift categories, which are essential for organizing and labeling work shifts within the system. Proper management of shift categories ensures clarity and consistency in scheduling, helping to avoid conflicts and streamline workforce operation.

#### Creating Shift Categories

* Go to the **Configuration** heading in the sidebar menu and select the **Shift Categories** subheading.

  ![image-20240827-185855.png](https://docs.expertflow.com/__attachments/a_03a67a70cd1789e994839d899ed80b33939243bb0ac64cabe5a6413c5f46403a/image-20240827-185855.png?cb=c04e7ef4ab3ad4fbcd01a62a7d6d8eaa)

* Click the **Create New Category** button located at the top right of the main page to open the Create Shift Categories page.

  ![image-20240827-190436.png](https://docs.expertflow.com/__attachments/a_051af122ea037b67b58881945866c1ecd5f7350f53cf548f7f011703cf11a060/image-20240827-190436.png?cb=7399e729b02fe1c722e17539a3ce1b11)

* Enter the required information in the provided fields for the Shift Category:

  * **Name:** Enter the name of the shift category. This field is mandatory and has a maximum length of 25 characters.

  * **Short Name:** Enter a short name for the shift category. This field is mandatory and has a maximum length of 3 characters.

  * **Color:** Select a color for the shift category using the color picker.

* Click the **Save** button to create the shift category.

![image-20240827-190507.png](https://docs.expertflow.com/__attachments/a_2f9cfb703ca32f7244c60019a5eafcd0e70676065dbae077799c42358f1119d8/image-20240827-190507.png?cb=088c16f563baff69a9daf8600f0ebf02)

#### Deleting Shift Categories

* Log in to workforce management [web page](#).

* Go to the **Configuration** heading in the sidebar menu and select the **Shift Categories** subheading.

* On the **Manage Shift Categories** page, locate the Shift Category you want to delete in the table. Hover over the category row to reveal the **Edit** and **Delete** icons.

  ![image-20240827-190531.png](https://docs.expertflow.com/__attachments/a_18cb687d6fe0d2e218b82442a1b7701caa1aa745d7304be3acdb3604e5e58c2b/image-20240827-190531.png?cb=b2119ce67742e327841df7091462b71a)

* Click the **Delete** icon for the specific Shift Category. A confirmation dialog will appear; click **Yes** to confirm and delete the Shift Category.

![image-20240827-190541.png](https://docs.expertflow.com/__attachments/a_4d6b7f1317acbc353021cd3c2327ede3def59a5d732ad82d3bab78c2972b1549/image-20240827-190541.png?cb=e8221192d01f1f78345aae0e438de0e6)

#### Editing Shift Categories

* Log in to workforce management [web page](https://docs.expertflow.com/wfms/1.0/user-guide.md#Web-page).

* Go to the **Configuration** heading in the sidebar menu and select the **Shift Categories** subheading.

* On the **Manage Shift Categories** page, locate the Shift Category you want to edit in the table. Hover over the category row to reveal the **Edit** and **Delete** icons.

  ![image-20240827-190605.png](https://docs.expertflow.com/__attachments/a_49d8f1d3c0003657447524ff3c28de74e9f0ff7b2e686385d077098156406eed/image-20240827-190605.png?cb=b2119ce67742e327841df7091462b71a)

* Click the **Edit** icon for the specific category to open the Edit Shift Categories page.

* Make the necessary changes to the category fields:

  * **Name:** Modify the name of the shift category if needed.

  * **Short Name:** Modify the short name for the shift category if needed.

  * **Color:** Change the color for the shift category using the color picker.

* Click the **Save** button to apply the changes.

![image-20240827-190616.png](https://docs.expertflow.com/__attachments/a_ac0e8caba2f529d653f5e55663f71d5a546a8b8f18822705d504cf9aa257ebc9/image-20240827-190616.png?cb=088c16f563baff69a9daf8600f0ebf02)

### Managing Activities

This section focuses on the creation, modification, and removal of activities that are integral to workforce management. Activities represent specific tasks or periods within a shift, and their proper configuration is crucial for accurate time tracking, compliance with contracts, and effective resource allocation.

#### Creating Activities

* Log in to workforce management [web page](https://docs.expertflow.com/wfms/1.0/user-guide.md#Web-page).

* Go to the **Configuration** heading in the sidebar menu and select the **Activities** subheading.

![image-20240827-190634.png](https://docs.expertflow.com/__attachments/a_97de1b36dff9e6071fcb2624232a6ffa37ac76e7c81f5ff02c4e21525114ae8a/image-20240827-190634.png?cb=b7a48a275eef65f5e8bdf826dbce4a10)

* Click the **Create New Activity** button located at the top right of the main page to open the Create Activity page.

![image-20240827-190645.png](https://docs.expertflow.com/__attachments/a_980735b483d12dc04ea06981ea22493a5083d851235875736d6cb20f5a4610a4/image-20240827-190645.png?cb=a91a2fa0f4e2d976c083c9cb4a7d30ee)

* Enter the required information in the provided fields for the activity:

  * **Name:** Enter the name of the activity. This field is mandatory and has a maximum length of 25 characters.

  * **Color:** Select a color for the activity using the color picker.

  * **Is Contract Time:** Toggle if this activity is considered contract time.

  * **Is Work Time:** Toggle if this activity is considered work time.

  * **Is Paid Time:** Toggle if this activity is considered paid time.

  * **Requires Skill:** Toggle if this activity requires a specific skill.

  * **Requires Seat:** Toggle if this activity requires a seat.

  * **Is Ready Time:** Toggle if this activity is considered ready time.

* Click the **Save** button to create the activity.

  ![image-20240827-190707.png](https://docs.expertflow.com/__attachments/a_e87b7265f06f13247ae1b833f15941056e9f8705d81c01131502cf4dc8d90ec0/image-20240827-190707.png?cb=cf5759f505431ae8e69b9fc3c6231737)

#### Deleting Activities

* Log in to workforce management [web page](https://docs.expertflow.com/wfms/1.0/user-guide.md#Web-page).

* Go to the **Configuration** heading in the sidebar menu and select the **Activities** subheading.

* On the **Manage Activities** page, locate the Activity you want to delete in the table. Hover over the activity row to reveal the **Edit** and **Delete** icons.

![image-20240827-190840.png](https://docs.expertflow.com/__attachments/a_b7283a0725b9dd79891b4fcf1f75acb461d98e718d20cf3662e0472672c8abc4/image-20240827-190840.png?cb=a9e2baac525f23ffb775c3bea05eb728)

* Click the **Delete** icon for the specific activity. A confirmation dialog will appear; click **Yes** to confirm and delete the activity.

![image-20240827-190850.png](https://docs.expertflow.com/__attachments/a_5ddbbd1f65fca392c460cc3ef1fb0d5c745c93b4d3e52c337dc4afbc83e9a610/image-20240827-190850.png?cb=0489fd3eef959d92bec40e372b42f333)

#### Editing Activities

* Log in to workforce management [web page](https://docs.expertflow.com/wfms/1.0/user-guide.md#Web-page).

* Go to the **Configuration** heading in the sidebar menu and select the **Activities** subheading.

* On the **Manage Activities** page, locate the Activity you want to edit in the table. Hover over the activity row to reveal the **Edit** and **Delete** icons.

![image-20240827-190911.png](https://docs.expertflow.com/__attachments/a_3f9238ba29ccdead0e1116bfaf146bac4733bbc0f58be9716b78fcbc5840101f/image-20240827-190911.png?cb=a9e2baac525f23ffb775c3bea05eb728)

* Click the **Edit** icon for the specific activity to open the Edit Activity page.

* Make the necessary changes to the activity fields:

  * **Name:** Modify the name of the activity if needed.

  * **Color:** Change the color for the activity using the color picker.

  * **Is Contract Time:** Update if this activity is considered contract time.

  * **Is Work Time:** Update if this activity is considered work time.

  * **Is Paid Time:** Update if this activity is considered paid time.

  * **Requires Skill:** Update if this activity requires a specific skill.

  * **Requires Seat:** Update if this activity requires a seat.

  * **Is Ready Time:** Update if this activity is considered ready time.

* Click the **Save** button to apply the changes.

  ![image-20240827-190927.png](https://docs.expertflow.com/__attachments/a_33601ef78812b3a9cad4efd182e82abff5030b71537cdce1501b4328e5f66c5f/image-20240827-190927.png?cb=0e464b36b1922af4d1d34e1893226a28)

### Organizational Hierarchy

The Organizational Tree View provides a hierarchical representation of the organization's structure, allowing administrators to manage locations and teams visually. This tool helps in understanding and maintaining the relationships between different parts of the organization, ensuring that all levels of the hierarchy are accurately represented. This hierarchical tree has three levels:

1. **Organization (Level 1)**: The top-level node representing the entire organization. This node is fixed and cannot be edited or deleted by users.

2. **Locations (Level 2)**: Branches under the organization node representing different locations within the organization. Users can create, edit, and delete locations.

3. **Teams (Level 3)**: Branches under each location node representing teams within each location. Users can manage teams similarly to locations.

#### Navigating the Tree View

* **Expand/Collapse Nodes**: Click on the arrow icon next to any node to expand or collapse the sub-nodes.

* **Hover Actions** : Hover over any location or team node to reveal action buttons (Edit and Delete).

  ![image-20240827-190956.png](https://docs.expertflow.com/__attachments/a_03ecd1aa259f0cdd5d0df189452b1cc355506d3bdd0a50819beb78f93f28ee27/image-20240827-190956.png?cb=ddd67a4b75ecfbf9bf28945c4913a187)

#### Managing Locations

In this section, the process of creating, editing, and deleting locations within the organization is detailed. Locations represent physical or operational sites, and their management is key to organizing teams and assigning resources effectively across different branches of the organization.

#### Creating Locations

* Log in to workforce management [web page](https://docs.expertflow.com/wfms/1.0/user-guide.md#Web-page).

* Go to the **Configuration** heading in the sidebar menu and select the **Organizational Hierarchy** subheading.

* Open the **Organizational Tree View**.

* Locate the desired parent organization node.

* Click the **Plus (+)** button at the bottom of the location list.

![image-20240827-191018.png](https://docs.expertflow.com/__attachments/a_8c7b2b3f2b7eac81fcca150d8eb6610c64ab5e94bda839d39a5503e204429aa8/image-20240827-191018.png?cb=f3a857abe084005b8bac22ad72b103bd)

* A pop-up will appear.

* Input the **Location Name**.

* Click **Save** to create the new location.

  ![image-20240827-191031.png](https://docs.expertflow.com/__attachments/a_dadce4a7c2ef0c3c31adb8764917c2872b473d7e6b17816ef3b1392d9ac49193/image-20240827-191031.png?cb=a69e092708e601fcf70a04667c00334a)

#### Editing Locations

* Log in to workforce management [web page](https://docs.expertflow.com/wfms/1.0/user-guide.md#Web-page).

* Go to the **Configuration** heading in the sidebar menu and select the **Organizational Hierarchy** subheading.

* Hover over the location node you want to edit.

* Click the **Edit** icon that appears.

![image-20240827-191049.png](https://docs.expertflow.com/__attachments/a_22a22d54367b84705e9f1c001b6b0ce3c24e095cd86941a0406c17684a8148de/image-20240827-191049.png?cb=c67af90f07586b73a298695dae252239)

* A pop-up will appear showing the current location name.

* Modify the **Location Name** as needed.

* Click **Save** to apply changes.

  ![image-20240827-191107.png](https://docs.expertflow.com/__attachments/a_f19ac52bb3d78b54aebbc87f4e7e5f23fa917b481adf10004a2f9a8972e31fba/image-20240827-191107.png?cb=9cdc1ee38daecaae572781edcb6a6346)

#### Deleting Locations

* Log in to workforce management [web page](https://docs.expertflow.com/wfms/1.0/user-guide.md#Web-page).

* Go to the **Configuration** heading in the sidebar menu and select the **Organizational Hierarchy** subheading.

* Hover over the location node you wish to delete.

* Click the **Delete** icon that appears.

  ![image-20240827-191141.png](https://docs.expertflow.com/__attachments/a_a0c65c4c770775558fcdda96ee57ea88eb228f4ffc7da350fdaf7f0008d5aeed/image-20240827-191141.png?cb=c67af90f07586b73a298695dae252239)

* A confirmation dialog will appear.

* Click **Yes** to confirm the deletion.

  * **Note**: Deleting a location will also delete all teams within that location.

![image-20240827-191200.png](https://docs.expertflow.com/__attachments/a_7c5e19416d2ba1db279f590627bf3ab0a61e7fc977b3eed88abed8c024b5b985/image-20240827-191200.png?cb=24d6c810a4f2e8cf1b827e9f9986877a)

### Managing Teams

Managing teams involves creating, editing, and deleting teams under specific locations. Teams are the core units of workforce management, and their proper organization is crucial for scheduling, reporting, and overall workforce efficiency.

#### Creating Teams

* Log in to workforce management [web page](https://docs.expertflow.com/wfms/1.0/user-guide.md#Web-page).

* Go to the **Configuration** heading in the sidebar menu and select the **Organizational Hierarchy** subheading.

* Open the **Organizational Tree View** and expand the desired location node.

* Click the **Plus (+)** button at the bottom of the team list under the location.

![image-20240827-191215.png](https://docs.expertflow.com/__attachments/a_55201a7f034163f05f76eab2a3744d02f8ab68332ac37c22df21d8ecc0284194/image-20240827-191215.png?cb=776f3ce2555367f1f8d22edd5f6a5b86)

* A pop-up will appear.

* Input the **Team Name**.

* Click **Save** to create the new team.

![image-20240827-191224.png](https://docs.expertflow.com/__attachments/a_25f93f1fe4a8f536bc75796b8df7e2e1be704e43756f6b07a4822fecd5bcdc2f/image-20240827-191224.png?cb=3c97c0f595f857aed4289e21b679be44)

#### Editing Teams

* Log in to workforce management [web page](https://docs.expertflow.com/wfms/1.0/user-guide.md#Web-page).

* Go to the **Configuration** heading in the sidebar menu and select the **Organizational Hierarchy** subheading.

* Expand desired location node.

* Hover over the team node you wish to edit.

* Click the **Edit** icon that appears.

  ![image-20240827-191241.png](https://docs.expertflow.com/__attachments/a_f9e624d686869297180e5796ac4c0801d8262d4683400272f243280ee9d9e657/image-20240827-191241.png?cb=776f3ce2555367f1f8d22edd5f6a5b86)

* A pop-up will appear showing the current team name.

* Modify the **Team Name** as needed.

* Click **Save** to apply changes.

![image-20240827-191311.png](https://docs.expertflow.com/__attachments/a_477d0a123d469115e532893d50876c088b60f1819a32d6b63f66fa0ac341c458/image-20240827-191311.png?cb=36644658e668203b3ff49a657a8d3a26)

#### Deleting Teams

* Log in to workforce management [web page](https://docs.expertflow.com/wfms/1.0/user-guide.md#Web-page).

* Go to the **Configuration** heading in the sidebar menu and select the **Organizational Hierarchy** subheading.

* Expand desired location node.

* Hover over the team node you wish to delete.

  ![image-20240827-191333.png](https://docs.expertflow.com/__attachments/a_271c5028c4a2c17ac313eb5fab7facbcf979ae9eaee39060addb73700cab84e8/image-20240827-191333.png?cb=776f3ce2555367f1f8d22edd5f6a5b86)

* Click the **Delete** icon that appears.

* A confirmation dialog will appear.

* Click **Yes** to confirm the deletion.

![image-20240827-191400.png](https://docs.expertflow.com/__attachments/a_5bdc49347f4197ae667510a2fabf14be5d17559a98148b461d3d02b049882201/image-20240827-191400.png?cb=93cb57e544465d076ac6eba67700875d)

## Forecaster Module

The Forecaster Module is a powerful tool for predicting call volumes and managing workforce resources accordingly. It involves managing skills, queue volumes, and preparing data for accurate forecasting. This module is essential for optimizing workforce allocation and ensuring that the organization can meet demand effectively.

### Managing Skills

* **Access Forecaster** : Select "Forecaster" from the side menu, then select "Voice" to open the Manage Forecast screen displaying a table of present skills.

![image-20240827-191422.png](https://docs.expertflow.com/__attachments/a_9e581e39fe3830ec903dc7e96985421d4b30674c495b28ac17d104f8a0c128f0/image-20240827-191422.png?cb=c4a5789a95455f6359d2431db332b3fe)

#### **Creating Skills** :

* Access skills [forecaster module](https://docs.expertflow.com/wfms/1.0/user-guide.md#Access-Forecaster).

* Click **Create Skill** in the top right corner.

![image-20240827-191443.png](https://docs.expertflow.com/__attachments/a_923ccae575a937a883dec4c244fa8d79a34723113781e6792607be60591b5e6a/image-20240827-191443.png?cb=b4bcad72f2cfd352512ecd2d34d6e79a)

* Fill out the form.

* Press **Save** to create the new skill.

![image-20240827-191454.png](https://docs.expertflow.com/__attachments/a_b6280937ae56e581fc5bbfda897d5d0249394da2452b9e753729924a4cdb930f/image-20240827-191454.png?cb=bc5dd0a804c456e1fa639587a0b06b3c)

#### **Editing Skills** :

* Access skills [forecaster module](https://docs.expertflow.com/wfms/1.0/user-guide.md#Access-Forecaster).

* Hover over the desired skill row.

* Click the **Edit** icon.

![image-20240827-191506.png](https://docs.expertflow.com/__attachments/a_4482c5d33679cfae87b6488da8ab1039e629b70235ec9a27b06d61a8b7049acc/image-20240827-191506.png?cb=d7229c207faa023e3ffe242b546d4326)

* Modify the fields as needed.

* Press **Save** to apply changes.

![image-20240827-191516.png](https://docs.expertflow.com/__attachments/a_b1b25f4213df0b021c65cc685e2547a83b74d9df6998f54d50f6b7ce37c6b495/image-20240827-191516.png?cb=b2dfb53fbf39dfddc2667544bb7cd5d7)

#### **Deleting Skills** :

* Log in to workforce management [web page](https://docs.expertflow.com/wfms/1.0/user-guide.md#Web-page).

* Hover over the desired skill row.

* Click the **Delete** icon.

![image-20240827-191531.png](https://docs.expertflow.com/__attachments/a_2ac53ee1e0cfcbdb32d3e75dc3befbe4b43aefa51e01dbfb2e9bba9258aa6e19/image-20240827-191531.png?cb=d7229c207faa023e3ffe242b546d4326)

* Confirm deletion in the pop-up.

![image-20240827-191540.png](https://docs.expertflow.com/__attachments/a_2d2bff74650d78ee90c17ea4294f5801e56d842cd738ff87b701233051094d98/image-20240827-191540.png?cb=c93f881f22cd155a0aa33184cd0b35a2)

* **Note: Deleting a skill will also delete all related queue volumes.**

### Queue Volume Management

#### **Creating Queue Volume for Skills**

* Access skills [forecaster module](https://docs.expertflow.com/wfms/1.0/user-guide.md#Access-Forecaster).

* Click on a skill row to open a sub-table of queue volumes

![image-20240827-191553.png](https://docs.expertflow.com/__attachments/a_11a055c1a5c8e9c5249ceb90aa53f939071750fd19e49d183da7a9c6a39c9167/image-20240827-191553.png?cb=9a364d75aea7ee9ada7779d9db8eb772)

* Click the **Create Queue Volume** button in the bottom right corner.

![image-20240827-191607.png](https://docs.expertflow.com/__attachments/a_636669d3a13b33ff779bf32a547ca592c0e536f4243834327b15a8e0fccca425/image-20240827-191607.png?cb=b2dfafea493b1e6bffe6bb97eeec9ecc)

* Fill out the basic fields for queue volume and open days for forecast.

![image-20240827-191620.png](https://docs.expertflow.com/__attachments/a_c1044d86a057218f70471d8019f538e7a44ec4c62b5b36803a2a6f1562c6cc30/image-20240827-191620.png?cb=2fcec63670ec89a646e8f3ca87ef69d6)

![image-20240827-191703.png](https://docs.expertflow.com/__attachments/a_6c6f347928c2535e4a38590aeccdd744965f6f8d07fb70b323de76a2e0d9b246/image-20240827-191703.png?cb=bb49b5d39ef5c379a944e4589c30822f)

* Click **Next** to proceed.

* Select present queues or click **Import Queue** in the top right corner to import from an Excel file.

![image-20240827-191715.png](https://docs.expertflow.com/__attachments/a_7d03248f4918aa5fe06efa78c29d8a18b39bae056a642679ed237dc1c8e0bc3f/image-20240827-191715.png?cb=2edb5d30fb65106cc6cac5196c0c2f32)

* After selecting queues, click **Next** to create the queue volume.

* A pop-up will ask if you want to prepare the queue volume.

  * If **No**, you will return to the Manage Skill screen.

  * If **Yes**, proceed to the prepare queue volume screen.

![image-20240827-191726.png](https://docs.expertflow.com/__attachments/a_87259ebb88cdc575ce750ee7f4667da79a79f7bf14e53e2f01d8578d6ba2a7d1/image-20240827-191726.png?cb=984ac4287f8730cbdc0e03177e4212f4)

* **Editing Queue Volume for Skills**:

  * Hover over the desired queue volume row.

  * Click the **Edit** icon.

![image-20240827-191736.png](https://docs.expertflow.com/__attachments/a_27d5ed3fd01145c90d78ff2eb48306f98004ce8ed26424f4b43f633b864c704b/image-20240827-191736.png?cb=167f295259ab3b35b683cba2a52f7881)

* Modify the fields as needed.

* Press **Save** to apply changes.

#### **Deleting Queue Volume for Skills**

* Hover over the desired queue volume row.

* Click the **Delete** icon.

![image-20240827-191746.png](https://docs.expertflow.com/__attachments/a_6f58c940d8b4c5000c4f851d11f47b93cfd8c34e30de99442726de7313fd2f6d/image-20240827-191746.png?cb=badf9b52ab3a1473e8f7d14600f4af78)

* Confirm deletion in the pop-up.

![image-20240827-191759.png](https://docs.expertflow.com/__attachments/a_1b0e3e22828ec8836bb268e59780216dcae3bb94c7033e1f5904a3579e3b697b/image-20240827-191759.png?cb=3d8e32280039b17768cbcafc1bd85a3d)

### Managing Queue Data for Forecast

#### **Preparing Queue Data**

* Hover over the queue volume row and click **Open Queue Volume/Eye icon** button to open the prepare queue volume screen.

![image-20240827-191817.png](https://docs.expertflow.com/__attachments/a_567b9c8cc5094a4b0044e4877826ff95386a33fe34687e554e11f1a1b49dd79d/image-20240827-191817.png?cb=deb6c84066ccc6820bb815115490320c)

* Click the **Filter** button in the top right corner.

* Select the time period and comparison time period in the pop-up.

* Press **Apply** to display detailed data with a graph and table.

![image-20240827-191827.png](https://docs.expertflow.com/__attachments/a_c700d21eaba85c2fec51ecb7e04e416e38b97032a741512db503afd6c1ba7a9f/image-20240827-191827.png?cb=da1b2e95799d653db21dd4a540b51413)

![image-20240827-191836.png](https://docs.expertflow.com/__attachments/a_ded64e3fb0c4f2308a9f70f85ab09a6e6bb074531e1e2e7c707f248de25823bd/image-20240827-191836.png?cb=57046233c91d75adb23997a3276c325d)

![image-20240827-191847.png](https://docs.expertflow.com/__attachments/a_67011dddfda4c4978d5f6f6a8adbe5624c4aa3fc55963e5649b0f274a6c08fb9/image-20240827-191847.png?cb=2da6316c32687224021cc9d727c9f64e)

* Click **Next** to view daily data for each day of the week.

![image-20240827-191859.png](https://docs.expertflow.com/__attachments/a_71d30f1cff88a46fc349a506cd705676cc0293a8ad54ced69716b15f3ccbe352/image-20240827-191859.png?cb=aa96a2720d5f25bb89d498156f5d6754)

* Press **Save** to save the data.

* A pop-up will ask if you want to create a forecast.

  * If **No**, you will return to the Manage Skill screen.

  * If **Yes**, proceed to the forecast screen.

![image-20240827-191913.png](https://docs.expertflow.com/__attachments/a_a9e645ad0e39d276802a4726bcf406fec548799f45d10f0ba14e889be77b5e9c/image-20240827-191913.png?cb=be7e40eac3359bdd059ea0599cfe44dd)

#### **Updating Queue Data**

* Hover over a queue volume row and click the **Queue Volume icon** button to directly open the queue data preparation screen.

![image-20240827-191931.png](https://docs.expertflow.com/__attachments/a_e16e5720f1de65c1f9081616adefa2272e4ea40dd9fc6681fd08ad68565052e9/image-20240827-191931.png?cb=deb6c84066ccc6820bb815115490320c)

* If saved data is present, it will be displayed and can be updated. If no data is present, new data can be created.

* Update data and press save next.

* View Day data

* Press **Save**

### Managing Forecasts

#### **Creating Forecasts** :

* Hover over the row of the desired queue volume and click **Forecast** Icon Button to open the forecast screen.

![image-20240827-192003.png](https://docs.expertflow.com/__attachments/a_ff05ba9783a1f55294b05f3a96706490681e804994cd0d35af98e75ee5e97ce7/image-20240827-192003.png?cb=c03cf97ac5018109cfed3d7f2de12f68)

* Choose the time period in the pop-up.

![image-20240827-192012.png](https://docs.expertflow.com/__attachments/a_2369dcf60c5fd6c90909d766f9977c3184a923282be9094bea9c3b59dc694aa5/image-20240827-192012.png?cb=a4009c68523520b144cb5c92b778ef6a)

* The forecast will be created based on queue data and displayed in a graph and table.

* To change the time period, click the **Filter** button in the top right corner to open date selection filters.

* Chang dates and press Apply to change time period if required.

![image-20240827-192032.png](https://docs.expertflow.com/__attachments/a_3aded6796a31ae9f839a544cf6e9973375eab234d0778d4b1190e93508cbdf11/image-20240827-192032.png?cb=79b73642f4c42764c872984cc768d6cc)

![image-20240827-192047.png](https://docs.expertflow.com/__attachments/a_43b0c892c779908a0b9a1e7338cd877886db7f8bed707f10ba7ed287fecc8332/image-20240827-192047.png?cb=c0e5998b9a294d75c475d966c15fa017)

## Shift Module

The Shift Module focuses on creating and managing shift graphs, which visually represent shift schedules and combinations. This module allows for detailed planning and visualization of shift patterns, helping managers ensure that all shifts are adequately covered and that employee time is used efficiently.

### Managing Shift

#### Creating Shift

* Log in to workforce management [web page](https://docs.expertflow.com/wfms/1.0/user-guide.md#Web-page).

* Select "Shift" from the side navigation menu to open the shift management screen.

* Click **Create New Shift** in the top right corner.

![image-20240827-192116.png](https://docs.expertflow.com/__attachments/a_01df274edc06c4a809f1bd583e13518a525a3338d47420dd9dd6a8d151b5aa54/image-20240827-192116.png?cb=e317cba8a693c76081d68b344662fc0b)

* Fill out the form with the following details:

  * **Shift Name**

  * **Base Activity**: Select the base activity.

  * **Segment**: Choose the segment.

  * **Start Time**: Specify the start time.

  * **End Time**: Specify the end time.

  * **Late Start**: Specify the late start time.

  * **Late End**: Specify the late end time.

* Repeat the process for other activities as needed.

* Press **Save** to create the new shift.

![image-20240827-192129.png](https://docs.expertflow.com/__attachments/a_c977446398869344dcab109a08ddb0a7936aeea918d1ae5e53e1cd143f812ed3/image-20240827-192129.png?cb=1f6dde506e01e3c50ce7fed010de7527)

![image-20240827-192141.png](https://docs.expertflow.com/__attachments/a_28c4ac74601d58333b3ec7455e75074e5c3c963a557272ff6db560f4dd8171f6/image-20240827-192141.png?cb=a462e78d2e43893a4b0008666eead748)

* After creating the shift, the user will automatically be redirected to the graph screen.

![image-20240827-192205.png](https://docs.expertflow.com/__attachments/a_3eeaca39d8e630d63fe102dff992c827940df5d8e5d0129868b34bf1d007e620/image-20240827-192205.png?cb=1f8aaa26df97206d708f619ac577cfa8)

#### Editing Shift

* Hover over the desired shift row.

* Click the **Edit** icon.

![image-20240827-192219.png](https://docs.expertflow.com/__attachments/a_34f968786662630f0cc7d6cdefd35e39ffa42a1c5aeae555eb581a3840bf9056/image-20240827-192219.png?cb=f4a887be4e4a09b1517a801548588452)

* Modify the fields as needed.

* Press **Save** to apply changes.

![image-20240827-192228.png](https://docs.expertflow.com/__attachments/a_0a98fc3bcbef58b270122b37a96f614467f231809355c39929c1f004dda80f0d/image-20240827-192228.png?cb=1f6dde506e01e3c50ce7fed010de7527)

![image-20240827-192239.png](https://docs.expertflow.com/__attachments/a_03d707cdb7134713d9dc47059055042d51562baf94ac7af22603fb610cbb19bf/image-20240827-192239.png?cb=a462e78d2e43893a4b0008666eead748)

#### Deleting Shift

* Hover over the desired shift row.

![image-20240827-192248.png](https://docs.expertflow.com/__attachments/a_dd707692780860760818a8f454aedb6574d21ec7e73558fe99b1968696076a7a/image-20240827-192248.png?cb=f4a887be4e4a09b1517a801548588452)

* Click the **Delete** icon.

* Confirm deletion in the pop-up.

![image-20240827-192256.png](https://docs.expertflow.com/__attachments/a_23a52767ba3902a358ad76b0e8f82b4d78b92f9efe3df142a90ff90536dbac41/image-20240827-192256.png?cb=767805b1300cc98cf13491b3a3e6ced0)

### Viewing Graphs of Shift Combinations

* **After Creating a Shift**:

  * The user will be redirected to the graph screen where all shift combinations are displayed.

  * Press **Done** to return to the main table screen.

* **Direct Access**:

  * From the shift table, the user can directly move to the shift combination graph screen.

  * Hover over shift name for which you want to check graph.

![image-20240827-192318.png](https://docs.expertflow.com/__attachments/a_d55abed39926b210513cfc72bbd80b78912737dc616ab08007f8e2db967702cb/image-20240827-192318.png?cb=f4a887be4e4a09b1517a801548588452)

* Click the **View** button next to the shift you wish to view the graph for.

* There are also **Edit** and **Delete** buttons available for managing shifts.

![image-20240827-192333.png](https://docs.expertflow.com/__attachments/a_5e11a0c9a6b5f664d24292bde49b4ddc9efdbc53d78ba8a1accac75c6de689b8/image-20240827-192333.png?cb=1f8aaa26df97206d708f619ac577cfa8)

## Workforce Module

The Workforce Module provides tools for managing users within the organization, including creating, editing, and deleting user profiles. This module is central to maintaining up-to-date information on the workforce, managing access control, and ensuring that users are properly assigned to teams and roles within the organization.

### Viewing Users by Teams in Tree View

* **Access Workforce Module**: Select "Workforce" from the side navigation menu.

![image-20240827-192346.png](https://docs.expertflow.com/__attachments/a_7906a5344c1817b85ab28db827e3e8d06f3dd44d76ab7d3cd61a34928f8a1430/image-20240827-192346.png?cb=b75d4c9e476b194ced477ed02b5ee9cd)

* **Tree View Structure**:

  * **Root Node**: Organization name.

  * **Level 2**: Teams within the organization.

  * **Level 3**: Agents of each team.

  * **Team "Users"**: Contains users without a team.

* **Team Management**: Hover over a team to reveal an icon button. Click it to manage users in that team.

![image-20240827-192403.png](https://docs.expertflow.com/__attachments/a_accb700fc6a78bf61e43046a7d2ac5b21a3852bdfc4e9e040ea538a866f1d82f/image-20240827-192403.png?cb=6cdd1239c8e42b2f9037dca4122ad2a1)

#### Creating New Users

* Log in to workforce management [web page](https://docs.expertflow.com/wfms/1.0/user-guide.md#Web-page).

* Navigate to Manage User Screen by clicking **Manage Users**button on top right corner of Manage Workforce Screen.

![image-20240827-192437.png](https://docs.expertflow.com/__attachments/a_474906968b33d699a39b97ca072e93208d93788ee138fafd5cb07298886235ef/image-20240827-192437.png?cb=39e2880a4b73b0afb17a9a0a5e0daed8)

* Click **Edit button** in the top right corner.

![image-20240827-192451.png](https://docs.expertflow.com/__attachments/a_fb25b46f651a7f917eb3227d2f85ef5a4449d660d7ee036f22eb3d14c9fadda1/image-20240827-192451.png?cb=bd54a1e5e5dd809deaa17e4c8cecaa5a)

* Click **Create User** in the top right corner.

![image-20240827-192458.png](https://docs.expertflow.com/__attachments/a_563d82be9311eeb305aa39955e12adbdc6eb45de8c2398af288567dcf26d6fd3/image-20240827-192458.png?cb=0d931c3e3c2fdd846481bfc659ca3adc)

* **Enter User Details:**

  * **Required Fields:** First Name, Last Name, Username, Email.

  * **Optional Fields:** Other fields can be left empty.

![image-20240827-192517.png](https://docs.expertflow.com/__attachments/a_b6ad4b379d385e04ac3f3ec01f7c371a808f6ecefe7fc9c96823faa892516c0c/image-20240827-192517.png?cb=260862e737e3c7069ba00dc23bb6aa07)

* Press **Save** to add the new user.

### Updating User Information

#### Organization-Wide Updates

* Log in to workforce management [web page](https://docs.expertflow.com/wfms/1.0/user-guide.md#Web-page).

* Click **Manage Users** next to the import button.

![image-20240827-192534.png](https://docs.expertflow.com/__attachments/a_df752c2e2d35824868c5b139c31fcd82aa06b794bc92833ce90521a09e8b8004/image-20240827-192534.png?cb=39e2880a4b73b0afb17a9a0a5e0daed8)

* Click **Edit** in the top right to enable editing.

![image-20240827-192542.png](https://docs.expertflow.com/__attachments/a_30be7de7669dc63b3d68088a93a8e3c144fda3dbb677b134aeade451c056b1d3/image-20240827-192542.png?cb=bd54a1e5e5dd809deaa17e4c8cecaa5a)

* **Modify User Info:**

  * Update user details.

  * Check multiple users to apply changes to all selected.

* Press **Save** to confirm updates.

![image-20240827-192551.png](https://docs.expertflow.com/__attachments/a_bc5cd458e136b7b88d8ecfc589505f5b23f34a7a8e650645cca959dbe578c3f4/image-20240827-192551.png?cb=bd457ae59b7454c14fc8c03d81bab374)

![image-20240827-192600.png](https://docs.expertflow.com/__attachments/a_220d7627a409f7fab5234e54580f33067d0c108463634e3c09b247c9a882ca6a/image-20240827-192600.png?cb=f6f49525242f70a222279f56aad903ba)

![image-20240827-192625.png](https://docs.expertflow.com/__attachments/a_f1e757c3d3dead697aeed17a9a9a11b03e0bdf1965e96676f50d13d7c1915c10/image-20240827-192625.png?cb=cc5584b42739f383eecb4cc267e1c0c3)

#### Team-Specific Updates

* Hover over a team in the tree view and click the **Open** icon button.

![image-20240827-192634.png](https://docs.expertflow.com/__attachments/a_9bce1c6e77f1fca6b83622bef840f34dcbbba90d513acd3230b83ddf4f7009ca/image-20240827-192634.png?cb=6e004ba5dbe6d503490877e9738a020b)

* Click **Edit** in the top right to enable editing.

![image-20240827-192645.png](https://docs.expertflow.com/__attachments/a_7d44bbb2d1d369e2f384a11723921f96dc6f2b3b34cfc1fadc036279c2da020b/image-20240827-192645.png?cb=bd54a1e5e5dd809deaa17e4c8cecaa5a)

* **Modify User Info:**

  * Update user details.

  * Check multiple users to apply changes to all selected.

* Press **Save** to confirm updates.

### Deleting Users

* Go to manage users Screen using**.**

* Hover over the desired user.

![image-20240827-192658.png](https://docs.expertflow.com/__attachments/a_a6b6ba052145e03236d7ae413865d08f6d0a5a169a4105629c6ee291b43fd775/image-20240827-192658.png?cb=92ece4e5a6566f94a42e97acfafd1f26)

* Click the **Delete** icon and confirm the action.

![image-20240827-192717.png](https://docs.expertflow.com/__attachments/a_52a3e165b451942d0a028616f50853e2ea7253a1811316db32282f64fdf78194/image-20240827-192717.png?cb=c7c6bace8d27800d45742fb876f7571e)

### Viewing List of Users

* **User Table**:

  * In the manage user screen, view all user information in a table format.

### Importing Users

* Click **Import** in the top right corner.

* Select and upload an Excel file with user information to load users.

* Select users to upload

* Press Save

## Scheduler Module

The **Scheduler** module is a critical component of the WFM application, enabling managers to create, view, and manage shift schedules for teams. The Scheduler is designed to handle complex scheduling needs, allowing users to define shifts based on various parameters, such as employee availability, skill sets, and forecasted call volumes. The module uses a tree view structure to organize teams and their schedules, making it easy to navigate and select the appropriate team for scheduling. Once a schedule is created, it can be saved for future adjustments or published, which updates the calendars of all affected employees. The Scheduler is a powerful tool for ensuring that the right people are in the right place at the right time, optimizing workforce efficiency and reducing scheduling conflicts.

### Creating Schedules for Teams

#### Accessing the Scheduler Module

To access the Scheduler Module, follow these steps:

* Log in to workforce management [web page](https://docs.expertflow.com/wfms/1.0/user-guide.md#Web-page).

* Navigate to the side navigation menu.

* Select "Scheduler" from the list of available modules.

![image-20240827-192747.png](https://docs.expertflow.com/__attachments/a_142147104a4c175656ebe5382a6c119fb3f3837791f0c892a67716e9104386a9/image-20240827-192747.png?cb=5e29f48d99821e02a0fd0824836b906a)

#### **Tree View Structure**

The Scheduler Module organizes teams and schedules using a tree view structure with the following levels:

1. **Organization Level**: This is the root node representing the entire organization.

2. **Team Level**: These are the second-level nodes, each representing a specific team within the organization.

![image-20240827-192902.png](https://docs.expertflow.com/__attachments/a_71ac201448bcdbf33a6970f86d376962747c037630dff98b0016ecf063101be8/image-20240827-192902.png?cb=8c44eca565e5e67fa3a17b695546ec7b)

#### Creating a Schedule

To create a schedule, proceed with the following steps:

* Log in to workforce management [web page](https://docs.expertflow.com/wfms/1.0/user-guide.md#Web-page).

* Access Schedule module by selecting Schedule from Side Menu.

* Hover over the desired team in the tree view.

* Click on the icon button that appears next to the team name.

![image-20240827-192914.png](https://docs.expertflow.com/__attachments/a_c49881ef2980f3f72a421d0d9659b605f4308fc857a83e0b9fd53b6f90691ace/image-20240827-192914.png?cb=17fd171f0ecfc990bca9128bca848782)

* A pop-up dialog will appear, allowing you to configure the schedule.

* Choose the start and end dates for the schedule using the provided date selectors.

![image-20240827-192927.png](https://docs.expertflow.com/__attachments/a_83ae487c1e382802097af8e0c47acd9305dcd50b992991ffe3da44eac3d7492e/image-20240827-192927.png?cb=aaa2bb12afebfe99c70454cce876358c)

* Once the dates are selected, click "Apply" to proceed.

![image-20240827-192937.png](https://docs.expertflow.com/__attachments/a_b3698109e90889e790f3c820ab5ac5887b0c7b3eb5270bc8289be9769b60822d/image-20240827-192937.png?cb=8af7709b2be28d556b57a6b832003130)

* **Viewing or Generating a Schedule**:

  * If a schedule already exists for the selected dates, it will be displayed automatically.

  * If no schedule exists for the selected dates, you can generate a new one:

  * Click on the "Filter" button located in the top right corner.

  * This will open a date selection dialog.

  * Select the desired dates and click "Apply" to generate the new schedule.

![image-20240827-193001.png](https://docs.expertflow.com/__attachments/a_8ad75f32ffb152be23318c6bd7a11ed8dfa11e99d7b1e393a17aa19b668362d0/image-20240827-193001.png?cb=9da56b708ac50cd42e9faabf1036f77f)  
![image-20240827-193019.png](https://docs.expertflow.com/__attachments/a_0febdd7d6cdfee4da05ba847100ab6b24c3ff33d2723aa5fb22ef7d0611e0584/image-20240827-193019.png?cb=67feac366ddd98a7d88d2ed67b92f7bd)

![image-20240827-193033.png](https://docs.expertflow.com/__attachments/a_fdd36bcd41925e0cbfcbee4e72e305c92ca68160de672bd25cc975ae3dfb514b/image-20240827-193033.png?cb=56d2bf0b7832a8ac112587be0166357d)

* **Saving or Publishing the Schedule**:

  * After generating the schedule, you have two options:

    * **Save**: Save the schedule for future access and modifications.

    * **Publish**: Publish the schedule, which will update the calendars of all affected agents.

![image-20240827-193051.png](https://docs.expertflow.com/__attachments/a_3d95e26426349358054c7ffd001feabf5a39fc56e8fa0f63bdb5f806453aed5c/image-20240827-193051.png?cb=15c0f275561e44371e0f7eecf0a630ed)

By following these steps, you can efficiently create, view, and manage schedules for teams within the Scheduler Module.

## Calendar Module

The **Calendar** module provides a visual representation of shift schedules, offering both agents and managers an easy way to view and manage work schedules. The Calendar is divided into two main views: **My Calendar** and **Team Calendar**.

* **My Calendar** allows individual agents to see their assigned shifts, with options to view the schedule by day, week, or month. This personalized view helps agents stay informed about their work commitments and plan accordingly.

* **Team Calendar** gives managers a broader view, showing the schedules of all team members. Depending on their permissions, users can also view the schedules of other teams within the organization. The Calendar module includes features such as date navigation and search functionality, making it simple to find specific schedules and users. By providing a clear and accessible overview of shift assignments, the Calendar module helps ensure that all team members are aligned with the organizational schedule, contributing to smoother operations and better time management.

### Accessing the Calendar Module

To access the Calendar Module:

1. Navigate to the side navigation menu.

2. Select "Calendar" from the available options.

![image-20240827-193106.png](https://docs.expertflow.com/__attachments/a_d328d552f5a1898811c8ae802677633d88ee9e0c555bbbfb234409264df4f684/image-20240827-193106.png?cb=2909e6b4790d0d3522e1822977d79cb2)

The Calendar Module is divided into two sub-sections:

1. **My Calendar**

2. **Team Calendar**

### My Calendar

* **Viewing Agent Shifts**:

  * The calendar displays the shifts assigned to the agent for each day.

* **View Options**:

  * Located at the top right corner:

    * Switch between Monthly, Day, and Week views.

  * Located at the top left corner:

    * Navigate to specific dates using the date selection controls.

![image-20240827-193124.png](https://docs.expertflow.com/__attachments/a_70d9644a204c9dcd69966bf8c2a8aff8346ab9e093a02b119d9645516d56e6e5/image-20240827-193124.png?cb=91b58d6969e7f0c7e10cea4e8a7c3616)

![image-20240827-193133.png](https://docs.expertflow.com/__attachments/a_d4f8e52ae006916bf134d48678e351d2d185ec72c0b3138ea41d67b13aaf0709/image-20240827-193133.png?cb=89ff8b7bbc5b71d6d1621cdef85d1929)

![image-20240827-193143.png](https://docs.expertflow.com/__attachments/a_53bfe69160dd04349128fd94a3c61147a1df06f71abc76a2b8a033f7284e8437/image-20240827-193143.png?cb=3c8b9727bbb848ecbef9d2c9ed58c35f)

![image-20240827-193152.png](https://docs.expertflow.com/__attachments/a_d7093fde120dab773fa4ad05284932f2a5b5376b230ae434ce4c1276bdfb338f/image-20240827-193152.png?cb=380b696b6897b1c8b45aa913f5e1eaab)

![image-20240827-193201.png](https://docs.expertflow.com/__attachments/a_ef565e7240045ca12150247d676f5b37569f2a55c3e46808a35b54072ae53c80/image-20240827-193201.png?cb=9a9dd169ef5bfda016daa3f5c40bcb92)

### Team Calendar

* **Viewing Team Schedules**:

  * The calendar displays the schedules of all team members.

  * Agents can only view the calendar of their own team.

  * Other users, depending on their permissions, can view the calendar of any user within the organization.

* **Selecting a Team**:

  * Located at the top right corner:

    * Select the team whose calendar you wish to view from a dropdown menu.

* **Searching for a Specific User**:

  * A search bar is located beside the team selection dropdown.

  * Use this search bar to find and view the calendar of any specific user within the organization.

* **Navigating Dates**:

  * Located at the top left corner:

    * Use the navigation controls to choose the desired date for viewing schedules.

By utilizing the Calendar Module, agents and other users can efficiently view and manage their schedules, as well as navigate through different time periods to check shifts and availability.

![image-20240827-193217.png](https://docs.expertflow.com/__attachments/a_9400f7e70a6e67b157d551c4641df8c84b295ab0ea5b627cd74e79c43ada2df5/image-20240827-193217.png?cb=5b27e0d9791398ab8b25cc55d63ac70b)

![image-20240827-193230.png](https://docs.expertflow.com/__attachments/a_c1984ec3d8da3e5e44b5bd2a074ec47ad17f883249eda5261d307562148be2e0/image-20240827-193230.png?cb=4ae810c4ab0c3a13a9a06690f815016d)

## Reporting Module

The **Reports** section of the application provides users with the ability to generate, view, and export various reports related to workforce management. These reports are essential for tracking performance, analyzing trends, and making data-driven decisions. Users can customize reports by applying specific filters to focus on relevant data, and once generated, reports can be exported in different formats for further analysis or distribution. The flexibility and depth of the reporting tools allow managers to gain insights into key metrics, ensuring that the organization's workforce is optimized for efficiency and effectiveness.

* Generating Reports

  * Open Reports module by selecting **Reports**from side navigation.

![image-20240827-193242.png](https://docs.expertflow.com/__attachments/a_e980836bdfd421d2c0a17e7fa794592f85172c24d9f084456fd158a0de273809/image-20240827-193242.png?cb=5f3b32d393a82784f23d17aaa66751bb)

* From list of Reports hover over Report you want to open.

* Click on **Open**to open report.

![image-20240827-193251.png](https://docs.expertflow.com/__attachments/a_6ca144a1a22ed7a7168ff0b93eda501be45d22c6ef2ac17cd84c6b95a0f20a92/image-20240827-193251.png?cb=43c71167fc71aca6c17930d93c33f611)

* Set filters for Report.

* Click **Apply** to open report.

![image-20240827-193300.png](https://docs.expertflow.com/__attachments/a_a8910553bf8977f330f5f7dd82f7bcdcd9d2313bff1b1f4bba90fd635ca9833c/image-20240827-193300.png?cb=46a819fc0a8549258193f1790725834d)

* Exporting Reports

  * After Generating report click on Export button on top right corner.

  * Select format for export file from drop down list.

  * Report will be exported and saved in downloads folder.

![image-20240827-193315.png](https://docs.expertflow.com/__attachments/a_6f19cb475f11558cad5219442f579b41cf02501e3ee8b34e5a1f9ce6338643b4/image-20240827-193315.png?cb=2d3c60c53c98f135a08e8e6846eeee3c)

---
version: "1.0"
language: "en"
---
# WFM Deployment on Kubernetes

This document illustrates the procedure and steps to deploy WFM Components on Kubernetes.

## Before you begin, verify

* [ ] Installed Kubernetes. If not, see [Deployment Planning](https://docs.expertflow.com/cx-knowledgebase/latest/kubernetes-deployment-getting-started.md)
* [ ] Have already setup storage. If not yet, see [Storage Solution - Getting Started](https://expertflow-docs.atlassian.net/wiki/spaces/DTDO/pages/2526989/Storage+Solution+-+Getting+Started)

## Prepare WFM Components for Deployment

### Step 1: Clone the WFM repository

    git clone https://efcx:RecRpsuH34yqp56YRFUb@gitlab.expertflow.com/wfm/wfm-kubernetes.git

    cd wfm-kubernetes/

### Step 2: Create Namespaces

1. Create a [namespace](https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/) `wfm` for all WFM components.

    kubectl create namespace wfm

### Step 3: Apply Image Pull secret

1. Run the following commands for applying ImagePullSecrets of WFM images.

    kubectl apply -f registryCredits/ef-imagePullSecret-wfm.yaml

### Step 4: Update FQDN

Wfm Components should be accessible by a fully qualified domain name. Assign the FQDN.  
`Replace <FQDN> with your FQDN for wfm-connector and run this command.`

    sed -i 's/devops[0-9]*.ef.com/<FQDN>/g' ConfigMaps/*  Ingresses/nginx/* Ingresses/traefik/*

### Step 5: Deploy WFM-Components

1. Apply ConfigMap

       kubectl apply -f ConfigMaps/

2. Create services for wfm

       kubectl apply -f Services/

3. Apply the Deployment manifest

       kubectl apply -f Deployments/

4. Before proceeding to the the next steps, wait for all the solution components to be up and ready.

       kubectl get pods -n wfm 

### Step 6 :Setup Ingress Routes

For RKE2-based Ingresses using Ingress-Nginx Controller

    kubectl apply -f Ingresses/nginx/

Add label

---
version: "1.0"
language: "en"
---
# ServiceNow EFCX Connector

## ServiceNow EFCX Connector

Expertflow CX is a comprehensive contact center solution that supports voice, chat, and other digital channels. This embedded EFCX Connector operates within the...

### Documentation

*

  #### [Solution Reference](https://docs.expertflow.com/sn-efcx-c/1.0/solution-reference.md)

*

  #### [Release Notes](https://docs.expertflow.com/sn-efcx-c/1.0/release-notes.md)

*

  #### [Business Features](https://docs.expertflow.com/sn-efcx-c/1.0/business-features.md)

*

  #### [Solution Prerequisites](https://docs.expertflow.com/sn-efcx-c/1.0/solution-prerequisites.md)

*

  #### [Deployment Guide](https://docs.expertflow.com/sn-efcx-c/1.0/deployment-guide.md)

*

  #### [Compatibility Guide](https://docs.expertflow.com/sn-efcx-c/1.0/compatibility-guide.md)

*

  #### [Solution Architecture](https://docs.expertflow.com/sn-efcx-c/1.0/solution-architecture.md)

*

  #### [Future Roadmap](https://docs.expertflow.com/sn-efcx-c/1.0/future-roadmap.md)

---
version: "1.0"
language: "en"
---
# Business Features

## Agent Capabilities

Integration between the EFCX Connector and ServiceNow CRM involves embedding the EFCX Connector within the ServiceNow CRM Web UI. This integration allows agents to use the same CRM agent interface for call and chat handling and transfer, enabling them to access agent/call controls within ServiceNow CRM. The EFCX Connector includes the following features:  

### **Log in to the Agent Desk**

* An agent can be logged in by entering agent credentials and then pressing the 'Login' button from the login screen.

![image-20240816-062141.png](https://docs.expertflow.com/__attachments/a_1524abd26a2a9efce5f8c058be17bca9ef46dc46d7f2eef6825e9bf3cf2429cb/image-20240816-062141.png?cb=df2f0820b44a84a4d4663a51cd3fb3e2)
Login Page  

#### **Post Log in Interface**

* After entering the credentials, the agent can see the Dashboard.

![image-20240816-062057.png](https://docs.expertflow.com/__attachments/a_b54a02bc7f74814e75caf7e1f2117c3c244b17aa6018bc17f472e1f0041e2120/image-20240816-062057.png?cb=d1a7069801d0be95ffb260c91906178c)
Post Login  

#### **State Change**

Enables agents to change their states globally and MRD-wise.

#### **Global State**

Global states are the high-level states that serve as the basis for setting MRD states. The state change on this level affects state changes on all assigned MRDs.

##### **Change Global state to Ready or Not-Ready**

* After logging in, an agent may change global state to Ready or Not-Ready.

* During Wrap-up, an agent may change global state to Ready or Not-Ready.

* Available controls for agent state are displayed when the bottom-facing arrow button is pressed.

![image-20240507-122939.png](https://docs.expertflow.com/__attachments/a_1029b495ac864534089c9f5cde78c7e1baa4581645faf2d3510ac4235a375b34/image-20240507-122939.png?cb=2e501aa7be2b940474ca053ee5432624)
Global State  

##### **State Timer**

* Agents can also see the real-time timer going on to count how much time the agent remains in a state (Ready, Not Ready). This state timer is reset every time the global state is changed.

![image-20240507-130748.png](https://docs.expertflow.com/__attachments/a_6dabb673b7b9ace2b08fa71e026fdeab501caa941379997932151fa3388e61e8/image-20240507-130748.png?cb=7fbe4046f2eb20fb3ef7fbb61019b3dc)
State Time  

#### **MRD States**

MRD states are specifically for a particular MRD. Once agents set themselves as Ready, or Not Ready on a specified MRD, they make themselves available or not available to take requests from that particular MRD.

##### **Change CX Voice State to Ready or Not-Ready**

* After logging in, an agent may change the CX Voice state to Ready or Not-Ready. On Ready state, he can be able to make inbound and outbound dialogs.

![image-20240507-123407.png](https://docs.expertflow.com/__attachments/a_69d5a5161f71daf7c9005fe46b5c47f9248f5cd319d385a48894073788f93142/image-20240507-123407.png?cb=6f09a4dc3610eb038db0c553b2dc8809)
CX Voice State  

##### **Change Chat State to Ready or Not-Ready**

* After logging in, an agent may change the Chat state to Ready or Not-Ready. On Ready state, he can be able to make inbound and outbound conversation.

![image-20240507-124401.png](https://docs.expertflow.com/__attachments/a_1cd7f77694b7d007461c01bfe53dea6b1048509ccf82cfcea884ee01abb303ef/image-20240507-124401.png?cb=3ddd5f30680de92f7a4415b280788f92)
Chat state  

#### **Logout**

* To logout, agent may select one of the logout reason that are displayed in the "Logout" section when he clicks on "Logout" option. The agent will be logged-out with the respective reason.

![image-20240507-124959.png](https://docs.expertflow.com/__attachments/a_14ed99b3b571007619ff7d024f33310dff98290a5ced4202e917ce4789df9675/image-20240507-124959.png?cb=e28ba46f24722c34fcfad6f417f0b8b6)
Logout  

#### **Accept a Conversation**

Enables agents to receive a conversation from queues, handle an ongoing conversation, link customer profiles, view conversation history, view active channels, and view conversation data.

##### **Inbound Conversation Notification**

* Once an agent receives a new request, it is assigned to an agent, and the agent is reserved. An incoming conversation notification appears on the Agent Desk, with a button to Accept the request. The notification contains the name of the customer (if identified), or "Jane Doe".

![image-20240507-135134.png](https://docs.expertflow.com/__attachments/a_07901acd876f4f7eca3676369d17d07ae4d53ec41cd5a5007628fcdb78068f5c/image-20240507-135134.png?cb=088f5b21c4122cbbdfa0a8009fd92786)
Inbound conversation  

##### **View Conversation History**

The Conversation History enables the agent to provide the record of all the conversations exchanged with the active customer. Each conversation carries activities exchanged over the conversation. These activities include:

1. Voice calls received/ initiated by the agent to the customer,

2. Chat messages sent over the conversation (customer/ whisper messages),

3. Conversation notifications are logged under all conversations with this customer,

4. playable recording links are visible,

5. Wrap-up and note activities.

So when a request is routed to an agent, the agent can only see the current conversation and the activities/messages exchanged for the active conversation before it was routed to the agent.  
![image-20240508-064730.png](https://docs.expertflow.com/__attachments/a_23c91a8753c6ced04cda001934636991404055fd6fd26e18ea4c93225e7d2bfd/image-20240508-064730.png?cb=b73a03e807f997b6af7642611946629e)
Conversation History  

#### Load More

* By default, the past conversations are hidden behind a Load More button. If the agent has permission to load the history, can click this button to load the past conversations of the customer. To know about the latest query, go to the bottom of the conversation by clicking on Jump to bottom

![image-20240508-065221.png](https://docs.expertflow.com/__attachments/a_f5992e39727d3aa79f27bd3396197001a05ecd5bfe71e6f43eb4e91b39f0a0c1/image-20240508-065221.png?cb=7430d17a5ce2d11b864ad486aa1eacbb)
Load More  

#### New Message

* Upon receiving a new message while reading the previous history on the top, the agent will see the New Message button popping up. Click on that to read the newly received message.

![image-20240508-065426.png](https://docs.expertflow.com/__attachments/a_1eb9890acef5057daf244d24962d62fbae31f4c2a31d29c0a0405bf7e248e12b/image-20240508-065426.png?cb=85332587d0e1ea757b093fba86fd4ee0)
New Message  

##### **Current Channel and Customer Profile**

* Upon accepting the requests, agents see the Customer Profile data and Media Channel details of the customer on the right under the relevant panes. The CRM profile of the customer is popped up in the background (CRM) as described in the [Screen pop section](https://docs.expertflow.com/sn-efcx-c/1.0/business-features.md#Screen-Popup) .

![image-20240507-135629.png](https://docs.expertflow.com/__attachments/a_3c11994ba1859027304178650fb6f9db01656b11096731cd2b00798941000996/image-20240507-135629.png?cb=d6bcc766db05c6d45c854043f0837b02)
Customer Profile  

##### **End Conversation**

Based on agent permissions, an agent may leave an ongoing conversation even if a customer is present in the conversation.

* If the agent leaves a conversation while the customer is still present on any of the customer channels, the conversation remains active but the agent task is closed.

* If the agent leaves a conversation when the customer has left, the conversation is usually closed.

Click the 'cross' icon to leave the conversation. Upon clicking this icon.  
![image-20240508-070015.png](https://docs.expertflow.com/__attachments/a_43c5cc319a8373d13d9e825a12f9c72f01dbcbeabbcd9c64a6b1adb682e8d234/image-20240508-070015.png?cb=ab5d49a13473eafc4869a139da9f0da1)
End Conversation  

### Apply Wrap-up and Add Notes

A wrap-up is a concluding note added to the conversation that helps the business to know what the conversation was about. Expertflow CX agents can provide wrap-ups to conversations that they handle, during or after the conversation.

#### **Apply Wrap-up**

* Agents can Apply wrap-ups to a conversation by clicking the notes icon on the control toolbar. A wrap-up dialogue box will appear where wrap-up categories and reasons are listed as defined by the system administrator. The agent will choose a category and a reason that best matches the conversation with the customer.

![image-20240508-070036.png](https://docs.expertflow.com/__attachments/a_edf3feebe4a6d302cb588159003e61702c728414324012464b9ee6bcb77f311c/image-20240508-070036.png?cb=afc17544cddb859772d82d4e96c1ca4b)
Wrap Up  

#### **Wrap-up Timer**

A wrap-up feature is already there in the application but it is not time-framed

CX now introduces a wrap-up timer as an important metric to measure the agent's productivity. This feature limits the agent to wrap up the conversation within the configured time. The system shows a timer to the agent to wrap up the current conversation within the configured time.  
* The wrap up time is configurable. By default, it is set to 60 seconds.

* The admins can define Wrap-up reasons as defined in the [++unified admin++](https://docs.expertflow.com/cx/4.5/unified-admin-guide#Add-Wrap-up-Reasons)

![image-20240508-132841.png](https://docs.expertflow.com/__attachments/a_a11fd2fe3a8aa8194c73351db5f360ec78086617277e391eb53bb884a8a83888/image-20240508-132841.png?cb=c33c5e56e3994eb30574aebda9c2de8e)
Wrap Up timer

#### **Workflow**

Whenever a conversation is closed from either side, a wrap-up window pops up. The wrap-up timer can be seen on the right-hand side. Pre-defined wrap-up reasons are displayed here. The agent can choose any suitable reason fit to the conversation and add notes as adding a note is optional.  
If the agent leaves without adding the wrap-up, the timer will disappear/expire, the conversation will be automatically closed without any Wrap-up reasons as it is still optional.  

#### **Conversation Switching**

* An agent can accept more than one conversation requests at a time. It means he can handle multiple conversation and can switch between different conversation by clicking on left under the relative panel.

* In case of multiple conversations, when an agent switches to another conversation the customer profile in the CRM is also switched to the active conversation.

![image-20240508-070448.png](https://docs.expertflow.com/__attachments/a_4e29f6b1ff9ee29dc0c4aaddfcc47592450f6f4ade6f28924f76bdaf28e9d28b/image-20240508-070448.png?cb=353cf632084376e1ae5ffed3623b36a7)
Conversation Switching  

#### **CTI Call Controls**

Provides a CTI toolbar for the agent to perform multiple functions to handle the customer calls.

##### **Inbound Call notification**

* Once an agent receives a new request, an incoming call notification appears on the Agent Desk, with a button to Accept the request. The notification contains the number of the customer.

![image-20240508-115837.png](https://docs.expertflow.com/__attachments/a_e6c9ba9bf60dc1372ec4f16e4d9e1d3f2b8f34de2c31b2d78708dbff05a7f9e7/image-20240508-115837.png?cb=554d1285b7cc15b390fb7ddcf7d83749)
Inbound Call  

##### **Call Controls**

On accepting a call, the CTI toolbar appears with the following controls:

1. Drag

2. Mute/Unmute

3. Hold/Resume

4. End Call

#### Drag

As the agent accepts the call, the CTI toolbar pops up anywhere on the screen. On clicking this drag option, this toolbar can be moved any where on the screen.

#### Mute/Unmute

The Mute/Unmute button on the toolbar enables the agent to mute or unmute if and when required.

#### Call Hold/Resume

The agent can hold the call by clicking on the **Hold**button on being active on a call with the customer or with any other agent in case of transfer.

In the same way, the agent can resume the call by clicking on the **Resume**button as soon as becomes available again.

#### End Call

The agent can end the call using this toolbar by clicking on the **End** Call button. This will end the call leg between the agent and the customer.  
![image-20240508-122612.png](https://docs.expertflow.com/__attachments/a_5f366c52383c673121629a970fbe9b0ea558e5d3920ebe31234c849e50df3ff0/image-20240508-122612.png?cb=da6bc3aca2e2fdb20934ae431366227b)
Call Controls  

#### Outbound Call

* The agent can make an inbound call by clicking on dial pad on the dashboard.

![image-20240508-133129.png](https://docs.expertflow.com/__attachments/a_fe329fd64e85374c5438d334042449c6e91ea41f5dc2671b8e32c06ae34b4c91/image-20240508-133129.png?cb=9e8166584bdf69083e075bba9657c7c4)
Outbound Call  

### Screen Popup

When a conversation arrives on the logged-in agent, a CRM customer record is popped up according to the customer's number and information stored in ServiceNow.

1. By default entities supported for searching are Account/Contact (*we can set priority in configuration*)

2. If one record is matched, then that record will automatically pop up.

![image-20240816-055903.png](https://docs.expertflow.com/__attachments/a_465216adc7a58e1d0f31ec4904b0d6cb4b7879572e03b6ae03e9fb9118c4dd83/image-20240816-055903.png?cb=77d3a4f54053353d4aca22812b32b304)
Single Match Screen Popup  

#### **No ANI Match**

In the case, the customer record is not available either in the accounts, or contacts table, the "**New Contact** " page will be popped up in front of an agent with Anonymous Name. (*configurable*).  
We can configure to nomatchEntity to Account or Contact.  
![image-20240816-055718.png](https://docs.expertflow.com/__attachments/a_35d9d6b182a7d72951dd24ddff4b571399e4984f16d794f3a072e4e8c9f17033/image-20240816-055718.png?cb=b913f2f955d02a4f988a2c55b6edef9e)
No match Screen Popup  

##### **Multiple Match**

In the case of multiple matches, a list of all the matched records of the respective entity will be shown in the drop-down list in alphabetical order on the top of connector. The first record in the list will automatically pop up, however, the agent can also manually select the customer record from the dropdown list and that customer profile will pop up. Search can be made as follows.  
![image-20240816-060127.png](https://docs.expertflow.com/__attachments/a_499a97e0c578d255fd0027e32e7105c23a0feb75108f27a3c03b09d1b915e34d/image-20240816-060127.png?cb=d25271172c54ef86dc68347d0192526f)
Multiple Match Screen Popup  

### Conversation Activity

An activity is created at the end of the conversation. It contains information such as:

* Contact

* Account

* Task

* Conversation ID

* Start Time

* End Time

* Duration

* Converstation type

* Additional Information

* Conversation Direction

Conversation can be chat or call. The '**Additional Information**' field displays the conversation type for the number and wrap-up notes.

Activities can be seen from the '**phone logs**' tab, it will show the activities in descending order i.e. latest activity will be at the top. In the case of single matching or no matching record, it will be created automatically.  
Wrap-up reason and notes will not be reflected in the call activity right now.  

![image-20241008-052729.png](https://docs.expertflow.com/__attachments/a_ff73daf5692057c59ad0c2ff4e935d680240866a9fd4d446096583afb54c1309/image-20241008-052729.png?cb=3cb02829c9d4f4cf29cf0a8ba9ee668f)
Activity

### Click to Call

This feature allows the agent to select any number corresponding to a record (Account/Contact) and initiate an outbound call with that number.  
![image-20240816-061922.png](https://docs.expertflow.com/__attachments/a_2257b074711fe4bde13d62e7592ae11286f65fae588737846c9c3e6c69f3a71a/image-20240816-061922.png?cb=0ce31235edf5d2569e3aacbb38502df7)
Click to Call

---
version: "1.0"
language: "en"
---
# Compatibility Guide

## Overview

Expertflow Servicenow Connector integrates EFCX so this guide provides compatibility requirements with respect to EFCX.

## Compatibility Requirements

The compatibility requirements related to Channels, Browser and Servicenow versions are given below.  
We have tested the versions mentioned below. To counter-check, testing can be scheduled before actual deployment.

### EFCX Version:

* EFCX Agent Desk 4.6

**Tag:** `gitimages.expertflow.com/cim/unified-agent:4.5.6_b-CCC-1165`

* EFCX Agent Desk 4.5 customized

**Tag:** `4.5-SR1_f-CTI_CRM_TEMP-4.5-c3938f15985d86c3bb8b90cb00c65974758df590`

### Browsers Compatibility

|  **Browser**  |               **Tested Version**                |                                                                        **Compatibility**                                                                        |
|---------------|-------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Google Chrome | Version 129.0.6668.90 (Official Build) (64-bit) | ![check mark](https://docs.expertflow.com/__attachments/a_1115adc4d842654731646185561bde486d21f77a406ccead168b3dd6730a1557/atlassian-check_mark?cb=a10212e1c1021c5194f7535b6843f955)       |
| Firefox       |                                                 | ![question mark](https://docs.expertflow.com/__attachments/a_c411b310d9650d0b202605faa7dde910c9ca98a256303f868d25fe3de94663f7/atlassian-question_mark?cb=01451d3e8ed02077899ec3e8fa8cf364) |

**Recommended Browser:**Google Chrome

### EFCX Connector Display Theme

| **Theme Mode** |                                                                     **Compatibility**                                                                     |
|----------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------|
| Light          | ![check mark](https://docs.expertflow.com/__attachments/a_1115adc4d842654731646185561bde486d21f77a406ccead168b3dd6730a1557/atlassian-check_mark?cb=a10212e1c1021c5194f7535b6843f955) |
| Dark           | ![check mark](https://docs.expertflow.com/__attachments/a_1115adc4d842654731646185561bde486d21f77a406ccead168b3dd6730a1557/atlassian-check_mark?cb=a10212e1c1021c5194f7535b6843f955) |

**Recommended Theme Mode:** Light mode

### ServiceNow Version

|------------------------|--------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------|
| **ServiceNow Version** | **Build Tag**                                                                                                      | **Compatibility**                                                                                                                                         |
| Washingtondc           | `glide-washingtondc-12-20-2023__patch4-hotfix1a-07-01-2024` and `glide-washingtondc-12-20-2023__patch7-08-21-2024` | ![check mark](https://docs.expertflow.com/__attachments/a_1115adc4d842654731646185561bde486d21f77a406ccead168b3dd6730a1557/atlassian-check_mark?cb=a10212e1c1021c5194f7535b6843f955) |

|-----------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------|
| ![check mark](https://docs.expertflow.com/__attachments/a_1115adc4d842654731646185561bde486d21f77a406ccead168b3dd6730a1557/atlassian-check_mark?cb=a10212e1c1021c5194f7535b6843f955)       | Supported                 |
| ![cross mark](https://docs.expertflow.com/__attachments/a_448a649bce0bda408013de080301356f52587cc1a043e54bf26ecbf23ef61a4a/atlassian-cross_mark?cb=a9c671cfc7809253be52d640dbbf1019)       | Not Supported             |
| ![question mark](https://docs.expertflow.com/__attachments/a_c411b310d9650d0b202605faa7dde910c9ca98a256303f868d25fe3de94663f7/atlassian-question_mark?cb=01451d3e8ed02077899ec3e8fa8cf364) | Maybe developed on-demand |

---
version: "1.0"
language: "en"
---
# Deployment Guide

## **Deployment Prerequisite**

Before the start of this guide, please make sure that the [Agent Desk](https://docs.expertflow.com/cx/4.5/expertflow-cx-deployment-on-kubernetes) Application is deployed. You can go ahead and deploy the EFCX following the steps.

## CTI Installation and Configuration

Before the phone communication channel between customer service agents and external customers can be used, Customer Service Management and Openframe plugins must be activated and configured.

Before you begin, Please make sure you have a CRM administrator role.

### Procedure

1. Activate the Customer Service plugin (**com.sn_customerservice**).

2. Activate the Openframe plugin (**com.sn_openframe**).

3. Create an **OpenFrame Configuration** or use the default CTI configuration by enabling the **Default** field.

**\*** ^**plugins are installed by default when deploying the application from the marketplace.**^

### Update PhoneLog fields

1. Search **Tables** and click on **Tables**option under system definition.

![image-20240930-103748.png](https://docs.expertflow.com/__attachments/a_91516c0a2fb182b3b17214eb9270f427d2c4c6a3a5672fff42d5c3d1e9d96148/image-20240930-103748.png?cb=17e98f43b14f8dbcaa77b018ab902d76)

2. Search **Phone Log** table and click on **Phone Log** from the list.

3. Change the application scope and update to **Openframe** as shown in image.

![image-20240930-104029.png](https://docs.expertflow.com/__attachments/a_3a1bd0dc59457e33ae9235910f3f29030714ce45257ba4212e5ae4fbcf3d731c/image-20240930-104029.png?cb=075f6c5a4b208d341bc59568ea6d6c53)

4. Click on **New**button to add the extra fields needed to run the EFCX Servicenow connector.

5. You have to add fields for **Account**.

|   **Name of fields**    |               **Value**                |
|-------------------------|----------------------------------------|
| Type                    | Reference                              |
| Column label            | Account                                |
| Column name             | u_account (*will fetch automatically*) |
| Applications            | Openframe                              |
| Reference Specification | Reference = Account (customer_account) |

6. Click on **Submit** button on the top right.

![image-20240930-105125.png](https://docs.expertflow.com/__attachments/a_96fecc56091eb99c97ac0a71709339fd664180ce50df1c9104514e5d2e4c5888/image-20240930-105125.png?cb=ec5bb943fa6cd8de8fc987674395ddec)

7. Now fields for **Conversation Type**

| **Name of fields** |                    **Value**                     |
|--------------------|--------------------------------------------------|
| Type               | String                                           |
| Column label       | Conversation Type                                |
| Column name        | u_conversation_type (*will fetch automatically*) |
| Applications       | Openframe                                        |
| Max Length         | 250                                              |

![image-20240930-104305.png](https://docs.expertflow.com/__attachments/a_b997a7b8b9b726cf710d3cc9aaf5bf185d4522022edea29bacbcceeb23733fe4/image-20240930-104305.png?cb=d40f551835de945722cc4db68074444f)

8. Click on **Submit** button on the top right.

While adding fields, ensure that your application scope is Openframe and your column names start with *u_account* and *u_conversation_type.*

### Change the Phone Log Fields Label

1. Search the Phone Log table and click on "Phone Log" from the list.

2. Then, select the columns Recording URL, Call ID and Call Type to change the label.

3. First, update the label of Recording URL to "**Additional Information** " then Call ID to "**Conversation ID** " and then update Call Type to "**Conversation Direction**".

![image-20240930-113538.png](https://docs.expertflow.com/__attachments/a_d8f634955ab465788de35f0ef882c82aedc7a41b3b2bba41d048319240d39391/image-20240930-113538.png?cb=83c2fd3d73088a726a5d7126265b1122)  
While adding or updating the fields value/label the Application scope must be **Openframe**

### Design the Phone Log Table

1. Search **Phone Log** table and click on **Phone Log**from the list.

2. Click on **Form Builder** from the related links on bottom of the page.

![image-20241008-053302.png](https://docs.expertflow.com/__attachments/a_d40b730360f68125faaab29271eabe8df5a458d4b93ff5f2752ae369b5716c1b/image-20241008-053302.png?cb=4cb7171ce0c83ce4ce06241b85ce48ff)

3. Now click on Edit in orignal scope.

4. Now drag and drop the following fields:

Fields Name  
1. Conversation ID

2. Start Time

3. Conversation Direction

4. Contact

5. Account

6. End Time

7. Phone Number

8. Task

9. Duration

10. Conversation Type

11. Additional Information

12. Agent

5. Now click on Save.

### Install EFCX Servicenow Connector

1. Download the package of [EFCX ServiceNow Connector](https://drive.google.com/file/d/1tJ_-VFc-_eEkirB_69ylF_1O5ylghL0O/view?usp=drive_link).

2. Login to servicenow CRM with admin role.

3. Search and go to **Retrieved updates sets** options.

![image-20240930-102336.png](https://docs.expertflow.com/__attachments/a_23cb6fb418f973bb35bd37dda622f45572dc1222676e76a21e5f3e20b8338d97/image-20240930-102336.png?cb=926df0dd298d413c4f85a282739a0c6e)

4. And click on **Import Update Set from XML** option.

5. Select the downloaded package from your device.

6. Once it is imported, click on the package and choose **Preview update set** button.

![image-20240930-102845.png](https://docs.expertflow.com/__attachments/a_614f9320c0bd2326a67a89971470e897ce75c265f231e71672e884672d8b5c62/image-20240930-102845.png?cb=2476e5cdacf4e3f9dbbb4d80c987162c)

7. After that click on **Commit Update Set** button and your package will be installed in your servicenow.

### Create an OpenFrame configuration

This configuration specifies the OpenFrame window settings as well as the URL to be launched within OpenFrame.

**Before you begin**

Role required: admin

As part of the OpenFrame configuration, users with the admin role can select one or more user groups. Access to the configuration is limited to the users who have the open-frame user role and that belong to the selected groups.

### OpenFrame user roles

The OpenFrame window is available to agents who belong to one of the user groups specified in the OpenFrame configuration and with any of the following roles:

1. **sn_openframe_user** ( This is a minimum role that is required)

2. **sn_customerservice_agent**

3. **sn_customerservice.consumer_agent admin** (This is only required for the installation and configuration not required for the agents)

4. **x_expe4_snowefcxv_cti.CTI_Role** (Mandatory Role required)

#### Adding the OPEN Frame Configurations

1. Click on All \>\>Openframe \>\> select **configurations** \& then '**New**'

   ![openframe.jpg](https://docs.expertflow.com/__attachments/a_2ca372b05e5de80b90d0fc35f0c9ce60ac3ee126ff5798e1f1dd7cbda966ab19/openframe.jpg?cb=714619472992336ef43d36256f0e09ea)  
   ![image-20240930-110059.png](https://docs.expertflow.com/__attachments/a_80941380e7a764338004a75086babba559533899183fd2769917eeaef9a52df2/image-20240930-110059.png?cb=fd3c1355a1db651a446b84e6c86e5bfb)

2. **\*** ***Show presence indicator when checked*** Only the agent can see the phone icon.

*When the above roles are provided no user group should be selected or the above-mentioned roles must be part of some user group when selected.\\*

3. URL = x_expe4_snowefcxv_cti and then click on **Submit**.

4. When clicked on the phone icon in the top window the integration will look like

![Agent Login.png](https://docs.expertflow.com/__attachments/a_571ac4194b034005f3d455ed7e912027dd2f5851688ac1fad48001152c655552/Agent%20Login.png?cb=c2ef51c9e116bea011f48c8c0bb39401)

5. If we open the EFCX application from **All** \>\> **Agent workspace** then it will look like this

![Agent Workspace Login.png](https://docs.expertflow.com/__attachments/a_27ea030d519372db16d9f6061558dbb9d2388a945dd0b7f954241245f46f95bc/Agent%20Workspace%20Login.png?cb=4ebcb2b86db58105939297585c05621c)

### Add configurations

1. Search Studio and click on the **Studio** under the System Applications.

2. Now search your application name "**servicenowefcxvoice**" and select the application.

3. Go to **GetConfigData** file under script include.

4. In the Entitiesfield `configData.entities` provide the priority for searching Contact, Account in your application like "**contact,account**", all values need to be in small letters.

5. In the **noMatchEntity** field `configData.noMatchEntity` provide new entity you want to create when there is no matching number in CRM like "Account".

6. In the **Destination_Number** field `configData.Destination_Number` provide the configured dialed number for queue in order to make calls like "**1333**".

For the "Destination Number" field, you need to provide the "***Service Identifier*** " that you have configured for the Voice channel in Unified Admin of EFCX. If the voice channel is not configured, you can follow this [guide.](https://docs.expertflow.com/cx/4.5/cx-voice-configuration-guide#id-(4.5)CXVoiceConfigurationGuide-UnifiedAdminConfigurations)

7. In the **iframeUrl** `configData.IframeURL` field provide the deployed EFCX URL (`https://<fqdn>/unified-agent/`).

![image-20240930-110924.png](https://docs.expertflow.com/__attachments/a_22c12f62aaa7f3df5a6bd2c02d6da2ff04ad296a36118456a75e6604af0185da/image-20240930-110924.png?cb=e61c935d4be4f02112bd87fbc1e7f595)

8. Now click on Update.

---
version: "1.0"
language: "en"
---
# Future Roadmap

## Future Roadmap

We keep enhancing our products with new features and the following features are in our roadmap.  

|              **Feature**              |                                                                                         **Description**                                                                                         |
|---------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Wrap up \& call notes in the activity | A call activity is created at the end of the call for all call types except consulting calls. We will add the wrap-up applied and the call notes provided by the agent in the Activity created. |
| Click to Chat                         | Click to Chat feature allows the user to select any number corresponding to a record (Account/Contact) and a chat will be initiated to that number.                                             |

---
version: "1.0"
language: "en"
---
# Release Notes

| **Target release** |    1.0    |
|     **Status**     | Completed |
|--------------------|-----------|

## Release Summary

Integration between the EFCX Connector and ServiceNow CRM allows the EFCX Connector to run within the ServiceNow CRM Web UI. This enables agents to have call controls within ServiceNow CRM, allowing them to use the same CRM interface for all call and chat handling and transfers.  

## Release Limitations

* Encrypted phone number will be mapped on Customer's Screen pop-up and Chat Activity in case of Viber.

* Click to chat is not available for this release.

* Selected Warp-up and Notes will not refelected in the chat or call activity.

* Activity will be created for unanswered Call/Chat.

* CX-Voice limitations are [here](https://docs.expertflow.com/cx/4.5/cx-voice-limitations.md).

ℹ️  

## Important Notes

* Do not login to the same agent on different browsers or different machines.

* Administrative access to server machines is required to install EF Connector.

* Admin access to ServiceNow CRM is required to deploy CRM side configurations.

## Release Tested Highlights

### Tested with:

* [ServiceNow CRM](https://docs.expertflow.com/sn-efcx-c/1.0/compatibility-guide.md#ServiceNow-Version)

* [EFCX Agent Desk](https://docs.expertflow.com/sn-efcx-c/1.0/compatibility-guide.md#EFCX-Version:)

* CX Voice (Inbound \& Outbound)

* The following EFCX chat chanels:

  * WebChat

  * WhatsApp

### Not Tested with:

* Supervisor Controls

* High Availibility (HA)

### Web Browser:

**Google Chrome** - Version **129.0.6668.90** (Official Build) (64-bit)  
🖥️  
**Compatibility Matrix** for this release is available [here.](https://docs.expertflow.com/sn-efcx-c/1.0/compatibility-guide.md)

---
version: "1.0"
language: "en"
---
# Solution Architecture

## Introduction

This document describes the architecture diagram and solution components of CTI connector and how it is embedded into the ServiceNow solution.

## Intended Audience

The document is intended for developers with knowledge of Cisco Finesse and ServiceNow .

## Communication Flow Diagram

The communication flow between ServiceNow, the components of CTI connector and Expertflow CX is given as follows:

1. Customer Call/Chat reaches Expertflow CX via any media channel like Finesse, WhatsApp etc

2. Expertflow CX route the call/chat to the best available agent.

3. EF ServiceNow Connector, receive the notification from Expertflow CX that the call/chat is coming.

4. Connector will do the screen pop in ServiceNow based on customer number by integrating ServiceNow APIs

5. Once the agent accepts the call, EF ServiceNow Connector connects the call/chat with the customer by using Expertflow CX APIs

6. Once the Call ends, EF ServiceNow Connector will create the task in the ServiceNow by integrating ServiceNow APIs.

![Untitled Diagram-1728307800581.drawio.png](https://docs.expertflow.com/__attachments/a_9a2711ce7dc684125926cacc4f7aad56b9df2b140ff4dacc12cae4ac9acd9705/Untitled%20Diagram-1728307800581.drawio.png?cb=d3f2e625e4b3d364b6c6a8b88a884ede)

---
version: "1.0"
language: "en"
---
# Solution Prerequisites

## Time Synchronization

An important consideration is time synchronization between related components. Communication between EFCX Connector and client applications. If the system dates and time are not synchronized the system can produce unpredictable results. Therefore, please make every effort to adhere to the following time synchronization guidelines:

EFCX Connector and client applications should have their Time Zone and time configured properly according to the geographic region and synchronized. To configure the time zone, please see the instructions from the hardware or software manufacturer of NTP server. Client applications and EFCX Connector should be synchronized to the second. This synchronization should be maintained continuously and validated on a regular basis. For security reasons, Network Time Protocol (NTP) V 4.1+ is recommended.

## Browser Requirement

| [**GOOGLE CHROME™**](https://www.google.com/chrome/) | [**MOZILLA® FIREFOX®**](https://www.mozilla.org/en-US/firefox/new/) |
|------------------------------------------------------|---------------------------------------------------------------------|
| Supports latest stable browser version               | Supports latest stable browser version                              |

**Recommended Browser:** Google Chrome

## Access Prerequisites

For remote installation and configurations, the implementation team would require remote access privileges.

* VPN connection is required to connect.

* Remote access via RDP or similar is required to do installation and configuration of EF Server.

* Administrative access to server machines is required to install EFCX Connector.

## Product Prerequisites

You must have installed the [EFCX](https://docs.expertflow.com/cx/4.5/expertflow-cx-deployment-on-kubernetes) on your server before integrating with ServiceNow.

Once EFCX 4.5 is installed, you would need to deploy the [customized branch](https://docs.expertflow.com/sn-efcx-c/1.0/compatibility-guide.md#EFCX-Version:) for the connector to perform all the operations as described in the business features.

### **Hardware Requirements**

For hardware requirements please follow [this](https://docs.expertflow.com/cx/4.5/hardware-sizing) guide for EFCX deployment requirements.

### **ServiceNow Admin Role is required**

* **Instance name:** Any Vendor or Developer Instance

* **Version(s):**Tokyo, San_Diego, Washingtondc

### **Browser Requirements**

* Google Chrome Latest version

* Firefox Latest Version

---
version: "1.0"
language: "en"
---
# Solution Reference

## Related Pages

* [Release Notes](https://docs.expertflow.com/sn-efcx-c/1.0/release-notes.md)

* [Business Features](https://docs.expertflow.com/sn-efcx-c/1.0/business-features.md)

* [Solution Prerequisites](https://docs.expertflow.com/sn-efcx-c/1.0/solution-prerequisites.md)

* [Deployment Guide](https://docs.expertflow.com/sn-efcx-c/1.0/deployment-guide.md)

* [Compatibility Guide](https://docs.expertflow.com/sn-efcx-c/1.0/compatibility-guide.md)

* [Solution Architecture](https://docs.expertflow.com/sn-efcx-c/1.0/solution-architecture.md)

* [Future Roadmap](https://docs.expertflow.com/sn-efcx-c/1.0/future-roadmap.md)

---
version: "3.0"
language: "en"
---
# Android/ iOS Finesse app for mobile agents

## Android/ iOS Finesse app for mobile agents

Expertflow allows agents to set up a mini mobile call center using ExpertFlow Mobile Agent App. This allows agents to take customer calls and answer their queries anytime, anywhere by conveniently using their personal mobile device.

### Documentation

*

  #### [Release Notes](https://docs.expertflow.com/android-ios/3.0/release-notes.md)

*

  #### [Business Features](https://docs.expertflow.com/android-ios/3.0/business-features.md)

*

  #### [Solution Prerequisites](https://docs.expertflow.com/android-ios/3.0/solution-prerequisites.md)

*

  #### [Compatibility Guide](https://docs.expertflow.com/android-ios/3.0/compatibility-guide.md)

*

  #### [Solution Architecture](https://docs.expertflow.com/android-ios/3.0/solution-architecture.md)

#### [Deployment Guide](https://docs.expertflow.com/android-ios/3.0/deployment-guide.md)

*

  #### [Limitations](https://docs.expertflow.com/android-ios/3.0/limitations.md)

---
version: "3.0"
language: "en"
---
# Android App Installation Guide

This document provides prerequisites, system requirements, and installation instructions of the CISCO Voice Agent mobile app.

## Software Requirements

See [/wiki/spaces/JCA/pages/37617839](https://docs.expertflow.com/android-ios/3.0/compatibility-guide.md) for all the requirements.

## Prerequisites

It is assumed that you have followed the deployment guide already for [javescript_cti_toolbar deployment](https://docs.expertflow.com/javascript-cti/3.1/deployment-guide).

## Installation Steps

The Internet should be available on the mobile device to carry out the installation steps.

1. Open the browser on the target Andriod device and download the mobile app [APK](https://drive.google.com/file/d/1goLxupch6S2mdsZHv_53TLWljIc1y6WU/view?usp=sharing).

2. Once it's downloaded, open Downloads, tap on the APK file to install it.

3. After the successful installation, launch the application and allow all the permissions asked by the OS.

## Configuration

Once application the launched, go to settings page and:

1. Enter the **javascript-cti-toolbar** FQDN and press **save** .

   ![app2.jpg](https://docs.expertflow.com/__attachments/a_aba77fc288b5798cdc6199a1db3900c39f5e329dcbceee28e0522a72f670b397/app2.jpg?cb=6e6c4377c63ca4372625d1dc8e233f0c)

2. Login into the javascript-application-toolbar.

   ![image 20.jpg](https://docs.expertflow.com/__attachments/a_ce770add3c1810aeafff3d1bdb8b79ef98180b81245811ee7389fd916486b753/image%2020.jpg?cb=eb800364dfe1304288de03d8397b624d) ![app4.jpg](https://docs.expertflow.com/__attachments/a_0c13b4a44b4d84eaee527a904099cb4799c88b1668940494805cdb31e6b620b0/app4.jpg?cb=cd2d335f2a85e7a666549bfc4832affd)

---
version: "3.0"
language: "en"
---
# Business Features

## Agent Login

The mobile app allows the user to log in as Cisco Mobile Agent. In addition to giving the username, password, and extension, agents provide their mobile number to be used for redirecting call center calls on the agent mobile phone. They can also choose the connection mode; i.e. Nailed or Call-by-Call in case of Cisco CCE platform.

Once the settings are provided, they remain stored and the user doesn't need to provide those settings every time.

![image 20.jpg](https://docs.expertflow.com/__attachments/a_3303b1e5475fac28a2ffe7af30ba42dd66c4ab7ac7e158e102691b1b9a34b4ae/image%2020.jpg?cb=eb800364dfe1304288de03d8397b624d)

## Agent Logout

Agents can logout from the app via logout option under the agent state selection dropdown.

![ms-crm-web-cti-sr-bf-expertflow-2.JPG](https://docs.expertflow.com/__attachments/a_b932ba257ef436232089f8c3089de168db7f9eb0bb20ac1d08e35e5d295aab54/ms-crm-web-cti-sr-bf-expertflow-2.JPG?cb=ab4e3e3e928080bdbad4a37343596550)

## State Changes

Agents can change their state, i.e. Ready, Not-Ready, using the state change controls within the mobile app.

![Agent States New.jpg](https://docs.expertflow.com/__attachments/a_cabeb7f94b55a30799dcfe1081202135767e450b7621bc11c4f7a2c576176b6f/Agent%20States%20New.jpg?cb=50778d506cf9134ce505230bd6554437)

## Call Controls

Controls/buttons on the toolbar change based on the current state of the agent or call and based on the telephony event from the contact center.

### Incoming Call Notifications

Whether on hook or off hook, agents are notified about incoming calls from the contact center.

### Accept Call

Since agents log in using Cisco **Mobile Agent** feature, the call also lands on agents' mobile phone. Calls are answered using the **call answer**button on the mobile phone. Once the call is answered from the phone, agents may relaunch the app to perform other actions such as, view call attached data, transfer/hold the call.

![Call Notification - Full Screen.jpg](https://docs.expertflow.com/__attachments/a_514ecae3e93831d3bab02c42b360ac0165f5ca38bd81e336c1e8cacf143aaf53/Call%20Notification%20-%20Full%20Screen.jpg?cb=e8f7f1f1ea0da7e385f93dc186941395)

### Hold an active call

Agents may use the **hold** button to hold an ongoing call within the app.

### Resume active call

On-hold calls can be resumed using the **retrieve call** button within the app.

### End (Release) call

Agents can end an ongoing call using the **end call** button within the app.

![Call Controls.png](https://docs.expertflow.com/__attachments/a_0e171fcbdbddf648c8b2dc837da769ec073f21b2d68a03220e7181523d989816/Call%20Controls.png?cb=92669c0bd10ac0e920a818986ad82496)

### Consult Call

While on a call with a customer, agents may also perform a consult call with another agent or supervisor using the specified consult call control. This will put the customer on hold while the two agents are on a consult call. Afterwards, Agents could either:

* End the call with the supervisor, which will automatically resume the call with the customer OR

* Transfer the call to the supervisor (Consult-transfer)

### Conference call

If required, the agent can add another agent or supervisor into an ongoing call to make it a conference call i.e. three-party call; the customer, the agent A, and the agent B or the supervisor.

### Call wrap-up

The agent can select and push wrap-up codes to the contact center at the end of the call via a dropdown provided.

On the Cisco side, in Agent Desktop settings, you can set the wrap-up option to either "Required" or "Not Required".

### **Call attached data**

Call attached data in the call variables are passed from Cisco via Expertflow Generic Connector (aka GC) and are displayed to the contact center agent within the app.

![Connected Call Variables page.jpg](https://docs.expertflow.com/__attachments/a_b93084b4a53f53b6084d67d0076075211950c059cd94836c369f9f97b5e42c5a/Connected%20Call%20Variables%20page.jpg?cb=89ee948fad130bfde933cccba019f3a9)

### **Click to Call**

Enter the phone number directly in the CTI panel's dial-pad to dial out a call. Agents should be in the Not Ready state to be able to dial out a call.

![Click-to-call.PNG](https://docs.expertflow.com/__attachments/a_2108d3954fece98027f135f237bf687e181866df2dcb05aa0fc125cd7525fb4c/Click-to-call.PNG?cb=c704a506f765d8df307825d9a9d0e341)

### Mobile Agent App

The Mobile Agent App, for Android and iOS, enables agents/ customer service representatives to work remotely or from home. Agents support customers using their mobile phones, in the absence of a desktop and without any VPN. The app monitors phone calls as a Mobile Finesse client for Cisco UCCX/ UCCE/ PCCE Contact centers. Agents log in, change their state on the mobile app, and receive phone calls over their GSM or phone line. This uses [Cisco Extend\&Connect (CCX)](https://www.cisco.com/c/en/us/td/docs/voice_ip_comm/cust_contact/contact_center/crs/express_11_6_2/maintain_and_operate/guide/uccx_b_ccx-admin-and-operations-guide/uccx_b_ccx-admin-and-operations-guide_chapter_011000.pdf) or [Mobile Agent (CCE)](https://www.cisco.com/c/en/us/td/docs/voice_ip_comm/cust_contact/contact_center/pcce/pcce_11_6_1/maintenance/Guide/pcce_b_pcce-features-guide-11-6/pcce_b_pcce-features-11-6_chapter_0111.html).

---
version: "3.0"
language: "en"
---
# Compatibility Guide

## **OS Compatibility**

The following OS software is required on the server:  

|        **Item**        |                                                                      **Minimum Requirement**                                                                      |
|         **OS**         |                                                       Windows Server 2012 R2 Standard, Windows Server 2019                                                        |
| **Windows Web Server** | Any of the following application web servers. * [IIS](https://www.iis.net/) * [Tomcat](http://tomcat.apache.org/) * [Nginx](https://www.nginx.com/) Tested on IIS |
|------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------|

### **Mobile version compatibility**

| **Mobile OS** | **Version** |
|---------------|-------------|
| Android       | 10 to13     |
| iOS           | 13 to 16    |

### **Cisco Compatibility**

The mobile agent application is compatible with the following Cisco versions.  

| **Contact center** | **Versions** |
|--------------------|--------------|
| UCCE               | 12.6         |

This appllication is build with Apache Cordova Framework

---
version: "3.0"
language: "en"
---
# Deployment Guide

This document provides prerequisites, system requirements, and installation instructions of the javascript-cti-toolbar.

## Software Requirements

See [/wiki/spaces/JCA/pages/37617839](https://docs.expertflow.com/android-ios/3.0/compatibility-guide.md)

## Prerequisites

See [/wiki/spaces/JCA/pages/36833626](https://docs.expertflow.com/android-ios/3.0/solution-prerequisites.md)

## Installation

1. To install and configure, the Javascript CTI Toolbar please follow this [guide](https://docs.expertflow.com/javascript-cti/3.1/deployment-guide)

## Javascript Toolbar Mobile Apps

1. Follow [Android App Installation Guide](https://docs.expertflow.com/android-ios/3.0/android-app-installation-guide.md) to install the Mobile App on Android OS.

2. Follow [IOS Application Installation Guide](https://docs.expertflow.com/android-ios/3.0/ios-application-installation-guide.md) to install the Mobile App on iOS.

---
version: "3.0"
language: "en"
---
# IOS Application Installation Guide

This document provides prerequisites, system requirements, and installation instructions of the CISCO Voice Agent mobile app.

## Software Requirements

See [/wiki/spaces/JCA/pages/37617839](https://docs.expertflow.com/android-ios/3.0/compatibility-guide.md) for all the requirements.

## Prerequisites

Please follow [this](https://docs.expertflow.com/javascript-cti/3.1/deployment-guide) guide for the installation and configuration of the Javascript CTI Toolbar

## Installation Steps

The Internet should be available on the mobile device to carry out the installation steps.

1. Open the browser on the target iOS device and download the mobile app [IPA](https://install.appcenter.ms/orgs/expertflow.com/apps/voice-mobile-agent/distribution_groups/public).

2. Once it's downloaded, it will automatically install.

3. After the successful installation, launch the application and allow all the permissions asked by the OS.

## Configuration

Once application the launched, go to the settings page and:

1. Enter the **javascript-cti-toolbar** FQDN and press **save** .

   ![app2.jpg](https://docs.expertflow.com/__attachments/a_f423d18314bb5750055679b3f4595139db1587be8d81cd6d83a42b96f691ebe4/app2.jpg?cb=6e6c4377c63ca4372625d1dc8e233f0c)

2. Login into the javascript-application-toolbar.

   ![image 20.jpg](https://docs.expertflow.com/__attachments/a_4f40cf8886a907cf2d765f6f7ba369b1dd4adf91c864f027d367f0f34a4497c5/image%2020.jpg?cb=eb800364dfe1304288de03d8397b624d) ![app4.jpg](https://docs.expertflow.com/__attachments/a_bf3cd892444abb0c615e1c9f33c5d68da2c4631d8333699ffe7ea2e408df0e6c/app4.jpg?cb=cd2d335f2a85e7a666549bfc4832affd)

---
version: "3.0"
language: "en"
---
# Limitations

|                                                  **Summary**                                                   |                                                                                                     **Description**                                                                                                     |    **Related Feature**     |
|----------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------|
| iOS application needs to kill, then start again                                                                | Need to kill the application first then start the iOS application to add the URL and proceed to use it.                                                                                                                 | iOS application            |
| No notification option on iOS versions 15 and 16                                                               | There is no Customer incoming call notification option on iOS versions 15 and 16.                                                                                                                                       | iOS application            |
| Nailed connection, agent declined the call from a phone while login                                            | The agent clicks on a login button and while making the connection with a phone agent decline the call, there are no retries on the CTI Mobile Agent application, and an error message appears after 1st retry.         | Nailed connection          |
| The failover finesse, the state changed to Not Ready                                                           | The agent is in a Ready state and received a call, failover happened after the call end agent's state changed to Not Ready                                                                                              | Failover finesse           |
| Minimum size and resolution for android                                                                        | minimum resolution is 720\*1560 on 6.4in screen and minimum screen size is =5.5in and the resolution is 1080\*2400                                                                                                      | Screen size and resolution |
| Only Mobile Agents should login to the app                                                                     | Only agents with the enabled Cisco Mobile Agent feature should login and use the app. Non-mobile agents may also log in but they won't be able to answer calls from the app if the Mobile Agent feature is not enabled. | Agent Login                |
| While agents are using Data Connection instead of WiFi, the connectivity might disrupt by the call center call | While on a Data Connection (3G or 4G) instead of WiFi, the internet connectivity may disrupt when a call from the call center comes in on the agent's mobile device.                                                    | Internet Connectivity      |
| The Android App is available only on Microsoft App Center                                                      | The android app is available at Microsoft App Center. The application is not published and downloadable from Google Playstore/ App Store.                                                                               | Application Distribution   |
| UCCX compatibility testing                                                                                     | This release is not tested with the UCCX                                                                                                                                                                                | UCCX compatibility         |

---
version: "3.0"
language: "en"
---
# Release Notes

| **Target Release Date** | 2022-10-25 |
|       **Status**        |  Released  |
|-------------------------|------------|

## Release Summary

This is the major release of the Mobile agent App that supports UCCE 12.6 and the campaign's support.

## What's New

### Compatibility with UCCE 12.6

The mobile agent is now compatible with UCCE 12.6, with finesse HA support

### Support of Campaigns

Three types of campaigns are supported

* Preview

* Predictive

* Progressive

### Compatibility with new android versions

The mobile agent android application is compatible with these versions  

|------------|-----------------|
| Android 10 | Quince Tart     |
| Android 11 | Red Velvet Cake |
| Android 12 | Snow Cone       |
| Android 13 | Tiramisu        |

### Compatibility with new IOS versions

The mobile agent is compatible with the following IOS versions  

| **iOS version** |
|-----------------|
| iOS 13          |
| iOS 14          |
| iOS 15          |
| iOS 16          |

**Open Issues**

The following are the open issues  

| Key | Summary | T | P | Status |
|-----|---------|---|---|--------|
| [Authenticate](https://expertflow-docs.atlassian.net/wiki/plugins/servlet/applinks/oauth/login-dance/authorize?applicationLinkID=131d473b-dd43-389a-9dac-6f501204581b) to retrieve your issues |||||

[No issues found](http://project.expertflow.com:8080/issues/?jql=project+%3D+CMAA+AND+issuetype+%3D+%22Story+Bug%22+AND+status+in+%28Open%2C+Re-opened%29+AND+affectedVersion+%3D+3.0++&src=confmacro)

## Important Notes/Limitations

![](https://expertflow-docs.atlassian.net/wiki/plugins/servlet/confluence/placeholder/unknown-macro?name=includeplus&locale=en_GB&version=2)

## Compatibility Matrix

![](https://expertflow-docs.atlassian.net/wiki/plugins/servlet/confluence/placeholder/unknown-macro?name=includeplus&locale=en_GB&version=2)

---
version: "3.0"
language: "en"
---
# Solution Architecture

The following diagram depicts the various solution components of the Mobile Agent App:

![Architecture-Mobile Agent App.png](https://docs.expertflow.com/__attachments/a_0f76af5bc024fa847076c74d93fa8c981b2b92e50671c9a7ed5486a6ccd642a3/Architecture-Mobile%20Agent%20App.png?cb=e429b77dabf67acc4e165d698b375af6)

*Solution Architecture*

As shown in the picture above, the communication between ExpertFlow Mobile Agent and Cisco Finesse is regulated through Javascript CTI Toolbar[.](https://www.expertflow.com/javascript-cti/) It is preferred to set up a reverse proxy in the Enterprise DMZ that secures the communication between the server components in the LAN and the Mobile app accessible publicly. Once the application is loaded, the DMZ directly routes the traffic to Cisco Finesse

The following EF server components are deployed in the LAN:

1. **Javascript CTI Toolbar:** This is the server that hosts the mobile client app.

2. **Expertflow SSO Server:** Expertflow SSO Server allow to authenticate the user via Cisco IDS Server, this can be co-hosted with Javascript CTI Toolbar

## Call Flow

The following is the communication flow

1. Customer dials a contact center DN.

2. The call is queued. An agent makes himself *Ready* for taking new calls through the EF Mobile Agent App. The state changes are updated to Finesse via GC.

3. The call is routed to the available agent. The agent is reserved for answering the call.

4. An incoming call event is received at Finesse.

5. An incoming call notification is received from the call center and propagated to the Mobile Agent

6. The agent then also receives a call on his phone. The agent answers the call from the phone.

Once connected, the agent may now see the call attached data passed in the call variables from Cisco inside the Mobile Agent App. It may also continue to consult transfer or conference the call or, end the call by pushing an appropriate call wrap-up.  
Since the agent is configured as "mobile agent", he has to be logged in to the Expertflow Mobile Agent app with the "mobile agent" feature to be able to receive calls. If a non-mobile agent tries to login, he won't be able to answer calls but can only change its Finesse states.

---
version: "3.0"
language: "en"
---
# Solution Prerequisites

## Hardware Requirements

|  vCPU   | vRAM | vDisk  |                    Notes                    |         OS         |
|---------|------|--------|---------------------------------------------|--------------------|
| 4 cores | 8 GB | 100 GB | Single VM to install Javascript CTI Toolbar | Window Server 2019 |
| 2 cores | 2 GB | 50GB   | For setting up the Reverse Proxy in DMZ.    | CentoS             |

## Software Requirements

The following Software are required to be installed on the Javascript CTI Toolbar  

|        Item        |                                                                       Minimum Requirement                                                                        |
| Windows Web Server | Any of the following application web server. * [IIS](https://www.iis.net/) * [Tomcat](http://tomcat.apache.org/) * [Nginx](https://www.nginx.com/) Tested on IIS |
|--------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------|

## Javascript CTI Toolbar Installation

1. Download and install the [Javascript CTI Toolbar](https://docs.expertflow.com/display/JCCC/.Deployment+Guide+v3.0).

## Set up a server in Enterprise DMZ

To establish the connectivity between the publicly accessible Mobile app and Cisco Finesse in the LAN, it is recommended that the client/partner sets up a Reverse Proxy in DMZ. See [Solution Architecture](https://docs.expertflow.com/android-ios/3.0/solution-architecture.md).

## Cisco Contact Center Readiness

### Configure Cisco Mobile Agent for CCE

In the case of the CCE platform, agents must be configured with the Cisco Mobile Agent feature. See [here](https://www.cisco.com/c/en/us/support/docs/customer-collaboration/unified-contact-center-enterprise-1001/213399-configure-mobile-agent-on-ucce.html) for details on what to be configured on the Cisco side.

### Configure Extend\&Connect (E\&C) for CCX

In the case of CCX, Cisco E\&C should be configured. For consult transfer, conference, or outbound calls, agents must have Cisco Jabber installed and running on their machines. For all prerequisites and configuration steps to configure E\&C, see [here](https://www.cisco.com/c/en/us/td/docs/voice_ip_comm/cucm/admin/12_0_1/featureConfig/cucm_b_cucm-feature-configuration-guide_1201/cucm_b_cucm-feature-configuration-guide_1201_chapter_0100.html).

## Port Utilization

|-------|--------------|-------------|-----------------------------------|------------------|
| Type  | Source Host  | Source Port | Destination Host                  | Destination Port |
| HTTPS | any          | any         | Expertflow Javascript CTI Toolbar | 80               |
| HTTPS | Proxy Server | any         | Cisco Finesse                     | 8445/8443        |
| TCP   | Proxy Server | any         | Cisco Finesse                     | 7443             |

## System Access Requirements

* Administrative privileges on the machine are required to follow the deployment steps.

* The Internet should be available on the mobile device to carry out the Android app installation steps.

## Time Synchronization Requirements

If the system dates and times are not synchronized, the system can produce unpredictable results. Therefore, the EF applications and Cisco Contact Center should have their time zone and date/time properly configured, according to the geographic region, and must be synchronized.

To configure the time zone, please see the instructions from the hardware or software manufacturer of the NTP server. The application servers should be synchronized. This synchronization should be maintained continuously and validated on a regular basis. For security reasons, the Network Time Protocol (NTP) V 4.1+ is recommended.

---
version: "1.2.0"
language: "en"
---
# Salesforce EFCX Connector

## Salesforce EFCX Connector

Expertflow CX is a comprehensive contact center solution that supports voice, chat, and video. This embedded EFCX Connector operates within the Salesforce CRM W...

### Documentation

*

  #### [Solution Prerequisites](https://docs.expertflow.com/sfcxc/1.2.0/solution-prerequisites.md)

*

  #### [Release Notes](https://docs.expertflow.com/sfcxc/1.2.0/release-notes.md)

*

  #### [Business Features](https://docs.expertflow.com/sfcxc/1.2.0/business-features.md)

*

  #### [Deployment Guide](https://docs.expertflow.com/sfcxc/1.2.0/deployment-guide.md)

*

  #### [Compatibility Guide](https://docs.expertflow.com/sfcxc/1.2.0/compatibility-guide.md)

*

  #### [Solution Components and Architecture](https://docs.expertflow.com/sfcxc/1.2.0/solution-components-and-architecture.md)

---
version: "1.2.0"
language: "en"
---
# Business Features

## Agent Capabilities

Integration between EFCX Connector and Salesforce.

This embedded EFCX Connector runs inside the Salesforce CRM Web UI and enables agent/call controls within Salesforce allowing agents to use the same CRM agent interface for all call and chat handling and transfer. The EFCX Connector has the following feature set  

### **Login to Agent Desk in Salesforce CRM**

* An agent can be logged in by entering agent credentials and then pressing the 'Login' button from the login screen.

![Agent Login.jpg](https://docs.expertflow.com/__attachments/a_87007d2c3d6d73dc2e251e8ca2012242394abeb0d51e73559c27e2f31f97443f/Agent%20Login.jpg?cb=c79270b361f90e807933189f2241f783)
*Login*  

### **Post Login Interface in CRM**

* After entering the credentials, the agent can see the Dashboard.

![Post Login-20240910-133059.png](https://docs.expertflow.com/__attachments/a_241aaa23662d113879bca105a974c23eabf7c47f7649c2692573ca474bf9b343/Post%20Login-20240910-133059.png?cb=abc2cbaa9981e4b4bf1bf9c424da0847)
*Post Login*

### **State Change**

Enables agents to change their states globally and MRD-wise.

### **Global State**

Global states are the high-level states that serve as the basis for setting MRD states. The state change on this level affects state changes on all assigned MRDs.

#### **Change Global state to Ready or Not-Ready**

* After logging in, an agent may change global state to Ready or Not-Ready.

* During Wrap-up, an agent may change global state to Ready or Not-Ready.

* Available controls for agent state are displayed when the bottom-facing arrow button is pressed.

![image-20240507-122939.png](https://docs.expertflow.com/__attachments/a_20afbe0ae09296a25f936887e8eee9c34421c763b1907be3c773ecbe5aeb23a4/image-20240507-122939.png?cb=2e501aa7be2b940474ca053ee5432624)
*Agent State*  

#### **State Timer**

* Agents can also see the real-time timer going on to count how much time the agent remains in a state (Ready, Not Ready). This state timer is reset every time the global state is changed.

![image-20240507-130748.png](https://docs.expertflow.com/__attachments/a_e274a6a4c2f7d3a481b122e7ba7ca0b17a13b15ac0d3d5143cd8d32b62043422/image-20240507-130748.png?cb=7fbe4046f2eb20fb3ef7fbb61019b3dc)
*State time*  

### **MRD States**

MRD states are specifically for a particular MRD. Once agents set themselves as Ready, or Not Ready on a specified MRD, they make themselves available or not available to take requests from that particular MRD.

#### **Change CX Voice State to Ready or Not-Ready**

* After logging in, an agent may change the CX Voice state to Ready or Not-Ready. On Ready state, he can be able to make inbound and outbound dialogs.

![image-20240507-123407.png](https://docs.expertflow.com/__attachments/a_fc2ea707848267e820e9d7e6c037aa6a0316bc3b2caf3be407560d6f4d07b226/image-20240507-123407.png?cb=6f09a4dc3610eb038db0c553b2dc8809)
*MRD States*  

#### **Change Chat State to Ready or Not-Ready**

* After logging in, an agent may change the Chat state to Ready or Not-Ready. On Ready state, he can be able to make inbound and outbound conversation.

![image-20240507-124401.png](https://docs.expertflow.com/__attachments/a_2e0a0b222671b254c491dde168ff8a5d28c7a75210a4d92469c6d481e8ecc134/image-20240507-124401.png?cb=3ddd5f30680de92f7a4415b280788f92)
*Change state to Ready/Not-Ready*  

### **Logout**

* To logout, agent may select one of the logout reason that are displayed in the "Logout" section when he clicks on "Logout" option. The agent will be logged-out with the respective reason.

![image-20240507-124959.png](https://docs.expertflow.com/__attachments/a_f06ebf5f16cce12bf5a2437073de5a2bb012dc1490f78a18037bb9470d68c876/image-20240507-124959.png?cb=e28ba46f24722c34fcfad6f417f0b8b6)
*Logout*  

### **Accept a Conversation**

Enables agents to receive a conversation from queues, handle an ongoing conversation, link customer profiles, view conversation history, view active channels, and view conversation data.

#### **Inbound Conversation Notification**

* Once an agent receives a new request, it is assigned to an agent, and the agent is reserved. An incoming conversation notification appears on the Agent Desk, with a button to Accept the request. The notification contains the name of the customer (if identified), or "Jane Doe".

![image-20240507-135134.png](https://docs.expertflow.com/__attachments/a_92ec4af97f4aaad796fdd01940d6a41f3ad957cdf053faf1d79826fae588f9a9/image-20240507-135134.png?cb=088f5b21c4122cbbdfa0a8009fd92786)
*Accept a Conversation*  

#### **View Conversation History**

The Conversation History enables the agent to provide the record of all the conversations exchanged with the active customer. Each conversation carries activities exchanged over the conversation. These activities include:

1. Voice calls received/ initiated by the agent to the customer,

2. Chat messages sent over the conversation (customer/ whisper messages),

3. Conversation notifications are logged under all conversations with this customer,

4. playable recording links are visible,

5. Wrap-up and note activities.

So when a request is routed to an agent, the agent can only see the current conversation and the activities/messages exchanged for the active conversation before it was routed to the agent.  
![image-20240508-064730.png](https://docs.expertflow.com/__attachments/a_46680e76291cf5b9e82b4c84c523e691035accc095d4f28cc1f05b5a653c297c/image-20240508-064730.png?cb=b73a03e807f997b6af7642611946629e)
*Conversation History*  

### Load More

* By default, the past conversations are hidden behind a Load More button. If the agent has permission to load the history, can click this button to load the past conversations of the customer. To know about the latest query, go to the bottom of the conversation by clicking on Jump to bottom

![image-20240508-065221.png](https://docs.expertflow.com/__attachments/a_d8ec24728c5bb7a0d4c13d3a938498cb15006730475e66c2d9f554ecdae71bf0/image-20240508-065221.png?cb=7430d17a5ce2d11b864ad486aa1eacbb)
*Load the History*  

### New Message

* Upon receiving a new message while reading the previous history on the top, the agent will see the New Message button popping up. Click on that to read the newly received message.

![image-20240508-065426.png](https://docs.expertflow.com/__attachments/a_2a73ce1a96d402d8ebbfa4920f57ebe24adf736795afc51ddd39d2bf104cdd48/image-20240508-065426.png?cb=85332587d0e1ea757b093fba86fd4ee0)
*New Message*  

### **Current Channel and Customer Profile**

* Upon accepting the requests, agents see the Customer Profile data and Media Channel details of the customer on the right under the relevant panes. The CRM profile of the customer is popped up in the background (CRM) as described in the [Screen pop section](https://docs.expertflow.com/sfcxc/1.2.0/business-features.md#Screen-Pop) .

![image-20240507-135629.png](https://docs.expertflow.com/__attachments/a_c54247a33e1e51b178b74164f0d565be7cdc4baf1cb454efd1e2c0703aa24530/image-20240507-135629.png?cb=d6bcc766db05c6d45c854043f0837b02)
*Current Channel and Customer Profile*  

### **End Conversation**

Based on agent permissions, an agent may leave an ongoing conversation even if a customer is present in the conversation.

* If the agent leaves a conversation while the customer is still present on any of the customer channels, the conversation remains active but the agent task is closed.

* If the agent leaves a conversation when the customer has left, the conversation is usually closed.

Click the 'cross' icon to leave the conversation. Upon clicking this icon.  
![image-20240508-070015.png](https://docs.expertflow.com/__attachments/a_bb38d88e1cd0ef6bdd7492fb398924d2950bca26a9b255eaa4620f956131981f/image-20240508-070015.png?cb=ab5d49a13473eafc4869a139da9f0da1)
*End Conversation*  

## Apply Wrap-up and Add Notes

A wrap-up is a concluding note added to the conversation that helps the business to know what the conversation was about. Expertflow CX agents can provide wrap-ups to conversations that they handle, during or after the conversation.

### **Apply Wrap-up**

* Agents can Apply wrap-ups to a conversation by clicking the notes icon on the control toolbar. A wrap-up dialogue box will appear where wrap-up categories and reasons are listed as defined by the system administrator. The agent will choose a category and a reason that best matches the conversation with the customer.

![image-20240508-070036.png](https://docs.expertflow.com/__attachments/a_50123effa96a150545deadc698d947ba1d68bc48ffe2c4f9da379a09ecb0c117/image-20240508-070036.png?cb=afc17544cddb859772d82d4e96c1ca4b)
*Wrap-up and Notes*

### **Add Notes**

* After applying wrap-ups, agents add notes to summarize what the conversation was all about. The wrap-up and notes in the conversation are available as independent activities in the Conversation view.

### **Wrap-up Timer**

A wrap-up feature is already there in the application but it is not time-framed

CX now introduces a wrap-up timer as an important metric to measure the agent's productivity. This feature limits the agent to wrap up the conversation within the configured time. The system shows a timer to the agent to wrap up the current conversation within the configured time.  
* The wrap up time is configurable. By default, it is set to 60 seconds.

* The admins can define Wrap-up reasons as defined in the [++unified admin++](https://docs.expertflow.com/cx/4.5/unified-admin-guide#Add-Wrap-up-Reasons)

![image-20240508-132841.png](https://docs.expertflow.com/__attachments/a_5deeaaf3ca452b9288ecd042de4cec3beb784d689f8ec2c19668de283f624b1a/image-20240508-132841.png?cb=c33c5e56e3994eb30574aebda9c2de8e)
*Wrap-up Timer*

### **Workflow**

Whenever a conversation is closed from either side, a wrap-up window pops up. The wrap-up timer can be seen on the right-hand side. Pre-defined wrap-up reasons are displayed here. The agent can choose any suitable reason fit to the conversation and add notes as adding a note is optional.  
If the agent leaves without adding the wrap-up, the timer will disappear/expire, the conversation will be automatically closed without any Wrap-up reasons as it is still optional.  

### **Conversation Switching**

* An agent can accept more than one conversation requests at a time. It means he can handle multiple conversation and can switch between different conversation by clicking on left under the relative panel.

* In case of multiple conversations, when an agent switches to another conversation the customer profile in the CRM is also switched to the active conversation.

![Chat Switch.jpg](https://docs.expertflow.com/__attachments/a_f03a2eb1d6232ab0c6f468d21cde053b006afda2d42e7825cd98382bf022091a/Chat%20Switch.jpg?cb=5e33e590dd13ef520d6dd28f2900ff00)
*Chat Switching*

### **CTI Call Controls**

Provides a CTI toolbar for the agent to perform multiple functions to handle the customer calls.

#### **Inbound Call notification**

* Once an agent receives a new request, an incoming call notification appears on the Agent Desk, with a button to Accept the request. The notification contains the number of the customer.

![image-20240508-115837.png](https://docs.expertflow.com/__attachments/a_54bb7baf63ca530b0aa86928db43d0ab8633b3becd7113e4266ceb63a4b43137/image-20240508-115837.png?cb=554d1285b7cc15b390fb7ddcf7d83749)
*Call Controls*  
On accepting a call, the CTI toolbar appears with the following controls:

1. Drag

2. Mute/Unmute

3. Hold/Resume

4. End Call

### Drag

As the agent accepts the call, the CTI toolbar pops up anywhere on the screen. On clicking this drag option, this toolbar can be moved any where on the screen.

### Mute/Unmute

The Mute/Unmute button on the toolbar enables the agent to mute or unmute if and when required.

### Call Hold/Resume

The agent can hold the call by clicking on the **Hold**button on being active on a call with the customer or with any other agent in case of transfer.

In the same way, the agent can resume the call by clicking on the **Resume**button as soon as becomes available again.

### End Call

The agent can end the call using this toolbar by clicking on the **End** Call button. This will end the call leg between the agent and the customer.  
![image-20240508-122612.png](https://docs.expertflow.com/__attachments/a_ba1b8953c5bb06ef767eb0ab667cb80520d9f0f90b7653b26ffe807b911f8535/image-20240508-122612.png?cb=da6bc3aca2e2fdb20934ae431366227b)
*Call controls apperance*  

### Outbound Call

* The agent can make an inbound call by clicking on dial pad on the dashboard.

![image-20240508-133129.png](https://docs.expertflow.com/__attachments/a_d3cffd7a5e1f8a9cd6da7312c48e1112ce0defd689c1ee02204ce341c101eb3e/image-20240508-133129.png?cb=9e8166584bdf69083e075bba9657c7c4)
*Outbound call*  

## Screen Pop

When a conversation arrives on the logged-in agent, a CRM customer recordis popped up according to the customer's number and information stored in Salesforce.

1. By defaultentities supported for searching are**Account** /**Contact** /**Lead** (*we can set priority in configuration*)

2. If one record is matched, then that record will automatically pop up.

![Screen Popup.jpg](https://docs.expertflow.com/__attachments/a_6af44bdfce6c5721ae2457945d9c52d119b9d5e968a797fedae7bca143f9017d/Screen%20Popup.jpg?cb=a173783f87a20a94eab103321650910b)
*CRM Screen Pop*  

### **No ANI Match**

If there is no match, a **Contact** will be saved with the name set to '**Anonymous** ', and the number set to the caller number. (By default for the No-Match case we create the **Contact**, however this is a configurable option and the user can change it as per his requirement).  
We can configure to nomatchEntity to account/contact/lead.

![image-20240910-133522.png](https://docs.expertflow.com/__attachments/a_fca6fe4c4e3c51e0bf31b119b892f3106000b2f0b60c28eb5dc0a42897ff663d/image-20240910-133522.png?cb=bb2df9745a8f593a8e40ea6120f8c19f)
*No Match ANI Screen Pop-up*  

#### **Multiple Match Record (CRM Entity)**

In the case of multiple matches, a list of all the matched records of the respective entity will be shown in the drop-down list in alphabetical order on the top of connector. The first record in the list will automatically pop up, however, the agent can also manually select the customer record from the dropdown list and that customer profile will pop up.  
![image-20240910-133843.png](https://docs.expertflow.com/__attachments/a_8927c39f93e910bf7f2d053e20e19ba6ee67d18c07dd0bb64f7105a1880a78c4/image-20240910-133843.png?cb=61209f4ccdd1a39d1ccdee7d2b2dbdf2)
*Multi-match ANI Drop-down list*  

## **Case Enablement**

If the configuration named as caseEnabled is set to **true.** An open case linked to the specific customer contact or account appears in the CRM. At the conversation's end, a [Task](https://docs.expertflow.com/sfcxc/1.2.0/business-features.md#Conversation-Activity) will automatically be created and linked to that case.

### **Open Case Detection**

If a single **Contact** or **Account** is matched, the connector automatically searches for any associated **Open Cases** (Status is not 'Closed').

### **Agent Visibility**

Any open cases found are presented to the agent immediately. This allows the agent to have full context of ongoing issues before even greeting the customer.  
For a newly saved contact or account in Salesforce CRM, the system creates the case only for the first conversation interaction, the case will not pop up. After creating the case for that entity, subsequent conversation interactions will display/pop up the existing case in Salesforce CRM.  
This release supports case enablement only for Contact and Account entities.  
![image-20260506-132509.png](https://docs.expertflow.com/__attachments/a_b05d7cc9739525bc52aa7cc4d6a89b7ad9bd8d935385c14df9a689eec53c5a2d/image-20260506-132509.png?cb=d4d1a52afc4171de753ca1dc6ac17966)
*Phone Interaction Case*  

### Multiple Match Record (Case)

If multiple open cases exist, the agent can view them in a list and select the specific case they are currently handling.  
![image-20260506-134017.png](https://docs.expertflow.com/__attachments/a_dd2bdc8c3df574ad80aa6a304cd753aa89d781a7a23e190c57f537ba6d68ff26/image-20260506-134017.png?cb=352600a592a56bced929fefa9093e179)  

## Conversation Activity

A conversation activity is created at the end of the conversation for all conversation types except consulting calls. It contains information such as

* Assigned To

* Related To

* Subject

* Wrap-up reason,

* Duration of the call

* Call type

* Call Result

* Comments

* Web Chat Transcript URL

* Voice Recording URL

The comments field displays the notes details along with summary.

The Call Result field shows the wrap-ups.

The task name is created as a combination of different attributes that are Conversation like Chat or Call, Conversation Type like Inbound/Outbound , and the current date time.

All conversation activities can be seen from the '**Tasks**' tab at the top, it will show the activities in descending order i.e. latest activity will be at the top.  
![image-20260508-134105.png](https://docs.expertflow.com/__attachments/a_3482f06528f898486a77fa1d6a25353e3e69b511abba7e817a3c37117607fc65/image-20260508-134105.png?cb=0bd2f7c04a1927d333a767222b9cbd7b)
*Conversation Task*  
![image-20260508-130205.png](https://docs.expertflow.com/__attachments/a_8f9227ad369cce6ec5583411da1e1bf22d82644e539921dd36b12c451d30184d/image-20260508-130205.png?cb=5fd70971f4d9567f07ea2c002766254a)
*Phone Interaction Case view*

## Click to Call

This feature allows the agent to select any number corresponding to a record (*Account/Contact/Lead etc*) and initiate an outbound call with that number.  
![Click to call.png](https://docs.expertflow.com/__attachments/a_973f5453d924bbfc3f21f687a9a090b72c885be35a5a938cf485d3f987f169ad/Click%20to%20call.png?cb=2df6896efe4a5bf01e2a0ed860743e06)
*Click to Call*

---
version: "1.2.0"
language: "en"
---
# Compatibility Guide

## Overview

Expertflow Salesforce Connector integrates EFCX so this guide provides compatibility requirements with respect to EFCX.

## Compatibility Requirements

The compatibility requirements related to EFCX, Browser and Salesforce versions are given below.  
We have tested the versions mentioned below. To counter-check, testing can be scheduled before actual deployment.

### EFCX Version:

* EFCX Agent Desk 5.0.3

### Browsers Compatibility

|        **Browser**        |                 **Tested Version**                 |                                                                        **Compatibility**                                                                        |
|---------------------------|----------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Google Chrome recommended | `Version 147.0.7727.139 (Official Build) (64-bit)` | ![check mark](https://docs.expertflow.com/__attachments/a_1115adc4d842654731646185561bde486d21f77a406ccead168b3dd6730a1557/atlassian-check_mark?cb=a10212e1c1021c5194f7535b6843f955)       |
| Firefox                   |                                                    | ![question mark](https://docs.expertflow.com/__attachments/a_c411b310d9650d0b202605faa7dde910c9ca98a256303f868d25fe3de94663f7/atlassian-question_mark?cb=01451d3e8ed02077899ec3e8fa8cf364) |

### Salesforce Compatibility

| **Salesforce Flavors** |    **Version**    |                                                                        **Compatibility**                                                                        |
|------------------------|-------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Lightning              | Developer Edition | ![check mark](https://docs.expertflow.com/__attachments/a_1115adc4d842654731646185561bde486d21f77a406ccead168b3dd6730a1557/atlassian-check_mark?cb=a10212e1c1021c5194f7535b6843f955)       |
| Classic                |                   | ![question mark](https://docs.expertflow.com/__attachments/a_c411b310d9650d0b202605faa7dde910c9ca98a256303f868d25fe3de94663f7/atlassian-question_mark?cb=01451d3e8ed02077899ec3e8fa8cf364) |

### EFCX Connector Display Theme

| **Theme Mode** |                                                                     **Compatibility**                                                                     |
|----------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------|
| Light          | ![check mark](https://docs.expertflow.com/__attachments/a_1115adc4d842654731646185561bde486d21f77a406ccead168b3dd6730a1557/atlassian-check_mark?cb=a10212e1c1021c5194f7535b6843f955) |
| Dark           | ![check mark](https://docs.expertflow.com/__attachments/a_1115adc4d842654731646185561bde486d21f77a406ccead168b3dd6730a1557/atlassian-check_mark?cb=a10212e1c1021c5194f7535b6843f955) |

|-----------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------|
| ![check mark](https://docs.expertflow.com/__attachments/a_1115adc4d842654731646185561bde486d21f77a406ccead168b3dd6730a1557/atlassian-check_mark?cb=a10212e1c1021c5194f7535b6843f955)       | Supported                  |
| ![cross mark](https://docs.expertflow.com/__attachments/a_448a649bce0bda408013de080301356f52587cc1a043e54bf26ecbf23ef61a4a/atlassian-cross_mark?cb=a9c671cfc7809253be52d640dbbf1019)       | Not Supported              |
| ![question mark](https://docs.expertflow.com/__attachments/a_c411b310d9650d0b202605faa7dde910c9ca98a256303f868d25fe3de94663f7/atlassian-question_mark?cb=01451d3e8ed02077899ec3e8fa8cf364) | Can be developed on demand |

---
version: "1.2.0"
language: "en"
---
# Deployment Guide

**Purpose**

The purpose of creating a deployment guide for the EFCX connector in Salesforce is to provide instructions and guidance for successfully installing, configuring, and utilizing the connector within Salesforce environments.

**Intended Audience**

This document is intended for IT operations personnel and system administrators who want to deploy a Salesforce-embedded EFCX connector.

**Prerequisites**

1. Salesforce Developer Account. Visit <https://developer.salesforce.com/signup> (Free-developer account) to create one if you do not have one.

2. You must have installed the [EFCX](https://docs.expertflow.com/cx/4.5/expertflow-cx-deployment-on-kubernetes) on your server before integrating with Salesforce.

3. Call Center Definition File which can be found in the Repository.

4. Existing packages should be uninstalled and deleted before installing a new package.

## Expertflow Contact Center Package Installation

The following are the to-dos for deployment:

### Step 1: Install the Expertflow package

1. If you have previously installed the package, then update the package via the link below:

<https://login.salesforce.com/packaging/installPackage.apexp?p0=04tGC000005tSDj>

2. Login to Salesforce and copy-paste the installation link given for the package.

3. Select the "**Install for all users**" option from the installation wizard, it will start installing the package and notify you when it's done.

In case of issues in installation, refer to the relevant documentation at: [https://help.salesforce.com/articleView?id=distribution_installing_packages.htm\&type=5](https://help.salesforce.com/articleView?id=distribution_installing_packages.htm&type=5)

### **Integration of EFCX with Salesforce**

**Step 1: Configure CTI Adapter URL**

1. From Setup, in the Quick Find box, enter "Call Centers", then select Call Centers.

2. On the next page, press Continue.

3. Click on "Edit" option of the Call Center

4. Verify all the Configurations as displayed in the image below.

5. Verify the CTI Adapter URL as "**/apex/CTIConectors__EFCX**"

6. Then Click on Save.

![image-20241010-134652.png](https://docs.expertflow.com/__attachments/a_00cdc6456ccfe984a6643eb4e9ac44ab9e1865987d1f4aa4943f12f7be9fa39b/image-20241010-134652.png?cb=18a37e350bdcae089ccc8c97ec239d4a)
Call Center Settings

**Step 2: Assign Users to call center**

1. Open Call Center with the name "ExpertflowCTI".

2. At the bottom you'll find the "Manage call center users" option. If you can't find manage "Manage call center users", then first save the call center and then look for the same option.

![image-20241010-134741.png](https://docs.expertflow.com/__attachments/a_9d8e8e87ab17bb82c0c18dcaf0ad5fcc10b9ab3836dd49e1482771c47dc26cca/image-20241010-134741.png?cb=7cf3fb179763bce5c67bd7b4073b54d3)

3. Click this option and on the next page click "Add more users", select desired user(s), and then click "Add to call center".

![image-20240911-060713.png](https://docs.expertflow.com/__attachments/a_f843da1fc39c83546b778481c35b2c66fb2bb5c0603748c55169eb231ae2703d/image-20240911-060713.png?cb=efddbbb103e85ceaecdbcdc50d31c2c0)

**Step 3: Create and configure a lightning app**

1. From Setup, in the Quick Find box enter "**App Manager**".

2. Open the app manager, click "**New Lightning App**" from the top right corner.

3. Enter the name of the app and developer, other options are not mandatory but if you want you can choose according to your preferences and select next.

4. Go with the default options and click next.

5. Click "Add Utility Items", type "Open CTI softphone" and add the softphone to your app by clicking it. Set panel height to 630 and width to 400 and click next.

6. On the next screen, add accounts, contacts, leads and tasks from available items.

7. Last but not least select all profiles and add them. After adding them click "Save \& Finish"

## Add configurations in custom settings

1. From Setup, in the quick find box, search "**Custom settings**". Open custom settings.

2. Select "Manage" from the "**EFCX**" setting.

3. At the top of "Default Organization Level Value," you will find "new", click it.

4. In the Entitiesfield provide the priority for searching Contacts, Accounts, and Leads in your application like "**contact,account,lead**", all values need to be in small letters.

5. In the **noMatchEntity** field provide new entity you want to create when there is no matching number in CRM like "Account".

In noMatchEntity field the first letter must be capitalized like "***Account***".

6. In the **Destination_Number** field provide the configured dialed number for queue in order to make calls like "**1333**".

For the "Destination Number" field, you need to provide the "***Service Identifier*** " that you have configured for the Voice channel in Unified Admin of EFCX. If the voice channel is not configured, you can follow this [guide.](https://docs.expertflow.com/cx/4.5/cx-voice-configuration-guide#id-(4.5)CXVoiceConfigurationGuide-UnifiedAdminConfigurations)

7. In the **iframeUrl** field provide the deployed EFCX URL (`https://<fqdn>/unified-agent/`).

8. In License field you can provide the valid certificate key for that Salesforce Connector.

9. In Case Enabled field you can check/uncheck the box to create a Case.

10. In Case Auto Create write donw ***auto/off*** if you want to create a ***Case*** for no match case(for that **Case Enabled** config must be checked).

![image-20260430-131620.png](https://docs.expertflow.com/__attachments/a_bbaf7c6bf5e999fef7ee92580a0a53c246c0548670a5684e43b4fd4865e58cdd/image-20260430-131620.png?cb=08cefe64159015a4372be739ab89ec14)

**Connect to VPN**

In order to use the application, make sure you are connected to VPN if your services access is restricted to a VPN connection. Otherwise, you do not need to connect to VPN.

**SSL Certificates**

Before using application, accept SSL Certificates for to avoid any issue.

**Login agent**

1. Open your application from the top left 9-dotted pattern icon, adjacent to "Setup". If you can't find it, search using the name you used while creating an application.

2. Once opened, Maximize Softphone by click on "Icon" from the bottom left corner, enter agent credentials, and press login.

   ![2024-06-20_16-31-04.jpg](https://docs.expertflow.com/__attachments/a_2a390f6745fdef6f11ab9c077de34f261ac4680e6c166f237d36c00dd5c19a69/2024-06-20_16-31-04.jpg?cb=eb9107fb9f57ec4537d2bd425514bb39)
   *Login page*

---
version: "1.2.0"
language: "en"
---
# Release Notes

| **Target release** |   1.2.0   |
|     **Status**     | Completed |
|--------------------|-----------|

## **Release Summary**

This embedded EFCX Connector runs inside the Salesforce CRM Web UI and enables agent call controls within Salesforce, allowing agents to use the same CRM interface for all call and chat handling and transfers.

## **New in this Release**

### **Case Enablement**

If the configuration `caseEnabled` is set to **true****.** An open case linked to the specific customer contact or account appears in the CRM. At the conversation's end, a [++Task++](https://docs.expertflow.com/sfcxc/1.2.0/business-features.md#Conversation-Activity) will automatically be created and linked to that case.  

#### **Open Case Detection**

If a single **Contact** or **Account** matches, the connector searches for any associated **Open Cases** (Status is not 'Closed').  

#### Multiple Match cases

If multiple open cases exist, the agent can view them in a list and select the specific case they are currently handling.  

## Limitations

* Two anonymous accounts will be saved for a single Outbound chat at the end of the conversation.

* Click to chat is not available for this release.

* Activity will be created for unanswered Call/Chat.

🗒️  

## Important Notes

* Do not login to the same agent on different browsers or different machines.

* Administrative access to server machines is required to install EF Connector.

* Admin access to Salesforce CRM is required to deploy CRM side configurations.

## **Release Tested Highlights**

### Tested with:

* Salesforce Lightning CRM.

* EFCX Agent Desk 5.0.

* CX Voice.

* The following EFCX chat channels:

  * WebChat

### Not Tested with:

* Supervisor Controls.

* High Availability (HA).

---
version: "1.2.0"
language: "en"
---
# Solution Components and Architecture

## Introduction

This document describes the architecture diagram and solution components of EFCX connector and how it is embedded into the Salesforce solution.

## Intended Audience

The document is intended for developers with knowledge of EFCX Connector and Salesforce.

## Technical Overview

Following is the architecture diagram that illustrates how the EFCX connector is integrated into Salesforce.

## Communication Flow Diagram

The communication flow between Salesforce, the components of EFCX connector is given as follows:

1. Customer Call reaches the EFCX connector through CX voice channel.

2. Customer Chat reaches the EFCX connector through web, WhatsApp and Facebook channels.

3. EFCX route the call or chat to the best available agent.

4. Salesforce Connector receives the notification from EFCX that the call or chat is coming.

5. EFCX Salesforce Connector, displays a pop-up message in Salesforce Connector and Connector will also do the screen pop in Salesforce, based on the customer number by calling Open CTI APIs.

6. Once the agent accepts the call or chat, EFCX Salesforce Connector connects the call or chat with the customer.

7. After that, the agent will perform all his operations on the Salesforce CRM, the EFCX interface will only be involved to perform operations like Consult / Transfer / Conference the call or chat to a different agent.

8. Once the Call or Chat ends, EF Salesforce Connector will create the task in Salesforce. The task field details are available in the Business Feature Guide.

![Service Now EFCX Connector.drawio.png](https://docs.expertflow.com/__attachments/a_cc096dff606b10c6169ffc223d05db05879ec629ee1c1f5dd12f17633217ae69/Service%20Now%20EFCX%20Connector.drawio.png?cb=a6ae551b804845ff13e9c327c0066532)

---
version: "1.2.0"
language: "en"
---
# Solution Prerequisites

## Time Synchronization

An important consideration is time synchronization between related components. Communication between EFCX Connector and client applications. If the system dates and time are not synchronized the system can produce unpredictable results. Therefore, please make every effort to adhere to the following time synchronization guidelines:

EFCX Connector and client applications should have their Time Zone and time configured properly according to the geographic region and synchronized. To configure the time zone, please see the instructions from the hardware or software manufacturer of NTP server. Client applications and EFCX Connector should be synchronized to the second. This synchronization should be maintained continuously and validated regularly. For security reasons, Network Time Protocol (NTP) V 4.1+ is recommended.

## Browser Requirement

Enlarge the table by opening it in a full-screen dialog Open  

| [**MICROSOFT® EDGE CHROMIUM**](https://www.microsoft.com/en-us/edge) | [**GOOGLE CHROME™**](https://www.google.com/chrome/) recommended | [**MOZILLA® FIREFOX®**](https://www.mozilla.org/en-US/firefox/new/) | [**APPLE® SAFARI®**](https://www.apple.com/safari/) |
|----------------------------------------------------------------------|------------------------------------------------------------------|---------------------------------------------------------------------|-----------------------------------------------------|
| Supports latest stable browser version                               | Supports latest stable browser version                           | Supports latest stable browser version                              | Supports latest browser stable version              |

**Documentation Reference** : [https://help.salesforce.com/articleView?id=getstart_browsers_sfx.htm\&type=5](https://help.salesforce.com/articleView?id=getstart_browsers_sfx.htm&type=5)

## Access Prerequisites

For remote installation and configurations, the implementation team would require remote access privileges.

* VPN connection is required to connect.

* Remote access via RDP or similar is required to do installation and configuration of EF Server.

* Administrative access to server machines is required to install EFCX Connector.

## Product Prerequisites

You must have installed the [EFCX](https://docs.expertflow.com/cx/5.0) on your server before integrating with Salesforce.

### **Hardware Requirements**

For hardware requirements please follow [this](https://docs.expertflow.com/cx/5.0/deployment-guide#Prerequisites) guide for EFCX deployment requirements.

### System Access Requirements

* In order to access Salesforce Connector, an admin should be logged in to his Salesforce org to install the package and configure the required settings to use the application.

* For multiple users for the same instance, you have to add the users in the call center to use EFCX Salesforce connector.

---
version: "1.0.0"
language: "en"
---
# SuiteCRM Connector for EFCX

## SuiteCRM Connector for EFCX

Description This integration places Expertflow CX directly inside SuiteCRM , so users don't need to switch between different systems. With Expertflow CX, busine...

### Documentation

*

  #### [Release Notes](https://docs.expertflow.com/suitecrm-efcx/1.0.0/release-notes.md)

*

  #### [Business Features](https://docs.expertflow.com/suitecrm-efcx/1.0.0/business-features.md)

*

  #### [Solution Prerequisites](https://docs.expertflow.com/suitecrm-efcx/1.0.0/solution-prerequisites.md)

*

  #### [Deployment Guide](https://docs.expertflow.com/suitecrm-efcx/1.0.0/deployment-guide.md)

*

  #### [Compatibility Guide](https://docs.expertflow.com/suitecrm-efcx/1.0.0/compatibility-guide.md)

*

  #### [Components and Architecture](https://docs.expertflow.com/suitecrm-efcx/1.0.0/components-and-architecture.md)

---
version: "1.0.0"
language: "en"
---
# Business Features

## Agent Capabilities

This integration between Expertflow CX and SuiteCRM allows agents to use the CRM interface for all call, chat and email handling and transfer. The Expertflow CX Connector has the following feature set:  

### **Logging into EFCX**

1. Open SuiteCRM and click the phone icon in the top right corner of the top bar.

2. Enter your EFCX agent credentials in the login screen.

![suite_efcx_login.png](https://docs.expertflow.com/__attachments/a_33f1f829dd3e0127f8b12f6e23c8beb00590f84577822493c04c947c04571e29/suite_efcx_login.png?cb=5938b2c2a23d7b16691f31388b635bc6)
*Logging*

### **Post Login Interface in CRM**

* After entering the credentials, the agent can see the dashboard.

![suite_efcx_postlogin.png](https://docs.expertflow.com/__attachments/a_6a5651c859e80fa1319a4893f1d07dd6975fea0b821fe31df1ffcc22dd3ec363/suite_efcx_postlogin.png?cb=bbd55589321d4114c774a144742a7814)
*Post Login*

### **State Change**

Enables agents to change their states globally and MRD-wise.

### **Global State**

Global states are the high-level states that serve as the basis for setting MRD states.

The state change on this level affects state changes on all assigned MRDs.

#### **Change Global state to Ready or Not-Ready**

* After logging in, an agent may change the global state to Ready or Not-Ready.

* During wrap-up, an agent may change the global state to Ready or Not-Ready.

* Available controls for agent state are displayed when the bottom-facing arrow button is pressed.

![suite_efcx_statechange.png](https://docs.expertflow.com/__attachments/a_8ad0c6dfac143e5e74f87fb3c18b206ff0b86dc7d863c5b031f15cf93b786a7a/suite_efcx_statechange.png?cb=1148e0623090fe7af399fbc3cd018d14)
*Global State*  

#### **State Timer**

* Agents can also see the real-time timer going on to count how much time the agent remains in a state (Ready, Not-Ready).

  This state timer is reset every time the global state is changed.

![suite_efcx_statetimer.png](https://docs.expertflow.com/__attachments/a_8f31e63b4f373211cd2c6694ef29f7be9419e634cfb7e067ac0b21f6d7e2a06d/suite_efcx_statetimer.png?cb=598d0c196be34f5e01c83780efdf2c12)
*State Timer*  

### **MRD States**

MRD states are specifically for a particular MRD. Once agents set themselves as Ready, or Not-Ready on a specified MRD, they make themselves available or not available to take requests from that particular MRD.

#### **Change CX Voice State to Ready or Not-Ready**

* After logging in, an agent may change the CX Voice state to Ready or Not-Ready. On Ready state, he can be able to make inbound and outbound dialogs.

![suite_efcx_statevoice.png](https://docs.expertflow.com/__attachments/a_0a2447f303fad14a901db35441db22dc1cf385adf5c28127b62c4d33753e7514/suite_efcx_statevoice.png?cb=b802717d1c0af320c675725702145563)
CX Voice State  

#### **Change Chat State to Ready or Not-Ready**

* After logging in, an agent may change the chat state to Ready or Not-Ready. On Ready state, he can be able to make inbound and outbound conversations.

![suite_efcx_statechat.png](https://docs.expertflow.com/__attachments/a_7f2a199ad4b7e065df2aa9fcea83063b89d382500d16aec290792e06c05602f3/suite_efcx_statechat.png?cb=41383f4bd18244722434daa4f23bbea0)
*Chat State*  

### **Logout**

* To logout, the agent may select one of the logout reasons that are displayed in the "**Logout**" section when he clicks on the "Logout" option. The agent will be logged-out with the respective reason.

![suite_efcx_logout.png](https://docs.expertflow.com/__attachments/a_4a1e7fe18bd88bfcdfffd073cfd89d73c921a5ac6f6449a35cbcb7cfd7fc2066/suite_efcx_logout.png?cb=40c75b4371f5d18c7587e71612d56f30)
*Logout*  

### **Accept a Conversation**

Enable agents to receive a conversation from queues, handle an ongoing conversation, link customer profiles, view conversation history, view active channels, and view conversation data.

#### **Inbound Conversation Notification**

* Once an agent receives a new request, it is assigned to an agent, and the agent is reserved. An incoming conversation notification appears on the Agent Desk, with a button to Accept the request. The notification contains the name of the customer (if identified) or "Jane Doe".

![suite_efcx_acceptchat.png](https://docs.expertflow.com/__attachments/a_55cbb88278938ab3c28206054c9f9bf1a8b6b60e8cd9cbbaae6e2671b0909745/suite_efcx_acceptchat.png?cb=a6171d31fa6880a5993640e1a51272ed)
*Inbound Chat*  

#### **View Conversation History**

The Conversation History enables the agent to provide the record of all the conversations exchanged with the active customer. Each conversation carries activities exchanged over the conversation. These activities include:

1. Voice calls received/ initiated by the agent to the customer,

2. Chat messages sent over the conversation (customer/ whisper messages),

3. Conversation notifications are logged under all conversations with this customer,

4. Playable recording links are visible,

5. Wrap-up and note activities.

So when a request is routed to an agent, the agent can only see the current conversation and the activities/messages exchanged for the active conversation before it was routed to the agent.  
![suite_efcx_chathistory.png](https://docs.expertflow.com/__attachments/a_a98363e50ab3f173715ca3b31491e83566a5d16e4cae10cfa703cfcfb4c2de6c/suite_efcx_chathistory.png?cb=cf3ee456431e6388b5facf496c8a95d9)
*Conversation History*  

### **Load More**

* By default, the past conversations are hidden behind a Load More button. If the agent has permission to load the history, they can click this button to load the past conversations of the customer. To know about the latest query, go to the bottom of the conversation by clicking on Jump to bottom.

![suite_efcx_loadmore.png](https://docs.expertflow.com/__attachments/a_2f23b5bf2d63ef6df0b69a39b9e11a97a8132352c193e7260e9cd36ba0735b31/suite_efcx_loadmore.png?cb=4fe0a1d9137cb60ca69b1d182ccc54b0)
*Load More*  

### **New Message**

* Upon receiving a new message while reading the previous history on the top, the agent will see the New Message button popping up. Click on that to read the newly received message.

![suite_efcx_newmessage.png](https://docs.expertflow.com/__attachments/a_654f1c694d257a3bf6dcb929efd04c6c8050b7d2dfa3761b5f42dbcf15a79b17/suite_efcx_newmessage.png?cb=c20b713ad6d0c5807edf940952dcf83c)
*New Message*  

### **Current Channel and Customer Profile**

* Upon accepting the requests, agents see the customer profile data and media channel details of the customer on the right under the relevant panes. The CRM profile of the customer is popped up in the background (CRM).

![suite_efcx_channel.png](https://docs.expertflow.com/__attachments/a_21d892e11e0bdaf66a8fe4d8603bcb4deb21c9a34b469e262bad9bd5666cc534/suite_efcx_channel.png?cb=df3826f668de5d06c6f66df8f4ec5bf5)
*Current Channel*  

### **End Conversation**

Based on agent permissions, an agent may leave an ongoing conversation even if a customer is present in the conversation.

* If the agent leaves a conversation while the customer is still present on any of the customer channels, the conversation remains active, but the agent task is closed.

* If the agent leaves a conversation when the customer has left, the conversation is usually closed.

Click the '**cross**' icon to leave the conversation.  
![suite_efcx_endchat.png](https://docs.expertflow.com/__attachments/a_50477a48ad78d74f6b1c32bbd235f3b55cf1d04382e08bc567ee7e36d21bd601/suite_efcx_endchat.png?cb=6c262afdb619fd294b3e25f8b6f9d326)
*End Conversation*  

## **Apply Wrap-up and Add Notes**

A wrap-up is a concluding note added to the conversation that helps the business to know what the conversation was about.

Expertflow CX agents can provide wrap-ups to conversations that they handle, during or after the conversation.

### **Apply Wrap-up**

* Agents can apply wrap-ups to a conversation by clicking the notes icon on the control toolbar. A wrap-up dialogue box will appear where wrap-up categories and reasons are listed as defined by the system administrator. The agent will choose a category and a reason that best matches the conversation with the customer.

![suite_efcx_wrapup.png](https://docs.expertflow.com/__attachments/a_c87c0c5ac912f945d62dcaca6db0b05c35b6870d96fabda0e09e797cb0c54723/suite_efcx_wrapup.png?cb=6bae234d698bca889742489e9ce77a99)
*Apply Wrap-up*

### **Add Notes**

* After applying wrap-ups, agents add notes to summarize what the conversation was all about.

* The wrap-up and notes in the conversation are available as independent activities in the Conversation view.

### **Wrap-up Timer**

A wrap-up feature is already there in the application, but it is not time-framed.

* CX now introduces a wrap-up timer as an important metric to measure the agent's productivity. This feature limits the agent to wrapping up the conversation within the configured time. The system shows a timer to the agent to wrap up the current conversation within the configured time.

* The wrap-up time is configurable. By default, it is set to 60 seconds.

* The admins can define Wrap-up reasons as defined in the [++unified admin++](https://docs.expertflow.com/cx/4.8/unified-admin-guide)

![suite_efcx_wrapuptimer.png](https://docs.expertflow.com/__attachments/a_937ec765334994f24bdf30e4df587d96add75a5c3b78f6055a322b2f4dae6017/suite_efcx_wrapuptimer.png?cb=82f6f46d1b0b204f92c5b13d176f4f96)
*Wrap-up Timer*

### **Workflow**

Whenever a conversation is closed from either side, a wrap-up window pops up. The wrap-up timer can be seen on the right-hand side. Predefined wrap-up reasons are displayed here.

The agent can choose any suitable reason that fits the conversation and add notes, as adding a note is optional.  
If the agent leaves without adding the wrap-up, the timer will disappear/expire, and the conversation will be automatically closed without any Wrap-up reasons, as it is still optional.  

### **Conversation Switching**

* An agent can accept more than one conversation request at a time. It means he can handle multiple conversations and can switch between different conversations by clicking on the left under the relative panel.

* In the case of multiple conversations, when an agent switches to another conversation, the customer profile in the CRM is also switched to the active conversation.

![suite_efcx_chatswitching.png](https://docs.expertflow.com/__attachments/a_67eff26b5f05c98e44f3637edd2d3c35982ddc082a731c752e1bea091b5cdc71/suite_efcx_chatswitching.png?cb=50941a14009aac88528b8c662d42dab9)
*Chat Switching*  

### **CTI Call Controls**

Provides a CTI toolbar for the agent to perform multiple functions to handle the customer calls after accepting; the CTI toolbar appears with the following controls:

1. Drag

2. Mute/Unmute

3. Hold/Resume

4. End Call

### Drag

As the agent accepts the call, the CTI toolbar pops up anywhere on the screen. On clicking this drag option, this toolbar can be moved anywhere on the screen.

### Mute/Unmute

This button on the toolbar enables the agent to mute or unmute the voice if and when required.

### Call Hold/Resume

The agent can hold the call by clicking on the **Hold**button while being active on a call with the customer or with any other agent in case of transfer.

In the same way, the agent can resume the call by clicking on the **Resume**button as soon as it becomes available again.

### End Call

The agent can end the call using this toolbar by clicking on the **End** Call button. This will end the call leg between the agent and the customer.

![suite_efcx_callcontrol.png](https://docs.expertflow.com/__attachments/a_bb897f8adf39de06cae5ee7ddbcf90d64e4db852aabc3a252ee758f066c6f317/suite_efcx_callcontrol.png?cb=9d7d5b814f9cdb468bf0275ee27d6f6f)
*Call Controls*

### **Outbound Call**

* The agent can make an outbound call to any number by clicking on the dial pad on the dashboard.

![suite_efcx_outboundcall.png](https://docs.expertflow.com/__attachments/a_3f3bfa114ad28483e2e5d045b9f0283fded3c0f67bff40a5091e637fa4e135c4/suite_efcx_outboundcall.png?cb=0a8e3061ac14eaa9c05f73f882eea163)
*Outbound Call*  

## **Click to Dial**

This feature allows the agent to select any number corresponding to a record (Contact, Account, Lead) and initiate an outbound call with that number.  
![suite_efcx_clicktodial.png](https://docs.expertflow.com/__attachments/a_31331e4e3455c5febc65681431fc4683872ca20e54f161a157ef5f7ba468a7a0/suite_efcx_clicktodial.png?cb=3bec753537a1ba7e8cae5f082aa99666)
*Click to Dial*

## Screen Pop

When a conversation (voice, web chat and email) arrives for the logged-in agent, a CRM customer record is popped up according to the customer's number and information stored in SuiteCRM.

1. If **no match** is found, a new customer record is created automatically. The entity type is configurable and can be adjusted as needed.

2. If **one customer** is matched, then that record will automatically pop up.

3. In the case of **multiple matches**, a list of all the matched records of the respective entity is shown. And the first record in the list will automatically pop up; however, the agent can also manually select another customer.

Integration for Instagram, Facebook, and similar platforms is available on demand  
![suite_efcx_screenpop.png](https://docs.expertflow.com/__attachments/a_9fc133f49948900f226076373aca6cccb654d7e4b753ce739ca1cf0c50321949/suite_efcx_screenpop.png?cb=5bd582b665ffa1de3b50046111d0d8c9)
*Screen Pop*  
![suite_efcx_multiplematch.png](https://docs.expertflow.com/__attachments/a_8977d8462cf8b6d5e0460cd2107242c3d55b32b64616a682fb3cb7ac3c2524fc/suite_efcx_multiplematch.png?cb=b700abfd909889e03dff74d09f08c395)
*Multiple Matches*  

## Conversation Activity

An activity (**Task**) is automatically created at the end of the conversation and linked to the matched customer account in CRM. The name is a combination of different attributes that are the conversation type, the direction, and the agent username. The activity has the details for the conversation, such as:

* Customer Information

* Duration

* Conversation Direction

* Conversation Type

* Agent Name

* Time (*at which Activity created*)

![suite_efcx_activity.png](https://docs.expertflow.com/__attachments/a_291e85967c79233c94d795ef5d07e422e9b1f9088ac2ee11781effec4a1f15e1/suite_efcx_activity.png?cb=3d96d91b5580f1ad92d98149e70cff60)
*Conversation Activity*

---
version: "1.0.0"
language: "en"
---
# Compatibility Guide

## Overview

This guide provides a compatibility guide for Expertflow SuiteCRM Connector concerning EFCX.

## Compatibility Requirements

The compatibility requirements related to EFCX, Browser, and SuiteCRM versions are given below.  
We have tested the versions mentioned below. To counter-check, testing can be scheduled before actual deployment.

### EFCX Version:

EFCX Agent Desk 4.8

**Tag:** `4.8`

### Browsers Compatibility

|  **Browser**  |                **Tested Version**                |                                                                     **Compatibility**                                                                     |
|---------------|--------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------|
| Google Chrome | Version 138.0.7204.101 (Official Build) (64-bit) | ![check mark](https://docs.expertflow.com/__attachments/a_1115adc4d842654731646185561bde486d21f77a406ccead168b3dd6730a1557/atlassian-check_mark?cb=a10212e1c1021c5194f7535b6843f955) |
| Firefox       | 135.0.1 (64-bit)                                 | ![check mark](https://docs.expertflow.com/__attachments/a_1115adc4d842654731646185561bde486d21f77a406ccead168b3dd6730a1557/atlassian-check_mark?cb=a10212e1c1021c5194f7535b6843f955) |

**Recommended Browser:** Google Chrome

#### SuiteCRM: **Version 8.7.1**

### EFCX Connector Display Theme

| **Theme Mode** |                                                                     **Compatibility**                                                                     |
|----------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------|
| Light          | ![check mark](https://docs.expertflow.com/__attachments/a_1115adc4d842654731646185561bde486d21f77a406ccead168b3dd6730a1557/atlassian-check_mark?cb=a10212e1c1021c5194f7535b6843f955) |
| Dark           | ![check mark](https://docs.expertflow.com/__attachments/a_1115adc4d842654731646185561bde486d21f77a406ccead168b3dd6730a1557/atlassian-check_mark?cb=a10212e1c1021c5194f7535b6843f955) |

|-----------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------|
| ![check mark](https://docs.expertflow.com/__attachments/a_1115adc4d842654731646185561bde486d21f77a406ccead168b3dd6730a1557/atlassian-check_mark?cb=a10212e1c1021c5194f7535b6843f955)       | Supported                 |
| ![cross mark](https://docs.expertflow.com/__attachments/a_448a649bce0bda408013de080301356f52587cc1a043e54bf26ecbf23ef61a4a/atlassian-cross_mark?cb=a9c671cfc7809253be52d640dbbf1019)       | Not Supported             |
| ![question mark](https://docs.expertflow.com/__attachments/a_c411b310d9650d0b202605faa7dde910c9ca98a256303f868d25fe3de94663f7/atlassian-question_mark?cb=01451d3e8ed02077899ec3e8fa8cf364) | Maybe developed on-demand |

---
version: "1.0.0"
language: "en"
---
# Components and Architecture

## Introduction

This document describes the architecture diagram and solution components of EFCX (Expertflow contact center) connector and how it is embedded into the SuiteCRM.

## Intended Audience

The document is intended for developers with knowledge of EFCX Connector and Suite.

## Technical Overview

The following is the architecture diagram that illustrates how the EFCX connector is integrated into Suite.

## Communication Flow Diagram

Once you install the **connector package** in SuiteCRM, it will embed the **EFCX softphone widget** .

The communication flow between SuiteCRM and the components of EFCX connector is given as follows:

1. Customer Call reaches the EFCX connector through CX voice channel.

2. EFCX routes the call or chat to the best available agent.

3. As the call or chat lands on the Agent, a matched record pops up in the CRM against the customer number

4. Once the agent accepts the call or chat, EFCX connects the call or chat with the customer.

5. As the agent accepts a call or chat that ends, EF Suite Connector will log the activity in the CRM.

![Service Now EFCX Connector.drawio.png](https://docs.expertflow.com/__attachments/a_51b6d7a90381b9173d3ed64eddfc4321cc8ffff0ab97f19d90fefac844cba1c1/Service%20Now%20EFCX%20Connector.drawio.png?cb=bc5496345e1e2791adc40e748d3989d7)

---
version: "1.0.0"
language: "en"
---
# Deployment Guide

## **Purpose**

This deployment guide provides detailed instructions for installing, configuring, and using the EFCX connector within Suite CRM. It is designed to ensure a smooth integration process, enabling users to effectively utilize the connector within their Suite CRM environment.

## **Intended Audience**

This document is intended for customers who want to deploy EFCX connector within Suite CRM.

## **Prerequisites**

* You must have installed the [EFCX](https://docs.expertflow.com/cx/4.8/) on your server before integrating.

* A **Suite CRM**account is required.

### **Install Expertflow EFCX Package**

Follow these steps to install the **EFCX Connector** into **Suite CRM**:

1. Make sure [Node.js](https://nodejs.org/en/download) is installed on the machine where Suite CRM is hosted.

2. Download the ZIP package from this [URL](https://drive.google.com/drive/folders/1PkwraOLmcwiSVBb3teAgKgeCOeqd-2eH).

3. Log in to your **Suite CRM** account as an administrator.

4. From the user icon, select **Admin** , then choose **Module Loader** from the menu.

![efcx_suite_doc_3.png](https://docs.expertflow.com/__attachments/a_05e091f1455ee87ec6bc399a79a373874c1fd66e3b69cd7bd678db19289839a5/efcx_suite_doc_3.png?cb=52f1135bcb4403c7d14d0284c204afee)  
5. Select the ZIP file, then click **Upload** , followed by **Install** , then **Commit**, and wait for the process to complete.

![efcx_suite_doc_4.jpg](https://docs.expertflow.com/__attachments/a_f284c3022e410ad7ca7d5865ef0039eb39eb816164058d1a0357d14bfb7769e5/efcx_suite_doc_4.jpg?cb=0feff1354f816da27cdeb6033fe4b571)  
Keep the site open and **wait** for the popup confirming 100% completion. Then click **Home** and **refresh**the page.  
After installation, make sure to set the **EFCX URL** and **DN Number** in the configuration.  
6. To access the **configurations** , click the **phone icon** in the top right to open the EFCX widget, then click the **settings icon**.

![efcx_suite_doc_1.jpg](https://docs.expertflow.com/__attachments/a_c7e90129ff80bd56399c7ad9834c60561a8d369cbe68082163f60b1c407f0bcd/efcx_suite_doc_1.jpg?cb=8f64e818b40a6c1f783f4d1116123d11)  
7. Make any changes as per the below table, then press **Enter** to save.

![efcx_suite_doc_2.jpg](https://docs.expertflow.com/__attachments/a_3f0d76722b58e675fab3ec5f11d91b5cabac6decda980e6b10023cf030e33e30/efcx_suite_doc_2.jpg?cb=7fc5f4f704cf2b2a749405bdfdf1ee3f)

#### Configurations

| **No** | **Property Name**  |                                                  **Value**                                                  |
|--------|--------------------|-------------------------------------------------------------------------------------------------------------|
| 1      | EFCX URL           | The base EFCX URL where the agent desk is deployed.                                                         |
| 2      | Destination Number | The DN number used for agent outbound or click-to-dial calls.                                               |
| 3      | Show Task          | Whether to open the task after it's created (it will be created automatically after the conversation ends). |
| 4      | No Match           | The entity where new customers will be saved if they don't already exist in the CRM.                        |
| 5      | Search Priority    | The entity to search first when looking up customer numbers.                                                |

### **Uninstall Expertflow EFCX Package**

Follow these steps to uninstall the **EFCX Connector** from **Suite CRM**:

1. Log in to your **Suite CRM** account as an administrator.

2. Hover over the user icon in the top right corner and select **Admin**.

3. In the Admin Tools section, select **Module Loader**.

4. Click **Uninstall** then **Commit**and wait for the process to complete (may take some time, depending on your machine).

Keep the site open and **wait** for the popup confirming 100% completion. Then click **Home** and **refresh**the page.

---
version: "1.0.0"
language: "en"
---
# Release Notes

| **Target release** |   1.0.0   |
|     **Status**     | COmpleted |
|--------------------|-----------|

## Release Summary

This embedded EFCX Connector runs inside SuiteCRM; it enables agent state controls, call and chat controls within SuiteCRM allowing agents to use the same CRM agent interface for all call and chat handling and transfer.  

## Release Limitations

* The timestamp shown in the activity does not accurately reflect the actual time of the interaction (e.g., chat, call).

* Click to chat is not available for this release.

* CX-Voice limitations are [here](https://docs.expertflow.com/cx/4.8/cx-voice-limitations).

## Important Notes

* Do not login to the same agent on different browsers or different machines.

* Admin access for SuiteCRM is required to install the package.

## Release Tested Highlights

### Tested with:

* EFCX Agent Desk (4.8)

  * CX Voice

  * WebChat

* SuiteCRM Version 8.7.1

### Not Tested with:

* Supervisor Controls.

* High Availability (HA).

* Outbound Chat

## **Testing Machine Hardware Specs:**

| **CPU** | **RAM** | **Hard Disk** |
|---------|---------|---------------|
| 8       | 8GB     | 100GB         |

## **Operating System:**

**Version**: Microsoft Windows Server 2019 Standard

The compatibility matrix for this release is available [here](https://docs.expertflow.com/suitecrm-efcx/1.0.0/compatibility-guide.md).

---
version: "1.0.0"
language: "en"
---
# Solution Prerequisites

## Time Synchronization

It is essential to consider time synchronization between the EFCX Connector and client applications. If the system's dates and time are not synchronized, the system can produce unpredictable results. Therefore, please make every effort to adhere to the following time synchronization guidelines:

* EFCX Connector and client applications should have their Time Zone and time configured properly according to the geographic region and synchronized.

* To configure the time zone, please see the instructions from the hardware or software manufacturer of NTP server.

* Client applications and EFCX Connector should be synchronized to the second. This synchronization should be maintained continuously and validated regularly.

* For security reasons, Network Time Protocol (NTP) version 4.1+ is recommended.

## Browser Requirement

* Recommended Browser: **Google Chrome,** Latest version

## Access Prerequisites

The implementation team would require remote access privileges for remote installation and configuration.

* VPN connection/WebEx/TeamViewer is required to connect to the customer's environment.

* Remote access via RDP or similar is required to install and configure the EF Server.

* Administrative access to server machines is required to install EF Connector.

* Admin access to CRM is required to do CRM side configurations.

## Product Prerequisites

You must have installed the [EFCX](https://docs.expertflow.com/cx/4.8/) on your server before integrating with SuiteCRM.

### **Hardware Requirements**

For hardware requirements, please follow [this](https://docs.expertflow.com/cx/4.8/hardware-sizing) guide for EFCX deployment requirements.

[Next Page](https://docs.expertflow.com/llms-full.txt/1)
