Skip to main content

Upgrading your Salesforce connection to use the External Client App and support BYOC

Step-by-step guide to upgrade your Salesforce connection with Fin to use the External Client App and move from Enhanced Chat to BYOC.

Bring Your Own Channel (BYOC) is a new way for Fin customers to enable Fin Messenger as their live-chat AI Agent. Connecting via BYOC rather than Enhanced Chat brings improvements in the way that the messenger handles certain user behaviours, such as concurrent conversations across multiple tabs, so that you can continue to enjoy Fin's best-in-class service. Migration is simple, making use of test environments before rolling out to production without causing any downtime. Follow the guide below to implement on your workspace.

Use this article to upgrade your existing Fin for Salesforce connection to use the new External Client App (ECA). This guide is for Salesforce admins migrating an existing Fin for Salesforce deployment — you'll need Salesforce admin access and an active Fin for Salesforce subscription. By the end, you'll have installed the required managed packages, connected via the new ECA, configured permissions, and — if you use Fin Messenger — established a live-chat connection between Fin and Salesforce via Bring Your Own Channel (BYOC), Salesforce's standard channel integration framework for connecting third-party messaging providers.

There are 6 steps involved:

  1. Connect to Salesforce via the External Client App

  2. Set up permissions

  3. Switch to using External Client App credentials

  4. Run the Apex migration script

  5. Uninstall the deprecated package and disconnect the Connected App

  6. Update your Fin Messenger deployment [optional]

Note: If you're setting up Fin to handle Salesforce cases only (no messaging), you can skip the Updates to Fin Messenger section below.


Step 1: Connect to Salesforce via the External Client App

Go to Connect in your Fin workspace, then click on the Bring Your Own Channel tab.

This serves as the migration tab for moving to the new External Client App (ECA) — an OAuth 2.0 client credentials-based authentication method that replaces the legacy Connected App (an older OAuth-based integration that required storing user credentials).

You will see your existing connections listed as Not Connected in this tab. The connection status is with respect to the External Client App.

The Bring Your Own Channel tab in the Fin Connect page, showing existing Salesforce connections listed with a status of 'Not Connected' under the External Client App column.

Follow the steps below to install a managed package in Salesforce. The managed package installs the External Client App, plus all the permissions and fields Fin needs to run.

  1. Click the Connect button, on any existing connection you want to connect (test or live), then click Install Package.

  2. Select Install for all users. This means the permission set can be assigned to any user in your Salesforce org if you choose.

  3. Wait for the installation to finish. No errors should be shown.

  4. Once installation is complete, return to the Connect page and click the Connect to Salesforce button in Step 2, then allow the connection to establish.

The Install Package dialog in Fin with 'Install for all users' selected, and the 'Connect to Salesforce' button visible in Step 2 of the connection setup.


Step 2: Set up permissions

Go to Connect > Bring Your Own Channel (Tab) > Assign permissions in Salesforce from your Fin workspace and follow the steps there to create a new permission set and assign all the permissions Fin needs to run.

Create a new permission set

  1. In Salesforce, create a new permission set. The label and API name can be anything — this permission set will only be assigned to the integration user.

  2. When selecting a license, make sure to choose one that includes the Set Audit Fields upon Record Creation permission, for example, the Salesforce license. Some licenses don't include this permission.

  3. Save the new permission set.

The Salesforce New Permission Set screen, showing the License dropdown set to 'Salesforce' — the license type that includes the required 'Set Audit Fields upon Record Creation' permission.

Note: Not all Salesforce license types include the Set Audit Fields upon Record Creation permission. If this option isn't available for a license you're considering, select a different license type (such as the standard Salesforce license) that does include it.

Assign permission sets to the integration user

Both the existing Fin for Salesforce permissions permission set and the newly created permission set must be assigned to the integration user.

  1. In Salesforce, navigate to the integration user's profile.

  2. Go to Permission Set Assignments and click Edit Assignments.

  3. Add both the Fin for Salesforce permissions permission set and the newly created permission set to the Enabled Permission Sets column, then click Save.

The Salesforce Permission Set Assignments screen for the integration user, showing both 'Fin for Salesforce permissions' and the newly created permission set moved into the Enabled Permission Sets column.


Step 3: Switch to using External Client App credentials

You can switch to using the External Client App credentials for a Salesforce connection by toggling the Use External Client App credentials when managing a connection under Connect > Bring Your Own Channel (Tab).

