SDK do Widget

Widget de Chat JavaScript

Incorpore o chat ao vivo do Deskwoot em qualquer site com uma única tag <script>. Sem etapa de build, sem login no dashboard exigido dos visitantes.

1. Instalação

Cole este snippet no template da sua página, idealmente logo antes da tag de fechamento </body>. Ele carrega o widget de forma assíncrona, então não bloqueia a renderização.

<script>
  window.deskwootSettings = {
    widgetToken: "YOUR_WIDGET_TOKEN"
  };
  (function (d, t) {
    var g = d.createElement(t);
    var s = d.getElementsByTagName(t)[0];
    g.src = "https://deskwoot.com/widget/deskwoot.js";
    g.async = true;
    g.defer = true;
    s.parentNode.insertBefore(g, s);
  })(document, "script");
</script>

É isso — a bolha de chat aparece imediatamente no canto inferior direito. Sem pacote npm, sem bundler, sem etapa de build. Funciona dentro de Next.js, React, Vue, temas Shopify, WordPress, HTML puro, em qualquer lugar onde JavaScript rode.

2. Onde obtenho o token do widget?

  1. Faça login no dashboard do Deskwoot (como dono da conta, não como visitante final — o widget em si não requer login do usuário final).
  2. Vá para Configurações → Caixas de entrada.
  3. Crie uma nova caixa de entrada do tipo Website, ou abra a existente.
  4. Abra a aba Instalar — o snippet pronto para colar com seu widgetToken específico da caixa de entrada é mostrado lá. Copie como está.

Um widgetToken = uma caixa de entrada. Conversas desse widget sempre caem nessa caixa de entrada, onde seus agentes as pegam. Para rotear para uma equipe ou conjunto de agentes diferente, crie uma segunda caixa de entrada e use seu token em uma página diferente.

3. Configuração

Todas as opções de runtime ficam em window.deskwootSettings. Apenas widgetToken é obrigatório; tudo o mais tem um padrão sensato.

OpçãoTipoPadrãoDescrição
widgetTokenstringObrigatório. Identificador da caixa de entrada do dashboard.
colorstring"#2563EB"Cor primária da marca usada para o botão enviar, bolha de saída e anel de foco. Qualquer cor CSS válida.
darkModebooleanfalseRenderiza o widget com um tema escuro. Combine com um site escuro; não está vinculado à configuração de SO do visitante.
position"left" | "right""right"Em qual canto da tela a bolha do launcher aparece.
welcomeTitlestring(do dashboard)Sobrescreve o título de boas-vindas mostrado dentro do cabeçalho do painel.
welcomeMessagestring(do dashboard)Sobrescreve a primeira mensagem mostrada quando um novo visitante abre o widget.
userobjectundefinedPré-preenche a identidade do visitante (ver seção 4).
embeddedbooleanfalsePreenche o container hospedeiro em vez de flutuar em um canto (ver seção 6).

Exemplo completo

window.deskwootSettings = {
  widgetToken: "YOUR_WIDGET_TOKEN",
  color: "#2563EB",
  darkMode: false,
  position: "right",
  welcomeTitle: "Hi there!",
  welcomeMessage: "How can we help?",
  user: {
    email: "jane@example.com",
    name: "Jane Doe"
  }
};

4. Pré-preenchimento da identidade do usuário

Se o visitante já estiver logado no seu site, passe seus dados de contato para que a conversa chegue com contexto completo em vez de como um visitante anônimo.

Visitante autenticado

window.deskwootSettings = {
  widgetToken: "...",
  user: {
    email: "jane@example.com",
    name: "Jane Doe"
  }
};

O Deskwoot identifica visitantes pelo e-mail. Se um contato com esse e-mail já existir na conta, o widget anexa-se ao mesmo registro de contato — todas as conversas anteriores, notas e atributos personalizados ficam visíveis ao agente que responde.

5. API JavaScript

Depois que o script for carregado, window.deskwootWidget expõe um punhado de métodos para controlar o widget a partir da sua própria UI — por exemplo, um link "Fale conosco" na navegação que deve abrir o painel em vez de navegar para uma página de suporte.

// All methods wait until the widget has finished loading.
window.deskwootWidget.open();    // expand the chat panel
window.deskwootWidget.close();   // collapse the chat panel
window.deskwootWidget.toggle();  // open if closed, close if open

