Verificación de identidad de clientes con sesión iniciada

Actualizado el 9 nov 20268 min de lectura
Español
En esta página

La verificación de identidad le dice al widget de chat quién escribe cuando un cliente inició sesión en tu sitio web. Tu servidor firma el id de usuario del cliente con una clave secreta de Deskwoot, y tu página le pasa al widget el usuario y esa firma. Así el cliente chatea con su nombre y correo reales, se salta el formulario antes del chat, y tu equipo lo ve como un usuario verificado. La clave está en tu bandeja de entrada de chat en vivo, en Reconocer a clientes con sesión iniciada. Sin una firma válida el chat sigue funcionando, pero el cliente escribe como un visitante anónimo.

Para qué sirve

Lo necesita sobre todo un chat dentro de un panel de clientes, un área de miembros o tu app. Ahí tus clientes ya iniciaron sesión. No tiene sentido volver a pedirles su nombre y su correo, y tu equipo quiere saber con seguridad quién escribe. Con la verificación de identidad:

  • El cliente chatea con su nombre y correo reales. El formulario antes del chat y la pregunta por su correo se omiten.
  • Cada visita, desde cualquier dispositivo, llega al mismo contacto, así que tu equipo ve de inmediato las conversaciones anteriores, las notas y los atributos.
  • En la conversación y en la página del contacto, una marca de verificación junto al nombre indica que la identidad está verificada. Pasa el mouse por encima para ver Usuario verificado.
  • Nadie puede hacerse pasar por uno de tus clientes. El widget solo acepta una identidad con una firma de tu servidor, y solo tu servidor conoce la clave. Deskwoot comprueba la firma sin ningún acceso a tus sistemas.

Paso 1: Crea tu clave secreta

  1. Ve a Configuración > Bandejas de entrada y abre tu bandeja de entrada de chat en vivo.
  2. En Configuración y privacidad, haz clic en Reconocer a clientes con sesión iniciada.
  3. En Clave secreta, haz clic en Crear clave. Deskwoot crea la clave y la muestra de inmediato.
  4. Haz clic en Copiar y guarda la clave en tu servidor, por ejemplo como una variable de entorno llamada DESKWOOT_IDENTITY_SECRET.

A partir de ahí, la fila muestra Configurado. Puedes volver en cualquier momento: Mostrar vuelve a mostrar la clave y Copiar la copia. Cada bandeja de entrada de chat en vivo tiene su propia clave, y una firma hecha con ella solo sirve para el widget de esa bandeja de entrada.

La clave va solo en tu servidor. Nunca la pongas en código que se ejecuta en el navegador y nunca calcules la firma ahí. Cualquiera que tenga la clave puede hacerse pasar por cualquiera de tus clientes.

Paso 2: Firma el id de usuario en tu servidor

Para cada cliente con sesión iniciada, tu servidor calcula un HMAC SHA256 de su id de usuario con la clave secreta y lo escribe en hexadecimal. Ese valor es el identifierHash. Usa un id de usuario que nunca cambie, como el id de tu base de datos, y usa la clave tal como la muestra Deskwoot, como texto.

Node.js:

import crypto from "crypto";

const identifierHash = crypto
  .createHmac("sha256", process.env.DESKWOOT_IDENTITY_SECRET)
  .update(userId)          // your stable user id, as a string
  .digest("hex");

Python:

import hashlib, hmac, os

identifier_hash = hmac.new(
    os.environ["DESKWOOT_IDENTITY_SECRET"].encode(),
    user_id.encode(),
    hashlib.sha256,
).hexdigest()

PHP:

$identifierHash = hash_hmac("sha256", $userId, getenv("DESKWOOT_IDENTITY_SECRET"));

El resultado siempre tiene 64 caracteres. El panel de Deskwoot también muestra el ejemplo de Node.js, en Paso 1: en tu servidor.

Paso 3: Pasa el usuario al widget

En el código del widget de tu página, agrega un objeto user a window.deskwootSettings. Tu servidor completa los valores cuando arma la página para un cliente con sesión iniciada.

window.deskwootSettings = {
  widgetToken: "YOUR_WIDGET_TOKEN",
  user: {
    identifier: "user_4711",            // your stable user id
    identifierHash: "<HMAC-SHA256 of identifier, computed on your server>",
    email: "jane@example.com",          // optional
    name: "Jane Doe"                    // optional
  }
};
  • identifier: el id estable de tu usuario, como texto. Es el único campo firmado, así que envía exactamente el texto que firmaste. Un número también va entre comillas, como "4711". Hasta 128 caracteres.
  • identifierHash: la firma del paso 2.
  • email y name: opcionales. Se muestran en el contacto en Deskwoot.
  • attributes: datos opcionales como un plan, consulta "Envía más datos con atributos" más abajo.

Para los visitantes que no iniciaron sesión, deja fuera user: chatean como visitantes anónimos, como hasta ahora. El panel de Deskwoot muestra este código con tu propio token del widget, en Paso 2: en tu página. Si el widget todavía no está en tu sitio, empieza con Insertar el widget.

Cuando tu app inicia la sesión después de cargar la página

En una app que inicia la sesión del cliente sin cargar una página nueva, llama a window.deskwoot.identify(user) con el mismo objeto en cuanto tu servidor lo haya firmado. Actualiza al visitante actual sin recargar.

window.deskwoot.identify({
  identifier: "user_4711",
  identifierHash: "<HMAC-SHA256 of identifier, computed on your server>",
  email: "jane@example.com",
  name: "Jane Doe"
});

Si el cliente ya tiene la sesión iniciada cuando carga la página, configura user en window.deskwootSettings antes del código del widget. Así el chat sigue abierto aunque se recargue la página. Con identify() después de la carga, cada recarga empieza con un chat vacío que vuelve en cuanto el cliente queda verificado.

Envía más datos con atributos

Con attributes puedes enviar una lista simple de datos, como { plan: "Pro" } o un id de empresa. Se muestran en el contacto para tu equipo.

La firma solo cubre el id de usuario, así que un visitante podría cambiar estos atributos en el navegador. Por eso el bot de IA nunca lee atributos sin firmar. Para que la IA responda a partir de ellos, fírmalos también en tu servidor y envía attributesHash y attributesIssuedAt (la hora unix en segundos en que los firmaste) junto con ellos. Además, la IA solo los lee cuando puede consultar contactos. Vuelve a firmar en cada carga de página: Deskwoot usa un conjunto firmado hasta 24 horas. Firma solo lo que el cliente puede ver, porque la IA puede decirle lo que dice un atributo firmado.

El formato exacto, con código para Node.js y Python y un vector de prueba para comprobar tu código, está en la documentación del widget.

Sin verificación de identidad, o cuando la firma es incorrecta

  • No hay user en la configuración: el visitante chatea de forma anónima, y el formulario antes del chat y la pregunta por el correo aparecen como los configuraste en Antes del chat.
  • Firma incorrecta: Deskwoot rechaza la identidad. El chat sigue funcionando, pero el cliente chatea como un visitante anónimo y ve el formulario antes del chat si usas uno. El cliente no ve ningún mensaje de error. Lo mismo pasa cuando la bandeja de entrada todavía no tiene clave, cuando el id de usuario no es exactamente el texto que firmaste, cuando tiene más de 128 caracteres o cuando el correo no es válido.
  • Clave nueva: cuando haces clic en Crear una clave nueva y confirmas con Sí, crear una clave nueva, la clave anterior deja de funcionar al instante. Hasta que pongas la nueva en tu servidor, no se reconoce a los clientes con sesión iniciada.
  • Atributos firmados: un attributesHash incorrecto rechaza toda la identidad, igual que una firma incorrecta, y lo mismo pasa con un conjunto firmado que supera los límites (30 claves, claves de hasta 64 caracteres, valores de hasta 1024 caracteres). Un conjunto firmado de más de 24 horas, en cambio, no: el cliente sigue verificado, pero esos atributos se ignoran.

Para encontrar la causa, abre las herramientas para desarrolladores de tu navegador, ve a la pestaña de red y mira la respuesta a la solicitud a /api/widget/identity/verify. invalid_identifier_hash significa que la firma no coincide con el id de usuario, y identity_verification_not_configured significa que la bandeja de entrada todavía no tiene clave.

Preguntas frecuentes

¿Necesito la verificación de identidad para que funcione el chat?

No. Es opcional. Sin ella, todos chatean como visitantes anónimos y llenan el formulario antes del chat si usas uno. La verificación de identidad solo agrega el reconocimiento de los clientes con sesión iniciada.

¿Puedo poner la clave secreta en el JavaScript de mi página?

No. Todo lo que está en el navegador lo puede leer cualquiera, y quien tenga la clave puede hacerse pasar por cualquiera de tus clientes. Guarda la clave en tu servidor y envía a la página solo la firma ya calculada.

¿Qué uso como id de usuario?

Un id que nunca cambie para ese cliente, como el id del usuario en tu base de datos. Deskwoot encuentra el contacto por este id en cada visita, así que un id nuevo significa un contacto nuevo. Un correo funciona peor, porque la gente lo cambia.

¿Deskwoot asocia a un cliente verificado por su correo?

No. Deskwoot asocia a un cliente verificado solo por el id de usuario que firmaste. El correo y el nombre no están firmados, así que Deskwoot nunca une a un visitante con un contacto existente por ellos. Si otro contacto ya tiene ese correo, el contacto verificado se guarda sin él.

¿Una clave sirve para todas mis bandejas de entrada?

No. Cada bandeja de entrada de chat en vivo tiene su propia clave, y una firma hecha con ella solo funciona para el widget de esa bandeja de entrada. Si tienes el widget de 2 bandejas de entrada en tus sitios, crea una clave en cada una y firma con la clave de la bandeja de entrada cuyo widget está en esa página.

¿Dónde ve mi equipo que un cliente está verificado?

En una marca de verificación junto al nombre del cliente, en la conversación y en la página del contacto. Pasa el mouse por encima para ver Usuario verificado.

¿Te resultó útil esta guía?

Sigue leyendo

Preguntar a Fynn sobre esta guía

Recibe una respuesta corta basada en esta guía y el resto del centro de ayuda.

¿Aún necesitas ayuda?

Fynn responde en el chat con estas guías, y ahí también puedes hablar con el equipo.

Escríbenos por correo