Contents
No-media Deployment
Prerequisites
Review the Limitations page before planning.
This section lists the requirements for the environment where EXEC is planned to be deployed. Mandatory and optional requirements are given in the corresponding sections below.
Mandatory Environment Elements
Redis Cache
EX Engage Connector supports Enterprise Redis version 6.x. Redis Cluster mode is not supported. Customers should plan to use 2 GB of Redis memory for contact centers with 1000 agents and a call rate of 5 CAPS.
Container Registry
EXEC components are provided as Docker containers. Customers should provide a container registry where EXEC Docker images can be hosted. Docker composer files of the EXEC components will be provisioned to pull Docker images from this registry.
Virtual Machines for the EXEC Components
Four VMs have to be created to deploy EXEC components to have each VM to carry one component instance:
- 1 VM for EX Engage Connector Config Sync (EXCS)
- 1 VM for EX Engage Connector Agent State Sync (EXAS)
- 2 VMs for 1 SIPS HA Pair for deploying EX Engage Connector Conversation Provider (EXCP)
VMs allocated for the EXEC components should be provisioned as follows:
- 64-bit Linux OS with kernel version 4.18 or later
- Recommended resource allocation: 2 CPU Cores, 8 GB RAM, and at least 80 GB HDD
- Docker version 20 or later
The EXEC VM must sync the system time at least once every 24 hours as the communication between the EXEC services and Genesys Cloud are very time-sensitive.
All VMs running EX Engage Connector components should belong to the same local network segment and be interconnected so that all components can communicate over the network. EXEC components can use either FQDNs or IP addresses to establish communication with each other. The connectivity table lists both incoming and outgoing connections required by the EXEC components.
Service | Direction | Protocol | Local Port | Remote Peer | Remote Peer Port | Purpose |
---|---|---|---|---|---|---|
EXCS | Outgoing | TCP/TLS | Any | Engage Config DB | 5432 (default RDBMS listening port) | Read Engage configuration. |
EXAS | Outgoing | TCP | Any | Engage Primary Stat Server | 2060 ( default Primary Stat Server listening port) | Obtain real-time agent state data. |
EXAS | Outgoing | TCP | Any | Engage Backup Stat Server | Backup Stat Server listening port (2060) default | Obtain real-time agent state data |
EXCP | Outgoing | TCP | Any | Engage SIP Servers (multiple) | 8000 (default SIP Server default listening port) | To fetch real-time Call, DN, and VQ details from SIP Server. |
EXCP/EXAS | Outgoing | TCP | Any | EXCS | 3640 (default) | Use EXCS REST API. |
EXCS | Inbound | TCP | 3640 (default) | EXCP/EXAS/Prometheus | Any | Use EXCS REST API and scrape metrics. |
EXAS | Inbound | TCP | 3630 (default) | Prometheus | Any | Scrape metrics. |
EXCP | Inbound | TCP | 3650 (default) | Prometheus | Any | Scrape metrics. |
EXCS/EXAS/EXCP | Outgoing | TCP/TLS | Any | Redis | 6379 (default) | Store config data to provide ID mapping services |
EXCS/EXAS/EXCP | Outgoing | HTTPS | Any | Genesys Cloud | 443 | Call GC REST API. |
Bootstrap Virtual Machine
Bootstrap VM is required to execute EXEC deployment procedure by running a bootstrap Python script. Bootstrap VM specs include:
- Linux OS
- Docker version 20 or later
- Python 3.9+
- pip3 package manager
- SSH connectivity to EXEC VMs
Genesys Cloud EX Organization
The EX Organization should be created in Genesys Cloud to be used as a target for data injection by the EXEC components.
An OAuth client with grant type Client Credentials created in the EX Org to connect to GC and the EX Integration role should be assigned to the OAuth client. This client's credentials will be used by the EXEC components to connect to Genesys Cloud.
Engage Environment
EX Engage Connector components operate with Genesys core services version 8.5+ on the back-end. Ensure the following Engage components (Config DB, Stat Server, and SIP Server) are deployed and running. Also, the EXEC components should be able to communicate with Config DB, Stat Server, and SIP Server.
Optional Environment Elements
- Monitoring Solution - EXEC component provides metrics that can be consumed by Prometheus to enable effective monitoring.
- Observability Solution - Prometheus-based observability solution (Grafana) to make monitoring and alerting friendly and efficient.
- Centralized Logging Solution - Log collection systems (Filebeat/ElasticSearch, Promtail/Grafana Loki, etc) to collect and index logs in a centralized place.
- Container Monitoring Solution - third-party container monitoring tools (Portainer) to simplify management and monitoring of the EXEC containers
Deployment Plan
- Execute the procedure described in the Preparing Engage Configuration for the EX integration section.
- Execute the procedure described in the Configuring OAuth Client in the GC Org section.
- Execute the procedure described in the Configuring hybrid_integration transaction in CME section.
- Download all EXEC components from Genesys FTP:
- EXCS (excs-100.0.100.XX.tgz) - EXCS image
- EXAS (exas-100.0.100.XX.tgz) - EXAS image
- EXCP (excp-100.0.100.XX.tgz) - EXCP image
- EXOP (exop-100.0.100.XX.tgz) - bootstrap package
- Load EXEC images to the local container registry.
- Extract tarballs of the EXEC component image from the *.tgz archives.
- Deploy tarballs as images to the local container registry using docker import command.
- Save the paths to the images in the registry (for example myregistry.mycompany.com/exec) to use them later in the deployment process.
- Execute the procedure described in the Installing EXEC Bootstrap Script section.
- Execute the procedure described in the Configuring .env file section.
- Execute the procedure described in the Deploying EXEC section.
Deployment Procedure
Preparing Engage Configuration for the EX integration
- Review Folder Filtering rules and how they are applied to the configuration objects of different types. Set the value of the EXCS environment variable, SYNC_CUSTOMER_FOLDER_NAME to the comma-separated list, which includes the names of all CME folders selected to be synchronized to GC.
- Identify a routing domain to map to the EX Org
- In this context Engage Routing Domain refers to a set of configuration objects, which create isolated or semi-isolated routing environment. Line of Business (LOB) can be an example of such environment. One LOB can be responsible for processing inbound calls landing on a set of toll free numbers of a contact center. In the Engage contact center such LOB would be configured with a set of dedicated resources: RP and VQ DNs, skills, agents, agent groups, and business attributes. Those are main configuration object, which define the routing domain of a selected LOB.
- Usually, it is not possible to find a fully isolated LOB in the contact center. It is recommended to start with a small routing domain, observe mapping results for all three injected data types (configuration, agent states, and interactions), and then gradually increase the routing domain by adding more Engage configuration objects to it with the goal of injecting all Engage contact center configuration and activity into the EX Org.
- Take current EXEC limitations into account while defining the routing domain. For example, consider selecting voice agents serving inbound calls because currently EXEC doesn't support digital interactions. Also, outbound campaign calls cannot be injected into the EX Org. So, if digital, blended, or voice outbound agents are selected their workload wouldn't be properly represented in the EX Org through the injected data, which may impact the quality of the WFM and Gamification services.
- Skills:
- Check that CME folders in the Skills unit selected to be synchronized to GC are added to the EXCS environment variable, SYNC_CUSTOMER_FOLDER_NAME.
- Persons:
- Check that CME folders in the Persons unit selected to be synchronized to GC are added to the EXCS environment variable, SYNC_CUSTOMER_FOLDER_NAME
- Extension DNs
- Extension DNs are not mapped to the EX Org but EXCS reads the DNs of this type and stores them into Redis. Those DNs are used by the EXCP for the call event processing.
- All Extension DNs used to log in the Persons selected for the EX integration at the previous step should also become a part of the EX integration context.
- Review the EXCP Deployment Topologies section and select a SIP Server, which processes contact center voice calls and is panned to be used as a source for the interaction event injection to the EX Org, and identify a Switch this SIP Server uses.
- Check that CME folders in the DNs selected to be synchronized to GC are added to the EXCS environment variable, SYNC_CUSTOMER_FOLDER_NAME
- Queues:
- EXCS can convert four types of the Engage DNs into the ACD queues in GC EX Org: ACD Queue, Routing Queue, Virtual Queue (VQ), and Routing Point (RP). However, the only supported call distribution model from a queue to an agent is the one where call lands on RP DN, then it is placed on a VQ DN for an agent selection, and then is distributed to a selected agent. From this perspective it is recommended to map Engage queue DNs of only two types to the EX Org:
- RP: select all RP DNs, which belong to a routing domain being mapped
- VQ: select only routing VQ DNs, which are used by the URS for target selection, do not map reporting VQ DNs
- Select a SIP Server, which processes contact center voice calls and is panned to be used as a source for the interaction event injection to the EX Org, and identify a Switch this SIP Server uses.
- Check that CME folders in the DNs configuration unit under the selected switch selected to be synchronized to GC are added to the EXCS environment variable, SYNC_CUSTOMER_FOLDER_NAME
- Review the EXCP Deployment Topologies section and select a SIP Server, which processes contact center voice calls and is panned to be used as a source for the interaction event injection to the EX Org, and identify a Switch this SIP Server uses.
- Check that CME folders in the DNs configuration unit under the selected switch that has RP and VQ DNs selected to be synchronized to GC are added to the EXCS environment variable, SYNC_CUSTOMER_FOLDER_NAME
- EXCS can convert four types of the Engage DNs into the ACD queues in GC EX Org: ACD Queue, Routing Queue, Virtual Queue (VQ), and Routing Point (RP). However, the only supported call distribution model from a queue to an agent is the one where call lands on RP DN, then it is placed on a VQ DN for an agent selection, and then is distributed to a selected agent. From this perspective it is recommended to map Engage queue DNs of only two types to the EX Org:
- Agent Groups
- Select a folder at the Agent Group configuration unit to be synced to the GC.
- Identify agent groups (AG) and virtual agent groups (VAG) used for routing or reporting by the Persons selected to be mapped to the EX Org.
- Link selected AGs and VAGs to their corresponding queue DNs by applying the following configuration to the properties of these groups:
- Annex / hybrid / WFM_queue_number = <ROUTING_VQ_DN_NAME>
- Supervisors
- Engage Supervisors should be marked as shown below to get a Supervisor role assigned in the EX Org:
- Person has 'Is Agent' checked
- Person has Annex/htcc/roles list containing a 'Supervisor' as one of its elements
- If customers use WWE/GWS, then their supervisors should already be configured like this. In other cases this configuration should be added.
- Engage Supervisors should be marked as shown below to get a Supervisor role assigned in the EX Org:
- Review all objects of all types under CME folders selected to be synchronized to GC for the case-sensitivity conflicts. Refer to the Case-Sensitivity of Object Names section. Resolve those conflicts if found.
Configuring OAuth Client in the GC Org
EXCS requires an OAuth client with grant type Client Credentials created in the EX-Org to connect to GC. Create a new OAuth client and assign the EX Integration role to the OAuth client. Refer to Create an OAuth client for more information.
Configuring hybrid_integration transaction in CME
EX Org parameters required for the hybrid_integration transaction configuration
The following configuration parameters should be fetched from EX Org to provision the hybrid_integration transaction in the Engage CME. Configuration Alias is used to refer to the value of the EX Org parameter.
Configuration Alias | EX Org Parameter Path | Parameter Description |
---|---|---|
CFG_ALIAS_EX_ORG_SHORT_NAME | Organization Setting / Organization Details / Short Name | Short name of the EX Org |
CFG_ALIAS_EX_ORG_ID | Organization Setting / Organization Details / Advanced / Organization ID | EX Org Organization ID |
CFG_ALIAS_EX_ORG_OAUTH_CLIENT_ID | Integrations / OAuth / <OAUTH_CLIENT_NAME> / Client Details / Client ID | OAuth client ID |
CFG_ALIAS_EX_ORG_OAUTH_CLIENT_SECRET | Integrations / OAuth / <OAUTH_CLIENT_NAME> / Client Details / Client Secret | OAuth client secret |
Transaction Object
Transaction object hybrid_integration contains EXEC configuration. It should be configured as:
- Path to the transaction object:
- for the single-tenant Engage deployment the transaction object should be created in the Transactions configuration unit in the Resources structure
- for the multi-tenant Engage deployment there must be a separate transaction object under each of the tenant. Each transaction should point at a dedicated EX Org. EX Orgs cannot be shared by multiple Engage tenants.
- Name: hybrid_integration
- Type: List
Transaction Annex Folders
Folder | Parameter Name | Value | Description |
---|---|---|---|
general | organization_sname | CFG_ALIAS_EX_ORG_SHORT_NAME | Short name of the EX Org. |
organization_id | CFG_ALIAS_EX_ORG_ID | EX Org Organization ID. | |
base_service_url | Base service URL used for framing the REST API calls to the EX Org. | ||
base_auth_url | Base auth URL used for logging into the EX Org. | ||
region | GENESYS_CLOUD_REGION_URL | Service URL for the particular region. | |
config_sync | client_id | CFG_ALIAS_EX_ORG_OAUTH_CLIENT_ID | OAuth client ID. |
client_secret | CFG_ALIAS_EX_ORG_OAUTH_CLIENT_SECRET | OAuth client secret. | |
skill_level_max_value | ENGAGE_MAX_SKILL_LEVEL | Maximum skill level value set for Engage agents to match the skill proficiency in Genesys Cloud. See ACD Skills for more information. | |
skill_level_min_value | ENGAGE_MIN_SKILL_LEVEL | Minimum skill level value set for Engage agents to match the skill proficiency in Genesys Cloud. See ACD Skills for more information. | |
agent_state_sync | client_id | CFG_ALIAS_EX_ORG_OAUTH_CLIENT_ID | OAuth client ID. |
client_secret | CFG_ALIAS_EX_ORG_OAUTH_CLIENT_SECRET | OAuth client secret. | |
conversation_provider | client_id | CFG_ALIAS_EX_ORG_OAUTH_CLIENT_ID | OAuth client ID. |
client_secret | CFG_ALIAS_EX_ORG_OAUTH_CLIENT_SECRET | OAuth client secret. | |
sta_default_programid | <DEFAULT_STA_PROGRAM_ID> | Program UUID for topic detection | |
sta_default_language | <DEFAULT_STA_LANGUAGE> | ISO 639-1 two letter language code + '-' + ISO 3166-1 alpha-2 two letter country code string. Default language to use for transcription | |
password | CFG_ALIAS_EX_ORG_OAUTH_CLIENT_SECRET | OAuth client secret. |
Create a genesys user on Virtual Machines
It is mandatory to create 'genesys' user on all the Virtual Machines including Bootstrap Virtual Machine. This step ensures seamless, password-free deployment of EXEC components onto their corresponding Virtual Machines.
Installing EXEC Bootstrap Script
You should always deploy EX Engage Connector using the bootstrap script.
Perform the following items before deploying EX Engage Connector:
- Move EXOP bootstrap package downloaded from the FTP (for example exop-100.0.100.XX.tgz) to the Bootstrap VM and place it under /usr/home/genesys/exec.
- Go to the installation directory where the bootstrap script is copied and extract the package in the same folder.
- Under the installation directory, verify if the following files are available:
- .env
- bootstrap.py
- Docker Compose files for EXCS, EXCP, and EXAS
- alerts.yml
- prometheus.yml
- Make sure the file is executable: chmod +x bootstrap.py
- Run ./bootstrap.py --help and verify if the following screen is displayed:
Welcome to EXEC deployment bootstrap script. Following actions are supported init - Initialize EXEC environment start - Start EXEC services stop - Stop EXEC services restart - Restart EXEC services update - upgrade/downgrade EXEC services rollback - rollback EXEC service
Configuring .env file
The .env file contains the description of the EXEC Docker environment. Configure all mandatory parameters to describe the environment where EXEC components are planned to be deployed. Bootstrap script converts data from this file into the Docker compose yml configuration files.
You can specify parameters for the deployment by overriding the default values in the .env file. See the Parameters table for a full list of overridable values.
Common Parameters
Parameter Name | Description |
---|---|
EXEC_DOCKER_REPOSITORY * | Jfrog Artifactory Edge repository for pulling EXEC images. |
EXEC_INFRA_DOCKER_REPOSITORY | Docker repo for Redis, grafana, and Prometheus containers, if empty - docker hub will be used. |
EXEC_HOST_LOGS_VOLUME_PATH * | Host path which is mounted inside the container to store logs. |
EXEC_ORG_ID * | EX Org ID is taken from the following path in the GC UI Admin view: Organization Settings / Organization Details / Advanced / Organization ID |
EXEC_TENANT_ID * | Unique ID to identify the Engage tenant. DBID of the Tenant configuration object in the Engage Configuration DB can be used. |
EXEC_REDIS_HOST * | IP Address of the Redis proxy in case of enterprise Redis and IP Address of Redis server in case of Lab environment |
EXEC_REDIS_PORT * | Port of Redis server |
EXEC_REDIS_SECURE | If the Redis server is password protected via the requirepass option. |
EXEC_REDIS_PASSWORD | Do not configure the password in the .env file, provide it as input when you run the bootstrap script |
A * indicates mandatory fields. |
EXCS Parameters
Parameter Name | Description |
---|---|
EXCS_VM_HOST * | IP Address of VM machine where CS will be deployed |
EXCS_PORT * | Config Sync Service port |
EXCS_TAG * | Config Sync Service Image Version |
EXCS_CONFIG_DB_HOST * | IP Address of Config Database. |
EXCS_CONFIG_DB_PORT * | Port Number of Config Database |
EXCS_CONFIG_DB_USER * | Config Database Username |
EXCS_CONFIG_DB_SSL* | Config Database SSL connectivity |
EXCS_CONFIG_DB_PASSWORD * | Do not configure the password in the .env file, provide it as input when you run the bootstrap script |
EXCS_CONFIG_DB_NAME * | Config Database name |
EXCS_CONFIG_DB_TYPE * | Config Database Type. Supported Values are postgresql, oracle, or mssql. Default value is postgresql. |
EXCS_SYNC_CUSTOMER_OBJECTS_ONLY | When set to true, EXCS only synchronizes objects under customer folder hierarchy to Genesys Cloud. If this environment variable is set to true, then environment variable SYNC_CUSTOMER_OBJECTS_ONLY must contain a comma-separated list of folders to be synchronized to the GC. See Folder Filtering section for more information. Default is false, i.e. all objects of the supported types are synchronized. Values: true/false (default) |
EXCS_SYNC_CUSTOMER_FOLDER_NAME | When SYNC_CUSTOMER_OBJECTS_ONLY is set to "true", , set this EXCS environment variable to a comma-separated list of the CME folder names. EXCS searches those folders in four configuration units, Persons, Skills, DNs, and Agent Groups, and syncs configuration objects found in those folders to GC. If a listed folder has subfolders, then all subfolders are synchronized to the GC too. |
EXCS_LOG_PATH | File system path for logs. If not provided, logs will be directed to stdout. |
EXCS_LOG_FILENAME * | File name for logs. If LOG_FILENAME is specified, this environment variable further describes the file name. Example: 'excs-<TENANT_ID>.%Y%m%d_%H%M%S_%L.log' |
EXCS_LOG_LEVEL | Defines the EXCS log level. Values: trace, debug, info, warn, error, fatal |
EXCS_GC_QUEUE_NAME_SUFFIX * | Set it to -Engage-external. This suffix is needed to distinguish Queue objects synced from Engage environment. |
A * indicates mandatory fields. |
EXAS Parameters
Parameter Name | Description |
---|---|
EXAS_HOST * | IP Address of VM machine where AS will be deployed |
EXAS_PORT * | Agent Sync Service port |
EXAS_TAG * | Agent Sync Service Image Version. |
EXAS_STAT_SERVER_PRIMARY_HOST * | Primary Stat Server's host IP/FQDN |
EXAS_STAT_SERVER_PRIMARY_PORT * | Primary Stat Server's port number. |
EXAS_STAT_SERVER_BACKUP_HOST * | Backup Stat Server's host IP/FQDN |
EXAS_STAT_SERVER_BACKUP_PORT * | Backup Stat Server's port number. |
EXAS_LOG_PATH | File system path for logs. If not provided, logs will be directed to stdout |
EXAS_LOG_FILENAME * | File name for logs. If LOG_FILENAME is specified, this environment variable further describes the file name. Example: 'exas-<TENANT_ID>.%Y%m%d_%H%M%S_%L.log' |
EXAS_LOG_LEVEL | Defines the EXAS log level. Values: trace, debug, info, warn, error, fatal |
A * indicates mandatory fields. |
EXCP Parameters
Parameter Name | Description |
---|---|
EXCP_1_VM_HOST_PAIR * | VM Host IPAddress list where Conversation Provider service will be running |
EXCP_1_PORT * | Conversation Provider Service port |
EXCP_1_TAG * | Conversation Provider Container version |
EXCP_1_VOICE_SERVER_VQ * | A list of SIP Server host:port for receiving Virtual Queue Events. EXCP should connect to the default port. Format: primary1:port/backup1:port |
EXCP_1_VOICE_SERVER_AGENT * | A list of SIP Server host:port for receiving Extension DN Events . EXCP should connect to the default port. Format: primary1:port/backup1:port |
EXCP_1_VOICE_SERVER_CALL * | A list of SIP Server host:port for receiving Call Monitoring Events. EXCP should connect to the default port. Format: primary1:port/backup1:port |
EXCP_1_LOG_PATH | File system path for logs. If not provided, logs will be directed to stdout |
EXCP_1_LOG_FILE_NAME * | File name for logs. If EXCP_1_LOG_FILE_NAME is specified, this environment variable further describes the file name. Example: 'excp-.%Y%m%d_%H%M%S_%L_${TENANT_ID}_${HOSTNAME}.log' |
EXCP_1_LOG_LEVEL | Defines the EXCP log level. Values: trace, debug, info, warn, error, fatal |
A * indicates mandatory fields. |
Deploying EX Engage Connector
To set up the EX Engage Connector services, run the init command: ./bootstrap.py --action init.
The init script performs the following actions:
- Prompt for following passwords:
- DB password - The password for the Config database.
- Redis password - The password for the Redis server (if the redis-secure parameter is set to true).
- Config Server password - The password for the Config Server.
- Create a /tmp/.env file containing the provisioning information along with password information.
- Extract the VM address for each service and copy the docker-compose file of the respective service to their respective VMs.
- Copy the /tmp/.env file to the list of VMs on which the connector services need to be installed and delete the /tmp/.env file.
The docker-compose files and .env files are stored under the exec directory in the home path of the Genesys user.
Run EXEC Services for First Time
Once the EXEC service environment is initialized, the EXEC services should be started in the following order:
- Start the EXCS Service by running ./bootstrap.py --action start --service excs.
- Check the health of EXCS Service and once it shows as healthy then it signifies that EXCS service is running fine.
curl -v http://<EXCS_VMHOST_IPADDRESS>:3640/health 200 OK with dependency status
- Wait for all the Engage Objects to be synced to the GC side. Initial sync-up of contact centers with 1000 agents will be around 30 - 40 minutes.
- To check if all the Engage Objects are synced to GC successfully, run the status command to see if the initialization status is "success".
curl http://<EXCS_VMHOST_IPADDRESS>:3640/status {"status":{"code":0,"message":"Latest database updates for orgId:6662cb10-0d4d-4710-b979-db69011e66fd have been successfully processed on 2023-07-11T10:23:08.062Z","corrId":"bd4c0e9a-ba02-491c-93e5-6fd1e3a7e51e"},"data":{"syncStatus":{"timeStamp":"2023-07-11T10:23:08.062Z","status":"Success"},"updateStatus":{"timeStamp":"2023-07-11T10:23:08.062Z","status":"Success","previousHWM":0,"latestHWM":567,"processedHWM":567,"operation":"Initialization"}}}
- Start the EXAS Service by running ./bootstrap.py --action start --service exas.
- Check the health of EXAS Service; once it shows as healthy, it signifies that EXAS service is running fine.
curl -v http://<EXAS_VMHOST_IPADDRESS>:3630/health 200 OK with dependency status
- Start the EXCP Service by running ./bootstrap.py --action start --service excp --pair 1.
- Check the health of EXCP Service; once it shows as healthy, it signifies that EXCP is running fine.
curl -v http://<EXCP_VMHOST_IPADDRESS>:3650/health 200 OK with dependency status
Starting EXEC Services
The EXEC services can be started/stopped/restarted using the below commands:
- ./bootstrap.py --action start - starts all the EXEC services in their respective VMs configured.
- ./bootstrap.py --action start --service=exas - starts the EXAS service in its respective VM
- ./bootstrap.py --action start --service=excp --pair 1 - starts the EXCP service in both the VMs belonging to excp pair 1
- ./bootstrap.py --action start --service=excp --pair 1 --host 1 - starts the EXCP service in the VM host 1 belonging to excp pair 1
Stopping or Restarting EXEC Services
All services or a specific service or a specific instance of a service can be stopped using the ./bootstrap.py --action stop command. The ./bootstrap.py --action restart command can be used to restart all services or a specific service or a specific instance of a service.