Identidade verificada do widget
Assine no seu servidor quem está conversando: como se calcula, o que muda e como testar.
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.
<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.
# 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