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?
- 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).
- Vá para Configurações → Caixas de entrada.
- Crie uma nova caixa de entrada do tipo Website, ou abra a existente.
- Abra a aba Instalar — o snippet pronto para colar com seu
widgetTokenespecí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ção | Tipo | Padrão | Descrição |
|---|---|---|---|
| widgetToken | string | — | Obrigatório. Identificador da caixa de entrada do dashboard. |
| color | string | "#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. |
| darkMode | boolean | false | Renderiza 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. |
| welcomeTitle | string | (do dashboard) | Sobrescreve o título de boas-vindas mostrado dentro do cabeçalho do painel. |
| welcomeMessage | string | (do dashboard) | Sobrescreve a primeira mensagem mostrada quando um novo visitante abre o widget. |
| user | object | undefined | Pré-preenche a identidade do visitante (ver seção 4). |
| embedded | boolean | false | Preenche 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 deopen()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.