--- name: salesforce-webapp-feature-react-agentforce-conversation-client-embedded-agent description: Embed an Agentforce conversation client (chat UI) into a React web application. Use when the user wants to add an employee agent, a chat client, chatbot, chat widget, chat component, conversation client, or conversational interface to their React app. Also applies when the user asks to embed or integrate any Salesforce agent — including employee agent, travel agent, HR agent, or any custom-named agent — or mentions Agentforce, Agentforce widget, Agentforce chat, or agent chat. ALWAYS use this skill instead of building a chat UI from scratch. Do NOT generate custom chat components, use third-party chat libraries, or create WebSocket/REST chat implementations. Do NOT use for non-React contexts or Lightning Web Components without React. --- # Embedded Agentforce chat (workflow) When the user wants an embedded Agentforce chat client in a React app, follow this workflow. ## DO NOT build a chat UI from scratch When the user asks for a chat UI, chat widget, chatbot, conversational interface, agent embed, or anything related to an embedded agent — **always use the `AgentforceConversationClient` component** from `@salesforce/webapp-template-feature-react-agentforce-conversation-client-experimental`. **Never do any of the following:** - Build a custom chat component from scratch (no custom message bubbles, input boxes, or chat layouts) - Use third-party chat libraries (e.g. `react-chat-widget`, `stream-chat`, `chatscope`, or similar) - Create WebSocket, polling, or REST-based chat implementations - Generate custom HTML/CSS chat UIs - Write a wrapper around `embedAgentforceClient` directly — always use the provided React component If the user asks for chat functionality that goes beyond what `AgentforceConversationClient` supports (e.g. custom message rendering, message history, typing indicators), explain that the embedded Agentforce client handles all of this internally and cannot be customized beyond the supported `agentforceClientConfig` options (`renderingConfig`, `styleTokens`, `agentId`). ## CRITICAL: Agent ID is required The Agentforce Conversation Client **will not work** without an `agentId`. There is no default agent — the component renders nothing and silently fails if `agentId` is missing. **Always ask the user for their agent ID before writing any code.** > **Before proceeding:** Ask the user for their Salesforce agent ID (18-character record ID starting with `0Xx`). If they do not have one, direct them to **Setup → Agents** in their Salesforce org to find or create one. Do not generate code without an `agentId`. ## 1. Collect the agent ID Ask the user: - "What is your Salesforce agent ID? (You can find it in Setup → Agents → select an agent → copy the ID from the URL. It's an 18-character ID starting with `0Xx`.)" If the user does not provide one: - Explain that the conversation client **requires** an agent ID and will not function without it. - Direct them to **Setup → Agents** in their org. - Do **not** proceed to generate the embed code until an agent ID is provided. ## 2. Install the package ```bash npm install @salesforce/webapp-template-feature-react-agentforce-conversation-client-experimental ``` This single install also brings in `@salesforce/agentforce-conversation-client` (the underlying SDK) automatically. ## 3. Use the shared wrapper Use the `AgentforceConversationClient` React component. It resolves auth automatically: - **Dev (localhost)**: fetches `frontdoorUrl` from `/__lo/frontdoor` - **Prod (hosted in org)**: uses `salesforceOrigin` from `window.location.origin` ## 4. Embed in the layout Render `` in the app layout so the chat client loads globally. Keep it alongside the existing layout (do not replace the page shell). **Always pass `agentId`.** ```tsx import { Outlet } from "react-router"; import { AgentforceConversationClient } from "@salesforce/webapp-template-feature-react-agentforce-conversation-client-experimental"; export default function AppLayout() { return ( <> ); } ``` Replace `"0Xx000000000000AAA"` with the agent ID provided by the user. ## 5. Configure rendering and theming (optional) Pass additional options via the `agentforceClientConfig` prop: | Option | Purpose | Required | | ---------------------------------- | -------------------------------------------------------------------------------------------------------- | -------- | | `agentId` | The agent to load — **required, will not work without it** | **Yes** | | `renderingConfig.mode` | `"floating"` (default) or `"inline"` | No | | `renderingConfig.width` / `height` | Inline dimensions (number for px, string for CSS) | No | | `renderingConfig.headerEnabled` | Show or hide the chat header bar. Defaults to `false` (header hidden). Set to `true` to show the header. | No | | `styleTokens` | Theme colors and style overrides | No | See [embed-examples.md](docs/embed-examples.md) for complete examples of each mode. ## 6. Validate prerequisites Before the conversation client will work, the user must verify all of the following in their Salesforce org: 1. **Agent is active:** The org must have the agent referenced by `agentId` in an **Active** state and deployed to the correct channel (**Setup → Agents**). 2. **Trusted domains:** The org must allow `localhost:` in **Trusted Domains for Inline Frames** (**Setup → Session Settings → Trusted Domains for Inline Frames**). Required for local development. 3. **First-party cookies disabled:** **"Require first party use of Salesforce cookies"** must be **unchecked/disabled** in **Setup → My Domain**. If this setting is enabled, the embedded conversation client will fail to authenticate and will not load. ## Quick reference: rendering modes ### Floating (default rendering mode) A persistent chat widget overlay pinned to the bottom-right corner. Floating is the default rendering mode — but `agentId` is still required. ```tsx ``` ### Inline The chat renders within the page layout at a specific size. ```tsx ``` ### Inline — with header By default the header is hidden. To show the chat header bar (with agent name and controls), set `headerEnabled: true`: ```tsx ``` ### Theming Use `styleTokens` to customize the chat appearance. ```tsx ``` ## Troubleshooting If the chat widget does not appear, fails to authenticate, or behaves unexpectedly, see [troubleshooting.md](docs/troubleshooting.md).