Pular para o conteúdo principal

React

Instale e coloque o widget de suporte do Fluxo para funcionar no React.

Início rápido com o registro do shadcn

bunx --bun shadcn@latest add fluxolat/fluxo/support-react

O registro instala um ponto de partida do <Support /> pronto para React, o FluxoProvider, as dependências necessárias, a importação do CSS do widget e um espaço reservado VITE_FLUXO_API_KEY.

1. Adicione a sua chave de API pública

Crie ou copie uma chave pública segura para o navegador em Configurações → Desenvolvedores. Veja Chaves de API para os domínios permitidos e o comportamento das chaves de teste e de produção.

.env
VITE_FLUXO_API_KEY=pk_test_xxxx

2. Monte o FluxoProvider

tssrc/main.tsx
import React from "react";
import ReactDOM from "react-dom/client";
import { FluxoProvider } from "@/components/fluxo/provider";
import App from "./App";
import "./index.css";
 
ReactDOM.createRoot(document.getElementById("root")!).render(
  <React.StrictMode>
    <FluxoProvider>
      <App />
    </FluxoProvider>
  </React.StrictMode>,
);

3. Renderize <Support />

tssrc/App.tsx
import { Support } from "@/components/fluxo/support";
 
export default function App() {
  return (
    <main>
      <h1>You are ready to chat</h1>
      <Support />
    </main>
  );
}

Início rápido com um prompt de IA

Cole sua chave pública para preencher o prompt, copie-o e rode no ChatGPT, Claude ou Cursor.

fluxo-prompt.md

Instalação manual do pacote

1. Instale o pacote

pnpm add @fluxolat/react

2. Adicione a sua chave de API pública

.env
VITE_FLUXO_API_KEY=pk_test_xxxx

3. Adicione o SupportProvider

tssrc/main.tsx
import React from "react";
import ReactDOM from "react-dom/client";
import { SupportProvider } from "@fluxolat/react";
import App from "./App";
import "./index.css";
 
ReactDOM.createRoot(document.getElementById("root")!).render(
  <React.StrictMode>
    <SupportProvider>
      <App />
    </SupportProvider>
  </React.StrictMode>,
);

4. Importe os estilos

O widget não injeta estilos sozinho. Importe um único ponto de entrada de CSS na raiz do app. Use support.css se o seu app já usa Tailwind CSS v4; use styles.css nos demais casos. Os dois pontos de entrada se comportam igual em relação ao tema. Se o seu app já expõe tokens no estilo do shadcn, o widget normalmente pega as cores, o raio, as fontes e o modo escuro automaticamente. Não é preciso nenhum mapeamento de tema extra para começar.

tssrc/main.tsx
import React from "react";
import ReactDOM from "react-dom/client";
import { SupportProvider } from "@fluxolat/react";
import "@fluxolat/react/styles.css";
import App from "./App";
import "./index.css";
 
ReactDOM.createRoot(document.getElementById("root")!).render(
  <React.StrictMode>
    <SupportProvider>
      <App />
    </SupportProvider>
  </React.StrictMode>,
);

5. Renderize o widget

tssrc/App.tsx
import { LazySupport } from "@fluxolat/react/lazy-support";
import { Suspense } from "react";
 
export default function App() {
  return (
    <main>
      <h1>You are ready to chat</h1>
      <Suspense fallback={null}>
        <LazySupport />
      </Suspense>
    </main>
  );
}

O LazySupport mantém toda a interface do widget fora do bloco inicial do app. Se você controla quando o suporte aparece, chame preloadSupport do mesmo ponto de entrada ao passar o mouse ou ao focar, antes de renderizá-lo.

6. Identifique os visitantes logados (opcional)

tssrc/App.tsx
import { IdentifySupportVisitor } from "@fluxolat/react/identify-visitor";
import { LazySupport } from "@fluxolat/react/lazy-support";
import { Suspense } from "react";
 
export default function App() {
  const user = {
    id: "user_123",
    email: "jane@acme.com",
    name: "Jane Doe",
  };
 
  return (
    <>
      <IdentifySupportVisitor
        externalId={user.id}
        email={user.email}
        name={user.name}
      />
      <Suspense fallback={null}>
        <LazySupport />
      </Suspense>
    </>
  );
}

Verifique a instalação

Recarregue o app e confirme que:

  • o gatilho de suporte aparece sem um flash sem estilos
  • ao abri-lo, aparece a tela inicial ou uma conversa nova
  • o painel de rede do navegador não mostra respostas 401 nem 403 da API do Fluxo

Se o gatilho não aparecer, confira se você importou exatamente um ponto de entrada de CSS. Se as requisições devolverem 401, revise a chave pública. Se devolverem 403, adicione o domínio atual — incluindo localhost em desenvolvimento — aos domínios permitidos da chave. Veja Chaves de API para a lista completa.

7. Exiba mensagens próprias com SupportConfig defaultMessages

tssrc/App.tsx
import { Support, SupportConfig } from "@fluxolat/react";
import { type DefaultMessage, SenderType } from "@fluxolat/types";
 
const user: { name: string | null } = {
  name: "Jane Doe",
};
 
const defaultMessages: DefaultMessage[] = [
  {
    content: `Hi ${user.name ?? "there"}, anything I can help with?`,
    senderType: SenderType.TEAM_MEMBER,
  },
];
 
const quickOptions: string[] = ["How to identify a visitor?"];
 
export default function App() {
  return (
    <>
      <SupportConfig
        defaultMessages={defaultMessages}
        quickOptions={quickOptions}
      />
      <Support />
    </>
  );
}

O próximo passo na documentação do Support

  1. Visão geral: o caminho mais curto do primeiro render até um widget pronto para produção.
  2. Mude uma coisa só: troque a bolha ou a primeira tela sem refazer o widget.
  3. Combine com a sua marca: defina cores, raio e modo escuro.

Esta página foi útil?

Abra uma issue de documentação já preenchida para que a equipe possa agir.