// Current unread agent-message count for this visitor:
console.log(window.__deskwootUnread);

6. Modo embedded

Defina embedded: true quando você estiver hospedando o widget dentro de um container que deve ocupar a viewport completa — tipicamente uma WebView de app móvel, uma tela de Contato em página inteira ou um modal que já fornece sua própria estrutura.

No modo embedded, a bolha do launcher, o popup de gatilho e o botão de fechar ficam ocultos, e o painel se estende para position:fixed; inset:0 sem sombra, sem border-radius, sem deslocamento de 20px. O app iOS do Deskwoot usa exatamente esse modo dentro da sua tela integrada de Contatar Suporte.

A bolha está oculta — você precisa do seu próprio gatilho.

Como a bolha do launcher é suprimida no modo embedded, nada abre o painel automaticamente. Conecte um botão ou item de menu na sua UI à API JavaScript pública:

Gatilho mínimo

<button onclick="window.deskwootWidget.open()">Contact Support</button>

Posicionamentos recomendados

Três padrões que vimos funcionar bem para suporte in-app:

A — Sidebar / entrada na bottom-nav (abordagem do próprio Deskwoot)

Coloque um item Contatar Suporte na sua navegação existente, ao lado de Configurações ou Ajuda. Mesma affordance de uma rota normal, apenas abre o painel em vez de navegar.

<a href="#" onclick="window.deskwootWidget.open(); return false;" class="nav-item">
  <svg class="icon"><!-- chat-bubble icon --></svg>
  Contact Support
</a>

B — Menu de Ajuda / entrada de dropdown

Se você já tem um menu de Ajuda ou Conta, adicione uma linha Conversar com suporte no topo. Combina bem com itens como Docs, Atalhos de teclado, Feedback.

<div role="menuitem" onclick="window.deskwootWidget.open()">
  Chat with support
  <span class="kbd">?</span>
</div>

C — Botão de ação flutuante (canto inferior direito)

Uma pequena pílula flutuante que imita a bolha removida. Útil quando seu app não tem uma barra de navegação persistente.

<button
  onclick="window.deskwootWidget.open()"
  style="position:fixed;bottom:20px;right:20px;background:#2563eb;color:#fff;border:0;border-radius:9999px;padding:12px 18px;box-shadow:0 6px 20px rgba(0,0,0,.15);cursor:pointer;font-weight:600"
>
  💬 Help
</button>

Dicas

  • Chame deskwootWidget.toggle() em vez de open() se quiser que o mesmo gatilho feche o painel quando ele já estiver aberto.
  • Mostre um badge de mensagens não lidas no seu gatilho usando window.__deskwootUnread — um número que se atualiza enquanto o painel está fechado.
  • Coloque o gatilho de forma consistente entre as páginas autenticadas para que os usuários sempre saibam onde encontrar suporte. A posição global deixa de ser "chat oculto" e passa a ser "botão de suporte visível".

Para a instalação padrão (não-embedded) no site, você não precisa de nenhum gatilho personalizado — deskwoot.js renderiza a bolha sozinho e cuida do clique.

7. Content Security Policy

Se seu site roda com um cabeçalho CSP, coloque a origem do Deskwoot na lista de permitidos. Configuração mínima típica:

script-src  https://deskwoot.com;
connect-src https://deskwoot.com wss://deskwoot.com;
img-src     https://deskwoot.com data:;
style-src   'unsafe-inline';

O style-src 'unsafe-inline' é necessário porque o widget injeta seu próprio stylesheet. Se sua CSP proibir estilos inline, podemos passar para um nonce — escreva para nós em hello@deskwoot.com.

8. FAQ

Meus visitantes precisam de uma conta Deskwoot para conversar?

Não. Só você — o dono do site — entra no dashboard para responder. Os visitantes apenas digitam no widget.

O widget funciona em SPAs que mudam rotas no client-side?

Sim. Carregue o script uma vez na inicialização do app (_app.tsx, root.tsx, etc.) e ele sobrevive à navegação. Sem necessidade de re-init na mudança de rota.

Onde os dados da conversa são armazenados?

Nos servidores do Deskwoot na UE. A retenção segue o plano da sua conta. Veja a Política de Privacidade para detalhes.

Posso testar sem fazer deploy?

Sim. O snippet roda bem em localhost e em páginas file://. Você verá a conversa aparecer ao vivo na sua caixa de entrada do dashboard.