Once switched on, Fin uses the External Client App credentials for all its requests to Salesforce, including:

  • Queries to get the status of the connection.

  • Creating a Salesforce case via the workflow step.

  • Creating a Salesforce case on Fin resolution or user inactivity.

  • Responding to case created via the Salesforce cases channel

  • Importing Knowledge articles

  • Importing historical Salesforce cases

The Fin Connect page showing the 'Use External Client App credentials' toggle in the enabled position for a Salesforce connection, with a confirmation banner indicating the switch was successful.

Once switched on, you can switch it back off if you believe something is amiss. This lets you test in each environment — sandbox, UAT (user acceptance testing), and production — and gain confidence with the new ECA credentials, without disrupting the legacy Connected App credentials.

Once all connections have Use External Client App credentials switched on, the migration is complete. The connection status for each entry updates to Connected in the Bring Your Own Channel tab. Follow the steps below to migrate your data and clean up the deprecated package once you're satisfied that all systems are working as intended.


Step 4: Run the Apex migration script

When you install the Fin for Salesforce base managed package, it installs new Fin Case fields that are namespaced with finai. Namespacing means each field name is prefixed with finai__ (for example, finai__FinConversationId__c) to prevent naming conflicts with other packages or custom fields in your org.

As part of the migration, use the Apex migration script to move your existing case data from the older unnamespaced fields to the new namespaced fields. The Fin for Salesforce package includes a pre-built Apex class called FinCaseFieldMigrator.cls that handles the migration logic.

Apex inside a managed package resolves unqualified custom field names against its own namespace. A query for FinConversationId__c executed inside the finai package returns finai__FinConversationId__c instead, so packaged code cannot read the legacy fields at all, and naming both in one query fails outright with a duplicate field selected error. The migration fetch must therefore be executed from outside the package — that is why the class below must be created manually in your org. The class itself holds no migration logic; it calls the migration class installed by the managed package and runs it in batches of 200 records at a time.

public without sharing class FinCaseFieldMigration implements Database.Batchable<SObject>, Database.Stateful {

private final finai.FinCaseFieldMigrator migrator;

public FinCaseFieldMigration() {
this.migrator = new finai.FinCaseFieldMigrator();
}

public static Id run() {
return run(200);
}

public static Id run(Integer scopeSize) {
if (scopeSize == null || scopeSize < 1 || scopeSize > 2000) {
throw new IllegalArgumentException('scopeSize must be between 1 and 2000, got: ' + scopeSize);
}
return Database.executeBatch(new FinCaseFieldMigration(), scopeSize);
}

public Database.QueryLocator start(Database.BatchableContext bc) {
return Database.getQueryLocator(migrator.queryString());
}

public void execute(Database.BatchableContext bc, List<SObject> scope) {
migrator.migrate(scope);
}

public void finish(Database.BatchableContext bc) {
migrator.report(bc.getJobId());
}
}

Setup the FinCaseFieldMigration Apex class

  1. Go to Salesforce setup > Apex Classes.

  2. Click on New, Paste in the class declared above.

  3. Click Save. The class appears in your Apex Classes list as FinCaseFieldMigration. If any errors are shown, check that the class was pasted in full and that your org has Apex enabled.

Run the FinCaseFieldMigration Apex class

  1. Go to Salesforce setup > Developer Console

  2. Click on Debug > Open Execute Anonymous Window

  3. Paste in the code below

    Id jobId = FinCaseFieldMigration.run();
    System.debug('Fin Case field migration job: ' + jobId);
  4. Click Execute

  5. Once complete the Salesforce User that triggered the job via the Developer console should receive an email titled Fin for Salesforce — Case field migration finished and it should have details around the number of Salesforce cases affected from the migration.


Step 5: Uninstall the deprecated package and disconnect the Connected App

Once the new managed package is installed, all connections are switched to the ECA credentials, and the Fin Case field data has been migrated to the new namespaced fields, uninstall the previous unlocked or unmanaged package and revoke the legacy Connected App connection.

Unassign legacy PermissionSet

The legacy PermissionSet (a Salesforce object that grants users access to specific features and fields) must be unassigned before the package can be uninstalled.

  1. Go to Salesforce setup > Installed Packages

  2. Click on the Fin for Salesforce unlocked package

  3. Click on View Components

  4. Click on the Fin_for_Salesforce_permissions PermissionSet, this should take you to the PermissionSet page.

  5. Click on Manage Assignments

  6. Select all assigned Salesforce Users

  7. Click the Remove Assignment button

Uninstall package and save data

  1. Go to Salesforce setup > Installed Packages

  2. Click on Uninstall beside the Fin for Salesforce unlocked package

    The Salesforce Installed Packages page with the Fin for Salesforce unlocked package listed and an 'Uninstall' button visible to its right.
  3. Select Save a copy of this package's data for 48 hours after uninstall this will save all the case field data as a csv with a column for the Salesforce Case ID.

    Important: Salesforce retains the saved data export for 48 hours only after uninstallation. Download the CSV before that window closes. If you've already run the Apex migration script successfully, you won't need to restore from this file — but it's a useful safety net.

  4. Wait to get notified that the package uninstallation has been complete successfully.

  5. Revisit Salesforce setup > Installed Packages, you should see the uninstalled package listed under Uninstalled Packages.

  6. Click Data, this will download all the Case data as a csv stored within a zip file. Store this zip file safely as you could use it to restore data if required. But if you've run the Apex migration script you should be good to go.

    The Salesforce Uninstalled Packages list showing the Fin for Salesforce package with a 'Data' download link, used to download the saved CSV export of case field data within the 48-hour window.

Revoke Connected App connection

  1. Go to Salesforce setup > Connected Apps OAuth Usage

  2. Click on number link listed below the User Count column for the Fin for Salesforce Connected App. It will redirect you to Connected App User's Usage.

    The Salesforce Connected Apps OAuth Usage page showing the Fin for Salesforce Connected App with a numeric user count link in the User Count column, which opens the Connected App User's Usage screen.
  3. Click Revoke next to each user listed. This removes the OAuth access tokens stored as part of the legacy Connected App connection. Once revoked, those users no longer appear in the list.

    The Salesforce Connected App User's Usage screen showing individual user entries with a 'Revoke' action link next to each, used to remove the legacy OAuth access tokens.


Step 6: Update your Fin Messenger deployment

Follow these steps only if you intend on using Fin for Salesforce with Messaging.

This section explains how to connect Fin as a Bring Your Own Channel (BYOC) partner in Salesforce, and how to migrate existing Enhanced Chat handoff workflows to use BYOC instead.

Connect Fin to Bring Your Own Channel

To establish the BYOC connection between Fin and Salesforce, follow Step 1 of the Fin Messenger: Setting up with Salesforce article. That step walks you through creating a Messaging Channel, configuring the Event Relay, and activating the channel in Salesforce.

Once complete, you should have an active Messaging Channel with a running Event Relay — a Salesforce feature that streams real-time platform events, used here to pass messages between Fin and Salesforce — between Fin and Salesforce.

Hand-off to Salesforce agent

The Hand-off to Salesforce agent step in Fin Messenger workflows now supports toggling between BYOC and Enhanced Chat. This lets you control which channel the handoff uses while testing, so you can switch gradually without downtime.

The Fin Messenger workflow editor showing the 'Hand-off to Salesforce agent' step, with a toggle to switch between BYOC and Enhanced Chat handoff modes.

You can create multiple workflows with different audience & environment targeting to control what traffic goes through BYOC
​


Or you could leverage the Branches step in workflows with the Environment variable to direct it to a Hand-off to Salesforce agent step with BYOC turned on vs one with BYOC turned off (i.e Enhanced Chat)
​


FAQs

How long does the migration take?

The technical steps themselves typically take 1–2 hours. However, if you run the full testing cycle — sandbox first, then UAT (user acceptance testing), then production — allow 1–2 business days end to end. The main variable is how many Salesforce environments you validate in before going live.

Is there any downtime?

Downtime is not expected. The Use External Client App credentials toggle can be switched back off at any time if something looks wrong, and both Enhanced Chat and BYOC can run simultaneously during the transition.

Is there any additional Salesforce licences / add ons required?

For BYOC to work you need the Digital Engagement SKU with the Partner Messaging add-on license. One way to check if you have the relevant license in place is,

  1. Go to Salesforce setup > Company Information

  2. Check if you Partner Messaging User listed under Permission Set Licenses and the total licenses available.

Reach out to your Salesforce Account Executive (AE) if you are missing either the license or add-on to get them enabled for your Salesforce Organization.

Is there any risk of overwriting existing Salesforce data?

  • There is a risk around loss of data (specifically the Fin custom Case fields) when uninstalling the previous unlocked/unmanaged package.

  • However, that's mitigated by Running the Apex migration script and/or by downloading the Case data as part of uninstallation.

  • There's no risk associated with overwriting existing salesforce data with this migration specifically.


💡Tip

Need more help? Get support from our Community Forum
Find answers and get help from Intercom Support and Community Experts


Did this answer your question?