✆ 01 76 41 10 75

Guide de connexion

Envoyer des SMS et des RCS depuis Salesforce, sans package à installer

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.

C Action : appel HTTP
Identifiant nommé
Conexteo API
Méthode et chemin
POST /messages/sms
Contenu
Votre demande numéro est résolue.
Destinataire
mobile du contact
Terminé

L'action que vous allez créer :
un appel, deux champs à relier

Trois façons de relier Salesforce à Conexteo

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.

SANS CODE, DANS SALESFORCE
Un flux et un appel HTTP

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.

Flow Builder
HTTP Callout
Named Credential
SANS CODE, HORS SALESFORCE
Make, Zapier ou n8n

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.

Connecteur Make
Application Zapier
Nœud n8n
AVEC UN DÉVELOPPEUR
Apex et l'API REST

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.

POST /messages/sms
POST /messages/rcs
GET /messages/replies

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.

Ce que les équipes déclenchent depuis Salesforce

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.

01
Requête résolue ou en attente du client

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
Bonjour, votre demande 00012345 est résolue. Le détail vous a été envoyé par e-mail.
02
Rappel de rendez-vous commercial

À 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.

Transactionnel
Rappel : votre rendez-vous avec Claire Martin est prévu demain à 14h30, en visioconférence.
03
Opportunité signée, suite des opérations

Le 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.

Transactionnel
Bienvenue chez Atelier Nord. Julien, votre chef de projet, vous appelle sous 48 heures pour lancer la mise en place.
04
Relance d'un devis sans réponse

Un 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é
Votre devis du 4 novembre est toujours valable. Souhaitez-vous que l'on en reparle cette semaine ?

Prérequis

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.

Connexion et premier envoi, étape par étape

ÉTAPE 1

Récupérer vos deux identifiants Conexteo

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.

ÉTAPE 2

Déclarer les identifiants dans un External Credential

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 :

X-APP-ID {!$Credential.Conexteo.AppId} X-API-KEY {!$Credential.Conexteo.ApiKey}

Ici, Conexteo est le nom d'API que vous avez donné à l'External Credential. Adaptez-le si vous en avez choisi un autre.

ÉTAPE 3

Créer le Named Credential qui pointe vers l'API

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.

ÉTAPE 4

Donner accès à la connexion par un Permission Set

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 piège : un flux qui fonctionne pour l'administrateur et échoue pour tous les autres

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.

ÉTAPE 5

Créer le flux, avec un chemin asynchrone

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.

Le piège : l'action d'appel HTTP refusée ou introuvable dans le flux

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.

ÉTAPE 6

Créer l'action d'appel HTTP vers Conexteo

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.

EXEMPLE DE REQUÊTE
{ "content": "Bonjour, votre demande 00012345 est résolue.", "recipients": ["+33606060606"], "sender": "MaSociete", "external_id": "case-00012345-closed" }
EXEMPLE DE RÉPONSE
{ "success": true, "message": "OK", "message_id": 123456, "credits_used": 1 }
ÉTAPE 7

Relier le numéro, le texte et l'identifiant anti-doublon

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.

ÉTAPE 8

Tester avec le débogueur, puis activer

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.

Référence des champs de l'envoi SMS

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.

ChampRequisDescription
contentOuiLe texte du message. Évitez les emojis, qui ne sont pas pris en charge dans les SMS.
recipientsOuiListe de numéros, au format national (0606060606) ou international (+33606060606).
senderNonNom d'expéditeur, onze caractères maximum. Un expéditeur nommé ne permet pas au destinataire de répondre.
scheduleAtNonDate et heure d'envoi, en UTC au format ISO 8601. Absent, l'envoi est immédiat.
external_idNonVotre 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.

CodeCause probable
401Clef 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).
403Cré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.
400Requête mal formée : contenu vide, ou expéditeur de plus de onze caractères.
409Un 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.
503Envoi 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.

Ce que cette méthode ne fait pas : le retour vers Salesforce

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.

Les désabonnements sont respectés sans vous

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.

Make comble l'écart sans code

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.

Un développeur peut tout recevoir en direct

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.

Du RCS depuis Salesforce, sans Marketing Cloud

← VE Votre entreprise ✓
Bonjour Sophie, votre demande n°4821 est résolue. Le technicien passe jeudi entre 9h et 11h. Ce créneau vous convient ?
10:12
Je confirmeDécalerAppeler
Message RCS

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.

Support

Une question sur le montage, ou un besoin qui manque

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 →

Questions fréquentes sur Salesforce et Conexteo

Existe-t-il une application Conexteo sur l'AppExchange de Salesforce ?
Non. Conexteo n'édite pas d'application sur l'AppExchange à ce jour. La connexion se fait en appelant l'API Conexteo depuis un flux Salesforce, par l'action d'appel HTTP, ou en passant par Make, Zapier ou n8n, qui disposent chacun d'un connecteur Conexteo.

