Send Simplesat surveys from Salesforce emails, Enhanced Chat, Marketing Cloud and flows, and bring the feedback back into Salesforce: on the case, on the contact, or as a record of its own. Survey code you paste into an email template or a Marketing Cloud email works without connecting Salesforce, and so does the Flow package. Everything on Simplesat's Salesforce page needs the connection.
What the Salesforce integrations do
With the Pro plan or above, you can switch on these integrations:
Integration | Listed under | What it does | Where it shows |
Create contact from Simplesat feedback | Account-wide integrations | Creates a contact for the response's customer, and an account for their company, when Salesforce has none | Salesforce, on contacts and accounts |
Sync contacts | Account-wide integrations | Creates or updates a Simplesat customer for each Salesforce contact, once a day | Simplesat, on Customers |
Sync contacts from report | Account-wide integrations | Creates or updates a Simplesat customer for each row of a Salesforce report, once a day | Simplesat, on Customers |
Sync data to custom feedback object | Survey integrations | Writes each response to a Simplesat Feedback record you set up in Salesforce | Salesforce, on the Simplesat Feedback object |
Create follow-up case after receiving feedback | Survey integrations | Opens a new case from the response | Salesforce, as a new case |
Update contact custom fields | Survey integrations | Writes response details to fields on the customer's contact | Salesforce, on the contact |
Update case custom fields with feedback | Ticket integrations | Writes response details to fields on the case | Salesforce, on the case |
Pull case details from Salesforce and sync to Simplesat | Ticket integrations | Brings the case, its contact, its account and its owner onto the response | Simplesat, on the response |
Display feedback in an internal case comment | Ticket integrations | Adds the response to the case as a private comment | Salesforce, in the case's comments |
Integrations under Ticket integrations run only on surveys connected to Salesforce. A survey is connected when it uses External email embed with Salesforce Cases, Salesforce Chat or Salesforce Classic (Opportunities). It's also connected when it's an Event-based or Web-embed survey with Connected service set to Salesforce. Salesforce Marketing Cloud doesn't connect a survey. These integrations find the case by the response's ticket ID, so that ID has to be a Salesforce case ID.
The survey settings and the Field mapping are covered in Writing feedback back, and mapping the fields.
Before you start
Check these before you connect:
In Simplesat, the Pro plan or above and the Manage integrations permission. Owner and Admin have it by default.
In Salesforce, an org with API access. Enterprise, Performance, Unlimited and Developer Edition include it, and Professional Edition has it only as a paid add-on. Without API access, Salesforce refuses the connection with "The REST API is not enabled for this Organization".
A Salesforce user with the API Enabled user permission to connect as.
The Approve Uninstalled Connected Apps permission for that user, or Use Any API Client if your org has API Access Control on, so they can allow Simplesat's connected app. They don't need it if a Salesforce admin has installed the app in your org.
The integrations act as that user, who needs these Salesforce permissions for each one:
Integration | What the connected Salesforce user needs |
Sync contacts | Read contacts and accounts |
Sync contacts from report | Run the report |
Create contact from Simplesat feedback | Read, create and edit contacts, and read and create accounts |
Sync data to custom feedback object | Read cases, contacts, accounts and users, create and edit Simplesat Feedback records, and edit each mapped field |
Create follow-up case after receiving feedback | Create cases |
Update contact custom fields | Read and edit contacts, and edit each mapped field |
Update case custom fields with feedback | Edit cases and each mapped field |
Pull case details from Salesforce and sync to Simplesat | Read cases, contacts, accounts and users, plus messaging sessions for Enhanced Chat |
Display feedback in an internal case comment | Add comments to cases |
Field-level security applies too. Salesforce refuses an update to a mapped field the user can't edit, and the pull stops on any case whose owner the user can't see. To limit what Simplesat can reach, connect as a user whose access covers only the objects your integrations need. Integration security, permissions and data flow covers what the connected Salesforce user can read and write.
If you'll use Sync data to custom feedback object, create the Simplesat Feedback object and its fields in Salesforce before you switch it on.
Connect Salesforce
On the Integrations page, open Salesforce.
Click Authenticate.
In the Authenticate window, type
truefor a sandbox orfalsefor a production org, then click Authenticate.Salesforce's sign-in page opens and asks for a username and password, even if you're already signed in. Sign in as the user the integrations should act as, and allow access.
You're taken back to the Salesforce page, which shows Authenticated with Salesforce and Revoke access.
Click Activate integration on each integration you want, then set it up in the settings and Field mapping that appear.
Before you rely on an integration, test it with a real case. Testing an integration end to end walks you through it.
Send surveys from Salesforce
You paste a survey's code into Salesforce, and Salesforce sends it. The Flow package is the exception: a flow asks Simplesat to send the email. None of the integrations on the Salesforce page sends surveys. If you're still deciding how to send, Choosing a survey delivery method compares the options.
Salesforce Cases
Use Salesforce Cases for Lightning email templates sent from a case.
In Simplesat:
Create or open the survey and choose External email embed.
Under Choose where to add your survey, choose Salesforce Cases.
On Publish, click Generate embed code.
Choose HTML and click Copy survey.
In Salesforce:
Open the App Launcher, search for Email, and open Email Templates. Click New Email Template.
Enter a name and a subject, and set Related Entity Type to Case.
Switch the body to source code with the source code icon, click where the survey should go, and paste the HTML.
Click Save.
Tip: If Salesforce won't save the template, turn off the Grammarly browser extension, or create the template from an app that isn't a Console app. You can edit it from the Console app afterward.
To send the survey when a case closes, set the template as the Case Close Email Template in Setup → Support Settings. The Send Notification Email to Contact checkbox has to be on the Case Close page layout and checked when the case is closed.
When Salesforce sends the email, it fills in these merge fields in the survey links:
What the link carries | Salesforce merge field |
Ticket ID |
|
Ticket subject |
|
Customer email |
|
Customer ID |
|
Customer first name |
|
Customer last name |
|
Company |
|
Team member ID |
|
Team member email |
|
Team member first name |
|
Team member last name |
|
For how merge fields in survey links work in general, see Placeholders and merge fields.
Salesforce Enhanced Chat
Show the survey in the chat window when a Messaging for In-App and Web conversation ends.
In Simplesat:
Open a survey set to External email embed → Salesforce Cases. On Publish, click Generate embed code, choose Link and click Copy survey.
Delete
{{{Case.Id}}}and everything after it. What's left looks likehttps://api.simplesat.io/api/rating/<survey token>/.
In Salesforce:
In Setup → Trusted URLs, add
https://api.simplesat.ioandhttps://survey.simplesat.io, each with theconnect-src (scripts)andframe-src (iframe content)directives.In Setup → Messaging Components, create a component of type Auto Response. Enter a default message and a name, and click Done.
Click Add Format, add a Web Page, and move it to the top.
Under Constants, create a custom constant named
survey_url, with the shortened link as its value.Under Component Formats → Text, set the formula template to
{!$Constants.Title}{!$Constants.survey_url}{!$Parameters.MessagingSession.SessionKey}.Under Component Formats → Web Page, set Message Configuration to Constant with
$Constants.Title, URL Configuration to Formula with$Constants.survey_url + SessionKey, and Display Configuration to Popup Message.Save the component and activate it.
In Setup → Messaging Settings, open the channel. Under Automated Responses, choose the component at End Conversation.
On the website page with the chat, make the chat window at least 600px tall. For example:
iframe[id^="embeddedMessagingFrame"] { width: 400px !important; height: 600px !important; max-width: none !important; max-height: none !important; bottom: 20px !important; right: 20px !important; }Then add embeddedservice_bootstrap.settings.omitSandbox = true; inside the initEmbeddedMessaging function.
Heads up: Switch on Pull case details from Salesforce and sync to Simplesat before you survey customers in Enhanced Chat. The survey link carries only the messaging session's key, so without the pull, responses have no customer, no team member and no case.
About 4.5 minutes after a response arrives, the pull replaces the session key with the case ID and adds the case's contact and owner to the response. The wait gives the customer time to finish, because swapping the ID mid-survey would split one chat into two responses. Until the pull swaps the ID, a second rating in the session updates the same response. Any rating after that makes a new response. The integrations that write to Salesforce wait five minutes, so they run after the pull and get the case ID.
Salesforce Chat (legacy)
The Salesforce Chat option is for Salesforce's legacy Chat, which Salesforce has retired and replaced with Messaging for In-App and Web. To survey chats now, put the Salesforce Cases link in an Enhanced Chat messaging component.
Salesforce Classic (Opportunities)
Use this option for Classic email templates sent from an opportunity.
In Simplesat, create or open the survey and choose External email embed → Salesforce Classic (Opportunities).
On Publish, click Generate embed code, choose HTML and click Copy survey.
In Salesforce, paste the HTML into a Classic email template you send from an opportunity.
When Salesforce sends the email, the links carry:
What the link carries | Salesforce merge field |
Ticket ID |
|
Ticket subject |
|
Company |
|
Team member ID |
|
Team member email |
|
Team member first name |
|
Team member last name |
|
The code has no customer in it, so responses arrive without one. The ticket ID is the opportunity's ID, so the case integrations find no case and write nothing. Use Let me choose to keep these surveys out of Update case custom fields with feedback.
Salesforce Marketing Cloud
In Simplesat, choose External email embed → Salesforce Marketing Cloud.
On Publish, click Generate embed code and copy the Visual, HTML or Link code.
Paste it into a Marketing Cloud email.
When Marketing Cloud sends the email, it fills in the customer's email, %%emailaddr%%. The team member fields carry the email's reply name and reply address. The link has no ticket ID, so each click on a rating makes a new response. The case integrations don't run on these responses, but the other integrations do.
The Simplesat Flow package
The package, named Simplesat, adds Simplesat actions to Salesforce Flow, so a flow can ask Simplesat to email a survey. It doesn't need the Pro plan.
Install the package from
https://login.salesforce.com/packaging/installPackage.apexp?p0=04tVs000000FtozIACfor a production org, or fromhttps://test.salesforce.com/packaging/installPackage.apexp?p0=04tVs000000FtozIACfor a sandbox.In Simplesat, create an API key under Admin → API keys. If you limit the key to chosen scopes, give it
responses:write.In Salesforce Setup, search for Custom Settings. Click Manage next to Simplesat Settings, then New. Paste the key into API Key and click Save.
Assign the Simplesat Integration User permission set to users, and Simplesat Integration Admin to admins. The admin set also lets them manage the API key.
In Simplesat, create the survey with Direct email delivery → Event-based, and copy its Endpoint.
In Salesforce, open or create a record-triggered flow and turn on its asynchronous path. Add an element there, search for Simplesat, and choose the Simplesat Send Survey Email action.
Map the action's values in the right sidebar, then debug the asynchronous path to test it.
If you haven't made an API key or an Event-based survey before, Direct email surveys covers both.
The Send Survey Email action requires:
Survey Token or URL: an Event-based survey's Endpoint or token. Other survey types don't work here.
Customer Email
It returns:
detail: "Survey is scheduled to be sent", or an explanation that Suppression stopped the email from being senterrorMessage: returned when the request fails
For the case integrations to run on these responses, set Connected service to Salesforce on the survey's Delivery subtab, and pass the case's ID in Ticket ID.
When a flow runs for many records at once, such as cases closed together from a list view, each action handles only the first record. The rest get no survey.
Simplesat applies the survey's Delay and Suppression, and each email shows on its Email activity. If an email doesn't arrive, When a survey does not send lists what to check.
Exclusions and one survey per case
To leave cases out, add conditions where Salesforce sends the survey, such as in the flow that sends the email. With an email template, a chat or Marketing Cloud, Salesforce decides who gets the survey and when.
Simplesat keeps one response per case for each survey, so a second rating with the same case ID updates the first one.
Heads up: Update case custom fields with feedback updates the case. If the record-triggered flow that sends your survey runs Every time a record is updated and meets the condition requirements, that update triggers it again and the survey goes out again. Set the flow to Only when a record is updated to meet the condition requirements.
The Flow package doesn't check whether a case was already surveyed, so the survey's Suppression, set in days per customer, is what holds back repeat emails.
Feedback in Salesforce
These integrations save feedback on the case, on the contact, or as Simplesat Feedback records.
If a field you want is missing from the Field mapping, either it doesn't exist in Salesforce yet or field-level security hides it from the connected Salesforce user. The mapping reads your fields each time the page loads, so create the field or give that user access to it, then reload the page.
Sync data to custom feedback object
Get one Salesforce record per response, kept up to date as the response changes. The records belong to a Simplesat Feedback object, and each record is matched to its response by Response ID.
Give the object the label Simplesat Feedback and the object name Simplesat_Feedback, then add these fields. Salesforce adds __c to every name, so the object becomes Simplesat_Feedback__c and Response_ID becomes Response_ID__c.
Field label | Field name | Data type | What the integration writes |
Simplesat Feedback |
| Text (255) |
|
Response ID |
| Number, marked External ID | The response's ID |
Feedback ID |
| Number | The response's ID |
Survey ID |
| Number | |
Survey Name |
| Text (255) | |
Answer Choice |
| Number | The metric rating |
Answer Choice Label |
| Text (255) | |
Answer Sentiment |
| Text (255) | |
CSAT Rating |
| Number | |
NPS Rating |
| Number | |
CES Rating |
| Number | |
Followup Answer |
| Text Area (Long) (1000) | |
Metric |
| Text (255) | |
Question Text |
| Text (255) | The question your metric rating comes from |
Ticket ID |
| Text (255) | |
Ticket Subject |
| Text (255) | |
Team Member ID |
| Text (255) | |
Team Member Name |
| Text (255) | |
Team Member Email |
| Text (255) | |
Team Member Role |
| Text (255) | |
Customer ID |
| Text (255) | |
Customer Name |
| Text (255) | |
Customer Email |
| Text (255) | |
Customer Company |
| Text (255) | |
Case |
| Lookup Relationship to Case | The response's ticket ID |
Contact |
| Lookup Relationship to Contact | The customer's ID |
Case Owner |
| Lookup Relationship to User | The case's owner, read from the case |
There's no field for 5-star ratings. If your object and fields carry a namespace prefix, enter it in the namespace row of the Field mapping. It's added to the object and to every field except Name.
Every field goes to Salesforce in a single request, so one refused field fails the whole record. Salesforce refuses a field that doesn't exist, a field the connected Salesforce user can't edit, or a lookup that points at the wrong kind of record. Here's what each lookup needs:
Case: a Salesforce case ID as the ticket ID. Responses from Zendesk, Marketing Cloud and Salesforce Classic (Opportunities) surveys have a different ID, or none. A web-embed response has a case ID only when its embed code passes one.
Contact: a Salesforce contact ID as the customer's ID. You get one from Sync contacts, from Pull case details from Salesforce and sync to Simplesat, or from
{{{Recipient.Id}}}on an email to a contact.Case Owner: a user. If a queue owns the case, the record fails.
The integration runs on responses from every survey unless you narrow it. To narrow it, choose Let me choose under When should this integration run? and switch on only the surveys you send from Salesforce cases. One Field mapping covers every survey the integration runs for. If you keep other surveys in, set the Case, Contact and Case Owner rows to Ignore, or make those fields text fields in Salesforce.
Update case custom fields with feedback
Put feedback straight onto the case, in the case fields you choose. The Field mapping lists your case fields, including Description. It starts with nothing mapped, so nothing is written until you map a field.
Heads up: Each update can give the case a new owner. The integration doesn't tell Salesforce to skip assignment rules, so your active case assignment rules run on every update, even on closed cases. That can move a case to your default case owner.
Update contact custom fields
Keep feedback on the customer's Salesforce contact, in the contact fields you map. The integration finds the contact by the response's customer email, so a response without one gets nothing written. The Field mapping lists your contact fields and starts with nothing mapped.
Display feedback in an internal case comment
Agents see the feedback inside the case, as a comment that isn't published to the customer.
The plain-text comment starts with the customer, the sentiment and the survey. Each question and follow-up question follows on its own # <question> line with its answer, and CSAT, NPS and CES ratings get an emoji in front.
Every run adds a new comment. A changed rating, or a comment added after the rating, adds another one.
Create contact from Simplesat feedback
When someone who isn't in Salesforce yet answers a survey, this integration creates a contact for them and an account for their company. Responses without a customer email are skipped. For the rest, the integration looks for a Salesforce contact with the same email:
If the contact has an account, nothing changes.
If the contact has no account, it links the account whose name exactly matches the response's company. If there's no such account and the company isn't empty, it creates one.
If there's no contact but there's an account with the company's name, it creates the contact on that account.
If there's neither, it creates both, or only the contact when the response has no company.
The customer's name is split at the first space into a first and last name, and a one-word name becomes the last name. With no name at all, the last name is LNU, because Salesforce requires one.
Reports in Salesforce
Your Salesforce reports can use Simplesat Feedback records and the case and contact fields the integrations write. The Simplesat Feedback object has no lookup of its own to the account, so to report by account, go through the Case lookup.
Case, contact and owner details in Simplesat
Each response starts with the case, customer and team member details its survey link carried. Pull case details from Salesforce and sync to Simplesat then replaces them with what's on the case. For how Simplesat ties a response to a customer, a ticket and a team member, see Attribution: linking feedback to tickets, customers and agents.
Pull case details from Salesforce and sync to Simplesat
When the ticket ID is a Salesforce record ID, the pull reads the case by that ID right away. When it's an Enhanced Chat messaging session key, the pull first finds the session's case.
It writes to the response:
Customer: the case's contact, with name, email and contact ID
Company: the case's account name
Team member: the case's owner, with name, email and user ID, in the role Owner when the response carried the case ID
Ticket: the case's subject, priority and type, and the owner's ID
If the case's contact has no email address, the response gets no customer. If the ticket ID is another Salesforce record's ID, such as an opportunity's, the pull brings in nothing. If the connected Salesforce user can't read the case or see its owner, the run stops and the response keeps what the link brought.
To open the case from a response, go to the survey's Configure page, under Open tickets directly in your helpdesk. Set the Ticket URL to your case address with {{ ticket_id }} in place of the case ID. For Lightning, that's https://<your domain>.lightning.force.com/lightning/r/Case/{{ ticket_id }}/view.
Sync contacts
Your Salesforce contacts become Simplesat customers, updated once a day at the time of day you switched the sync on. The first run brings in every contact. After that, each run brings in the contacts changed in the previous 24 hours.
Each customer gets the contact's name and email, the contact ID as the customer ID, and the account name as the company. Titles, tags and other contact fields don't come across, and the sync writes nothing to Salesforce.
To bring every contact in again, click Reset integration, then Activate integration.
Warning: Reset integration returns the integration to its default settings. It deletes its Field mapping and any changes our team made to it for your workspace. Don't use it to reconnect Salesforce.
For what all contact syncs have in common, see Contact sync from a connected tool.
Sync contacts from report
Use a Salesforce report to decide which contacts come into Simplesat. Once a day, the integration reads the report and creates or updates a customer for each row. To pick the report, enter its ID in the integration's Field mapping and click Save.
The report needs columns for the contact's ID, first name, last name and email, the account name, and the contact's last modified date. Rows without an email are skipped.
After the first run, each run brings in the rows changed since the last successful run. Salesforce returns only a report's first 2,000 rows, newest change first, so each run sees the 2,000 most recently changed contacts.
Follow-up cases in Salesforce
Open a Salesforce case from feedback so someone follows up. Create follow-up case after receiving feedback opens a case when a response arrives, and another one whenever the response changes. A later answer, an edited rating or a re-run each opens a new case.
The case's subject is New <sentiment> feedback from <customer name> on <survey name>, and its status is New. The description includes every answer, in the same format as the internal case comment. It starts with <customer name or email> left <sentiment> feedback for survey <survey name>, or with "Someone left" when the response has no customer name or email.
By default, the case has no contact, account, parent case, owner, priority or origin. Set the subject, status, description, account, contact and priority in the Field mapping. Your case assignment rules apply to the new case.
The integration opens a case for every survey and every rating, positive ones included. To narrow it, use Let me choose, where you can switch off positive ratings.
Creating a follow-up ticket from feedback covers follow-ups for every tool.
Change the Salesforce user or move Salesforce
Change the connected Salesforce user
Before you click Revoke access, check that the new user can allow Simplesat's connected app. They need Approve Uninstalled Connected Apps, or Use Any API Client if the org has API Access Control on, unless a Salesforce admin has installed the app in the org.
To connect a different Salesforce user or org:
Click Revoke access.
Click Authenticate, type
truefor a sandbox orfalsefor a production org, and sign in as the new user.Click Activate integration on each integration you use.
Revoke access stops every Salesforce integration, including Sync contacts and Sync contacts from report. Their settings and Field mapping are kept. They stay off until you activate them, and responses that arrive in the meantime aren't sent to an integration when you switch it back on.
From then on, the new user's permissions decide what the integrations can read and write. Survey code in your email templates and messaging component keeps working, so there's nothing to paste again. The Flow package keeps working too, because it uses a Simplesat API key.
Move from a Salesforce sandbox to production
The Salesforce page connects one Salesforce org at a time. To move to production, you reconnect and rebuild your setup:
Write down which integrations are on and how each one is set.
Click Revoke access, then Authenticate, type
falseand sign in to the production org.In production, create the Simplesat Feedback object and its fields with the same names. Add any case and contact fields your mappings use.
While each integration is still off, open it and pick again any Field mapping value you chose from the sandbox, such as one picked with Lookup. Lookup works only while the integration is off. Click Save.
On each integration, click Deactivate integration, then Activate integration. Saving marks a stopped integration Active, but it sends nothing until you do this.
Rebuild your email templates, messaging component and flows in production. Install the Flow package there from the production link, and enter the API key in its Simplesat Settings.
Salesforce IDs are different in each org. Existing responses, customers and Simplesat Feedback records keep the sandbox's case, contact and user IDs, and those don't match anything in production.
Troubleshooting
My response didn't create a record in the Simplesat Feedback object
Check these:
The object exists with the expected field names, and Response ID (
Response_ID__c) is marked External ID.Every mapped field exists, and the connected Salesforce user can edit it. One refused field fails the whole record.
Each lookup gets the right kind of ID. Case needs a case ID as the ticket ID. Responses from Zendesk, Marketing Cloud and Salesforce Classic (Opportunities) surveys don't have one, and web-embed responses have one only when the embed code passes it. Contact needs a Salesforce contact ID as the customer's ID. Case Owner fails when a queue owns the case. Limit the integration to your Salesforce case surveys with Let me choose, or set those rows to Ignore.
Five minutes have passed since the response arrived.
The connection hasn't expired. It can stop working while the page still reads Authenticated with Salesforce.
Salesforce's refusals don't show as errors in Simplesat. Send us the response's link and support can read the integration's runs from the last 30 days.
My feedback isn't showing on the Salesforce case
Check these:
Update case custom fields with feedback has fields mapped. It starts with nothing mapped and writes only the fields you map.
The survey is connected to Salesforce, and the response's ticket ID is a case ID. Salesforce Classic (Opportunities) surveys carry an opportunity ID. Enhanced Chat responses get a case ID only from Pull case details from Salesforce and sync to Simplesat.
Five minutes have passed since the response arrived.
The connected Salesforce user can edit every mapped field.
You activated each integration again after you last clicked Revoke access and Authenticate.
The connection hasn't expired. It can stop working while the page still reads Authenticated with Salesforce.
Salesforce's refusals don't show as errors in Simplesat. Send us the response's link and support can read the log.
My cases are reassigned when feedback is written to them
Update case custom fields with feedback doesn't tell Salesforce to skip assignment rules, so your active case assignment rules run every time it updates a case. Closed cases can move to whichever owner the rules pick, such as your default case owner. Cases that Create follow-up case after receiving feedback opens go through assignment rules too.
My Salesforce responses show as anonymous
The customer comes from the survey link, or from Pull case details from Salesforce and sync to Simplesat. Check whether one of these applies:
The survey uses Salesforce Classic (Opportunities) code, which carries no customer.
The response came from Enhanced Chat. Its link carries no customer, so only the pull can bring one in.
The case's contact has no email address.
The code came from Generic Embed, which has no Salesforce merge fields.
The connection expired, so the pull failed. Reconnect, and support can rerun the failed responses from the last 30 days.
Attribution: linking feedback to tickets, customers and agents explains how anonymous responses are handled.
My Marketing Cloud responses come back as anonymous
Use the code from the Salesforce Marketing Cloud option. Its link carries %%emailaddr%%, which Marketing Cloud fills in when it sends. Code from other options uses merge fields that Marketing Cloud doesn't fill in, such as {{{Recipient.Email}}}.
The team member on my responses is whoever sent the email
With Salesforce Cases code, the team member is the user who sends the email, taken from {{{Sender.Email}}} and the sender's name. So if an email goes out from a shared address, that address becomes the team member. Switch on Pull case details from Salesforce and sync to Simplesat to replace it with the case's owner. Attribution: linking feedback to tickets, customers and agents covers changing the team member on a response.
My survey link says "There's no rating to provide at this URL"
The case ID in the link wasn't filled in. Salesforce fills {{{Case.Id}}} only when the email is sent from a case, so set the template's Related Entity Type to Case and send it from the case. An editor that changes the braces, for example into %7D, also stops Salesforce from filling it in. Paste the HTML in source code view.
I get "400: Bad Request undefined" when I connect Salesforce
Salesforce refused the connection, so the page stays unconnected. Check that:
The org has API access. Professional Edition has it only as a paid add-on. Without API access, Salesforce's message is "The REST API is not enabled for this Organization".
The user you signed in as has the API Enabled permission.
I get "We can't authorize you because of an OAuth error" when I connect Salesforce
The full message is "We can't authorize you because of an OAuth error. For more information, contact your Salesforce administrator." with OAUTH_APPROVAL_ERROR_GENERIC. You see it when the user you signed in as can't allow Simplesat's connected app. Since September 2025, Salesforce blocks most users from allowing a connected app that isn't installed in the org.
Have a Salesforce admin give that user the Approve Uninstalled Connected Apps permission, or Use Any API Client if your org has API Access Control on. The admin can instead install Simplesat's connected app in your org. Then click Authenticate again.
I get "Please authenticate connector(s) before starting the Cycle" when I activate an integration
The full message is "400: Bad Request - Please authenticate connector(s) before starting the Cycle". It appears when you click Activate integration even though the page reads Authenticated with Salesforce. Authenticating again won't clear it, because we have to fix it on our side. Contact us with the integration's name.
My Salesforce integrations stopped working, but the page still says Authenticated with Salesforce
Simplesat doesn't check the connection after you connect, so the page can keep reading Authenticated with Salesforce after the connection has stopped working. The connection stops when no Salesforce integration makes a call for 30 days. It also stops if the connected Salesforce user is deactivated or its access is revoked in Salesforce.
Deactivate integration and Activate integration won't fix it. Click Revoke access, then Authenticate, then Activate integration on each integration. Support can rerun responses that failed in the meantime, from the last 30 days.
Integration error messages and what they mean covers the messages the page does show.
Records keep reaching the Simplesat Feedback object after I switched the integration off
Only Deactivate integration on the Salesforce page, or Revoke access, switches an integration off. For some workspaces, our team built a modified version of a Salesforce integration. If records still arrive, send us one of them and the workspace it came from.
Some of my Salesforce contacts didn't come in as customers
Sync contacts skips contacts without an email address, and doesn't read leads or users. After its first run, it brings in only contacts changed in the previous 24 hours. If a run failed, for example while the connection was expired, a contact changed that day comes in only when it changes again. Reset integration and then Activate integration start a new first run that brings in everyone. Resetting also deletes the integration's Field mapping and returns it to its default settings.
Sync contacts from report sees only the report's 2,000 most recently changed rows, and skips rows without an email.
FAQ
Do I need the Pro plan to use Salesforce with Simplesat?
For the integrations on the Salesforce page, yes. Below Pro, Authenticate can't be clicked. Survey code pasted into a Salesforce email template or a Marketing Cloud email works without connecting Salesforce, and so does the Flow package. Enhanced Chat surveys need Pull case details from Salesforce and sync to Simplesat for their case, customer and agent, so they need the connection and Pro.
Which Salesforce option do I choose when I publish a survey?
Under External email embed, Choose where to add your survey offers Salesforce Cases, Salesforce Chat, Salesforce Classic (Opportunities) and Salesforce Marketing Cloud. For a Lightning email template, choose Salesforce Cases.
You send the survey from | Choose |
A Lightning email template sent from a case | Salesforce Cases |
The end of an Enhanced Chat conversation | Salesforce Cases |
A Classic email template sent from an opportunity | Salesforce Classic (Opportunities) |
A Marketing Cloud email | Salesforce Marketing Cloud |
Legacy Chat, which Salesforce retired | Salesforce Chat |
A flow, with the Flow package | Direct email delivery → Event-based |
Code from Generic Embed has no Salesforce merge fields, and its responses don't reach the case integrations.
How often do the Salesforce integrations run?
Sync data to custom feedback object, Update case custom fields with feedback, Update contact custom fields, Display feedback in an internal case comment and Create follow-up case after receiving feedback run five minutes after a response arrives, and again each time it changes.
Create contact from Simplesat feedback and Pull case details from Salesforce and sync to Simplesat run as soon as a response arrives or changes. For an Enhanced Chat response, the pull waits about 4.5 minutes.
Sync contacts and Sync contacts from report run once a day, at the time of day you switched them on.
Most runs finish within a minute of starting.
Can you re-run the integration to push existing responses into Salesforce?
Switching an integration on, or saving a Field mapping change, applies to responses that arrive from then on, so it doesn't send the ones you already have. If a run failed, for example because of a mapping or a permission, support can rerun it once you've fixed the cause, as long as the run is from the last 30 days. Send us the responses' links. A rerun of Display feedback in an internal case comment adds another comment, and a rerun of Create follow-up case after receiving feedback opens another case.
Can I see an error log for the Salesforce integrations?
Not in Simplesat. Support can read each integration's runs from the last 30 days, so send us the response's link. Integration error messages and what they mean covers the messages Simplesat does show.
Which fields does the Simplesat Feedback object need?
It needs Response ID (Response_ID__c), marked External ID, because the integration finds each record by it. Every other field the Field mapping sends has to exist in Simplesat_Feedback__c under its field name, such as Survey_Name__c. Set the row of any field you don't create to Ignore.
Can feedback be linked to a Salesforce contact without a case?
Yes. Sync data to custom feedback object fills its Contact lookup with the customer's ID, which links the record when that ID is a Salesforce contact ID. You get a contact ID from Sync contacts, from Pull case details from Salesforce and sync to Simplesat, or from {{{Recipient.Id}}} on an email to a contact. Without a case, the Case lookup fails the whole record. Set its row to Ignore or make it a text field, keeping in mind that one Field mapping covers every survey the integration runs for. Update contact custom fields also writes to the contact with the customer's email, with or without a case.
Can Simplesat pull a field from the Salesforce account or contact onto the response?
Yes. Send us the name of the field you want from the case, its account or its contact, and we'll add it to Pull case details from Salesforce and sync to Simplesat. By default, the pull brings in:
From the case: its subject, priority and type
From the case's owner: name, email and user ID
From the case's contact: name, email and contact ID
From the account: its name
Can I write the response date to a Salesforce field?
Yes. In the Field mapping of Sync data to custom feedback object, Update case custom fields with feedback or Update contact custom fields, set the field's row to Use data from response and pick Created. That's the date and time the response was created. The field has to exist in Salesforce.
If a customer changes their rating, does Salesforce get the new one?
Yes. Five minutes after the change, the Simplesat Feedback record and your mapped case and contact fields are updated. Pull case details from Salesforce and sync to Simplesat runs again as soon as the rating changes. Display feedback in an internal case comment adds another comment, and Create follow-up case after receiving feedback opens another case.
Can I use the Salesforce case number as the ticket ID?
Not with the case integrations. They find the case by its ID, which is {{{Case.Id}}} in a Lightning template, and a case number isn't a case ID. To open the case from a response, set the survey's Ticket URL, as described above under Pull case details from Salesforce and sync to Simplesat.
Can Simplesat send the survey when a case is closed?
Yes, in any of these ways:
Set an email template that has the Salesforce Cases code as the Case Close Email Template in Support Settings, and check Send Notification Email to Contact when the case closes.
Build a flow that sends that email template when a case closes.
Build a flow that calls the Simplesat Send Survey Email action from the Flow package when a case closes, and Simplesat sends the email.
Can I send a survey when an opportunity closes?
Yes, with a flow that runs when the opportunity closes. The flow can send a Classic email template with the Salesforce Classic (Opportunities) code, or call the Simplesat Send Survey Email action with the customer's email. If you use the template, or pass the opportunity's ID as Ticket ID in the action, the ticket is the opportunity. That means the case integrations don't apply.
Can we survey customers at the end of a Salesforce Enhanced Chat?
Yes. A Salesforce messaging component shows the survey in the chat window when the conversation ends. You need Messaging for In-App and Web and a chat window at least 600px tall. Switch on Pull case details from Salesforce and sync to Simplesat to bring in the case, the customer and the agent.
Can we connect a Salesforce sandbox, or more than one Salesforce org?
Yes to both. You can connect a sandbox or a production org on the Salesforce page, one org at a time. For a second org, such as a sandbox next to production, use a second workspace, or contact us to add a second Salesforce connection to your workspace. Our team sets that connection up and manages it, because it doesn't show on the Salesforce page. To move from a sandbox to production, revoke access, authenticate to production, and rebuild your Salesforce setup there.
Can we connect Salesforce with an integration user or an API-only user?
The integrations act as the Salesforce user who connects, with that user's permissions. That user needs the API Enabled permission and access to the objects each integration reads or writes. Limiting the user to those objects limits what Simplesat can reach.
Authenticate has you sign in on Salesforce's sign-in page, so connect as a user who can sign in there. Salesforce pairs its API-only integration users, who have the Salesforce Integration user license and the Minimum Access – API Only Integrations profile, with a server-to-server sign-in where nobody signs in. This connection doesn't use that sign-in.
Which IP addresses do the Salesforce integrations use?
They use the addresses listed in IP addresses and domains. If your Salesforce org accepts calls only from listed IP addresses, add all of them.
Do we need to install a Simplesat package in Salesforce?
Not for the integrations on the Salesforce page. Authenticate has you sign in to Salesforce and allow Simplesat's connected app. The Flow package is only for flows.
Since September 2025, Salesforce blocks most users from allowing a connected app that isn't installed in the org. The user who connects can still allow Simplesat's with the Approve Uninstalled Connected Apps permission, or Use Any API Client if your org has API Access Control on. Without either, a Salesforce admin has to give them one, or install Simplesat's connected app in your org first. Admins install connected apps from Setup → Connected Apps OAuth Usage, which lists the connected apps in use in your org.