Identificar al cliente que inició sesión (user_token)
Tu servidor firma la prueba de identidad del cliente para que la IA pueda consultar pedidos y crear pedidos en su nombre.
El AI necesita saber quién es el cliente antes de consultar un pedido. La identidad del cliente la certifica la firma de tu servidor; el navegador no puede falsificarla.
La clave de firma se consulta en la página «Integración» del panel (solo la puede ver el propietario), con el formato whsec_.... Se usa en ambos sentidos: tú la usas para firmar el user_token; nosotros la usamos para firmar los webhooks y las solicitudes de consulta de pedidos que te enviamos.
Formato del user_token: base64url(JSON) + "." + hex(HMAC-SHA256(clave de firma, base64url(JSON)))
Campos del JSON:
| Campo | Obligatorio | Descripción |
|---|---|---|
user_id | Sí | El ID del cliente en tu sistema; se te devuelve tal cual al consultar pedidos |
exp | Sí | Fecha de expiración (en segundos Unix), máximo 7 días |
name / email | No | Se muestran en la consola de agentes |
Ejemplo en Node.js:
import crypto from "node:crypto"
function signUserToken(user, secret) {
const payload = { user_id: user.id, name: user.name, email: user.email, exp: Math.floor(Date.now() / 1000) + 3600 }
const body = Buffer.from(JSON.stringify(payload)).toString("base64url")
const mac = crypto.createHmac("sha256", secret).update(body).digest("hex")
return `${body}.${mac}`
}
En la página:
<script>window.AICS_USER_TOKEN = "服务器签发的 user_token"</script>
<!-- 页面加载后才登录的,调用 AICS.identify(token) -->
También puedes no incluirlo en la página y añadir data-user-token-url="/tu-dirección" al script: antes de abrir la conversación, la ventana de atención al cliente solicita esa dirección del mismo origen usando la cookie del cliente, y esta devuelve {"token": "user_token"} (si no ha iniciado sesión, devuelve {"token": null}). En las tiendas Shopify que tienen instalada la aplicación de Yinke, la ventana de chat obtiene automáticamente la identidad del cliente que ha iniciado sesión de esta forma, sin necesidad de una integración adicional.
¿Te ha resultado útil esta página?
Última actualización:
