Contents
Deploying with Docker Compose
To deploy CX Contact by using Docker Compose, complete the following deployment procedures. The first three procedures are common to both deployment methods. Click the link for the appropriate topic:
Summary of deployment procedures |
---|
1. Ensure the Prerequisites are met |
2. Create the Outbound Database |
3. Create the Outbound Database Access Point |
4. Start Outbound Contact Server (OCS) |
5. Deploy with Docker Compose |
Deploy with Docker Compose
Summary of procedures: Deploy with Docker Compose |
---|
1. Obtain the Docker Compose scripts |
2. Set up the environment:
|
3. Log in to CX Contact |
Docker Compose scripts
To receive all of the latest files required for the Docker Compose deployment, you must first copy the Docker Compose scripts.
To obtain the Docker Compose scripts:
- Execute the following Bash commands in the order that they appear here:
- $ export DEPLOY_CXCONTACT_IMAGE=<deploy_cx_contact_image>
- $ echo "docker run --rm -it -u $(id -u ${USER}):$(id -g ${USER}) -e init=true -v "$(pwd)":/env:rw $DEPLOY_CXCONTACT_IMAGE" > cxc-app.sh
- $ bash cxc-app.sh
- The old file is moved to the /backup/MMDDYY-hhmm folder.
- Note: Each update is saved in a new directory. The name of the new directory is the date on which the update was performed and completed.
- Once you obtain the Docker Compose script make it executable by running the following command:
$ chmod +x cxc-app.sh
Then, execute the following Help command to obtain all of the available commands:
$ ./cxc-app.sh help
- Execute the following command to obtain the CX Contact Docker Compose .yaml files:
$ ./cxc-app.sh init
At this point, the following occurs:
- You will be prompted for a CX Contact Deployment Service image (if it is not present locally).
Note: The Docker Compose script uses the latest deploy_cx_contact image. To use a specific image run ./cxc-app.sh init <image_name>.
- The Docker Compose script pulls the Deployment Service image and verifies which deployment should be initialized (that is, Docker or Kubernetes).
- The .yaml files are copied to the Docker or Kubernetes folder in the same directory in which the Docker Compose script is located.
- You ae asked to configure CX Contact. The default values are suggested for each environment variable. You can replace the default values with values applicable for your environment.
Note: If you are using the local Docker registry, specify it as the value of CXC_DOCKER_REPOSITORY and GWS_DOCKER_REPOSITORY variables. Change default values of GWS components versions to the actual versions of GWS Components images pushed to the local registry.
- Start the CX Contact Docker Compose Environment by running the following command:
$ ./cxc-app.sh start
- By default, as of CX Contact 9.0.025, the Docker Compose .env file is configured for CDP NG connectivity. The following default values show how CDP NG is used.
# COMPLIANCE DATA SETTINGS # List Builder embedded CDP_NG Compliance Data EMBEDDED_COMPLIANCE_DATA_BASEPATH="/list_builder/data/ng_init_data" # OPTIONAL: List Builder embedded LEGACY CDP Compliance Data #EMBEDDED_COMPLIANCE_DATA_BASEPATH="/list_builder/init_data" # Compliance data rule sets: AREACODE_RULE_SET="AU,CA,GB,NZ,US" GEO_RULE_SET="AU,CA,GB,NZ,US" POSTAL_RULE_SET="CA,GB,US" DNC_RULE_SET="GB,US" # In order to switch to Legacy CPD, change CDP_NG_URL and CDP_NG_GCLOUD_AUTH to empty values CDP_NG_URL="https://api.usw2.pure.cloud/api/v2/outbound/compliancedata" CDP_NG_GCLOUD_AUTH="https://login.usw2.pure.cloud/oauth/token"
- CDP_NG_GCLOUD_ID and CDP_NG_GCLOUD_SECRET are required parameters and do not have a default value.
- These parameters must be requested by creating a CLOUDCON ticket before attempting to upgrade to CX Contact 9.0.025+ or before deploying CX Contact 9.0.025+ for the first time.
- The new CLOUDCON ticket must include the customer name and the name of the person who will receive the keys in the Jira ticket. CDP_NG_GCLOUD_ID=<Must be provided> CDP_NG_GCLOUD_SECRET=<Must be provided>
- To return to CDP Legacy, use the following configuration parameters:
EMBEDDED_COMPLIANCE_DATA_BASEPATH="/list_builder/init_data" CDP_NG_URL= CDP_NG_GCLOUD_AUTH= CDP_NG_GCLOUD_ID= CDP_NG_GCLOUD_SECRET=
Help Output
Welcome to CXContact deployment service. Following commands are available:
init <deploy_cx_contact image> - Initial setup
start - Start CXContact docker-compose environment
stop - Stop CXContact docker-compose environment
restart - Restart CXContact docker-compose environment
status - Get status of all running containers
provision <deploy_cx_contact image> - Provisioning CXContact
cxc-only [on/off] - Switch between cxc-only deployment and single node (with GWS services) deployment
save <optional parameters> - Save docker images in archive
Available optional parameters for save:
--only <tag> for e.g cxcontact. - Will save only specific images
-o,--output <name> - Output names for archive with images and import script
-t,--tag <tag> - Will apply new tag to images, for internal registries
Note! <deploy_cx_contact image> parameter is optional. Default - will be used latest local image
If no image found - you will be asked to prompt image name to pull.
Common CX Contact commands
CX Contact Procedure | Command |
---|---|
Start CX Contact | $ ./cxc-app.sh start |
Stop CX Contact | $ ./cxc-app.sh stop |
Restart CX Contact | $ ./cxc-app.sh restart |
View current CX Contact status and uptime. | $ ./cxc-app.sh status |
Switch between single host deployment and multi host deployment
(that is, when GWS and CX Contact are deployed on different hosts). |
$ ./cxc-app.sh cxc-only [on/off] |
Provision CX Contact | $ ./cxc-app.sh provison Note: Provisioning can be executed multiple times. |
Revalidate the configuration when provisioning fails. | $ ./cxc-app.sh init |
Pull images in a disconnected environment. | $ ./cxc-app.sh init
$ ./cxc-app.sh save <optional parameters> |
Obtain Images in Disconnected Environments
Deployments that are not connected to the Internet must obtain images from the Genesys Engage Docker Repository and archive them. The archived images are then transferred to a Docker host that is not connected to the Internet.
To obtain images from the Genesys Engage Docker Repository run the following command on a computer with access to the Internet and save the images in an archive location.
$ ./cxc-app.sh init
$ ./cxc-app.sh save <optional>
The archived images must then be transferred to a destination host and used for deployment.
Set up the environment
Set up the environment either automatically (recommended) or manually. Procedures for each option are provided below.
Set up the environment automatically (Recommended)
If you have already deployed CX Contact using Docker Compose, start at step 1 below. If not, see Docker Compose scripts for details.
- Obtain the CX Contact Docker Compose .yaml files by executing the following command:
$ ./cxc-app.sh init
- While executing $ ./cxc-app init.sh, select the Docker deployment and select y when asked if you would like to configure CX Contact.
- In the directory containing cxc-app.sh, execute the following:
./cxc-app.sh provision
Provisioning will take approximately 1 to 2 minutes.
Set up the environment manually
To set up the environment manually, you'll make API requests to GWS. Requests should point to the host name or IP address of the external load balancer for GWS or CX Contact. In Docker Compose deployments, this is the VM where Docker runs.
Complete the procedures in the summary below.
Summary of procedures: Set up environment manually |
---|
1. Verify successful start of gws-postgres |
2. Check gws-core-environment |
3. Check gws-core-auth |
4. Create the environment |
5. Create the contact center |
6. Create the authentication client |
7. Create the external_api_client |
8. Get the access token for cx_contact |
9. Verify authentication (Optional) |
10. Verify clients |
11. Create the tenant in api-aggregator |
12. Configure session profile |
13. Add location in CloudCluser Application |
Verify successful start of gws-postgres
To verify the successful start of gws-postgres:
docker-compose logs gws-postgres
This is the expected response:
gws-postgres_1 | LOG: database system is ready to accept connections
gws-postgres_1 | LOG: autovacuum launcher started
Check gws-core-environment
To check gws-core-environment:
curl http://localhost:8091/environment/v3/version
Check gws-core-auth
To check gws-core-auth:
curl 'http://localhost:8095/auth/v3/oauth/authorize?response_type=code&client_id=cx_contact&redirect_uri=http://localhost/api-aggregator/v2/login-callback'
Check that there is a reply. It will be an error, but it must be received.
Create the environment in GWS
Send a POST request to GWS.
Pass a body parameter in JSON format, called data, with the following properties:
Property | Value |
---|---|
username | The super administrator account name for Configuration Server. |
appName | Cloud |
password | Use the password for the super administrator account name. |
connectionProtocol | addp |
localTimeout | 7 |
remoteTimeout | 11 |
traceMode | CFGTMBoth |
tlsEnabled | false |
primaryPort | Configuration Server's TCP Listener port. |
readOnly | false |
primaryAddress | Configuration Server's host name or IP address |
locations | /USW1 |
tenant | Environment |
Code sample
curl --user ops:ops -H "Content-Type: application/json" -X POST http://localhost:8091/environment/v3/environments -d '
{
"data": {
"username": "default",
"appName": "Cloud",
"password": "password",
"connectionProtocol": "addp",
"localTimeout": 7,
"remoteTimeout": 11,
"traceMode": "CFGTMBoth",
"tlsEnabled": false,
"configServers": [
{
"primaryPort": 8888,
"readOnly": false,
"primaryAddress": "10.51.30.154",
"locations": "/USW1"
}
],
"tenant": "Environment"
}
}
'
Expected response
{"status":{"code":0},"path":"/environments/bf032640-9073-435d-9447-718b7cc7dc43"}
Create the contact center
Send a POST request to GWS.
Pass a body parameter in JSON format, called data, with the following properties:
Property | Value |
---|---|
environmentid | bf032640-9073-435d-9447-718b7cc7dc43 |
auth | configServer |
Code sample
curl --user ops:ops -H "Content-Type: application/json" -X POST http://localhost:8091/environment/v3/contact-centers -d '
{
"data": {
"environmentId": "bf032640-9073-435d-9447-718b7cc7dc43",
"domains": ["domain.com"],
"auth": "configServer"
}
}
'
Expected response
This produces the following result:
{"status":{"code":0},"path":"/contact-centers/3952ccd2-a34a-46c1-b51e-8917628554c9"}
Create the authentication client
To create the authentication client, send a POST request to GWS.
Pass a body parameter in JSON format, called data, with the following properties:
Property | Value |
---|---|
clientType | * |
internalClient | true |
authorizedGrantTypes | refresh_token, implicit, password, client_credentials, authorization_code |
redirectURIs | http://10.11.64.16 |
authorities | ROLE_INTERNAL_CLIENT |
description | cx_contact |
accessTokenExpirationTimeout | 43200 |
refreshTokenExpirationTimeout | 2592000 |
name | cx_contact |
client_id | cx_contact |
client_secret | <client secret token> |
Code sample
curl --user ops:ops -X POST http://localhost:8095/auth/v3/ops/clients/ -H 'Cache-Control: no-cache' -H 'Content-Type: application/json' -d '
{"data": {
"clientType": "CONFIDENTIAL",
"scope": [
"*"
],
"internalClient": true,
"authorizedGrantTypes": [
"refresh_token",
"implicit",
"password",
"client_credentials",
"authorization_code"
],
"redirectURIs": [
"http://10.11.64.16"
],
"authorities": [
"ROLE_INTERNAL_CLIENT"
],
"description": "cx_contact",
"accessTokenExpirationTimeout": 43200,
"refreshTokenExpirationTimeout": 2592000,
"name": "cx_contact",
"client_id": "cx_contact",
"client_secret" : "<client secret token>"
}
}'
Expected response
The expected response is 200 OK.
Create external_api_client
To create the external_api_client for communication with GWS services, send a POST request.
Pass a body parameter in JSON format, called data, with the following properties:
Property | Value |
---|---|
clientType | CONFIDENTIAL |
scope | * |
internalClient | true |
authoraizationGrantTypes | refresh_token, implicit, client_credentials, password, authorization_code |
authorities | ROLE_INTERNAL_CLIENT |
description | external_api_client |
accessTokenExpirationTimeout | 43200 |
refreshTokenExpirationTimeout | 2592000 |
name | external_api_client" |
client_id | external_api_client" |
client_secret | client secret token |
Code sample
curl --user ops:ops -H "Content-Type: application/json" -X POST http://localhost:8095/auth/v3/ops/clients -d '
{
"data":
{
"clientType": "CONFIDENTIAL",
"scope": ["*"],
"internalClient": true,
"authorizedGrantTypes": [
"refresh_token", "implicit", "client_credentials",
"password", "authorization_code"
],
"authorities": ["ROLE_INTERNAL_CLIENT"],
"description": "external_api_client",
"accessTokenExpirationTimeout": 43200,
"refreshTokenExpirationTimeout": 2592000,
"name": "external_api_client",
"client_id": "external_api_client",
"client_secret": "client secret token"
}
}
'
Expected response
The expected response is 200 OK.
Get access token for cx_contact
To get the access token for cx_contact, send a POST request to GWS:
curl --user cx_contact:<client secret token> -H "Content-Type: application/json" -X POST 'http://localhost:8095/auth/v3/oauth/token?grant_type=client_credentials&scope=*&client_id=cx_contact&client_secret=<client secret token>'
This is the response:
{"access_token":"<bearer token>","token_type":"bearer","expires_in":43199,"scope":"*"}
Verify authentication (optional step)
To verify that authentication was successful, send a POST request to GWS:
curl --user external_api_client:secret -H "Content-Type: application/json" -X POST 'http://localhost:8095/auth/v3/oauth/token?grant_type=client_credentials&scope=*&client_id=external_api_client&client_secret=<client secret token>'
Verify clients
To verify that clients were created successfull, send a POST request to GWS
curl --user ops:ops http://localhost:8095/auth/v3/ops/clients | python -m json.tool
Create tenant in api-aggregator
To create the tenant in api-aggregator, send a POST request.
Pass a body parameter in JSON format, called data, with the following properties:
Parameter | Value |
---|---|
envrionmentid | bf032640-9073-435d-9447-718b7cc7dc43 |
shortTenantName | The short tenant name (for example 22-06). |
customerName | The short tenant name (for example 22-06). |
contactCenterId | The unique ID generated when a request is sent to GWS to create an Environment/Contact Center (for example 3952ccd2-a34a-46c1-b51e-8917628554c9). |
Sample code
curl -X POST -H "Authorization: Bearer <bearer token>" -H "Content-Type: application/json" -H 'Cache-Control: no-cache' http://localhost:8102/api-aggregator/v2/tenants -d '
{
"data":
{
"domains": ["domain.com"],
"environmentId": "bf032640-9073-435d-9447-718b7cc7dc43",
"shortTenantName": "22-06",
"customerName": "tenant_22-06",
"contactCenterId": "3952ccd2-a34a-46c1-b51e-8917628554c9"
}
}
'
Expected response
The expected response is 200 OK.
Configure session profile
During CX Contact provisioning a set of objects is created in the Configuration Server.
Configure the Annex of the DefaultSessionProfile object (type=script), by replacing all -1 with the following correct DBIDs:
- Voice Transfer Destination DN (origDNDBID)
- Trunk Group DBID (trunkGroupDNDBID)
- Statistics Server DBID (statServerDBID)
- Remove -1 from "serverDBIDs"
For example:
"data": { "interactionQueueDBID": 0, "origDNDBID": -1, "trunkGroupDNDBID": -1, "operationMode": 1, "statServerDBID": -1, "serverDBIDs": [ -1 ], "IVRProfileDBID": 0, "numOfChannels": 10 }, "isDefault": true
Add location in the CloudCluster Application
- In the CloudCluster application, open the properties of the Connection to the OCS application.
- In Advanced -> Application Parameters, enter the location using its short region name—for example: locations=/USW1
Log in to CX Contact
Log in to the CX Contact user interface with the URL http://<your-docker-hostname>/ui/cxcontact/