Pré-requisitos
Do operador do workspace (ou de Settings → Integrations → Channels → Website widget, se for você):- O snippet de instalação (ou apenas o slug do widget e a URL base da API).
- Confirmação de que a origem do seu site está na lista de origens permitidas do widget — o esquema + host exatos, p. ex.
https://www.example.com.wwwe o domínio raiz são origens diferentes; adicione ambos se ambos servirem o site.
https://api.switchbord.ai. Instâncias self-hosted substituem seu próprio domínio de API em todos os lugares em que ele aparece abaixo.
O snippet
Cole isto antes da tag de fechamento</body> em cada página que deve exibir o widget:
Receitas por framework
HTML puro / qualquer site renderizado no servidor
HTML puro / qualquer site renderizado no servidor
Cole o snippet antes de
</body> no seu layout/template base para que ele apareça em todas as páginas. Pronto.Next.js (App Router)
Next.js (App Router)
Use Não renderize o script dentro de páginas que remontam a cada navegação — o loader é idempotente (não vai criar um segundo iframe), mas carregá-lo uma única vez no layout é mais limpo.
next/script no layout raiz para que o widget carregue uma vez por sessão de navegação, apenas no cliente:React (SPA com Vite / CRA)
React (SPA com Vite / CRA)
Carregue uma vez em um effect de nível superior:
Google Tag Manager
Google Tag Manager
Crie uma tag de Custom HTML contendo o snippet, dispare-a em All Pages (ou com um acionador por caminho de página se você só quiser em algumas páginas) e publique. Lembre-se de que o GTM dispara a partir da origem do seu site, então o requisito da lista de origens permitidas permanece o mesmo.
WordPress
WordPress
Cole o snippet no
footer.php do seu tema antes de </body>, ou use qualquer plugin do tipo “insert headers and footers” e coloque-o na seção de rodapé. Plataformas de construção de sites (Webflow, Squarespace, Shopify) todas têm uma configuração equivalente de “código personalizado antes de </body>”.Content-Security-Policy
Se o seu site usa uma CSP, permita a origem da API do Switchbord nestas diretivas:SDK JavaScript
O loader expõewindow.SwitchbordWidget:
Eventos para
on(event, fn):
Identidade assinada (Secure Mode)
Se o seu site tem usuários autenticados, emita um JWT HS256 de curta duração no seu servidor e passe-o paralogin() para que o Switchbord saiba de forma verificável quem é o visitante. Visitantes verificados retomam a conversa entre dispositivos, e os operadores veem dados de contato verificados em vez de sessões anônimas.
Configuração:
- No Switchbord, gere o segredo de assinatura de identidade do widget em Settings → Integrations → Provider secrets (
widget-identity-secret). Ele é armazenado no Vault do workspace; o navegador nunca o vê. - Defina o modo de identidade do widget nas configurações do widget (e, opcionalmente, Require identity para bloquear mensagens até o login).
- Emita tokens no lado do servidor com estas claims:
Verifique a instalação
- Abra o seu site — a bolha de abertura aparece no canto inferior direito (ou inferior esquerdo, conforme o tema) em um ou dois segundos.
curl https://api.switchbord.ai/api/v1/widgets/YOUR_WIDGET_SLUG/configretorna200com o JSON de configuração do widget.- Envie uma mensagem de teste pelo widget — ela aparece na caixa de entrada do Switchbord em tempo real.
- Responda pela caixa de entrada — o visitante a vê (com o nome do operador) em poucos segundos; se o painel estiver fechado, um selo de não lidas aparece no botão de abertura.
- Se o modo de IA for draft ou auto-send, a mensagem de teste produz um rascunho do GBCA (ou uma resposta autônoma) após um breve debounce.
Resolução de problemas
Prompt de instalação para agentes de programação com IA
Entregue isto ao Cursor, Claude Code, Copilot ou qualquer agente de programação que trabalhe no seu site. Substitua os dois placeholders, cole e deixe-o executar. O prompt está intencionalmente em inglês, pois foi feito para ser colado literalmente em agentes de programação que operam em inglês.Testes em localhost: adicione
http://localhost:3000 (ou a sua porta de desenvolvimento) às origens permitidas do widget durante o desenvolvimento, e remova antes de ir ao ar. Uma lista de permissões vazia libera todas as origens — aceitável para um primeiro teste rápido, não para produção.