CX5.0 ChangeLog
Global Configuration Changes
Ingress Router Updates
In kubernetes/helm/QM/values.yaml (line 21):
Before:
ingressRouter: "devops234.ef.com"
After:
ingressRouter: "devops212.ef.com"
In kubernetes/helm/Campaigns/values.yaml (line 22):
Before:
ingressRouter: "devops.ef.com"
After:
ingressRouter: "*.expertflow.com"
In kubernetes/helm/Channels/values.yaml (line 22):
Before:
ingressRouter: "devops243.ef.com"
After:
ingressRouter: "*.expertflow.com"
In kubernetes/helm/transflux/values.yaml (line 14):
Before:
ingressRouter: "devops.ef.com"
After:
ingressRouter: "data-platform-tenants.expertflow.com"
Global Security Configuration Updates
In kubernetes/helm/Core/values.yaml (lines 147-150):
Added:
VAULT_CLIENT_CERT: /tls-server-client/tls.crt
VAULT_CLIENT_KEY: /tls-server-client/tls.key
VAULT_CA_CERT: /tls-ca/tls.crt
In kubernetes/helm/Core/values.yaml (lines 157-160):
Added:
VAULT_ENABLED: "true"
CX_TENANT_URL: "http://ef-cx-cx-tenant-svc:3000"
ROOT_DOMAIN: "NIL"
ENABLE_CLOUD_MANAGED_CONNECTIONS: "false"
Component Tag Updates
Agent Desk Updates
Unified-Agent: tag: "4.10.3" -> "4.10.3_b-CRM-351"
Core Component Updates
Customer Channel Manager: tag: "4.10.2" → "4.10.3_b-CRM-319"
CIM Backend:
Before:
image:
repository: cim/cim-backend
tag: "4.10"
After:
image:
repository: cim/cim-backend/build
tag: "4.10.3_b-CRM-321"
Conversation Manager: tag: "4.10.2" → "4.10.3_b-CIM-31586"
Conversation Monitor:
Before:
image:
repository: cim/conversation-monitor
tag: "4.10.3"
After:
image:
repository: cim/conversation-monitor
tag: "4.10.3_b-CIM-31587"
Customer Widget:
Before: tag: "4.10.3"
After: tag: "4.10.3_b-CIM-31480"
File Engine: tag: "4.10" → "4.10.3_b-CRM-345"
Historical Reports Manager: tag: "4.10" → "4.10.3_b-CRM-327"
License Manager: tag: "4.10" → "5.0_b-CRM-355"
Realtime Reports Manager:
Before:
image:
repository: cim/realtime-reports-manager
tag: "4.10.3"
After:
image:
repository: cim/realtime-reports-manager
tag: "4.10.3_f-CIM-31010"
Media Routing Engine: tag: "4.10.3" → "4.10.3_b-CRM-324"
State Events Logger: tag: "4.10" → "4.10.3_f-CIM-31010"
Team Announcement: tag: "4.10" → "4.10.1_f-CLCC-319"
Unified Admin:
Before:
image:
repository: cim/unified-admin
tag: "4.10.3"
After:
image:
repository: cim/unified-admin
tag: "4.10.3_f-CIM-31035"
Web Channel Manager: tag: "4.10.3" → "4.10.3_b-CRM-341"
Business Calendar: tag: 4.9.4 → "4.10.1_f-CLCC-173"
CX Load Hub: tag: "4.10" → "4.10.3_f-CIM-31010"
Campaign Component Updates
Campaign Backend:
Before:
repository: cim/campaigns
tag: "4.10.1"
After:
repository: cim/campaigns/build
tag: "4.10.3_f-CIM-31595"
Conversation Studio:
Before:
repository: cim/conversation-studio
tag: "4.10.1"
After:
repository: cim/conversation-studio/build
tag: "4.10.3_f-CIM-31595"
Scheduled Activities: tag: "4.10" → "4.10.3_b-CIM-31589"
Channel Component Updates
All Connector tags: tag: "4.10" → "4.10.3_f-CIM-31034" (for 360-connector, Facebook-connector, Instagram-connector, SMPP-connector, Telegram-connector, Twilio-connector, Twitter-connector, Viber-connector, Email-connector, WhatsApp-connector, MS Exchange Email connector, YouTube connector, and LinkedIn connector)
LinkedIn connector: tag: "4.10.1" → "4.10.3_f-CIM-31034"
QM (Quality Management) Component Updates
QM Backend:
Before:
repository: cim/qm-backend
tag: "4.10"
After:
repository: cim/qm-backend/build
tag: "4.10.3_f-CIM-31595"
QM Connector: tag: "4.10" → "4.10_f-CCC-1987"
Transflux Component Updates
In kubernetes/helm/transflux/values.yaml (lines 86-87):
Before:
repository: cim/cx-data-platform
tag: "4.10.3"
After:
repository: cim/cx-data-platform
tag: 4.10.3_f-BI-258
ActiveMQ Component Updates
In kubernetes/helm/ActiveMQ/values.yaml (lines 86-86):
Before:
tag: 6.1.7-alpine-zulu-K8s-4.10
After:
tag: 6.1.7-alpine-zulu-K8s--4.10_f-CLCC-173
Infrastructure Component Updates
Grafana: tag: 9.1.7-debian-11-r0 → 12.0.2-debian-12-r0
Bitnami common chart: tag: 11-debian-11-r38 → 12-debian-12-r47
Redis: tag: 6.2.6-debian-10-r94 → 7.4.3-debian-12-r0
MongoDB: tag: 1.33.0-debian-10-r20 → 1.70.0-debian-12-r2
PostgreSQL: tag: 10-debian-10-r305 → 11-debian-11-r37 (multiple instances)
Apache: tag: 10-debian-10-r301 → 12-debian-12-r34 (multiple instances)
ActiveMQ Docker image: tag: 6.2.6-debian-10-r95 → 6.2.6-debian-10-r120
Security and Authentication Updates
Vault Integration
In kubernetes/helm/vault/values.yaml (lines 610-613):
Added MongoDB CA secret:
- type: secret
name: mongo-mongodb-ca
Components that received Vault configKeys additions:
Bot Framework, Customer Channel Manager (ccm), CIM Customer, Conversation Monitor, Historical Reports Manager, Routing Engine, State Events Logger, Team Announcement, Unified Admin, Business Calendar, CX Load Hub, CX Tenant
**Example Vault configKeys:
configKeys:
- name: VAULT_ROLE_ID
valueFrom:
secretKeyRef:
name: vault-approle-secret
key: ROLE_ID
- name: VAULT_SECRET_ID
valueFrom:
secretKeyRef:
name: vault-approle-secret
key: SECRET_ID
- name: VAULT_TRANSIT_PATH
valueFrom:
secretKeyRef:
name: vault-approle-secret
key: TRANSIT_PATH
- name: VAULT_TRANSIT_KEY
valueFrom:
secretKeyRef:
name: vault-approle-secret
key: TRANSIT_KEY
Components that received TLS volume mounts:
Example TLS volumes:
- name: tls-ca
secret:
secretName: tls-ca
- name: tls-server-client
secret:
secretName: tls-server-client
Example TLS volume mounts:
- name: tls-ca
mountPath: /tls-ca
- name: tls-server-client
mountPath: /tls-server-client
Redis Security Updates
In kubernetes/helm/Core/values.yaml (lines 139-140):
Before:
REDIS_PASSWORD: Expertflow123
After:
REDIS_USER: "superuser"
REDIS_PASSWORD: Expertflow464
In kubernetes/helm/ActiveMQ/values.yaml (lines 185-188):
Added:
- name: REDIS_USERNAME
value: "superuser"
- name: ENABLE_CLOUD_MANAGED_CONNECTIONS
value: "false"
Component-Specific Updates
Agent Desk Updates
In kubernetes/helm/AgentDesk/values.yaml (lines 211-212):
Added:
- name: ROOT_DOMAIN
value: "expertflow.com"
In kubernetes/helm/AgentDesk/values.yaml (line 255):
Before:
tag: 9-debian11.2
After:
tag: 12.0.2-debian-12-r0
In kubernetes/helm/AgentDesk/values.yaml (lines 285-287):
Added:
- name: GF_SERVER_HTTP_PORT
value: "3000"
- name: GF_INSTALL_PLUGINS
Core Updates
In kubernetes/helm/Core/values.yaml (line 52):
Removed:
efCommonVars_RUN_CUSTOMER_SLA_ON_NO_AGENT_AVAILABLE: "true"
In kubernetes/helm/Core/values.yaml (lines 130, 132):
Added:
MONGODB_URI_PREFIX: "mongodb"
ENABLE_RETRY_WRITES: "false"
Campaigns Updates
In kubernetes/helm/Campaigns/values.yaml (lines 165-176):
Added environment variables:
- name: BATCH_PULL_INTERVAL
value: "60"
- name: LOG_LEVEL
value: "info"
- name: BATCH_HANDLER_SAVE_INTERVAL_SEC
value: "30"
- name: IS_MULTITENANCY_ENABLED
value: false
- name: TENANT_NAME
value: rm-02
- name: DOMAIN_NAME
value: expertflow.com
In kubernetes/helm/Campaigns/values.yaml (lines 189-192):
Added volume:
- name: mongo-mongodb-ca
secret:
secretName: mongo-mongodb-ca
In kubernetes/helm/Campaigns/values.yaml (lines 196-198):
Added volume mount:
- name: mongo-mongodb-ca
mountPath: /mongo
Channels Updates
In kubernetes/helm/Channels/values.yaml (for Facebook, Instagram, Telegram, Viber, WhatsApp, Twitter, YouTube, LinkedIn):
Before:
efConnectionVars: false
After:
efConnectionVars: true
In kubernetes/helm/Channels/values.yaml (lines 213, 216):
Before:
- name: CCM_CONFIG_URL
value: "https://{{ .Values.global.ingressRouter }}/ccm/channel-connectors/configurations/"
- name: SERVICE_IDENTIFIER
value: "195"
After:
- name: CCM_URL
value: "https://{{ .Values.global.ingressRouter }}/ccm/channel-connectors/configurations/"
- name: CX_TENANT_URL
value: "https://{{ .Values.global.ingressRouter }}/cx-tenant/"
Routing Engine Updates
In kubernetes/helm/Core/values.yaml - Added GraphQL configuration:
Environment variables:
- name: GRAPHQL_MEMORY_RULES_PATH
value: /app/graphql-memory-rules.json
- name: GRAPHQL_SCHEMAS_PATH
value: /app/schemas/*
- name: GRAPHQL_REDIS_RULES_PATH
value: /app/graphql-redis-rules.json
- name: AGENT_SEARCH_SCAN_COUNT
value: "500"
- name: AGENT_SEARCH_MAX_RESULTS
value: "50000"
Volumes:
- name: routing-engine-graphql-schemas
configMap:
name: routing-engine-graphql-schemas
- name: routing-engine-graphql-redis-rules
configMap:
name: routing-engine-graphql-redis-rules
- name: routing-engine-graphql-memory-rules
configMap:
name: routing-engine-graphql-memory-rules
Volume mounts:
- name: routing-engine-graphql-schemas
mountPath: /app/schemas
- name: routing-engine-graphql-redis-rules
mountPath: /app/graphql-redis-rules.json
subPath: graphql-redis-rules.json
readOnly: true
- name: routing-engine-graphql-memory-rules
mountPath: /app/graphql-memory-rules.json
subPath: graphql-memory-rules.json
readOnly: true
QM Component Updates
In kubernetes/helm/QM/values.yaml (lines 115-118):
Added multi-tenancy support:
- name: IS_MULTITENANCY_ENABLED
value: true
- name: TENANT_NAME
value: tenant3
In kubernetes/helm/QM/values.yaml (lines 127-147):
Enabled ingress with CORS support:
enabled: true
annotations:
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
nginx.ingress.kubernetes.io/cors-allow-methods: PUT, GET, POST, OPTIONS, DELETE,PATCH
nginx.ingress.kubernetes.io/enable-cors: "true"
nginx.ingress.kubernetes.io/configuration-snippet:
'more_set_headers "Access-Control-Allow-Origin:
$http_origin";'
nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
#cert-manager.io/cluster-issuer: "ef-letsencrypt-prod"
nginx.ingress.kubernetes.io/rewrite-target: /$2
nginx.ingress.kubernetes.io/use-regex: "true"
longLivedConnection:
path: "/qm-backend/(notification/[^/]+/sse)(/|$)"
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$1
nginx.ingress.kubernetes.io/proxy-buffering: "off"
nginx.ingress.kubernetes.io/proxy-send-timeout: "43200"
nginx.ingress.kubernetes.io/proxy-read-timeout: "43200"
path: "/qm-backend(/|$)(.*)"
pathType: ImplementationSpecific
In kubernetes/helm/QM/values.yaml (lines 211-214):
Added recording configuration:
- name: CALL_START_DATE
value: '2025-09-01'
- name: MAX_BATCH_SIZE
value: 30000
New Charts and Files Added
cx-tenant Chart (file added)
New file:
kubernetes/helm/Core/charts/cx-tenant/values.yamlAdded as a dependency to the Core chart
Contains configuration for the CX tenant service
Added image tag: "4.10.3_f-CIM-31010"
MTT-single Chart (file added)
New file:
kubernetes/helm/MTT-single/values.yamlComplete new chart for MTT (Multi-Tenant Tenant) single instance
Contains comprehensive configuration for MTT deployment
Nginx Router Configuration Updates
In kubernetes/pre-deployment/nginx-router/nginx-router-manifests.yaml - Complete new file (206 lines):
Added comprehensive nginx configuration for tenant routing
Contains routing rules for campaign studio, conversation studio, and other services
Supports multi-tenancy with dynamic backend host resolution
Tenant Creation Script
In kubernetes/post-deployment/create_tenant.sh - Complete new file (90 lines):
#!/bin/bash
# ==============================
# Update the following variables
# ==============================
TENANT_ID="expertflow1"
FQDN="tenant3.expertflow.com"
# ==============================
# Do not modify below this line
# ==============================
curl --location --request POST "https://${FQDN}/cx-tenant/tenant" \
--header 'Content-Type: application/json' \
--data "{
\"tenantName\": \"${TENANT_ID}\",
\"tenantId\": \"${TENANT_ID}\",
\"tenantCode\": \"${RANDOM}\",
\"tenantSettings\": {
\"keyCloak\": {
\"realm\": \"${TENANT_ID}\",
\"auth-server-url\": \"https://${FQDN}/auth/\",
\"ef-server-url\": \"https://${FQDN}/unified-admin/\",
\"ssl-required\": \"external\",
\"resource\": \"cim\",
\"verify-token-audience\": false,
\"credentials\": {
\"secret\": \"ef61df80-061c-4c29-b9ac-387e6bf67052\"
},
\"use-resource-role-mappings\": true,
\"confidential-port\": 0,
\"policy-enforcer\": {},
\"CLIENT_ID\": \"cim\",
\"CLIENT_DB_ID\": \"ef61df80-061c-4c29-b9ac-387e6bf67052\",
\"GRANT_TYPE\": \"password\",
\"GRANT_TYPE_PAT\": \"client_credentials\",
\"USERNAME_ADMIN\": \"admin\",
\"PASSWORD_ADMIN\": \"admin\",
\"MASTER_USERNAME\": \"admin\",
\"MASTER_PASSWORD\": \"admin\",
\"SCOPE_NAME\": \"Any default scope\",
\"bearer-only\": true,
\"FINESSE_URL\": \"\",
\"TWILIO_SID\": \"AC99cffb57f6d7e3c3da5f0f149ddc2b47\",
\"TWILIO_VERIFY_SID\": \"VA73622e86ae131799532a804ec9e230e3\",
\"TWILIO_AUTH_TOKEN\": \"31bea9d152d6c1dd053cd4a8481fc234\",
\"RSA_Server_URL\": \"\",
\"RSA_Client_Key\": \"\",
\"RSA_Client_ID\": \"\"
},
\"redis\": {
\"userName\": \"${TENANT_ID}\",
\"password\": \"Expertflow123\"
},
\"mongo\": {
\"userName\": \"${TENANT_ID}\",
\"password\": \"Expertflow123\"
},
\"campaigns\": {
\"url\": \"http://cx-campaigns-campaign-studio-svc:1880\",
\"username\": \"admin\",
\"password\": \"admin\"
},
\"surveys\": {
\"url\": \"http://cx-surveys-survey-studio-svc:1880\",
\"username\": \"admin\",
\"password\": \"admin\"
},
\"finesse\": {
\"url\": \"https://finesseurl\",
\"adminUser\": \"user\",
\"adminPass\": \"pass\"
},
\"secureLink\": {
\"linkExpiryTime\": 30
},
\"dialer\": {
\"serviceIdentifier\": \"8224\",
\"maxConcurrentCalls\": \"5\",
\"maxCallTime\": \"60\",
\"callsPerSecond\": \"15\"
},
\"fqdn\": \"${FQDN}\",
\"subDomain\": \"apg\"
},
\"status\": \"inActive\",
\"createdBy\": \"admin\",
\"updatedBy\": \"admin\",
\"createdAt\": \"\",
\"updatedAt\": \"\"
}"
Metabase Reporting Updates
New Python scripts added to kubernetes/external/metabase-reports/metabase_reporting_update_tool/:
metabase.py(1085 lines added)metabase_import.py(23 lines added)metabase_export.py(22 lines added)metabase_full_import.py(42 lines added)metabase_sync_scan.py(12 lines added)clean_cards.sh(9 lines added)
New Report Card Definitions
In kubernetes/external/metabase-reports/metabase_reporting_update_tool/mysql/card_Agent Performance Report.json (new file, ~547 lines):
Added comprehensive JSON configuration for agent performance reporting
In kubernetes/external/metabase-reports/metabase_reporting_update_tool/mysql/card_Conversation Detail Report.json (new file, ~595 lines):
Added detailed conversation analytics configuration
License Update
In kubernetes/external/metabase-reports/metabase_reporting_update_tool/LICENSE (new file, 661 lines):
Added new license file for metabase reporting tools
Metabase Helm Chart
New Helm chart added: kubernetes/helm/metabase/
Complete new chart with deployment, service, ingress configurations
Updated API Six routes for Metabase integration
Added import/export tools for reports
Database and Configuration Updates
GraphQL Schema Updates
In kubernetes/pre-deployment/routing-engine/graphql/schemas/Agent.graphqls, AgentState.graphqls, TaskType.graphqls, and schema.graphqls:
Added new fields and types for agent state management, monitoring, and schema extensions
License Manager Updates
In kubernetes/pre-deployment/licensemanager/licensemanager.sql:
-- Added Databases
+ CREATE DATABASE metabase;
+ CREATE DATABASE licenseManager;
-- Added Tables
+ CREATE TABLE tenant (
+ tenant_id VARCHAR(40) PRIMARY KEY
+ );
+ CREATE TABLE online_license (
+ tenant_id VARCHAR(40) PRIMARY KEY,
+ master_key VARCHAR(40),
+ FOREIGN KEY (tenant_id) REFERENCES tenant(tenant_id)
+ ON DELETE CASCADE ON UPDATE CASCADE
+ );
+ CREATE TABLE offline_license (
+ tenant_id VARCHAR(40) PRIMARY KEY,
+ license TEXT,
+ FOREIGN KEY (tenant_id) REFERENCES tenant(tenant_id)
+ ON DELETE CASCADE ON UPDATE CASCADE
+ );
+ CREATE TABLE subscription_tenant (
+ subscription_id INT,
+ tenant_id VARCHAR(40),
+ PRIMARY KEY (subscription_id, tenant_id),
+ FOREIGN KEY (subscription_id) REFERENCES subscription(id)
+ ON DELETE CASCADE ON UPDATE CASCADE,
+ FOREIGN KEY (tenant_id) REFERENCES tenant(tenant_id)
+ ON DELETE CASCADE ON UPDATE CASCADE
+ );
+ CREATE TABLE license_status (
+ tenant_id VARCHAR(40),
+ product_id INT,
+ total_activations INT NOT NULL,
+ current_activations INT NOT NULL,
+ remaining_activations INT NOT NULL,
+ status VARCHAR(30) NOT NULL,
+ PRIMARY KEY (tenant_id, product_id),
+ FOREIGN KEY (tenant_id) REFERENCES tenant(tenant_id)
+ ON DELETE CASCADE ON UPDATE CASCADE,
+ FOREIGN KEY (product_id) REFERENCES product(id)
+ ON DELETE CASCADE ON UPDATE CASCADE
+ );
-- Removed Tables
- DROP TABLE master_key;
- DROP TABLE license;
- DROP TABLE license_unit;
- DROP TABLE latest_activations_status;
-- Removed Sequences
- DROP SEQUENCE license_unit_id_seq;
- DROP SEQUENCE activity_counter_id_seq;
- DROP SEQUENCE latest_activations_status_id_seq;
- DROP SEQUENCE license_id_seq;
- DROP SEQUENCE licensed_instance_id_seq;
- DROP SEQUENCE master_key_id_seq;
- DROP SEQUENCE named_object_id_seq;
- DROP SEQUENCE product_id_seq;
- DROP SEQUENCE subscription_id_seq;
- DROP SEQUENCE subscription_products_id_seq;
-- Modified Tables
-- product
- PRIMARY KEY (uuid)
+ PRIMARY KEY (id)
- license_type VARCHAR(30)
+ license_type VARCHAR(40)
-- subscription
- PRIMARY KEY (uuid)
+ PRIMARY KEY (id)
-- subscription_products
- PRIMARY KEY (subscription_id)
+ PRIMARY KEY (subscription_id, product_id)
+ FOREIGN KEY (subscription_id) REFERENCES subscription(id)
+ FOREIGN KEY (product_id) REFERENCES product(id)
-- licensed_instance
- COLUMNS: uuid, license_unit_id, unit_count
+ COLUMNS: tenant_id, logged_instance
+ FOREIGN KEY (tenant_id) REFERENCES tenant(tenant_id)
+ FOREIGN KEY (product_id) REFERENCES product(id)
-- named_object
- COLUMNS: "UUID", object_id, object_type
+ COLUMNS: tenant_id, logged_instance
+ PRIMARY KEY (tenant_id, product_id)
+ FOREIGN KEY (tenant_id) REFERENCES tenant(tenant_id)
+ FOREIGN KEY (product_id) REFERENCES product(id)
-- activity_counter
- PRIMARY KEY ("UUID")
+ PRIMARY KEY (tenant_id, product_id)
+ FOREIGN KEY (tenant_id) REFERENCES tenant(tenant_id)
+ FOREIGN KEY (product_id) REFERENCES product(id)
Reporting Connector Configuration
In kubernetes/pre-deployment/reportingConnector/reporting-connector.conf (lines 1-5):
Added:
tenant_id = expertflow
Translation Updates
Updated files in kubernetes/pre-deployment/app-translations/unified-agent/i18n
Additional Configuration Changes
Post-deployment Scripts
In kubernetes/post-deployment/cim-tenant.webhooks.json (new file, 144 lines):
Added webhook configuration for tenant management
Survey studio removal
Removed survey studio as a dependency from various charts
Removed survey studio sub-chart from MTT-single chart
Updates to vault configurations
Updated vault integration with new authentication methods
Added mongo-mongodb-ca secret to vault configuration