# SailPoint Zendesk Service Desk Connector Documentation > Zendesk Service Desk Connector Documentation # Documentation # Configuring Zendesk Service Desk In SailPoint, configure the following items for your Zendesk Service Desk integration: - [Ticket Creation](<#ticket-creation>) - [Status Mapping](<#status-mapping>) - [Requester Source](<#requester-source>) On the Summary page, you can review the general settings and parameters for the connectivity and authentication. ## Ticket Creation In a centralized approach spanning many users and resources to strengthen IT controls and provide proof of compliance to auditors and executive management, you can create a ticket for your integration based on your requirements. A ticket has all the relevant data filed for further processing. The information provided in this section is used to create the payload from SailPoint to create a ticket on the managed Zendesk instance. You can customize this information by adding fields as required. > [!IMPORTANT] > > SailPoint recommends that you include the Apache Velocity variables as needed to meet your specific use cases. > [!IMPORTANT] > > Currently, Zendesk Service Desk supports only the Incident ticket type. > [!NOTE] > > **Screenshot** > > [![Ticket Creation]()]() 1. Enter a **Subject** for the ticket. For example: ```text SailPoint Access Request $!plan.arguments.identityRequestId #if($plan.arguments.identityName) for the user $plan.arguments.identityName #end ``` 2. Enter the numeric ID of the user who submitted the ticket in the **Submitter ID** field. For example: ```text $!{plan.arguments.opened_by|'Default_Account_ID'} ``` In the example above, replace `Default_Account_ID` with the service account's ID for the Zendesk user from [Requester Source](<#requester-source>) on SailPoint. 3. Enter the description of the requirement that generated the ticket in the **Body** field. For example: ```text #foreach($req in $plan.requests) #if($req.operation == 'Create') Create Account on application $req.resource #else For $req.id in application $req.resource #end #if($req.items) $newline #foreach($item in $req.items) #if ($item.name == '*disabled*' && $item.value == 'true') Disable Account. $newline #elseif ($item.name == '*disabled*' && $item.value == 'false') Enable Account. $newline #elseif ($item.name == '*locked*' && $item.value == 'false') Unlock Account. $newline #else $!item.Operation $item.name: $item.value $newline #end #end #else $newline $!req.Operation Account #end $newline #end ``` 4. Enter the **Priority** to indicate the urgency of the ticket. Accepted values are `urgent`, `high`, `normal`, or `low`. 5. Enter `Incident` as the ticket **Type**. This is currently the only supported ticket type. 6. Enter the numeric ID, or an Apache Velocity variable, of the user requesting support through the ticket into the **Requestor ID** field. For example: ```text $!{plan.arguments.opened_by|'Default_Account_ID'} ``` In the example above, replace `Default_Account_ID` with the service account's ID for the Zendesk user from [Requester Source](<#requester-source>) on SailPoint. 7. To add a field, select **Add Field**. Select the field type and enter the required information based on the type. Options are Single Value, Multi Valued Field, or Grouped Key-Value Pairs. For example, to add a custom attribute such as `custom_attr` in the request to the Zendesk managed system, add the field using the Single Value type. The corresponding value can be either static or dynamic. For the dynamic value, use Apache Velocity Template expressions. You can also customize the ticket fields based on your requirements by setting up a Before Provisioning rule to generate ticket fields. The default rule name is *Sample Before Provisioning Rule for SDIM*. You must contact SailPoint Services to create a *Before Provisioning* rule for your integration. You can use this [service desk integration update patch]() to add that rule for multiple integrations. [![Add Field]()]() #### Advanced Properties To add advanced properties to the details of the ticket, select **Advanced Properties**. > [!NOTE] > > **Screenshot** > > [![Advanced Properties]()]() 1. Enter the basic JSON root element of the request ticket in the **Request Root Element** field. For example: ```text Ticket ``` 2. Enter the type of the **Request Root Element**. For example: ```text JSONObject ``` 3. Enter the resource used for the request ticket in the **Resource** field. Do not include the base URL for the instance in the value. Provide only the remaining directories for the endpoint. For example: ```text /api/v2/tickets ``` 4. Enter the JSON path expression that indicates the location of the ticket number in the **Response Element** field. For example: ```text $.ticket.id ``` > [!NOTE] > > The ticket number generated on the Service Desk system for the corresponding provisioning action can be seen under **Search \> Account Activity** details of the identity. For more information, refer to [Account Activity Using Search](). ## Status Mapping Map the status of the incident in SailPoint to the corresponding Zendesk status. To add another row for status mapping, select **Add Status**. Customize the status map to meet your needs by adding or deleting as needed. > [!NOTE] > > **Screenshot** > > [![Status Mapping]()]() > [!IMPORTANT] > > Each status must have at least one mapped value. For more information, refer to [Get the time check configuration of queued service desk integration module tickets]() and [Update the time check configuration of queued SDIM tickets](). ### Identity Security Cloud Status Options - Committed - Queued - Failed ### Zendesk Service Desk Status Options - New - Pending - Solved - Closed - Open #### Advanced Properties To add more details to the status mapping, select **View Advanced Properties**. 1. Enter the resource used for the request ticket in the **Resource** field. Do not include the base URL for the instance in the value. Provide only the remaining directories for the endpoint. For example: ```text /api/v2/tickets/$ticketId ``` 2. Enter the JSON path in the **Response Element** field for the status mapping. For example: ```text $.ticket.status ``` ## Requester Source > [!NOTE] > > **Screenshot** > > [![Requester Source]()]() Select the source name that aggregated the ticketing system's users. # Connecting SailPoint and Zendesk Service Desk The Zendesk Service Desk connection performs effective and efficient service management for SailPoint services offered to the organization in Zendesk and enables you to create and manage incidents reported from other SailPoint sources. Before creating the connection, [enable authentication in Zendesk]() for your chosen authentication type. **To create the connection:** 1. Sign in to **SailPoint \> Admin interface**. 2. Go to **Connections \> Service Desk**. The Service Desk connections page displays. 3. Select **Create**. The Create Integration page displays. 4. Provide the required information on the [General Settings](<#general-settings>) page. 5. Select **Continue**. The Configure page appears. 6. Provide the [Connectivity and Authentication](<#connectivity-and-authentication>) information on the Configure page. 7. Provide the [Ticket Creation]() information on the Configure page. 8. Provide the [Status Mapping]() information on the Configure page. 9. Provide the [Requester Source]() information on the Configure page. 10. Select **Continue** to save the configuration and review the Summary of the configuration. ## General Settings > [!NOTE] > > **Screenshot** > > [![General Settings]()]() > [!NOTE] > > Ensure that the name and description of each connection are unique. Because you can configure multiple source types to use this connection, you should specify the sources in the description. The tickets for those sources are processed on the managed system while the status of the tickets is synchronized in SailPoint. 1. Enter a descriptive **Name** for the connection. 2. Enter the **Description** of the connection. 3. Select your Zendesk SDIM service desk application from the **Integration Type** dropdown list. 4. Select **Incident** in the **Ticket Type** dropdown list. 5. Select the Connection Type: - [VA-Based Connection Type](<#va-based-connection-type>) - Select the **VA-Based** connection type if you want to use a Virtual Appliance Cluster. - [SaaS Connection Type](<#saas-connection-type>) - Select the **SaaS** connection type if you want to create a SaaS application without using a Virtual Appliance Cluster. > **Notes** > > - SaaS Connection types don't support Credential Providers. > - Once you create an integration, you cannot edit the connection type. 6. (Optional) If Credential Providers are supported for this integration, you can select **Use a Credential Provider** to use a credential provider configured in your tenant. 7. Enter the name of the **Integration Owner**. ### VA-Based Connection Type > [!NOTE] > > **Screenshot** > > [![VA-Based Connection Type]()]() 1. Select **VA-Based** connection type if you want to use a Virtual Appliance Cluster. 2. Select **Save**. ### SaaS Connection Type > [!NOTE] > > **Screenshot** > > [![SaaS Connection Type]()]() 1. Select **SaaS** connection type if you want to create a SaaS application without using a Virtual Appliance Cluster. > [!NOTE] > > When you select the SaaS connection type, the [Enable Debug Logging](<#administrator-settings>) feature is available. It is only supported for Service Desk SaaS integration. #### Administrator Settings > [!NOTE] > > **Screenshot** > > [![Administrator Settings]()]() 1. Select the **Enable Debug Logging** checkbox to enable the integration to create and send debug log files to SailPoint Support to help troubleshoot issues. 2. If the **Enable Debug Logging** feature is needed, please contact SailPoint. > **Note** > > **Enable Debug Logging** should not be enabled without SailPoint guidance. ### Sources > [!NOTE] > > **Screenshot** > > [![Sources]()]() In the **Sources** dropdown list, select sources to configure from the available sources. For each source you want to integrate with the Zendesk Service Desk system, verify that it is configured for provisioning. > [!TIP] > > Edit the **Description** field for these sources to indicate they are used in the Zendesk Service Desk integration. ## Connectivity and Authentication In the **Configure \> Connectivity and Authentication** sub-panel, in the **URL** field, enter the URL of the Zendesk instance that you are integrating with. For example: ```text https://subdomain.zendesk.com ``` > [!NOTE] > > To use an API token with basic authentication, append the username with `/token` and provide the API token in the **Password** field. For more information, refer to [Generating a new API token]() in the Zendesk documentation. ### Basic Authentication Type > [!NOTE] > > **Screenshot** > > [![Basic Authentication Type]()]() 1. Select the **Basic** authentication type. 2. Enter the **Username** and **Password** required to authenticate with the managed instance. ### OAuth2 Authentication Type - Password > [!NOTE] > > **Screenshot** > > [![OAuth2 Authentication Type - Password]()]() 1. Select **PASSWORD** as the **Grant Type**. 2. Enter the location of the token endpoint the instance uses to retrieve the token. For example: ```text https://subdomain.servicedesk.com/oauth/tokens ``` 3. Enter the **Username** and **Password**. 4. Enter the **Client ID** and **Client Secret**. Refer to the Zendesk documentation for more information about [using OAuth authentication with your application](). ### OAuth2 Authentication Type - Client Credentials 1. Select **CLIENT\_CREDENTIALS** as the **Grant Type**. 2. Enter the location of the token endpoint the instance uses to retrieve the token. For example: ```text https://subdomain.servicedesk.com/oauth/tokens ``` 3. Enter the **Client ID** and **Client Secret**. Refer to the Zendesk documentation for more information about [using OAuth authentication with your application](). ### Bearer Authentication Type > [!NOTE] > > **Screenshot** > > [![Bearer Authentication Type]()]() 1. Select **Bearer** as the **Authentication Type**. 2. Enter the **Bearer Token** used for authentication. For more information, refer to [Generating a new Access Token]() in the Zendesk documentation. > [!NOTE] > > The linked documents are not maintained by SailPoint and are subject to change without notice. # Enable Authentication in Zendesk ## For Basic Authentication Enable password or token access in the Zendesk API admin configuration. **To enable password or token access:** 1. In Zendesk Support, select **Admin \> Channels \> API**. 2. On the **Settings** tab, enable **Password Access** or **Token Access**. ## For OAuth 2.0 Authentication - Enable **Password Access** in the Zendesk API admin configuration. Refer to [enabling password or token access](<#for-basic-authentication>). - Create a new OAuth client by providing the **Client Name** in the Zendesk API admin configuration. - Use the same **Client Name** for the **Client ID** and generated **Client Secret** on your Zendesk application. > [!IMPORTANT] > > **Client Secret** is only visible in the Zendesk managed system during the creation of the OAuth client. For the most up-to-date information about performing tasks in Zendesk, refer to the [Zendesk documentation](). **To create an OAuth client:** 1. In Zendesk Support, select **Admin \> Channels \> API**, then select the **OAuth clients** tab. 2. Select the plus icon (+) on the right side of the client list. 3. Complete the following fields to create a client: - **Client Name**: Enter a name for your app. This is the name that users see when asked to grant access to your application, and when they check the list of third-party apps that have access to their Zendesk. - **Description** (Optional): Enter a short description of your app that users see when asked to grant access to it. - **Company** (Optional): Enter the company name that users see when asked to grant access to your application. The information can help them understand who they're granting access to. - **Logo** (Optional): Select the logo that users see when asked to grant access to your application. The image can be a JPG, GIF, or PNG. For best results, upload a square image. It is resized for the authorization page. - **Unique Identifier**: This field is auto-populated with a reformatted version of the name you entered for your app. You can change it if you want. - **Redirect URLs**: Enter the URL or URLs that Zendesk should use to send the user's decision to grant access to your application. The URLs must be absolute and not relative, HTTPS (unless localhost or 127.0.0.1), and newline-separated. 4. Select **Save**. After the page refreshes, a new pre-populated Secret field appears on the lower side. This is the *client\_secret* value specified in the OAuth2 spec. 5. Copy the **Secret** value to your clipboard and save it somewhere safe. > **Note** > > The characters might extend past the width of the text box, so make sure to select everything before copying. > **Important** > > For security reasons, your secret is displayed fully only once. After you select **Save**, you only have access to the first nine characters. 6. Select **Save**. Use the unique identifier and the secret value in the [Connectivity and Authentication]() section. # Integrating SailPoint with Zendesk Service Desk > [!NOTE] > > **Integration** > > This is an integration and requires additional licensing or subscriptions to utilize it. For more information, contact your customer success manager. Zendesk is a service desk software platform that supports IT service management and automates common business processes for requesting and fulfilling incident requests across a business enterprise. SailPoint's Zendesk Service Desk connector integrates with Zendesk for service to bring the Zendesk experience to SailPoint where the users can raise and track service desk tickets (Incident) to their logical closure without leaving SailPoint. [![Service desk integration process flow]()]() > [!NOTE] > > All activity on the Service Desk connector appears as [events in Search]() and on the Activity tab of an identity. The new service desk functionality provides an easy way to: - See a list of integrations - View summaries of the integrations - Create new integrations - Edit/Update existing integrations - Delete integrations > [!NOTE] > > To view the latest features, enhancements, and fixes for all SaaS connectors, refer to the [SaaS Release Notes]() page. ## Supported Features SailPoint's Zendesk Service Desk connector supports the following features: - Create tickets for manual provisioning operations and status check. > **Note** > > Zendesk is used when you do not want SailPoint tasks or automated provisioning. - Ticket status is synchronized between SailPoint and Zendesk. If the ticket status check fails, it automatically retries. > [!NOTE] > > The Zendesk Service Desk Integration can be configured as a [SaaS Connection Type]() for SaaS connectivity that doesn't require a Virtual Appliance Cluster. ## Prerequisites > [!IMPORTANT] > > For Service Desk Integration Module to function properly, ensure that the feature flag `GOV_DISABLE_PLAN_INITIALIZER` is set to `true` for your organization. For more information, reach out to [Professional Services/Expert Services](). - Configure the virtual appliance cluster only when using a VA-based connection type. For instructions, refer to the [Virtual Appliance Reference Guide](). > **Note** > > This requirement doesn't apply to SaaS connections. - Configure at least one source to generate manual tasks for Provisioning. For more information, refer to [Configuring Source Account Provisioning](). - Be familiar with Apache Velocity scripting. For more information, refer to [Apache Velocity Engine - Getting Started](). - Know the authentication option (Basic, OAuth 2.0, or Bearer Authentication) used to authenticate. For more information, refer to [Connectivity and Authentication](). ## Required Permissions Assign the following minimum access permission to create and get the status of a ticket: - The Agent role is required for the service account. - SailPoint admin user level permissions are required to create and configure Zendesk Service Desk connections. Refer to [Granting and Removing User Level Permissions]() for more information about setting user level permissions. ## System Requirements - The virtual appliance must be able to connect to the ITSM system when using a VA-based connection type, typically using outbound access for port 443 (HTTPS). > **Note** > > This requirement doesn't apply to SaaS connections. ## Best Practices Before you start the configuration process, you should make decisions about the following components of this integration: - **Identify** - Find the Zendesk Service Desk system and the resources that will be used in the connection. Use the **Name** and **Description** fields in **General Settings** to clearly identify the specific Zendesk Service Desk system and the sources used in the connection. - **Zendesk Service Desk Details** - You can create an integration for each Zendesk Service Desk system your company uses. If the integration meets the prerequisites, you need to identify the URL for each instance you want to integrate with. You also need to identify the administrator details and the applicable authentication requirements. - **Sources** - For each source you want to integrate with an Zendesk Service Desk system, verify that it is configured for provisioning. For more information, refer to [Prerequisites](<#prerequisites>). > **Tip** > > Edit the **Description** field for these sources to indicate they are used in the Zendesk Service Desk Integration Module. - **Zendesk Service Desk Statuses** - Make a list of each possible status in the Zendesk Service Desk system that you want to map to a status in SailPoint. This will help you track tickets as they're worked. Most importantly, SailPoint uses this mapping to determine when a ticket is closed in the Zendesk Service Desk system so that the related provisioning task is also treated as complete. For more information about mapping statuses, refer to [Status Mapping](). - **Requests** - Identify each type of provisioning action in SailPoint that you want to create a ticket for in the Zendesk Service Desk system, along with the information from those actions that should be included in the related Zendesk Service Desk system ticket. For more information, refer to [Ticket Creation](). # Enable Connector Logging This topic provides the steps needed to enable logging on SailPoint using REST APIs. > [!NOTE] > > This topic only applies to VA-based integrations. > [!NOTE] > > The examples provided might not match your configuration. Use the logging levels and logging classes reference at the bottom of the topic to configure your API responses to match your connector. This process is broken up into four steps: 1. Identify the Virtual Appliance (VA) cluster on which you want to enable logging. 2. Get the logging configuration for the existing VA cluster. 3. Update the VA cluster to enable logging levels. 4. Observe logging changes to the logging levels. ### Identify the Virtual Appliance Cluster Select the VA on which you need to enable logging using REST API. If you already know the VA application's `id`, proceed to [Get the Logging Configuration](<#get-the-logging-configuration>). 1. Make the following call to the REST API to return a list of available VA clusters: GET /v3/managed-clusters The REST API returns a response that looks similar to the following: ```json [ { "id": "2c9180866166b5b0016167c32ef31a66", "name": "Development Cluster", "description": "Development Cluster", "clientType": "CCG", "ccgVersion": "373_535_70.2.0", "pinnedConfig": true, "logConfiguration": null }, { "id": "2c9180846a93ce60016ab29f039944de", "name": "Cloud Cluster", "description": "Cloud Cluster", "clientType": "CCG", "ccgVersion": "373_535_70.2.0", "pinnedConfig": true, "logConfiguration": { "clientId": null, "durationMinutes": 60, "expiration": "2020-12-15T19:13:36.079Z", "rootLevel": "DEBUG", "logLevels": { "sailpoint.connector.ADLDAPConnector": "DEBUG" } } } ] ``` > **Note** > > The previous example code shows two VA clusters. One VA cluster has a log configuration and the other does not (refer to the `logConfiguration` value in each returned VA cluster). This is because one of the clusters already has logging enabled. This is just an example configuration, and your environment may not have logging enabled on a cluster. 2. Identify the VA cluster that you want to enable logging on by its name or description and record its `id` attribute. ### Get the Logging Configuration Get your selected VA's cluster logging configuration and identify the values you need to update. 1. Make the following call to the REST API to return the VA cluster's logging configuration. Replace `{id}` with the VA cluster's `id` attribute value recorded earlier. GET /v3/managed-clusters/{id}/log-config - If the VA doesn't have a logging configuration currently set, it returns `204 No Content` as a response. - If the VA has an existing logging configuration, it returns something similar to the following: ```json { "clientId": null, "durationMinutes": 60, "expiration": "2020-12-15T19:13:36.079Z", "rootLevel": "DEBUG", "logLevels": { "sailpoint.connector.ADLDAPConnector": "DEBUG" } } ``` You'll need to configure the following information in the response: - `durationMinutes` is the number of minutes logging should remain enabled. - `rootLevel` is the default level for all logs. For more information, refer to [Logging Levels](<#logging-levels>). - `logLevels` is a map object with logging classes as keys and logging levels as values. - For keys, refer to [Logging Classes](<#logging-classes>) for commonly used logging classes. - For a list of available values, refer to [Logging Levels](<#logging-levels>). ### Update Logging Configuration Update the VA cluster configuration returned by the REST API to update the logging settings as needed. 1. Make the following call to the REST API to update the VA cluster's logging configuration. Replace `{id}` with the VA cluster's `id` attribute value recorded earlier. PUT /v3/managed-clusters/{id}/log-config 2. Submit your configuration changes to the REST API in a JSON body. - If the VA cluster did not already have a logging configuration and you received a `204 No Content` response, you can create a new one. - If the VA returned a configuration, you can edit it to include the changes. The JSON body should be as follows: ```json { "durationMinutes": 60, "rootLevel": "DEBUG", "logLevels": { "sailpoint.connector.ADLDAPConnector": "DEBUG" } } ``` Consider the following as you edit the JSON: - `durationMinutes` is the number of minutes logging should remain enabled. - `rootLevel` is the default level for all logs. For more information, refer to [Logging Levels](<#logging-levels>). - `logLevels` is a map object with logging classes as keys and logging levels as values. - For keys, refer to [Logging Classes](<#logging-classes>) for commonly used logging classes. - For a list of available values, refer to [Logging Levels](<#logging-levels>). If the update was successful, the REST API should return a response similar to the following: ```json { "clientId": null, "durationMinutes": 60, "expiration": "2020-12-15T19:13:36.079Z", "rootLevel": "DEBUG", "logLevels": { "sailpoint.connector.ADLDAPConnector": "DEBUG" } } ``` ### Observe Logging Changes Approximately five minutes after you update the configuration, the VA cluster starts generating log files you can review. You can view the log files in **ccg.log**. ### References The tables in this reference section list information that can be helpful when creating the JSON body you'll use to configure the VA cluster's configuration file. #### Logging Levels | Logging Level | Description | | --- | --- | | ERROR | Designates error events that might still allow the connector to continue. | | WARN | Designates potentially harmful situations. | | INFO | Designates information messages that highlight process at a coarse-grain level. | | DEBUG | Very verbose. Fine grain logging levels used for development and debugging. | | TRACE | Most verbose. Finer grain logging levels than debugging. | #### Logging Classes | Connector | Logging Class | | --- | --- | | Active Directory | sailpoint.connector.ADLDAPConnector sailpoint.connector.LDAPConnector | | AIX | openconnector.connector.unix.AIXConnector openconnector.connector.unix.UnixConnector | | Amazon Web Services | logger.aws.name=openconnector.connector.aws logger.aws.level=trace logger.aws.additivity = false logger.aws.appenderRef.rolling.ref = STDOUT | | Atlassian Suite Cloud | sailpoint.connector.OpenConnectorAdapter openconnector.connector.atlassian.AtlassianConnector | | Atlassian Data Center | sailpoint.connector.OpenConnectorAdapter openconnector.connector.atlassian.AtlassianDataCenterConnector | | Microsoft Entra ID | sailpoint.connector.AzureADConnector | | Box | openconnector.connector.BoxNetConnector sailpoint.connector.OpenConnectorAdapter | | Cerner | openconnector.connector.CernerConnector sailpoint.connector.OpenConnectorAdapter | | Delimited File | logger.DelimitedFileConnector.name = sailpoint.connector.DelimitedFileConnector logger.DelimitedFileConnector.level = debug logger.DelimitedFileConnector.additivity = false logger.DelimitedFileConnector.appenderRef.rolling.ref = STDOUT | | Dropbox | openconnector.connector.DropBoxConnector sailpoint.connector.OpenConnectorAdapter | | Epic | openconnector.connector.EPICConnector sailpoint.connector.OpenConnectorAdapter | | GE Centricity | openconnector.connector.GECentricity sailpoint.connector.OpenConnectorAdapter | | Google Apps / G Suite | openconnector.connector.GoogleAppsDirect sailpoint.connector.OpenConnectorAdapter | | IBM i | openconnector.connector.IBMiConnector | | Lotus Domino | sailpoint.connector.LotusDomino | | JDBC | sailpoint.connector.JDBCConnector | | Sun One LDAP | sailpoint.connector.LDAPConnector | | Linux | openconnector.connector.unix.LinuxConnector sailpoint.connector.OpenConnectorAdapter sailpoint.connector.UnixConnector | | Microsoft Office365 | sailpoint.connector.Office365Connector | | Microsoft SQL Server | sailpoint.connector.mssql.serviceimpl.MSSQLServerConnectorV2 | | Okta | logger.openconnector.name = openconnector.connector.okta.OktaConnector logger.openconnector.level = debug logger.openconnector.additivity = false logger.openconnector.appenderRef.rolling.ref = STDOUT | | Oracle Database | sailpoint.connector.OracleDBConnector sailpoint.connector.JDBCConnector | | Oracle E-Business | sailpoint.connector.OracleEBSConnector sailpoint.connector.JDBCConnector | | Oracle Fusion HCM | openconnector.connector.oraclefusionhcm.OracleFusionHCMConnector sailpoint.connector.OpenConnectorAdapter | | Oracle HCM Cloud | sailpoint.connector.oraclehcmcloud.OracleHCMCloudConnector | | Oracle HRMS | sailpoint.connector.OracleAppsHRMSConnector sailpoint.connector.JDBCConnector | | Oracle Netsuite | openconnector.connector.netsuite.NetsuiteConnector | | PeopleSoft ERP | openconnector.connector.PeopleSoftConnector sailpoint.connector.OpenConnectorAdapter | | PeopleSoft HRMS | sailpoint.connector.PeopleSoftHRMSConnector | | RemedyForce | sailpoint.connector.ForceConnector | | RSA Authentication Manager | openconnector.connector.RSAConnector openconnector.connector.rsa.RSAHTTPClient sailpoint.connector.OpenConnectorAdapter | | Salesforce | sailpoint.connector.ForceConnector | | SAP Concur | openconnector.connector.sapconcur.SAPConcurConnector | | SAP - Direct | sailpoint.connector.SAPConnector sailpoint.connector.SAPInternalConnector | | SAP GRC | logger.SAPGRCConnector.name = sailpoint.connector.sapgrc logger.SAPGRCConnector.level = debug logger.SAPGRCConnector.additivity = false logger.SAPGRCConnector.appenderRef.rolling.ref = STDOUT | | SAP HR/HCM | sailpoint.connector.SAPHRInternalConnector | | SCIM 1.1 | openconnector.connector.SCIMConnector sailpoint.connector.OpenConnectorAdapter | | SCIM 2.0 | openconnector.connector.scim2.SCIM2Connector sailpoint.connector.OpenConnectorAdapter | | ServiceNow | openconnector.connector.servicenow.ServiceNowConnector openconnector.connector.servicenow.ServiceNowRestClient sailpoint.connector.OpenConnectorAdapter | | ServiceNow Service Desk Integration | openconnector.connector.servicedesk.ServiceNowServiceDeskConnector sailpoint.connector.OpenConnectorAdapter | | Siebel | openconnector.connector.SiebelConnector sailpoint.connector.OpenConnectorAdapter | | Snowflake | openconnector.connector.snowflake.SnowflakeConnector sailpoint.connector.OpenConnectorAdapter | | Solaris | openconnector.connector.unix.SolarisConnector openconnector.connector.unix.UnixConnector sailpoint.connector.OpenConnectorAdapter | | SuccessFactors | sailpoint.connector.SuccessFactorsConnector | | Sybase | sailpoint.connector.SybaseDirectConnector sailpoint.connector.JDBCConnector | | Webex | openconnector.connector.Webex sailpoint.connector.OpenConnectorAdapter | | Workday | openconnector.connector.WorkDay sailpoint.connector.OpenConnectorAdapter | | Workday Accounts | openconnector.connector.workdayaccounts openconnector.connector.workdayaccounts.WorkdayAccountsConnector sailpoint.connector.OpenConnectorAdapter | | Web Services | sailpoint.connector.WebServices | | XML | openconnector.connector.XMLConnector sailpoint.connector.OpenConnectorAdapter | | Yammer | openconnector.connector.YammerConnector sailpoint.connector.OpenConnectorAdapter | | Zoom | openconnector.connector.zoom.ZoomConnector sailpoint.connector.OpenConnectorAdapter | # Troubleshooting If you encounter any of the following issues or errors, SailPoint recommends that you follow the guidance provided below to resolve the error before contacting SailPoint Support. For issues or errors that are not addressed in this connector guide, refer to the following resources for troubleshooting information: - [SailPoint Identity Services Documentation]() - [SailPoint Support Knowledge Base]() - [SailPoint Developer Community]() ## Ticket Creation Fails Because the Request Includes Escape Characters (`\\`) Ticket creation fails because the request includes escape characters (`\\`). The system produces the following error message: ```text Ticket creation failed. com.google.gson.stream.MalformedJsonException: Invalid escape sequence at line 3 column 49 path $.body ``` **Resolution**: Edit the **Body** attribute by replacing the existing text with: ```text #foreach($req in $plan.requests) #if($req.operation == 'Create') Create Account on application $req.resource #else For $req.id in application $req.resource #end #if($req.items) $newline #foreach($item in $req.items) #if ($item.name == '*disabled*' && $item.value == 'true') Disable Account. $newline #elseif ($item.name == '*disabled*' && $item.value == 'false') Enable Account. $newline #elseif ($item.name == '*locked*' && $item.value == 'false') Unlock Account. $newline #else $!item.Operation $item.name: $$StringEscapeUtils.escapeJava ($StringEscapeUtils.escapeJava($item.value.toString())) $newline #end #end #else $newline $!req.Operation Account #end $newline #end ``` # Timeout Errors and Settings Timeout errors might occur when SailPoint is waiting for a response from the Virtual Appliance (VA). These errors are applicable to all connectors and tend to occur during the setup of sources or when sources are down. This document is designed to give specific information that can be used to resolve these errors. Each timeout attribute has a default time value that is listed in seconds or minutes. Increasing the time value may resolve the error as it will allow for longer communication time between the two systems, thus avoiding the timeout error. > [!IMPORTANT] > > Add the necessary attributes or values before performing the "replace" operation, as missing attributes will cause the operation to fail. To increase the communication time, increase the value of the appropriate timeout attribute. Then submit the change to the VA using the SailPoint REST API. > [!NOTE] > > For more information on SailPoint's REST APIs, refer to [Best Practices: REST API Authentication]() and [REST API - Update Source (Partial)]() in the SailPoint Developer Community. ### aggregateTimeout **Description:** This parameter is set for the aggregation timeout, measured in seconds. **Resolution:** Increase the `aggregateTimeout` value gradually to optimize aggregation. Start with 180, then increase to 600, 900, and finally 1800. The maximum value is 3600 seconds. For example: If your current time value is 180 seconds, update the `aggregateTimeout` attribute as follows: ```json [ { "op": "replace", "path": "/connectorAttributes/aggregateTimeout", "value": 600 } ] ``` ### healthCheckTimeout **Description:** This parameter is set for the test connection and health check timeout. **Resolution:** The default value is 30 seconds. If the timeout error continues, increase the value in 15 second increments and try again. For example: If your current time value is 30 seconds, update the `healthCheckTimeout` attribute as follows: ```json [ { "op": "replace", "path": "/connectorAttributes/healthCheckTimeout", "value": 45 } ] ``` ### provisioningTimeout **Description:** This parameter is set for provisioning timeout. **Resolution:** Increase the `provisioningTimeout` value gradually to optimize provisioning. Start with 180, then increase to 360, and finally 600. The maximum value is 600 seconds. For example: If your current time value is 180 seconds, update the `provisioningTimeout` attribute as follows: ```json [ { "op": "replace", "path": "/connectorAttributes/provisioningTimeout", "value": 360 } ] ``` ### timeout **Description:** This parameter is set for pass-through authentication timeout. **Resolution:** The default value is 15 seconds. If the timeout error continues, increase this value in 15 second increments and try again. For example: If your current time value is 15 seconds, update the `timeout` attribute as follows: ```json [ { "op": "replace", "path": "/connectorAttributes/timeout", "value": 30 } ] ``` ### apiTimeout **Description:** This parameter is set for API time tracking; customers can check it using an external tool. **Resolution:** The default value is 60 seconds. If the error continues, increase the value by 15 second increments and try again. For example: If your current time value is 60 seconds, update the `apiTimeout` attribute as follows: ```json [ { "op": "replace", "path": "/connectorAttributes/apiTimeout", "value": "75" } ] ``` ### timeoutInSeconds **Description:** This parameter helps prevent the VA from waiting indefinitely for an API response, ensuring efficient handling of API requests. For example: If your current time value is 30 seconds, update the `timeoutInSeconds` attribute as follows: ```json [ { "op": "replace", "path": "/connectorAttributes/timeoutInSeconds", "value": "15" } ] ```