> ## Documentation Index
> Fetch the complete documentation index at: https://docs.salesask.com/llms.txt
> Use this file to discover all available pages before exploring further.

# improveit 360 (i360)

> Connect i360 through Salesforce to link recordings to sales appointments and log calls on them.

i360 runs inside Salesforce, so Sales Ask connects to it through Salesforce. Sales Ask reads your i360 sales appointments, lets reps link recordings to them, and logs a completed Task on the appointment after each call.

## What Sales Ask uses in i360

| Object | How Sales Ask uses it |
| - | - |
| Sales Appointments | Reads each appointment's customer name, address, and date so reps can link recordings to it |
| Tasks | Logs a completed "Sales Ask Recording" Task on the linked appointment |
| Events | Reads the rep's upcoming Events on appointments to send recording reminders |
| Users | Matches reps to active Salesforce Users by email |

## What you need

* **Consumer Key**
* **Consumer Secret**
* **Salesforce Domain**
* Your **i360 version**: Lightning or Classic

> [!NOTE]
>
> These steps require a Salesforce administrator for the org i360 runs in. Have your Salesforce admin complete them.

All of these steps happen in Salesforce **Setup**. To open it, click the gear icon in the top right and select **Setup**, then type the page name in the **Quick Find** box on the left.

Setup has six parts:

