QVCCS innovation · How-to guides
Integrating Genesys Cloud CX and Salesforce: a data-action-led design
The customer's story lives in Salesforce: their account, their contacts, their open cases, their preferred language. The conversation lives in Genesys Cloud CX. We built a data-action-led integration that lets the IVR and the agent ask Salesforce the right questions at the right moment, and writes every call back to the record, without moving agents out of the Genesys Cloud workspace.
Did you know Salesforce stores an 11-digit number entered with a leading 1 as a 10-digit number, while the Salesforce data actions integration searches for exactly the number passed in the PHONE_NUMBER input, so Call.Ani must match how Salesforce holds it?
Did you know a data action in an Architect call flow times out after 60 seconds by default, which administrators can set anywhere from 1 to 60 seconds, while data actions run from Scripter or the Public API time out after 20 seconds?
Did you know Salesforce will retire Open CTI on 28 February 2028, and Genesys has announced that the Genesys Cloud for Salesforce Open CTI integration will retire at the same time?
Did you know that moving a Salesforce data actions integration from the deprecated username-password credential type to the OAuth Client Credential Flow type needs no change to the actions' request or response configuration?
01
09:02: a caller the contact centre should already know
Picture a helpdesk line at 09:02 on a Monday. A customer rings about a case they opened last week. Everything about them is in Salesforce: the Contact record with their number, the Account it belongs to, the open Case, the comments added since, and a handful of fields the business added for itself, such as the customer's segment and preferred language. The agents who answer the phone, however, work in the Genesys Cloud CX agent workspace, and the IVR that greets the caller is an Architect flow. Without an integration, the caller repeats who they are, the agent searches by hand, and the first minute of the call is spent finding a record that already exists.
The question our client put to us was precise. How do we make Salesforce information available to callers and agents inside Genesys Cloud, and at the same time shape the Salesforce schema around what the contact centre needs? Our answer was to treat Salesforce as the system of record and Genesys Cloud as the system of engagement, and to join them with data actions: small, contract-defined API calls that Architect flows and agent scripts run at runtime. The IVR asks Salesforce who is calling, the agent sees the answer before they say hello, and the outcome of every call goes back to the record.
02
Designing the Salesforce side first: objects and __c fields
Good integrations start in the data model, not in the flow. Salesforce links its standard objects naturally: an Account has many Contacts, and Contacts and Accounts have Cases. That structure already answers most of the questions an agent asks. What it did not hold was the data the contact centre needed to drive the caller's experience, so in Object Manager we added custom fields to the Contact object under Fields & Relationships: a preferred language, a customer segment, and the flags the IVR reads. Each field was given the narrowest sensible type, a picklist rather than free text wherever the flow will branch on the value.
One naming detail matters to every developer who follows. Salesforce gives custom objects and custom fields an API name ending in a double-underscore suffix, __c, so a field labelled Preferred Language is read and written over the API as Preferred_Language__c. Data action request templates, SOQL queries and response translation maps must all use that API name, never the label. We record each field's label, API name, type and the flow decision that depends on it in the interface contract, so a later rename in Salesforce is caught as a breaking change rather than discovered as a silent lookup failure in production.
Read this diagram as text
Three columns show the Salesforce data model, the Genesys Cloud data actions that read and write it, and the participant data that reaches the agent.
- Left panel, "Salesforce data model: objects and __c fields": an Account has many Contacts.
- The Contact holds Phone, Email and AccountId plus custom fields Preferred_Language__c, Customer_Segment__c and IVR_Flags__c; it links to a Case (Number, Status) and a Call log (Conversation ID). Field names are illustrative, and API names end in __c while labels do not.
- Middle panel, "Genesys Cloud data actions: read, verify, write", lists four actions; the first three exchange data in both directions with Salesforce.
- GetContactByPhoneNumber is a static action with phone_number set to Call.Ani.
- "Get Most Recent Open Case By Contact Id" is a custom action using a SOQL query, and "Verify caller" is a custom action that returns verified true or false.
- "Create call log" is a custom action that writes a new record back to Salesforce only; translation maps shape each response.
- The first three actions feed the right panel, "One conversation: participant data", where Set Participant Data writes illustrative keys SF_ContactId, SF_CaseNumber, Verified "true", Language "en-AU" and IvrExit "Case update", with no PIN and no secrets.
- Participant data flows to the agent script, whose input variables drive the screen pop.
- A banner says Salesforce stays the system of record, and Genesys Cloud asks it the right question at the right moment.
03
Lookup by caller number or account: the data actions
The Salesforce data actions integration in Genesys Cloud provides static actions, generated automatically when the integration is added, and lets you build custom actions of your own. We used both. The first step in the inbound flow is a Call Data Action that runs the static contact search by phone number, fed from Call.Ani. Genesys presents Call.Ani in E.164 format, and the integration searches Salesforce for exactly the number it is given, so we agreed a storage format for phone numbers with the Salesforce administrators before writing a single action. If the number finds no match, or finds more than one, the flow asks the caller for their account number and runs a second, custom lookup by account instead.
The default actions did not return everything the journey needed, so we customised and extended them. Our custom actions query by Contact Id for the most recent open Case, returning its number, subject and status, alongside the custom fields on the Contact. Each custom action has a request template, a translation map that picks values out of the raw Salesforce response with JSONPath, translation map defaults for values that may be missing, and a success template that must conform to the action's success schema. Arrays deserve particular care: we translate a list of records into the discrete values the flow will actually use, because a response that does not match its schema fails the action.
Every action in a flow has success and failure paths, and we design both. A timeout or a Salesforce error never strands a caller; the failure path routes them to an agent with a flag that the lookup did not complete, so the script can say so. Results are written to participant data with Set Participant Data, which persists across transfers between flows and travels with the conversation to the agent. One custom field changes the caller's experience immediately: the flow reads Preferred_Language__c and selects the matching text-to-speech voice, so a caller who prefers Australian English hears an Australian English voice from the first prompt after the lookup.
04
Verifying the caller without ever showing the secret
Identification and verification is where integrations most often leak data they never needed to move. Our rule is simple: the secret is checked, never shown. The caller's account number identifies them; their PIN, or any other knowledge-based answer, is collected in the IVR using Architect's secure flow capabilities, which Genesys provides for processing sensitive PCI and PII data through secure actions and secure variables, each marked with a key icon. The comparison happens on the Salesforce side, through a custom data action that sends the collected value for checking and receives a single result back: verified or not verified.
Only that outcome is written to participant data, as a Verified flag set to true or false, together with the method used. The PIN is never written to participant data, never stored on the call log record, and never passed to the agent script, so it cannot appear in an agent's screen, in interaction details or in an export. The agent sees a clear verified badge and can proceed with confidence; an unverified caller is routed with that status, and the script shows the agent what is still required. Genesys already notes that secured customer data cannot be assigned in a Set Screen Pop action; we go a step further and never move the secret towards the desktop at all.
05
The screen pop: who, what, why, when and where in a second
When a caller chooses to speak to someone, our job as integrator is to give the agent an unfair advantage in the first second of the call. We work to a 5WH checklist: who is calling, what about, why now, when they last contacted us and where in the IVR they left. The Genesys Cloud agent script receives the participant data the flow set through script input variables, so the screen pop is assembled from data that is already on the conversation, with no extra lookup while the call is ringing. The layout itself changes with the payload: a verified caller with a matched record gets a different screen from an unmatched caller or a failed lookup.
The script shows a header that reinforces the nature of the call by its queue; the verified status as a coloured badge; the number dialled and the caller's number; the IVR exit point, which is a strong indicator of intent; the customer segment and other custom fields from the Contact; the most recent open Case with its subject and status; and contact details such as email, useful if the agent needs to move the enquiry to another channel. A single button opens the matched record in Salesforce, in a new tab, for the moments when the agent needs the full history. Outbound calls placed on behalf of a queue get their own script layout, so agents reaching out to customers can open Salesforce at the right record too.
Read this diagram as text
Eight numbered steps trace one call: left to right across the top through the IVR, then down and right to left along the bottom to the agent and back to Salesforce.
- Top lane, "In the IVR · Architect flow: recognise, verify, personalise".
- Step 01, Call arrives: Call.Ani in E.164 format. Step 02, data action, Look up the caller: by phone, else by account number.
- Step 03, secure flow, Verify the caller: only true or false returns, inside a boundary marked "Secret stays here".
- Step 04, Personalise: Preferred_Language__c selects the voice.
- From step 04 the call drops to the bottom lane, "To the agent, and back to Salesforce: context in, outcome out", which runs right to left.
- Step 05, Set Participant Data: verified, ids and IVR exit. Step 06, Transfer to ACD: the queue, with data travelling along.
- Step 07, agent script, Screen pop: shows Verified with a tick but never the PIN. Step 08, data action, Log the call: a record with the conversation ID.
- A banner says failure paths are designed too: no match, a timeout or a failed check routes the caller with a clear status.
06
Writing every interaction back to Salesforce
An integration that only reads makes Salesforce a little less true after every call. So we close the loop. A custom data action creates a call log record against the Contact each time the customer contacts the centre, carrying the Genesys Cloud conversation ID and a link back to the interaction, plus the __c fields the business reports on. Salesforce users can see from the record that the customer called, when, and where to find the conversation, without leaving Salesforce. The same values stay on the conversation as participant data, so they are also available downstream in Genesys, for example to quality management.
The write-back pattern also powers self-service. A verified caller can add a comment to their open Case, or open a new one, without waiting for an agent. In our build, a voice bot flow captures a free-form subject and a description in the caller's own words; a custom data action creates the Case in Salesforce; the lookup is refreshed so the new Case is now the latest one on the account; and the caller is routed to a helpdesk team member who sees that Case in the screen pop. A caller who chooses to speak to someone arrives with the paperwork already done.
Credentials deserve the same discipline as data. Salesforce is retiring the OAuth username-password flow, and Genesys Cloud is deprecating the matching credential type for Salesforce data actions, in favour of a Salesforce (OAuth Client Credential Flow) type that uses a Connected App's client ID and secret and the organisation's My Domain URL. Genesys's migration guide recommends validating new credentials on a temporary integration with an imported action before updating the live one, because a credential change takes effect immediately. That is how we migrate our clients' integrations, and every new integration we build starts on client credentials.
07
The native options, side by side, and how to choose
Genesys offers several ways to bring the two platforms together, and the right one depends on where agents should work. CX Cloud from Genesys and Salesforce brings Genesys Cloud voice, digital and CRM data into Salesforce Service Cloud Voice through managed packages: Core Services, Voice, Digital and AI, WEM, External Routing and Outbound Campaign Management. Agents work in the Salesforce console. Screen pop is driven by a GC_SCREEN_POP participant attribute that an Architect flow sets to a Lightning page or record ID, and call attributes can be synchronised to Salesforce VoiceCall records through field mapping. Genesys notes that in CX Cloud, Salesforce Omni-Channel controls the interaction, so scripts that invoke transfers need review.
Genesys Cloud for Salesforce, the managed package that embeds the Genesys Cloud client in Salesforce, is built on Salesforce Open CTI. Genesys deprecated it with effect from 23 March 2026; it is now in maintenance mode, and it will retire with Open CTI on 28 February 2028. Genesys lists two migration paths: CX Cloud, if agents need to work inside Salesforce, or the Genesys Cloud user interface directly. The Salesforce data actions integration sits alongside both and is what our design is built on. It is not a desktop at all, but the API connection that flows and scripts use to read and write Salesforce data, and a data dip of exactly this kind is one of the sources Genesys lists for the GC_SCREEN_POP value.
Our pattern is the natural fit when agents work in the Genesys Cloud workspace and Salesforce is the system of record they consult, rather than the desktop they live in. It has no dependency on Open CTI, so the 2028 retirement does not touch it. It is not either-or: the same data actions, __c fields and participant data design carry straight into a CX Cloud deployment if the organisation later moves agents into the Salesforce console. On every engagement, our Senior Business Consultant captures the journeys and the fields they depend on, the Solution Architect records the choice in a design decision log and the Interface Control Document, Senior Developers build the actions to the Senior Platform Practice Lead's engineering standards with four-eyes review, and our Systems Integration Tester proves the failure paths: no match, two matches, a timeout, an expired credential and a failed verification.
How it compares
Genesys Cloud CX and Salesforce: native options and the QVCCS pattern
Native facts are as documented in the Genesys Cloud Resource Center, checked in October 2026.
| Aspect | Native Genesys Cloud CX options | QVCCS data-action-led integration |
|---|---|---|
| Where agents work | CX Cloud: in the Salesforce console, with Genesys capabilities embedded through managed packages. Genesys Cloud for Salesforce: an embedded client in Salesforce. | In the Genesys Cloud agent workspace, with the matched Salesforce record one click away. |
| Platform basis | CX Cloud brings Genesys Cloud into Salesforce Service Cloud Voice. Genesys Cloud for Salesforce is built on Open CTI. | The Salesforce data actions integration: API calls from Architect flows and scripts. No Open CTI dependency. |
| Caller lookup | Static actions such as GetContactByPhoneNumber, and custom actions, in the Salesforce data actions integration. | Static phone lookup plus custom actions by account number and Contact Id, with translation maps shaped to each flow decision. |
| Screen pop | CX Cloud: GC_SCREEN_POP attribute set in Architect opens a Lightning page or record; the voice call record page by default. | A Genesys Cloud script built from participant data, with a layout that adapts to verification and lookup results, and a button to open the record. |
| Verification | Secure call flows, secure variables and Set Secured Data are available to any design. | Secret collected in a secure flow and checked by a data action; only a Verified flag reaches the agent. |
| Writing back | CX Cloud syncs call attributes to VoiceCall records through field mapping; Genesys Cloud for Salesforce maps interaction attributes to activity fields. | A custom data action creates a call log record with the conversation ID, a link to the interaction and chosen __c fields; self-service can create Cases. |
| Lifecycle | Genesys Cloud for Salesforce is in maintenance mode and retires with Open CTI on 28 February 2028; CX Cloud is the embedded path. | Unaffected by the Open CTI retirement; credentials move to the OAuth Client Credential Flow type. |
The approaches combine: the same data actions and participant data design serve a CX Cloud deployment if agents later move into the Salesforce console.
The takeaways
- Callers are recognised from Call.Ani or their account number before an agent is involved.
- Salesforce custom __c fields drive the IVR in real time, down to the text-to-speech voice.
- Agents see a verified flag and the caller's context in the first second, never a PIN.
- Every call is logged back to the Salesforce record with a link to the conversation.
- No dependency on Open CTI, and a clear path into CX Cloud if agents move to Salesforce.
Designed, built and supported by the same certified team that delivers Genesys Cloud CX solutions for enterprises and integrators.
Sources
- Deprecation: Salesforce open CTI integrationhelp.genesys.cloud
- About Genesys Cloud for Salesforcehelp.genesys.cloud
- About CX Cloud from Genesys and Salesforcehelp.genesys.cloud
- Screen pop in CX Cloud from Genesys and Salesforcehelp.genesys.cloud
- About the Salesforce data actions integrationhelp.genesys.cloud
- Response configuration for data actionshelp.genesys.cloud
- Phone number searches with the data action integrationhelp.genesys.cloud
- How many seconds before a data action times out?help.genesys.cloud
- Salesforce OAuth Client Credentials Flow migration guidehelp.genesys.cloud
- Work with secure call and bot flowshelp.genesys.cloud