Cette approche n'installe aucun package dans votre organisation. Sa limite est le retour d'information : les accusés de réception et les réponses ne reviennent pas d'eux-mêmes dans Salesforce. Un connecteur natif est à l'étude.
Faut-il un développeur pour envoyer des SMS depuis un flux Salesforce ?
Non, pour l'envoi. Un administrateur Salesforce à l'aise avec le générateur de flux déclare la connexion et crée l'action d'appel HTTP sans écrire de code. Le montage décrit dans ce guide tient en huit étapes.

Un développeur devient utile dans deux cas : recevoir les webhooks de Conexteo directement dans Salesforce, ce qui demande une classe Apex, et envoyer en volume à partir d'une liste, où un traitement par lot est plus adapté qu'un flux.
Pourquoi un flux Salesforce refuse-t-il d'appeler une API externe après la modification d'un enregistrement ?
Parce que l'appel est placé sur le chemin immédiat du flux. Salesforce n'autorise pas d'appel vers un système externe tant que la transaction qui enregistre la fiche n'est pas terminée.

La solution est de cocher l'option de chemin asynchrone dans le déclencheur du flux et d'y déplacer l'action d'appel HTTP. L'envoi part alors quelques secondes après l'enregistrement.
Comment éviter qu'un flux Salesforce envoie deux fois le même SMS à un client ?
En renseignant le champ external_id de l'API Conexteo avec une valeur propre à l'événement, par exemple l'identifiant de l'enregistrement suivi du nom du scénario. Conexteo mémorise cette valeur et répond par un code 409 à tout nouvel envoi qui la porte, sans rien expédier.

Côté Salesforce, réglez aussi le déclencheur pour que le flux ne s'exécute que lorsque l'enregistrement vient de remplir la condition, et non à chaque modification ultérieure.
Dans quel format le numéro de mobile d'un contact Salesforce doit-il être transmis à Conexteo ?
Au format national, comme 0606060606, ou international, comme +33606060606. Les champs de téléphone de Salesforce acceptent une saisie libre, avec des espaces, des points ou des parenthèses : le plus sûr est de créer un champ de formule qui retire ces caractères, et de transmettre ce champ plutôt que le champ d'origine.

Pour une base internationale, privilégiez le format international avec l'indicatif du pays. Conexteo achemine les messages vers plus de 150 pays.
Les réponses par SMS et les désabonnements STOP remontent-ils dans Salesforce ?
Pas automatiquement avec la connexion par flux. Les désabonnements sont bien pris en compte : Conexteo inscrit le numéro sur une liste d'opposition permanente et l'écarte des envois suivants. Mais la fiche du contact dans Salesforce n'est pas mise à jour.

Pour reporter les réponses et les oppositions dans le CRM, deux solutions : un scénario Make déclenché par le webhook des réponses, qui met à jour la fiche Salesforce, ou un développement Apex qui reçoit ce webhook directement. Notez qu'un SMS envoyé avec un nom d'expéditeur ne permet pas de répondre : les SMS à réponse passent par un numéro court.
Peut-on envoyer des messages RCS depuis Salesforce sans Marketing Cloud ?
Oui. Chez Salesforce, le RCS est intégré à l'offre Marketing Cloud, avec des crédits de messages achetés à Salesforce. Avec Conexteo, un flux Salesforce appelle l'API RCS avec la même connexion que pour le SMS : aucune licence marketing ni package n'est nécessaire, et chaque message est payé à l'unité, dès 0,05 € HT pour un texte avec réponses suggérées.

Il faut seulement un agent RCS vérifié, créé une fois pour 150 € HT. Les destinataires dont le téléphone n'affiche pas le RCS reçoivent automatiquement la version SMS.
Peut-on envoyer une campagne SMS à toute une liste de contacts Salesforce ?
Oui, mais un flux déclenché par un enregistrement n'est pas le bon outil : il est conçu pour un message par événement. Pour une campagne, exportez la liste depuis un rapport Salesforce et importez-la dans la plateforme Conexteo, qui gère la personnalisation, la programmation et les statistiques.

Si la campagne doit partir de Salesforce sans manipulation, un traitement Apex par lot peut transmettre jusqu'à plusieurs milliers de numéros dans un même appel à l'API.
Combien coûte l'envoi d'un SMS depuis Salesforce avec Conexteo ?
Le prix du message, et rien d'autre côté Conexteo : pas de licence par utilisateur Salesforce, pas d'abonnement, pas de frais d'accès à l'API. Le SMS coûte 0,065 € HT l'unité sur le pack de 1 000, et descend à 0,042 € HT à partir de 100 000. Le postpaiement est proposé à partir de 0,039 € HT.

L'inscription est gratuite et comprend cinq messages de test, sans carte bancaire, ce qui suffit à valider le montage du flux avant tout achat.

Votre premier SMS depuis Salesforce, dès aujourd'hui

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 →
À lire aussi