1. [Find your i360 API names](#find-your-i360-api-names).
2. [Prepare the appointment object](#prepare-the-appointment-object) so Sales Ask can read its address and log Tasks on it.
3. [Create an integration user](#create-an-integration-user) for Sales Ask to act as.
4. [Create a permission set](#create-a-permission-set) that gives that user access to appointments.
5. [Create an external client app](#create-an-external-client-app) and copy its credentials.
6. [Connect in Sales Ask](#connect-in-sales-ask) and add the appointment object.

## Find your i360 API names

Sales Ask refers to i360 objects and fields by their API names. These are the standard names for each i360 version:

| | i360 Lightning | i360 Classic |
| - | - | - |
| Appointment object | `i360core__Sales_Appointment__c` | `i360__Appointment__c` |
| Customer name | `i360core__Contact_Name__c` | Find under **Fields & Relationships** |
| Appointment date and time | `i360core__Appointment_Date_Time__c` | Find under **Fields & Relationships** |
| Street | `i360core__Street_Address__c` | Find under **Fields & Relationships** |
| City | `i360core__City__c` | Find under **Fields & Relationships** |
| State or province | `i360core__State_Province__c` | Find under **Fields & Relationships** |
| Zip or postal code | `i360core__Zip_Postal_Code__c` | Find under **Fields & Relationships** |

To confirm them in your org:

1. In Setup, go to **Object Manager** and search for **Sales Appointment** (Lightning) or **Appointment** (Classic).
2. Open the object. Its **API Name** is on the **Details** tab.
3. Open **Fields & Relationships**. Each field's API name is in the **Field Name** column.

Use the names from your org wherever they differ from the table.

## Prepare the appointment object

### Add an address field

i360 stores an appointment's address in separate street, city, state, and zip fields. Sales Ask reads the address from one field, so add a formula field that combines them.

1. In **Setup → Object Manager**, open the appointment object and go to **Fields & Relationships → New**.
2. Choose **Formula** and click **Next**.
3. Enter `Sales Ask Address` as the label, which sets the field name to `Sales_Ask_Address__c`. Choose **Text** as the return type and click **Next**.
4. Enter this formula, using your org's field names:

   ```
   i360core__Street_Address__c & ", " & i360core__City__c & ", " & i360core__State_Province__c & " " & i360core__Zip_Postal_Code__c
   ```

   If **State/Province** is a picklist, wrap it in `TEXT()`, as in `TEXT(i360core__State_Province__c)`. Click **Check Syntax**, then **Next**.
5. Click **Next** through field-level security and page layouts, then **Save**. The permission set below gives the integration user access to the field.

### Turn on activities

Sales Ask logs each call as a Task on the appointment, which needs activities turned on for the object.

1. In **Setup → Object Manager**, open the appointment object and click **Edit**.
2. Check that **Allow Activities** is selected, then click **Save**.

## Create an integration user

Sales Ask acts as a single Salesforce user, the app's **Run As** user. Salesforce recommends a dedicated, API-only integration user for this. That user signs in through the API only, and every Task Sales Ask logs shows it as the creator.

1. In Setup, go to **Users → Users** and click **New User**.
2. Enter a name such as `Sales Ask Integration` and an email address your admin team monitors.
3. Set **User License** to **Salesforce Integration** and **Profile** to **Minimum Access - API Only Integrations**, then click **Save**.
4. On the user's page, scroll to **Permission Set License Assignments**, click **Edit Assignments**, check **Salesforce API Integration**, and click **Save**.

Most editions include five Salesforce Integration licenses at no cost. If you have none left, use an existing user that has the permissions in the next section and stays active.

> [!WARNING]
>
> Sales Ask logs calls and pulls appointments as the Run As user, so keep that user active and assigned to the permission set.

## Create a permission set

The Minimum Access profile grants very little, so give the integration user the access Sales Ask needs through a permission set.

1. In Setup, go to **Users → Permission Sets** and click **New**.
2. Enter `Sales Ask Integration` as the label. For **License**, choose **Salesforce API Integration** if you created an integration user, or leave it blank otherwise. Click **Save**.
3. Open **Object Settings**, select the appointment object, and click **Edit**. Check **Read** and **View All**.
4. On the same page, give **Read** access to the customer name, appointment date and time, and **Sales Ask Address** fields. Click **Save**.
5. Open **System Permissions**, click **Edit**, and check **API Enabled** and **Edit Tasks**. If your org's sharing settings make Users private, also check **View All Users**. Click **Save**.
6. Click **Manage Assignments → Add Assignment**, select the integration user, and click **Assign**.

**View All** lets Sales Ask see every rep's appointments. Sales Ask sees Events through the appointment they're related to.

## Create an external client app

Since Spring '26, Salesforce creates new API apps as external client apps. If you already set up a connected app for Sales Ask, it keeps working.

1. In Setup, go to **External Client App Manager** and click **New External Client App**.
2. Enter `Sales Ask` as the name, add a contact email, and set **Distribution State** to **Local**.
3. Under **API (Enable OAuth Settings)**, check **Enable OAuth**.
4. For **Callback URL**, enter `https://app.salesask.com/oauth/callback`. Salesforce requires a callback URL for every app.
5. Under **OAuth Scopes**, add **Manage user data via APIs (api)**.
6. Under **Flow Enablement**, check **Enable Client Credentials Flow**, then click **Create**.
7. Open the app's **Policies** tab and click **Edit**. Under **OAuth Flows and External Client App Enhancements**, check **Enable Client Credentials Flow** and set **Run As** to the integration user. Click **Save**.
8. On the **Settings** tab, open **OAuth Settings** and click **Consumer Key and Secret**. Copy the **Consumer Key** and **Consumer Secret**. Salesforce may ask you to verify your identity first.
9. In Setup, go to **My Domain** and copy the **Current My Domain URL**, for example `mycompany.my.salesforce.com`. Use the full `.my.salesforce.com` address.

> [!NOTE]
>
> A new app can take a few minutes to become active. If Sales Ask can't connect straight away, wait a few minutes and save again.

### Limit who can use the app (optional)

To limit the app to the integration user, on the **Policies** tab click **Edit**, set **Permitted Users** to **Admin approved users are pre-authorized**, and click **OK**. Under **Select Permission Sets**, add **Sales Ask Integration**, then click **Save**. Keep that permission set assigned to the Run As user so Sales Ask stays connected.

## Connect in Sales Ask

1. Go to **Settings → Integrations** and search for **Salesforce**.
2. Paste the Consumer Key, Consumer Secret, and Salesforce Domain, and click **Save**.
3. On the same page, scroll to **Salesforce lookup fields**. Replace the default objects with your appointment object, using these values for i360 Lightning:

   | Setting | Value |
   | - | - |
   | **Object** | `i360core__Sales_Appointment__c` |
   | **Name field** | `i360core__Contact_Name__c` |
   | **Address field** | `Sales_Ask_Address__c` |
   | **Appointment date field** | `i360core__Appointment_Date_Time__c` |

   For i360 Classic, use `i360__Appointment__c` and the field names from your org.
4. Click **Save lookup fields**. Sales Ask checks each object and field against your Salesforce and confirms when they're saved.
5. Choose a [matching method](/integrations/overview#matching-method).

Reps now see appointments changed in the last 30 days when they link a recording, listed as **Job - *customer name***.

## Appointment reminders

Sales Ask sends a rep the "Ready to record?" reminder, and a [missed recording alert](/integrations/overview#missed-recording-alerts) if you turn them on, for appointments that have a Salesforce Event. Each appointment needs an Event that:

* is owned by the rep, using the Salesforce User with the rep's Sales Ask email,
* has **Related To** set to the i360 appointment, and
* starts within the next seven days.

Sales Ask uses the appointment date and address from the appointment record.

## See Sales Ask calls in i360

After a call, Sales Ask adds a completed Task named **Sales Ask Recording** to the linked appointment. It appears in the appointment's **Activity** timeline.

## Security and data access

### How Sales Ask authenticates

* Sales Ask uses the OAuth 2.0 **client credentials flow** through the external client app you create, with the app's Consumer Key and Secret.
* Sales Ask exchanges the Consumer Key and Secret for an access token at `https://<your domain>/services/oauth2/token`, and gets a new token before the current one expires.
* The app's OAuth scope is **Manage user data via APIs (api)**.
* Every request runs as the app's **Run As** user, with the access its permission set grants.
* To revoke access, delete the external client app or deactivate the integration user in Salesforce. To rotate credentials, generate a new Consumer Secret and save it in Sales Ask.

### What Sales Ask writes

| Object | When | Fields written |
| - | - | - |
| Task | After each recorded call | **Subject** (`Sales Ask Recording`), **Comments** (the recording link, process adherence, notes, and action items your Sales Ask settings include), **Status** (`Completed`), **Priority** (`Normal`), **Due Date** (the day the Task is logged), **Related To** (the linked appointment) |

The Task's assigned user is the integration user.

### What Sales Ask reads

| Object | Fields read |
| - | - |
| Appointment object | Name, and the name, address, and appointment date fields you set |
| Events | Related To, Date, Start, Owner |
| Users | Email, Active |

## Troubleshooting

If Sales Ask can't connect, check that:

* **Enable Client Credentials Flow** is checked on the app's **Policies** tab, and **Run As** is set to an active user,
* the domain ends in `.my.salesforce.com`,
* the Consumer Key and Secret were copied in full, with no extra spaces, and
* a few minutes have passed since you created the app.

If Sales Ask rejects the lookup fields when you save, check that:

* the object and field API names match your org, including the `i360core__` or `i360__` prefix, and
* the permission set gives **Read** access to the object and each field.

If calls aren't logged on appointments, check that **Allow Activities** is on for the appointment object and the permission set includes **Edit Tasks**.

If appointments are missing from Sales Ask, check that the appointment changed in the last 30 days and the permission set gives **View All** on the appointment object.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.