Ir al contenido principal

Fin Messenger: Configurar la autenticación JWT para Salesforce Enhanced Chat

Cómo generar JWTs para asegurar Fin Messenger para Salesforce

Este artículo explica cómo generar y configurar los dos JSON Web Tokens (JWTs) requeridos para que Fin Messenger autentique a los users al enrutar conversaciones a Salesforce Enhanced Chat. Completar estos pasos permite que Fin transmita de forma segura la identidad del user tanto a Intercom como a Salesforce, para que tus compañeros puedan confiar en la identidad de los clientes con los que hablan.

Nota: Requisitos previos: Fin Messenger debe estar ya instalado en tu app, y un Canal de Mensajería Salesforce Enhanced Chat debe estar configurado. La gema Ruby jwt es necesaria si usas los ejemplos de código Rails a continuación. Esta función está disponible en los planes de Fin Messenger que incluyen integración con Salesforce — contacta a tu equipo de cuenta para confirmar el acceso.

Debes agregar ambos JWTs a tus atributos intercomSettings para habilitar la autenticación de Fin Messenger con Salesforce Enhanced Chat:

  • intercom_user_jwt

    • Se usa para proporcionar de forma segura a Fin el Contact ID y cualquier atributo del Contacto o Cuenta que quieras proporcionar a Fin (o Salesforce)

  • salesforce_identity_token

    • Se usa para autenticar al user con Salesforce Enhanced Chat para que tus compañeros puedan estar seguros de que el user es quien dice ser.

Omitir intercom_user_jwt significa que Fin no puede transmitir datos de contacto de forma segura a Salesforce. Omitir salesforce_identity_token significa que Salesforce no puede verificar la identidad del user, y tus compañeros no podrán confirmar que el cliente es quien dice ser.

Ambos JWTs deben generarse del lado del servidor en cada carga de página para el user actual, usando una clave privada separada para cada uno. Sigue estos pasos para obtener cada clave y habilitar la verificación de users en Fin Messenger y Salesforce:

  1. Recupera tu clave privada de Intercom — ve a Settings > Messenger > Security y copia tu Messenger API Secret. Esta es la clave de firma para intercom_user_jwt.

  2. Prepara tu clave privada de Salesforce — si ya tienes una, usa la misma clave configurada para Salesforce Enhanced Chat. Si no, genera una clave privada y un certificado autofirmado usando OpenSSL (una herramienta de línea de comandos para generar claves criptográficas), sube el certificado a Salesforce y adjúntalo a tu Canal de Mensajería. Consulta Salesforce: Generate an Access Token for an Authenticated User para instrucciones paso a paso.

  3. Habilita la Verificación de Users en Salesforce — ve a Setup > Messaging Settings, encuentra el canal vinculado a tu Embedded Service Deployment y habilita Add User Verification. Consulta Salesforce: Token-Based User Verification Setup para instrucciones completas.

El siguiente ejemplo en Rails muestra cómo generar ambos JWTs para la autenticación de Fin Messenger y Salesforce Enhanced Chat y pasarlos a tu objeto intercomSettings:

Vista Rails — pasando JWTs a intercomSettings para Fin Messenger:

  window.intercomSettings = {
api_base: "https://api-iam.intercom.io",
app_id: "your-app-id-here",
user_id: "<%= current_user&.id %>",
intercom_user_jwt: "<%= intercom_jwt(current_user&.id %>",
salesforce_identity_token: "<%= salesforce_jwt(current_user&.id) %>"
};

Helpers de Rails — generando JWTs de Intercom y Salesforce para Fin Messenger:

intercom_jwt usa HS256 (HMAC-SHA256, un algoritmo de firma simétrico) con tu Intercom Messenger API Secret. salesforce_jwt usa RS256 (RSA-SHA256, un algoritmo de firma asimétrico) con tu clave privada de Salesforce.

  def intercom_jwt(user_id)
JWT.encode({ user_id: user_id, exp: Time.now.to_i+3600 }, INTERCOM_JWT_SECRET, "HS256")
end

def salesforce_jwt(contact_id)

# JWT payload
payload = {
iss: "intercom.com", # Set to whatever is set as Issuer in SF Enhanced Chat User Verification settings
sub: contact_id,
aud: "https://your-salesforce-subdomain-here.my.salesforce-scrt.com",
exp: Time.now.to_i + 3600, # expires in 1 hour
iat: Time.now.to_i
}

# JWT headers
headers = {
alg: "RS256",
typ: "JWT",
kid: "WebAppKey1" # Your key id here
}

JWT.encode(payload, OpenSSL::PKey::RSA.new(SF_PRIVATE_KEY), "RS256", headers)
end

Nota: Ambos JWTs están configurados para expirar después de 1 hora (exp: Time.now.to_i + 3600). Deben regenerarse en cada carga de página — no los almacenes en caché entre sesiones. Si un JWT expira durante una conversación, el cliente puede necesitar refrescar la página para reautenticarse. Revisa la configuración de tu Canal de Mensajería Salesforce para cualquier restricción mínima o máxima de expiración en salesforce_identity_token.

¿Ha quedado contestada tu pregunta?