Une requête résolue, un rendez-vous confirmé, un devis resté sans réponse : Salesforce sait déjà quand il faut écrire à votre client. Ce guide montre comment déclencher le message depuis un flux Salesforce, en appelant directement l'API Conexteo, et ce qu'il faut prévoir pour faire revenir les réponses dans le CRM. Le même flux envoie aussi du RCS, sous le nom et le logo de votre entreprise, sans licence Marketing Cloud.
L'action que vous allez créer :
un appel, deux champs à relier
Autant le dire d'emblée : Conexteo n'édite pas d'application sur l'AppExchange. Ce n'est pas un obstacle, parce que Salesforce sait appeler une API externe depuis ses propres automatisations, et que l'API SMS et RCS de Conexteo s'appelle depuis n'importe quel client HTTP. Rien à installer dans votre organisation, rien à faire valider par un comité de sécurité : une connexion que votre administrateur déclare en quelques écrans.
Selon vos compétences internes et ce que vous attendez en retour, trois voies sont possibles. Ce guide détaille la première, qui suffit à la plupart des envois automatiques.
Le générateur de flux de Salesforce propose une action d'appel HTTP. Elle envoie le message au moment où un enregistrement change, sans une ligne d'Apex. C'est la voie décrite ci-dessous.
Ces outils disposent d'un connecteur Salesforce et d'un connecteur Conexteo. C'est la voie la plus simple quand vous voulez aussi faire revenir les accusés de réception et les réponses dans le CRM.
Pour des envois en volume, un bouton sur une fiche ou la réception directe des webhooks Conexteo, un développeur Salesforce appelle l'API depuis Apex en réutilisant la même connexion.
Aucune licence supplémentaire côté Conexteo. L'accès à l'API est compris dans le compte : vous ne payez que les messages effectivement envoyés, sans abonnement ni engagement, en packs prépayés ou en postpaiement. L'inscription est gratuite et comprend cinq messages de test, sans carte bancaire. Les grilles complètes sont sur la page tarifs SMS et la page tarifs RCS.
Le point commun de ces quatre scénarios : l'information existe déjà dans le CRM, sous la forme d'un champ qui change de valeur. Le flux se contente d'écouter ce changement.
Quand le support attend une pièce ou vient de clore un dossier, un SMS est lu dans les minutes qui suivent, là où l'e-mail de notification attend au milieu des autres. C'est le scénario retenu comme exemple dans ce guide.
TransactionnelÀ la création d'un événement, le flux programme le message pour la veille grâce au champ de date d'envoi de l'API. Conexteo conserve le message et l'expédie à l'heure dite. Voir aussi le guide du SMS de rappel de rendez-vous.
TransactionnelLe passage d'une opportunité à l'étape gagnée déclenche un message de bienvenue qui annonce la prochaine étape et le nom de l'interlocuteur. Le client sait que le relais est pris, sans attendre le premier appel.
TransactionnelUn devis envoyé depuis sept jours sans changement d'étape mérite une relance. En RCS, le message porte votre nom, votre logo et deux réponses proposées, ce qui transforme la relance en question fermée à laquelle on répond d'une touche.
RCS recommandéUn compte Conexteo, gratuit. Une organisation Salesforce dont l'édition donne accès à l'action d'appel HTTP des flux : d'après la documentation de Salesforce, il s'agit des éditions Enterprise, Performance, Unlimited et Developer. Vérifiez ce point pour la vôtre avant de commencer. Et un profil d'administrateur, puisqu'il faut déclarer une connexion externe et créer un flux.
Les libellés ci-dessous sont donnés en anglais, tels qu'ils apparaissent dans la majorité des organisations ; leur traduction française varie selon les versions. Faites le premier montage dans une sandbox ou une organisation Developer, gratuite, plutôt qu'en production.
Dans votre compte Conexteo, ouvrez l'onglet Développeurs, section API. Deux valeurs y figurent : la Clef API, longue, et l'App ID, courte. L'API attend les deux à chaque appel, dans deux en-têtes distincts : X-API-KEY et X-APP-ID.
Dans Setup, cherchez Named Credentials, puis ouvrez l'onglet External Credentials et créez-en un, avec le protocole d'authentification Custom. Ajoutez-lui un Principal portant deux paramètres d'authentification : AppId et ApiKey, où vous collez les deux valeurs de l'étape 1. Salesforce les chiffre et ne les réaffiche plus.
Toujours sur l'External Credential, ajoutez deux Custom Headers dont la valeur est une formule qui lit ces paramètres :
Ici, Conexteo est le nom d'API que vous avez donné à l'External Credential. Adaptez-le si vous en avez choisi un autre.
Revenez à l'onglet Named Credentials et créez-en un nouveau. L'URL est https://api.conexteo.com, l'External Credential est celui de l'étape précédente. Décochez Generate Authorization Header : l'API Conexteo n'utilise pas d'en-tête Authorization, et vos deux en-têtes personnalisés suffisent. Cochez Allow Formulas in HTTP Header pour que les formules de l'étape 2 soient évaluées.
Une connexion déclarée n'est utilisable par personne tant qu'elle n'est pas attribuée. Créez un Permission Set, ouvrez sa rubrique External Credential Principal Access, ajoutez-y le Principal de l'étape 2, puis assignez ce Permission Set aux utilisateurs dont les actions déclencheront l'envoi. Pour un flux qui réagit aux modifications de toute une équipe, c'est toute l'équipe qu'il faut couvrir. Selon la version de votre organisation, le Permission Set doit aussi donner l'accès en lecture à l'objet User External Credentials.
Le symptôme induit en erreur : vous testez le flux, le SMS part, vous l'activez, et le lendemain les envois échouent avec un message indiquant que Salesforce n'a pas pu accéder aux identifiants. La connexion n'est pas en cause. L'utilisateur qui a déclenché le flux n'a simplement pas reçu le Permission Set de l'étape 4, alors que vous, administrateur, l'aviez.
Le second réflexe à avoir si l'API répond par un refus d'authentification alors que l'accès est bien attribué : la Clef API et l'App ID ont été intervertis. La Clef API est la longue, l'App ID est la courte. Un coup d'œil à la longueur des deux chaînes règle la question.
Dans Flows, créez un Record-Triggered Flow sur l'objet Case, déclenché à la mise à jour d'un enregistrement, avec pour condition que le statut devienne Closed. Choisissez l'exécution uniquement quand l'enregistrement est modifié pour remplir la condition : sans cela, chaque modification ultérieure d'une requête déjà close relancerait le flux.
Cochez ensuite Include a Run Asynchronously path. C'est sur ce chemin, et pas sur le chemin immédiat, que vous placerez l'appel à Conexteo.
Salesforce interdit d'appeler un système externe pendant qu'il est en train d'enregistrer une fiche. Tant que la transaction n'est pas terminée, il ne veut pas dépendre d'un serveur tiers. Sur le chemin immédiat d'un flux déclenché par un enregistrement, l'appel est donc refusé, et le message d'erreur n'indique pas la solution.
À retenir : un appel vers Conexteo se place toujours sur le chemin asynchrone. L'envoi part une fois la fiche enregistrée, quelques secondes plus tard, ce qui est sans conséquence pour un SMS.
Sur le chemin asynchrone, ajoutez un élément Action puis cliquez sur Create HTTP Callout. Sélectionnez le Named Credential de l'étape 3, la méthode POST et le chemin /messages/sms. Salesforce demande ensuite un exemple de requête et un exemple de réponse, dont il déduit les champs à vous proposer. Collez ceux-ci.
Juste avant l'action, un élément Assignment remplit le corps de la requête. Le content est un modèle de texte dans lequel vous insérez le numéro de la requête. Les recipients forment une collection, à laquelle vous ajoutez le mobile du contact rattaché à la requête. Le sender est votre nom d'expéditeur, onze caractères au plus.
Ne laissez pas external_id de côté : composez-le avec l'identifiant de la requête suivi d'un suffixe propre au scénario. Conexteo refuse un second envoi portant le même identifiant. Si le flux se déclenche deux fois pour la même requête, parce qu'elle a été rouverte puis refermée ou qu'un import l'a touchée, votre client ne reçoit qu'un message.
Lancez Debug sur une requête de test rattachée à un contact qui porte votre propre numéro, en choisissant le chemin asynchrone. Le débogueur affiche le code de réponse de l'API et les champs renvoyés : un code 200 et un message_id signifient que le message est parti. Conservez cet identifiant dans un champ de la requête si vous comptez plus tard rapprocher un accusé de réception de son envoi. Activez le flux une fois le SMS reçu.
Les champs acceptés par POST /messages/sms. Seuls les deux premiers sont obligatoires ; ajoutez les autres à l'exemple de requête de l'étape 6 si vous en avez besoin, pour que Salesforce vous les propose.
| Champ | Requis | Description |
|---|---|---|
| content | Oui | Le texte du message. Évitez les emojis, qui ne sont pas pris en charge dans les SMS. |
| recipients | Oui | Liste de numéros, au format national (0606060606) ou international (+33606060606). |
| sender | Non | Nom d'expéditeur, onze caractères maximum. Un expéditeur nommé ne permet pas au destinataire de répondre. |
| scheduleAt | Non | Date et heure d'envoi, en UTC au format ISO 8601. Absent, l'envoi est immédiat. |
| external_id | Non | Votre propre référence, 255 caractères au plus. Un second envoi portant la même valeur est refusé. |
Quand l'appel échoue, le code de réponse suffit presque toujours à identifier la cause. Dans le flux, reliez le connecteur d'erreur de l'action à une notification ou à une tâche, pour qu'un échec ne passe pas inaperçu.
| Code | Cause probable |
|---|---|
| 401 | Clef API et App ID intervertis, en-tête manquant, ou formules d'en-tête non évaluées (case de l'étape 3 non cochée). |
| 403 | Crédits insuffisants, ou aucun numéro valide dans la liste. Rien n'est envoyé ni débité. La réponse indique les crédits requis et le solde. |
| 400 | Requête mal formée : contenu vide, ou expéditeur de plus de onze caractères. |
| 409 | Un envoi portant le même external_id a déjà été traité. C'est le garde-fou anti-doublon qui joue son rôle, pas une panne. |
| 503 | Envoi momentanément indisponible. La requête n'a pas été traitée et peut être renvoyée après le délai indiqué ; avec un external_id, un renvoi ne crée jamais de doublon. |
Un flux sait envoyer. Il ne sait pas écouter. Les accusés de réception, les réponses de vos clients et les désabonnements arrivent chez Conexteo, et Conexteo les signale par webhook à l'adresse de votre choix. Or Salesforce n'expose pas d'adresse capable de recevoir un webhook sans développement. C'est la limite réelle de la connexion par flux, et il vaut mieux la connaître avant de commencer.
Trois précisions rendent cette limite moins gênante qu'elle n'en a l'air.
Une réponse STOP est traitée par Conexteo, qui inscrit le numéro sur une liste d'opposition permanente et l'écarte de vos envois suivants. Ce qui manque, c'est la case cochée sur la fiche du contact dans Salesforce.
Le connecteur Conexteo pour Make démarre un scénario à chaque accusé de réception, réponse ou statut RCS. Un module Salesforce met ensuite à jour la fiche ou crée une tâche. Le montage est décrit dans le guide d'installation Make.
Une classe Apex exposée en service REST reçoit les webhooks signés de Conexteo et écrit dans vos objets. C'est du développement spécifique, à prévoir quand les réponses doivent alimenter un processus de vente ou de support.
RCS Basic : un texte, deux réponses et un bouton d'appel,
envoyés par le flux à la clôture de la requête
Chez Salesforce, le RCS est intégré à l'offre Marketing Cloud, avec des crédits de messages RCS achetés à Salesforce. Sans Marketing Cloud, il faut une application d'un éditeur tiers, installée depuis l'AppExchange. Avec Conexteo, la connexion créée pour le SMS suffit : pas de licence marketing, pas de package, et chaque message est payé à l'unité.
Le client reçoit le message sous le nom et le logo vérifiés de votre entreprise, avec des boutons de réponse. Un message RCS au format texte de 160 caractères au plus, réponses suggérées comprises, est facturé au tarif RCS Basic, dès 0,05 € HT. Chaque bouton porte une valeur technique, renvoyée par webhook quand le client clique : un scénario Make peut alors mettre à jour la fiche dans Salesforce.
La connexion créée aux étapes 2 à 4 sert aussi au RCS : seule l'action change, avec le chemin /messages/rcs et un corps de requête qui décrit un texte, une carte ou un carrousel. Deux différences sont à connaître. Il n'y a pas de champ expéditeur : c'est l'agent RCS vérifié de votre compte qui s'applique, et c'est lui qui affiche votre nom et votre logo dans la conversation. Et chaque envoi porte un repli SMS, utilisé pour les destinataires dont le téléphone n'est pas compatible, soit environ 15 % du parc mobile français.
La création de l'agent RCS coûte 150 € HT, une seule fois, et demande deux à quatre semaines de validation ; Conexteo monte le dossier. En attendant, vos flux envoient en SMS. Les formats et leurs limites sont détaillés sur la page API RCS, et le principe des réponses proposées sur la page RCS conversationnel.
Un flux tourne aussi la nuit et le dimanche. Les messages transactionnels, comme une requête résolue ou un rappel de rendez-vous, ne sont pas concernés. Pour un message promotionnel, deux conditions s'ajoutent. Le destinataire doit avoir donné son consentement : prévoyez sur le contact un champ qui l'atteste, et faites-en une condition d'entrée du flux. Et la charte Business Messaging de l'af2m prévoit un envoi de 8 h à 21 h 30, les dimanches et jours fériés étant tolérés sans être recommandés. La plateforme ne bloque pas les envois hors créneau : c'est au flux de programmer le message dans l'heure locale du destinataire, avec le champ scheduleAt. Voir RGPD et SMS marketing.
Si votre administrateur Salesforce bloque sur une étape, notre support lui répond, en français ou en anglais, et la documentation de l'API détaille chaque champ de l'envoi.
Nous étudions par ailleurs un connecteur natif pour Salesforce, qui apporterait ce que le flux ne fait pas : l'envoi depuis la fiche d'un contact, et le retour automatique des accusés, des réponses et des désabonnements. Si ce besoin est le vôtre, dites-le-nous : les premiers utilisateurs à se signaler seront associés à sa conception.
Parler de votre projet Salesforce →Inscription gratuite, cinq messages offerts, sans carte bancaire. De quoi tester le flux de bout en bout dans votre sandbox.
Créer un compte gratuitement →