ByDomuDevelopers

Identidade verificada do widget

Assine no seu servidor quem está conversando: como se calcula, o que muda e como testar.

GuiaHMAC-SHA256No servidor

Gere o segredo

Em Configurações › Chat web (widget) › Identidade verificada › Gerar segredo. Aparece uma só vez: guarde em uma variável de ambiente do servidor (BYDOMU_WIDGET_SECRET). Se você rotacionar, o anterior para de servir na hora e, até atualizar o servidor, seus usuários conversam como visitantes anônimos.

Calcule userHash no servidor

userHash = HMAC-SHA256(secreto, userId) em hexadecimal. Use um id interno estável, não o e-mail nem algo que a pessoa possa mudar. Sem userId o e-mail é assinado, mas então o e-mail vira a identidade: use só se no seu site ele é verificado.

import { createHmac } from "node:crypto";

// Tu backend: el usuario ya inició sesión en tu web.
app.get("/api/bydomu-identity", requireLogin, (req, res) => {
  const userId = String(req.user.id);              // estable: nunca cambia
  const userHash = createHmac("sha256", process.env.BYDOMU_WIDGET_SECRET)
    .update(userId)
    .digest("hex");
  res.json({ userId, email: req.user.email, name: req.user.name, userHash });
});

Passe para a página

O navegador só recebe o resultado, nunca o segredo. Chame boot quando a pessoa entra e shutdown quando sai, para o próximo usuário do mesmo navegador não herdar a conversa.

HTML
<script>
  // Después del código de instalación del widget.
  fetch("/api/bydomu-identity", { credentials: "include" })
    .then((r) => (r.ok ? r.json() : null))
    .then((identity) => identity && Domu("boot", identity));
</script>

<!-- Al cerrar sesión en tu web -->
<script>Domu("shutdown")</script>

O que muda com uma assinatura válida

  • Com userId, o contato é buscado por esse id (o «id externo»), não por e-mail: o e-mail não é assinado e ninguém pode reivindicar o contato de outro digitando o e-mail dele. Se não existe, é criado com origem WEBSITE.
  • A conversa acompanha a pessoa entre dispositivos, e os atributos e eventos que a página enviou antes do login passam ao contato.
  • A Noa vê o contato como verificado por 24 horas, e os atributos enviados com update contam como verificados (um sem assinatura nunca sobrescreve um verificado).
  • Se a assinatura não bater ou não houver segredo, o chat continua anônimo e o visitante não vê erro.

Teste

Compare o que o servidor calcula com openssl. Depois entre no seu site, escreva no chat e abra a conversa no ByDomu: o contato deve ser o do seu usuário, não um visitante novo.

Shell
# Debe dar lo mismo que tu servidor (hex en minúsculas)
printf '%s' 'u_123' | openssl dgst -sha256 -hmac "$BYDOMU_WIDGET_SECRET"

# Con el secreto «secreto_de_prueba» y userId «u_123»:
# 957e886ac44041d2fe2094ad46f8eade58ef58cd593a62e51d76a7f652d9e4ce

A API JavaScript completa do widget