Email interactif alimenté par des données Salesforce en direct

Salesforce authentifie les intégrations serveur à serveur avec un JWT signé, pas un mot de passe ni un jeton de rafraîchissement qui expire silencieusement. La source de données API de MailInApp parle nativement ce flux : connectez-vous avec le certificat et la clé privée d'un Connected App, exécutez une requête SOQL, et liez les lignes renvoyées directement à un bloc carte de score KPI ou graphique — une synthèse de pipeline avec des chiffres réels et actuels à chaque envoi, pas une capture d'écran collée dans un email.

Objet

Your pipeline this week

Salesforce authentifie les intégrations serveur à serveur avec un JWT signé, pas un mot de passe — et la source de données API de MailInApp parle nativement ce flux. Connectez-vous une fois, et une carte de score KPI ou un bloc graphique peuvent se lier directement à des lignes Opportunity, Account ou Contact en direct, sans jeton de rafraîchissement à surveiller ni CSV à réexporter avant chaque envoi.

La plupart des emails de « pipeline hebdomadaire » sont une capture d'écran d'un rapport, obsolète dès qu'on la colle. Lier un bloc graphique directement à une source de données adossée à Salesforce fait que le propre chiffre du bloc vient d'une vraie requête SOQL — et un envoi récurrent réexécute cette requête à neuf à chaque envoi, si bien que la synthèse du lundi reflète réellement le pipeline du lundi.

Comment fonctionne la connexion

MailInApp

Signe un JWT avec la clé privée de votre Connected App

Endpoint de jeton Salesforce

Vérifie la signature, renvoie un jeton d'accès

API REST Salesforce

Exécute votre requête SOQL, authentifiée par jeton Bearer

Votre email

Blocs carte de score KPI et graphique liés en direct aux lignes

Chaque étape se déroule côté serveur à chaque envoi. Aucun mot de passe n'est jamais envoyé, et il n'y a pas de jeton de rafraîchissement — un jeton obsolète est remplacé en signant une nouvelle assertion.

C'est le même flux JWT Bearer que Salesforce documente pour ses propres intégrations serveur à serveur, intégré aux modes d'authentification OAuth2 déjà existants de MailInApp pour les sources de données API, plutôt qu'une intégration sur mesure exclusivement pour Salesforce.

Configurez un Connected App une fois

Dans Salesforce Setup, créez un Connected App, activez les paramètres OAuth, et téléversez un certificat auto-signé sous Use digital signatures — le certificat va à Salesforce, la clé privée RSA associée va à MailInApp. Réglez Permitted Users sur Admin approved users are pre-authorized, ce qui rend l'échange non interactif : il n'y a aucun écran de consentement sur lequel un script devrait cliquer. Notez le Consumer Key du Connected App et l'URL My Domain de votre org — les deux entrent dans la connexion côté MailInApp.

Dirigez-la vers une requête SOQL

L'Endpoint de la source de données est une URL de requête REST, et la chaîne de requête est la vraie donnée que vous récupérez :

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

Réglez Data path sur records — Salesforce enveloppe ses résultats de requête dans un tableau records. Les champs de relation comme Owner.Email reviennent imbriqués et sont abandonnés par l'analyseur de lignes de MailInApp, donc gardez la requête plate ; sélectionnez plutôt OwnerId si vous avez besoin d'un identifiant de propriétaire à filtrer ou fusionner plus tard.

Liez les blocs directement à elle, pas des balises de fusion

Ajoutez la connexion à un projet depuis le panneau Données du studio avec un rôle collection — la même liaison qu'utilise un bloc de répétition. À partir de là, les blocs carte de score KPI, barres, lignes et camembert peuvent s'y lier directement depuis leur propre Inspecteur :

  • Une carte de score KPI réglée sur Amount avec un agrégat Somme devient un chiffre « pipeline ouvert total » en direct.
  • Un graphique à barres groupé par StageName, avec Amount comme série (agrégat Somme à nouveau), devient une répartition du pipeline par étape.

Aucun des deux blocs n'a besoin d'une seule balise de fusion tapée à la main — la liaison fait le travail, et les deux restent exacts à mesure que les affaires changent d'étape ou se closent.

Envoyez-le sur une programmation

Un envoi récurrent hebdomadaire réexécute la requête SOQL et re-rend les deux blocs par rapport aux lignes actuelles de Salesforce à chaque déclenchement — la même structure de synthèse, des chiffres frais chaque lundi, sans que personne ne la reconstruise à la main. Un bloc Bouton pointant vers l'URL Salesforce de chaque Opportunity donne à quiconque lit la synthèse un moyen en un clic d'ouvrir l'enregistrement derrière un chiffre qui attire son attention.

Pour commencer

Créez un Connected App Salesforce avec un certificat pour le flux JWT Bearer, connectez-le dans l'onglet Data Sources de MailInApp avec votre Consumer Key, le nom d'utilisateur d'intégration, et la clé privée, dirigez l'endpoint vers une requête SOQL avec records comme data path, puis liez une carte de score KPI et un graphique à barres à celle-ci depuis le panneau Données du studio. Voir le guide d'intégration Salesforce pour la configuration complète champ par champ.

Une séquence type de création et d'envoi

  1. 1

    Créez un Connected App Salesforce pour un accès serveur à serveur

    Activez les paramètres OAuth, téléversez un certificat numérique auto-signé, activez le JWT Bearer Flow, et réglez Permitted Users sur « Admin approved users are pre-authorized » afin qu'aucun humain n'ait à cliquer sur un écran de consentement.

  2. 2

    Connectez Salesforce comme source de données API

    Choisissez OAuth2 JWT Bearer dans l'onglet Data Sources de MailInApp, puis collez le Token URL, le Consumer Key du Connected App comme Issuer, le nom d'utilisateur de l'utilisateur d'intégration comme Subject, l'hôte de connexion comme Audience, et la clé privée correspondante.

  3. 3

    Dirigez l'endpoint vers une requête SOQL

    L'Endpoint est l'URL de requête REST de votre org et le Data path est "records" — une requête comme SELECT Name, Amount, StageName, CloseDate FROM Opportunity WHERE IsClosed = false renvoie des lignes de pipeline en direct à chaque récupération.

  4. 4

    Liez directement les blocs KPI et graphique à cela

    Ajoutez une liaison de rôle collection à la source depuis le panneau Données du studio, puis liez le champ Value d'une carte de score KPI (Somme d'Amount) et le Group by d'un graphique à barres (StageName) à celle-ci — aucune balise de fusion à taper à la main.

  5. 5

    Envoyez-le sur une programmation récurrente

    Un envoi récurrent hebdomadaire réexécute la requête et re-rend les deux blocs par rapport aux lignes actuelles de Salesforce à chaque fois, si bien que la synthèse du lundi reflète toujours le pipeline du lundi.

Questions fréquentes

Le jeton d'accès a-t-il un jour besoin d'être renouvelé à la main ?

Non — MailInApp signe une nouvelle assertion JWT et l'échange contre un nouveau jeton d'accès automatiquement dès que celui en cache est proche d'expirer, et à nouveau si un appel revient non autorisé. Il n'y a pas de jeton de rafraîchissement à surveiller dans ce flux ; un jeton obsolète est simplement remplacé en en générant un nouveau.

Mon mot de passe Salesforce atteint-il un jour MailInApp ?

Non — le flux JWT Bearer authentifie avec une assertion signée vérifiée par rapport à un certificat, jamais un échange nom d'utilisateur/mot de passe. Le seul secret que stocke MailInApp est la moitié clé privée de cette paire de certificat, masquée dans chaque réponse une fois enregistrée.

Chaque commercial peut-il ne voir que ses propres opportunités ?

Seulement si la requête SOQL renvoie un champ plat sur lequel filtrer — un champ de relation comme Owner.Email revient sous forme d'objet imbriqué et est abandonné, car l'analyseur de lignes de MailInApp n'aplatit pas les valeurs imbriquées. Sélectionnez plutôt un identifiant plat comme OwnerId, et filtrez un bloc graphique lié par rapport à un champ correspondant sur la propre ligne de contact de votre audience (le filtre Bind to data d'un graphique peut référencer les balises de fusion du destinataire) pour découper la même requête partagée par destinataire.

De quelle édition Salesforce ai-je besoin ?

N'importe quelle édition avec l'accès API REST activé — Enterprise, Unlimited, Performance et Developer Edition l'incluent ; Professional et Essentials ont besoin du module complémentaire API. Le propre profil de l'utilisateur d'intégration doit aussi avoir API Enabled activé.

Cela fonctionne-t-il contre un sandbox plutôt qu'une production ?

Oui — utilisez https://test.salesforce.com à la fois comme hôte du token URL et comme valeur Audience, et dirigez l'Endpoint vers l'URL My Domain propre au sandbox plutôt que celle de la production.

Construisez ceci dans le studio

Commencez avec le forfait gratuit : chaque bloc interactif et le moteur de repli complet sont inclus dans tous les forfaits.