---
agentTools:
  projectIndex: https://developers.etrusted.com/llms.txt
---

# Using APIs with Salesforce CMS

# Connect to Salesforce

> **Note:**

* Learn how to connect your Salesforce CRM to *eTrusted*: trigger events to *eTrusted* at your Salesforce touchpoints.
* Call the eTrusted Events API from within Salesforce using Apex code

> **You will need:**

* A Salesforce system in an edition that features the Salesforce Process Builder: Salesforce **Classic** or **Lightning Experience**, as **Essentials**, **Professional**, **Enterprise**, **Performance**, **Unlimited**, or **Developer** edition
* [API credentials](/docs/generating-api-credentials) to connect to the APIs.

Your organisation uses a Salesforce CRM system that you want to connect with your *eTrusted* account?

No problem!\
It is reasonably easy to connect Salesforce and *eTrusted* via Salesforce's Apex programming language and classic REST API calls against the *eTrusted* API.

Follow the steps on this page for a baseline tutorial how to connect the two systems.

## Import

You need two custom objects, an Apex trigger and some Apex code that works with custom objects.

There is a convenient way for creating all of that: Salesforce offers a migration function to partially dump and recreate an environment.

For that purpose we exported the required custom objects, the trigger and the code as a <a href="https://github.com/trustedshops/salesforce-migration-pack/archive/refs/heads/main.zip" download>zip bundle</a> for you to import.

Download and unzip our zip bundle.\
It contains a README, a license note and the actual Salesforce migration bundle (again, a zip file).

Do the following:

1. Log into the [Salesforce workbench](https://workbench.developerforce.com/).
2. From the **migration** tab, select **Deploy**.
3. Select the migration bundle (`unmanagedPackage.zip`).
4. Select "Rollback on Error" and pick "Run Specified Tests" for Test Level.
5. Select `eTrusted_MetaHandler_Test` as test class:

Finish the import.

## Remote Site Settings

Next, add two *eTrusted* URLs to your remote site settings:

1. Search **Setup** for **Remote Site Settings** and click it just below **Security**.
2.
3. Click **New Remote Site**
4. Enter "eTrusted API" as **Remote Site Name** and `https://api.etrusted.com` as **Remote Site URL**.
5. Click **Save & New**.
6. Enter "eTrusted Login" as **Remote Site Name** and `https://login.etrusted.com` as **Remote Site URL**.
7. Click **Save**.

## Credentials

It is handy to store your *eTrusted* credentials in Salesforce so that you can reuse them for your API calls.

It is crucial to protect your credentials - and Salesforce offers a convenient way to do that: [Custom Metadata Types](https://help.salesforce.com/articleView?id=custommetadatatypes_overview.htm).

In the Salesforce web interface, do the following:

1. Search **Setup** for **Custom Metadata Types** and click it just below **Custom Code**.\
   ![](https://files.readme.io/7dd072d-custom_metadata_types_path.png)
2. Again on the **All Custom Metadata Types** page, click **Manage Records** next to your Custom Metadata Type "eTrusted Credential".
3. On the **eTrusted Credentials** page, click **New** just above the list.
4. Fill in the records, using the following information:\
   ![](https://files.readme.io/a5b6e2a-events_credentials.png)\
   where **Client ID** and **Client Secret** are your *eTrusted* credentials.
5. Click **Save & New**.
6. Fill in the records again, using the following information:\
   ![](https://files.readme.io/c940cf6-questionnaire_links_credentials.png)\
   where **Client ID** and **Client Secret** are your *eTrusted* credentials.

See [Define a custom metadata type declaratively](https://help.salesforce.com/articleView?id=custommetadatatypes_ui_create.htm\&type=5) for reference.

## Permissions and Visibilities

Set permissions and visibilities according to your Salesforce profiles and roles.

1. Back in your regular Salesforce web app, search **Setup** for **Tabs**.
2. In **Custom Tabs**, click **New**.
3. Select "eTrusted Callout" as **Object** and a **Tab Style** that you like.
4. Click **Next** two times.\
   Select profile visibilities and **Custom App** settings to your liking.
5. Click **Save**.
6. In **Custom Tabs**, again click **New** and do the same for "eTrusted MetaData".
7. In **Setup**, click the **Object Manager** tab.
8. Scroll down and click "eTrusted Callout".
9. In **Fields & Relationships**, do the following for every record:
   1. Click the record.
   2. On the record page, click **Set Field-Level Security**
   3. Select the **Field-Level Security** profiles that you want.
10. Repeat the last steps for "eTrusted MetaData".
11. In **Setup**, select **Profiles** from the **Users** dropdown menu.
12. Click **Edit** for the profile you want to grant access to the custom objects, e.g. "System Administrator".
13. Scroll down to **Custom Object Permissions**, and find "eTrusted Callouts" and "eTrusted MetaData".
14. Check the **Modify All** box for both.
15. Back in the **Profiles** page, click the profile (instead of **Edit**, this time).
16. Scroll down to **Custom Record Type Settings** and click **Edit** in the "eTrusted Callouts" row.
17. Select both **Available Record Types**.

## eTrusted Callout Record

Create a record for `eTrusted Callout`:

1. Click the **App Launcher**.

   ![](https://files.readme.io/4537f4a-app_launcher.png)
2. Search **eTrusted Callouts** and click it under **All elements**.
3. Click **New** and create a new entry for "eTrusted Callout".
4. Select **Event** as the record type and create the record like this and **Save**.

   ![](https://files.readme.io/8a923e9-event_callout_record.png)
5. For **eTrusted Credential**, set the name from your "Custom Metadata Types" in your eTrusted Credentials under "Manage Records"
6. Do the same for **Questionnaire** as record type like this:

   ![](https://files.readme.io/74f6e97-questionnaire_callout_record.png)

> ```
> _ The event type should be the event type or touchpoint in your \_eTrusted_ configuration, e.g. `checkout`.  
> _ If you send a questionnaire via the Events API, provide the `Questionnaire Locale`.  
> _ If you request a questionnaire link from _eTrusted_, provide the `Questionnaire Template ID`.  
> _ Provide channel data as defined in your \_eTrusted_ configuration, both for channel ID and channel type.
> ```

## Allowed Values for Record Types

Set allowed values for your record types:

1. In **Setup**, click the **Object Manager** tab again.
2. Scroll down and click "eTrusted Callout".
3. In **Record Types**, for each record:
   1. Click the record type.
   2. In **Picklist Available for Editing**, click **Edit** and select all **Available Values** for every picklist.

For example, for the channel record type, set "etrusted" and "user\_defined" as allowed values like this:

![](https://files.readme.io/726add7-record_type_values.png)

## Process Builder

Finally, you need to regulate when your Apex code will be executed.\
For that, we recommend using the Salesforce Process Builder.

In the following steps, you will create a trigger for your Apex code:\
Every time your Salesforce CRM creates a custom object (see above), it will be executed, handle the necessary metadata and call the *eTrusted* Events API.

1. In **Setup**, search **Process Builder** in the `Quick Find` box.
2. Click **New**.
3. For your **Process Name**, type `eTrusted`.
4. For **The process starts when**, select "A record changes".
5. Click **Save**.
6. Configure the start condition like this:\
   ![](https://files.readme.io/ea971eb-start_condition_graph.png)\
   ![](https://files.readme.io/8d846e6-start_condition_settings.png)
7. Configure the criteria like this:\
   ![](https://files.readme.io/73e83ae-criteria_graph.png)\
   ![](https://files.readme.io/efea2f6-criteria_settings.png)
8. Configure the immediate actions like this:\
   ![](https://files.readme.io/23dc005-immediate_actions_graph.png)\
   ![](https://files.readme.io/7ade6c3-immediate_actions_settings.png)
9. Click **Activate** to activate your process.

> ```
> _ Make sure that the transactional reference is unique.  
>   If you want to send several events for the same case, you can do so via time stamp, for example:  
>   `"#" + [Case].CaseNumber + ":" + [Case].Subject + "-" +Text(NOW())`.  
> _ You also need to specify the object ID.  
>   It is the record ID where the event is triggered (in our case, it is the case ID).  
> _ The order of **Keys** and **Values** is irrelevant, however, it is important that "value 1" has indeed the value of "key 1" and so on.  
>   **Key**-**Value** pairs are the actual `metadata` used in \_eTrusted_.  
>   Keys can be picked to your liking.  
> _ If you are requesting a questionnaire link from \_eTrusted_, set the field "Questionnaire Link OutputField" with the API name of the field where you want to save the Questionnaire Link.  
>   The field must be within the same object where the event is triggered (in this case, "case").  
> \* The eTrusted Event Callout must be set.  
>   It is the "eTrusted Callout" ID that we created previously.  
>   It is part of your browser address between `/eTrusted_Callout__c/` und `/view` (18 characters long).
> ```

See Salesforce's [quick guide on creating a new process with the Process Builder](https://help.salesforce.com/s/articleView?id=sf.process_create.htm\&type=5) for reference.