Documentation menu

Salesforce

MailInApp no tiene una app de Salesforce para instalar — no la necesitas. La propia API REST de Salesforce responde con JSON simple sobre HTTPS, y la fuente de datos API de MailInApp con autenticación OAuth2 JWT Bearer está construida para hablar directamente el flujo de inicio de sesión servidor-a-servidor de Salesforce: sin pantalla de consentimiento interactiva, sin token de actualización que vigilar, y tu contraseña de Salesforce nunca toca MailInApp.

Esta guía configura una conexión de solo lectura — trayendo filas de Opportunity, Account, o Contact a etiquetas de combinación, bloques de repetición, y bloques de gráfico vinculados en vivo. No escribe de vuelta a Salesforce.

Cómo funciona la conexión

  1. MailInApp firma una afirmación JWT de corta duración con la clave privada de tu Connected App de Salesforce.
  2. La envía mediante POST al endpoint de token de Salesforce, que verifica la firma contra el certificado que subiste y devuelve un token de acceso — sin enviar nunca un nombre de usuario o contraseña.
  3. MailInApp almacena en caché el token de acceso y llama a la API REST de Salesforce (una consulta SOQL) con él como token Bearer, renovándolo automáticamente antes de que expire o si alguna llamada regresa no autorizada.

Cada paso ocurre del lado del servidor, en cada obtención de datos — no hay nada que mantener activo ni volver a autorizar a mano una vez configurado.

Configura el lado de Salesforce

  1. En Salesforce Setup, ve a App Manager → New Connected App (o New Connected App (Lightning)).
  2. Completa los campos básicos de nombre/correo, luego marca Enable OAuth Settings.
  3. Bajo Use digital signatures, sube un certificado. Si todavía no tienes uno, genera un certificado autofirmado y su clave privada RSA correspondiente — el certificado va a Salesforce, la clave privada va a MailInApp. Guarda la clave privada en un lugar seguro; la pegarás en MailInApp una vez y quedará enmascarada después.
  4. Agrega el alcance de OAuth que tu integración necesita — api (Manage user data via APIs) es suficiente para leer registros.
  5. Guarda, y luego edita las políticas de la Connected App: configura Permitted Users en Admin approved users are pre-authorized. Esto es lo que hace que el flujo sea no interactivo — sin ello, Salesforce espera que un humano haga clic en una pantalla de consentimiento, algo que un intercambio JWT servidor-a-servidor no puede hacer.
  6. Asigna el usuario de integración (un usuario real de Salesforce con acceso a la API habilitado en su perfil, o un usuario dedicado solo para integración) a la Connected App mediante un permission set.
  7. Anota la Consumer Key de la Connected App — ese es el issuer que necesita MailInApp — y la URL de My Domain de tu org (Setup → My Domain), por ejemplo https://yourorg.my.salesforce.com.

Conéctalo en MailInApp

Desde Fuentes de datos → + Conexión de API, configura:

  • Endpoint — la URL de consulta REST de tu org, por ejemplo https://yourorg.my.salesforce.com/services/data/v61.0/query?q=SELECT+Name,Amount,StageName,CloseDate+FROM+Opportunity+WHERE+IsClosed+=+false (una consulta SOQL codificada en URL — mira Consultas con SOQL abajo).
  • Ruta de datosrecords. La respuesta de consulta de Salesforce envuelve las filas reales en un arreglo records junto a los campos totalSize/done.
  • AutenticaciónOAuth2 JWT Bearer:
    • URL de tokenhttps://login.salesforce.com/services/oauth2/token para orgs de producción y Developer Edition, https://test.salesforce.com/services/oauth2/token para un sandbox.
    • Emisor — la Consumer Key de la Connected App.
    • Sujeto — el nombre de usuario de Salesforce del usuario de integración (la identidad que afirma el JWT).
    • Audiencia — el mismo host que la URL de token: https://login.salesforce.com (o https://test.salesforce.com para un sandbox).
    • Clave privada — la clave privada RSA emparejada con el certificado que subiste a la Connected App.

Haz clic en Probar esta configuración para confirmar la conexión antes de guardar — genera un token real y previsualiza las primeras filas. Una vez guardada, usa Probar la conexión guardada en cualquier momento después para volver a verificarla sin tener que pegar de nuevo la clave privada.

Consultas con SOQL

La cadena de consulta del endpoint es el dato que recibes de vuelta — no hay una interfaz separada de "elige tus campos", así que da forma a la consulta SOQL para que devuelva exactamente las columnas que tu correo necesita:

SELECT Name, Amount, StageName, CloseDate FROM Opportunity WHERE IsClosed = false

Algunas cosas que vale la pena saber sobre la forma de lo que regresa:

  • Solo campos planos. Un campo de relación como Owner.Email o Account.Name regresa como un objeto JSON anidado ({"Owner": {"Email": "..."}}), y el analizador de filas de MailInApp descarta los valores anidados en lugar de adivinar cómo aplanarlos. Si necesitas un identificador de propietario o cuenta como una etiqueta de combinación utilizable, selecciona un campo plano en su lugar — OwnerId, por ejemplo — en lugar de una ruta de relación con punto.
  • Hasta 1,000 filas por obtención. Suficiente para un resumen o correo de panel; acota más con WHERE/ORDER BY/LIMIT en la propia consulta si solo quieres una porción específica.
  • Obtenido de forma fresca en cada renderizado. Un envío recurrente vuelve a ejecutar la consulta y vuelve a renderizar los bloques vinculados con las filas actuales de Salesforce en cada envío — no hay caché más allá del propio token de OAuth.

Usa los datos

Una vez conectada, agrégala a un proyecto desde el panel de Datos del estudio con un alias (por ejemplo, pipeline) y un rol:

  • Los campos de combinación resuelven {{pipeline.field}} desde la primera fila devuelta — útil para una sola cifra destacada.
  • Las filas de repetición alimentan un bloque de repetición — una fila por Opportunity, renderizada como lista o tabla.
  • Los enlaces de Colección son a los que se vinculan directamente los bloques de tarjeta de indicador clave, barras, líneas y circular — una tarjeta de indicador clave con el campo Valor configurado en Amount y un agregado Suma te da un número en vivo de "pipeline abierto total" sin plomería de etiquetas de combinación, y un gráfico de barras agrupado por StageName convierte la misma consulta en un desglose de pipeline por etapa.

Mira Correo interactivo impulsado por datos en vivo de Salesforce para un ejemplo completo trabajado — un resumen semanal de pipeline construido enteramente a partir de esta conexión.