Widget: identificar usuários logados
Quando o visitante já está autenticado no seu site, o widget pode abrir o atendimento sem pedir nome e telefone. Pessoa e empresa são criadas ou atualizadas no CRM no momento da identificação; a conversa só nasce quando a primeira mensagem é enviada.
1. Instale o widget
O identificador da conta está em Configurações > Widget.
<script src="https://SEU-DOMINIO/widget.js" data-account="ID_DA_CONTA" defer></script>2. Informe quem está logado
// Depois do login, no seu app
await window.$hubzy.setUser("user_123", {
name: "Maria Souza",
email: "maria@empresa.com",
phone: "+5511999999999", // opcional
title: "Gerente de Operações",
city: "São Paulo",
company: {
identifier: "org_42",
name: "Empresa Exemplo",
website: "https://empresa.com",
},
identityToken: "<token assinado no seu servidor>", // opcional, recomendado
});
// No logout
await window.$hubzy.reset();O identifier é o identificador estável do usuário no seu sistema (nunca use e-mail que possa mudar). Identificadores diferentes nunca são mesclados automaticamente: cada um é um cadastro.
Alternativa declarativa
Quando o usuário já é conhecido no carregamento da página:
<script>
window.hubzySettings = {
user: { identifier: "user_123", name: "Maria Souza", email: "maria@empresa.com" },
};
</script>
<script src="https://SEU-DOMINIO/widget.js" data-account="ID_DA_CONTA" defer></script>3. Assine a identidade (recomendado)
Sem assinatura, a identidade vale apenas para o navegador atual — o histórico não é retomado em outro dispositivo, para evitar que alguém se passe por outro usuário. Com o token assinado, a conversa aberta é retomada em qualquer navegador e os dados do perfil são aceitos como verificados.
Gere o segredo em Configurações > Widget. Ele aparece uma única vez; guarde-o apenas no servidor. Rotacionar o segredo encerra as sessões verificadas em andamento.
// Node.js — no SEU servidor, nunca no navegador
import { createHmac } from "crypto";
const claims = {
aud: ACCOUNT_ID, // id da conta
sub: "user_123", // mesmo identificador passado ao setUser
iat: Math.floor(Date.now() / 1000),
exp: Math.floor(Date.now() / 1000) + 300, // no máximo 5 minutos
profile: {
name: "Maria Souza",
email: "maria@empresa.com",
company: { identifier: "org_42", name: "Empresa Exemplo" },
},
};
const payload = Buffer.from(JSON.stringify(claims)).toString("base64url");
const signature = createHmac("sha256", HUBZY_WIDGET_SECRET).update(payload).digest("base64url");
const identityToken = payload + "." + signature;Quando o token é usado, os dados de perfil considerados são os que estão dentro dele — o que vem do navegador é ignorado.
4. Eventos
window.addEventListener("hubzy:ready", () => {});
window.addEventListener("hubzy:user-set", (e) => console.log(e.detail.verified));
window.addEventListener("hubzy:reset", () => {});
window.addEventListener("hubzy:error", (e) => console.warn(e.detail.error));Erros possíveis
identity_invalid— token expirado, assinatura errada, ouaud/subdiferentes da conta e do identificador.identity_conflict— o telefone informado já pertence a outro cadastro; resolva no CRM.rate_limited— muitas identificações sem assinatura em pouco tempo.invalid_account— conta inexistente ou inativa.
Boas práticas
- Chame
reset()no logout: a sessão do navegador é revogada. - Gere o token no servidor a cada carregamento de página, com validade curta.
- Nunca exponha o segredo em código do navegador nem em repositórios.
- Telefone é opcional para usuários identificados; o identificador externo é a chave.
