Automatisez l'envoi de vos SMS avec Twilio

Programming
1287 mots

Automatisation d'envoi SMS avec Twilio : Guide complet

Introduction

Pas besoin de rentrer dans les détails, l'automatisation d'envoi des SMS c'est génial quand t'es commercial (même si c'est aussi utilisé dans le phishing) ou auto-entrepreneur pour envoyer tes prestations à une masse de personne, on va voir comment faire ça avec Twilio ici.

Qu'est-ce que Twilio ?

Twilio est une plateforme cloud qui permet d'intégrer facilement des fonctionnalités de communication dans tes applications. SMS, appels vocaux, messagerie instantanée... tout y passe. Pour nous, on va se concentrer sur l'API SMS qui est simple et efficace.

Prérequis

Avant de commencer, assure-toi d'avoir :

  • Un compte Twilio (gratuit pour débuter)
  • Python 3.6+ installé
  • Une carte de crédit pour valider ton compte (même en version gratuite)
  • Un numéro de téléphone vérifié

Configuration du compte Twilio

Étape 1 : Créer ton compte

Rends-toi sur twilio.com et crée ton compte. Après vérification, tu auras accès à :

  • Un Account SID (identifiant unique)
  • Un Auth Token (clé d'authentification)
  • 15$ de crédit gratuit pour tester

Tout se trouve dans la section API keys de Twilio

Étape 2 : Obtenir un numéro Twilio

Dans la console Twilio, va dans "Phone Numbers" et achète un numéro. Ça coûte environ 1-6$ par mois. Ce numéro sera l'expéditeur de tes SMS.

Étape 3 : Installer les bibliothèques

Pour Python :

pip install twilio

Pour Node.js :

npm install twilio

Envoi d'un SMS simple

Version Python

from twilio.rest import Client

# Tes identifiants Twilio
account_sid = 'ton_account_sid'
auth_token = 'ton_auth_token'
twilio_number = '+33123456789'  # Ton numéro Twilio

# Initialiser le client
client = Client(account_sid, auth_token)

# Envoyer un SMS
message = client.messages.create(
    body="Salut ! Voici ton message automatisé 📱",
    from_=twilio_number,
    to='+33612345678'  # Numéro du destinataire
)

print(f"Message envoyé ! SID: {message.sid}")

Version Node.js

const twilio = require('twilio');

// Tes identifiants Twilio
const accountSid = 'ton_account_sid';
const authToken = 'ton_auth_token';
const twilioNumber = '+33123456789';  // Ton numéro Twilio

// Initialiser le client
const client = twilio(accountSid, authToken);

// Envoyer un SMS
client.messages
    .create({
        body: 'Salut ! Voici ton message automatisé 📱',
        from: twilioNumber,
        to: '+33612345678'  // Numéro du destinataire
    })
    .then(message => console.log(`Message envoyé ! SID: ${message.sid}`))
    .catch(error => console.error('Erreur:', error));

Automatisation pour l'envoi en masse

Gestion d'une liste de contacts

Version Python
import csv
import time
from twilio.rest import Client

# Configuration
account_sid = 'ton_account_sid'
auth_token = 'ton_auth_token'
twilio_number = '+33123456789'

client = Client(account_sid, auth_token)

# Lire les contacts depuis un fichier CSV
def lire_contacts(fichier_csv):
    contacts = []
    with open(fichier_csv, 'r', encoding='utf-8') as file:
        reader = csv.DictReader(file)
        for row in reader:
            contacts.append({
                'nom': row['nom'],
                'telephone': row['telephone'],
                'prenom': row['prenom']
            })
    return contacts

# Personnaliser le message
def creer_message(nom, prenom, service="mes services"):
    return f"Bonjour {prenom} {nom} ! Je vous propose {service}. Contactez-moi pour plus d'infos. Cordialement."

# Envoyer à tous les contacts
def envoyer_sms_masse(contacts, delai=2):
    for contact in contacts:
        try:
            message_personnalise = creer_message(
                contact['nom'], 
                contact['prenom'], 
                "une consultation gratuite"
            )
            
            message = client.messages.create(
                body=message_personnalise,
                from_=twilio_number,
                to=contact['telephone']
            )
            
            print(f"✅ SMS envoyé à {contact['prenom']} {contact['nom']}")
            time.sleep(delai)  # Pause entre les envois
            
        except Exception as e:
            print(f"❌ Erreur pour {contact['nom']}: {e}")

# Utilisation
contacts = lire_contacts('mes_contacts.csv')
envoyer_sms_masse(contacts)
Version Node.js
const twilio = require('twilio');
const fs = require('fs');
const csv = require('csv-parser');

// Configuration
const accountSid = 'ton_account_sid';
const authToken = 'ton_auth_token';
const twilioNumber = '+33123456789';

const client = twilio(accountSid, authToken);

// Lire les contacts depuis un fichier CSV
function lireContacts(fichierCsv) {
    return new Promise((resolve, reject) => {
        const contacts = [];
        fs.createReadStream(fichierCsv)
            .pipe(csv())
            .on('data', (row) => {
                contacts.push({
                    nom: row.nom,
                    telephone: row.telephone,
                    prenom: row.prenom
                });
            })
            .on('end', () => resolve(contacts))
            .on('error', reject);
    });
}

// Personnaliser le message
function creerMessage(nom, prenom, service = "mes services") {
    return `Bonjour ${prenom} ${nom} ! Je vous propose ${service}. Contactez-moi pour plus d'infos. Cordialement.`;
}

// Envoyer à tous les contacts
async function envoyerSmsmasse(contacts, delai = 2000) {
    for (const contact of contacts) {
        try {
            const messagePersonnalise = creerMessage(
                contact.nom,
                contact.prenom,
                "une consultation gratuite"
            );
            
            const message = await client.messages.create({
                body: messagePersonnalise,
                from: twilioNumber,
                to: contact.telephone
            });
            
            console.log(`✅ SMS envoyé à ${contact.prenom} ${contact.nom}`);
            await new Promise(resolve => setTimeout(resolve, delai));
            
        } catch (error) {
            console.error(`❌ Erreur pour ${contact.nom}:`, error);
        }
    }
}

// Utilisation
(async () => {
    try {
        const contacts = await lireContacts('mes_contacts.csv');
        await envoyerSmsmasse(contacts);
    } catch (error) {
        console.error('Erreur:', error);
    }
})();

Installation des dépendances Node.js :

npm install csv-parser

Fonctionnalités avancées

Programmation d'envois

Version Python
import schedule
import time
from datetime import datetime

def envoyer_rappel_quotidien():
    # Ton code d'envoi SMS ici
    print(f"Rappel envoyé à {datetime.now()}")

# Programmer l'envoi tous les jours à 9h
schedule.every().day.at("09:00").do(envoyer_rappel_quotidien)

# Boucle d'exécution
while True:
    schedule.run_pending()
    time.sleep(60)

Installation :

pip install schedule
Version Node.js
const cron = require('node-cron');

function envoyerRappelQuotidien() {
    // Ton code d'envoi SMS ici
    console.log(`Rappel envoyé à ${new Date()}`);
}

// Programmer l'envoi tous les jours à 9h
cron.schedule('0 9 * * *', envoyerRappelQuotidien);

console.log('Planificateur SMS démarré...');

Installation :

npm install node-cron

Gestion des erreurs et limitations

Version Python
def envoyer_sms_securise(numero, message):
    try:
        # Vérifier le format du numéro
        if not numero.startswith('+'):
            numero = '+33' + numero.lstrip('0')
        
        # Limiter la taille du message
        if len(message) > 160:
            message = message[:157] + "..."
        
        # Envoyer le SMS
        result = client.messages.create(
            body=message,
            from_=twilio_number,
            to=numero
        )
        
        return True, result.sid
        
    except Exception as e:
        print(f"Erreur d'envoi: {e}")
        return False, str(e)
Version Node.js
async function envoyerSmsSecurise(numero, message) {
    try {
        // Vérifier le format du numéro
        if (!numero.startsWith('+')) {
            numero = '+33' + numero.replace(/^0+/, '');
        }
        
        // Limiter la taille du message
        if (message.length > 160) {
            message = message.substring(0, 157) + "...";
        }
        
        // Envoyer le SMS
        const result = await client.messages.create({
            body: message,
            from: twilioNumber,
            to: numero
        });
        
        return { success: true, sid: result.sid };
        
    } catch (error) {
        console.error('Erreur d\'envoi:', error);
        return { success: false, error: error.message };
    }
}

Optimisation des coûts

  • Un SMS coûte environ 0,075€ de France à France, si c'est de USA à France ca fait 0.2€ c'est pas la même.
  • Utilise des messages courts (160 caractères max)
  • Groupe tes envois pour éviter les pics de trafic
  • Surveille ton crédit Twilio régulièrement

Sécurité

Version Python
import os
from dotenv import load_dotenv

# Utiliser des variables d'environnement
load_dotenv()

account_sid = os.getenv('TWILIO_ACCOUNT_SID')
auth_token = os.getenv('TWILIO_AUTH_TOKEN')
twilio_number = os.getenv('TWILIO_PHONE_NUMBER')

Installation :

pip install python-dotenv
Version Node.js
require('dotenv').config();

// Utiliser des variables d'environnement
const accountSid = process.env.TWILIO_ACCOUNT_SID;
const authToken = process.env.TWILIO_AUTH_TOKEN;
const twilioNumber = process.env.TWILIO_PHONE_NUMBER;

Installation :

npm install dotenv

Fichier .env (pour les deux versions) :

TWILIO_ACCOUNT_SID=ton_account_sid
TWILIO_AUTH_TOKEN=ton_auth_token
TWILIO_PHONE_NUMBER=+33123456789

Exemples d'utilisation business

Pour un auto-entrepreneur

Version Python
def envoyer_devis_rappel(clients_en_attente):
    message_template = """
    Bonjour {nom} !
    
    Votre devis expire dans 48h.
    Confirmez rapidement : {lien_devis}
    
    Cordialement,
    {signature}
    """
    
    for client in clients_en_attente:
        message = message_template.format(
            nom=client['nom'],
            lien_devis=client['lien_devis'],
            signature="John Doe"
        )
        
        envoyer_sms_securise(client['telephone'], message)
Version Node.js
function envoyerDevisRappel(clientsEnAttente) {
    const messageTemplate = `
    Bonjour {nom} !
    
    Votre devis expire dans 48h.
    Confirmez rapidement : {lien_devis}
    
    Cordialement,
    {signature}
    `;
    
    clientsEnAttente.forEach(async (client) => {
        const message = messageTemplate
            .replace('{nom}', client.nom)
            .replace('{lien_devis}', client.lienDevis)
            .replace('{signature}', 'John Doe');
        
        await envoyerSmsSecurise(client.telephone, message);
    });
}

Pour une campagne commerciale

Version Python
def campagne_promotion(prospects, offre_speciale):
    message = f"""
    🎉 Offre spéciale {offre_speciale['nom']} !
    
    Réduction de {offre_speciale['pourcentage']}% 
    jusqu'au {offre_speciale['date_fin']}
    
    Code: {offre_speciale['code']}
    
    STOP pour se désabonner
    """
    
    for prospect in prospects:
        envoyer_sms_securise(prospect['telephone'], message)
Version Node.js
function campagnePromotion(prospects, offreSpeciale) {
    const message = `
    🎉 Offre spéciale ${offreSpeciale.nom} !
    
    Réduction de ${offreSpeciale.pourcentage}% 
    jusqu'au ${offreSpeciale.dateFin}
    
    Code: ${offreSpeciale.code}
    
    STOP pour se désabonner
    `;
    
    prospects.forEach(async (prospect) => {
        await envoyerSmsSecurise(prospect.telephone, message);
    });
}

Surveillance et analytics

Suivi des envois

Version Python
from datetime import datetime, timedelta

def analyser_campagne(date_debut, date_fin):
    messages = client.messages.list(
        date_sent_after=date_debut,
        date_sent_before=date_fin
    )
    
    stats = {
        'total_envoyes': len(messages),
        'livres': sum(1 for m in messages if m.status == 'delivered'),
        'echecs': sum(1 for m in messages if m.status == 'failed'),
        'cout_total': sum(float(m.price or 0) for m in messages)
    }
    
    return stats

# Utilisation
hier = datetime.now() - timedelta(days=1)
aujourdhui = datetime.now()
stats = analyser_campagne(hier, aujourdhui)
print(f"Statistiques: {stats}")
Version Node.js
async function analyserCampagne(dateDebut, dateFin) {
    try {
        const messages = await client.messages.list({
            dateSentAfter: dateDebut,
            dateSentBefore: dateFin
        });
        
        const stats = {
            totalEnvoyes: messages.length,
            livres: messages.filter(m => m.status === 'delivered').length,
            echecs: messages.filter(m => m.status === 'failed').length,
            coutTotal: messages.reduce((sum, m) => sum + (parseFloat(m.price) || 0), 0)
        };
        
        return stats;
        
    } catch (error) {
        console.error('Erreur analyse:', error);
        return null;
    }
}

// Utilisation
(async () => {
    const hier = new Date(Date.now() - 24 * 60 * 60 * 1000);
    const aujourdhui = new Date();
    const stats = await analyserCampagne(hier, aujourdhui);
    console.log('Statistiques:', stats);
})();

Alternatives et comparaisons

Twilio vs autres services

  • Twilio : Flexible, documentation excellente, prix moyen
  • AWS SNS : Intégré AWS, moins cher en volume
  • MessageBird : Interface plus simple, support européen
  • Nexmo/Vonage : Bonnes performances internationales

Dépannage courant

Problèmes fréquents

  • Numéro non vérifié : Vérifier dans la console Twilio
  • Message trop long : Limiter à 160 caractères
  • Erreur d'authentification : Vérifier SID et token
  • Numéro invalide : Respecter le format international (+33...)

Conclusion

L'automatisation SMS avec Twilio est un outil puissant pour automatiser ta communication client. Que tu sois commercial, auto-entrepreneur ou développeur, cette solution s'adapte à tes besoins avec une API simple et des performances fiables.

Remember : utilise ces outils de manière éthique et respecte toujours la vie privée de tes contacts. L'automatisation c'est cool, mais le respect c'est mieux !

Avec quelques lignes de code, tu peux maintenant envoyer des SMS personnalisés à des centaines de contacts. À toi de jouer ! 🚀

Automatisez l'envoi de vos SMS avec Twilio

Automatisez l'envoi de vos SMS avec Twilio

Automatisation d'envoi SMS avec Twilio : Guide complet

Introduction

Pas besoin de rentrer dans les détails, l'automatisation d'envoi des SMS c'est génial quand t'es commercial (même si c'est aussi utilisé dans le phishing) ou auto-entrepreneur pour envoyer tes prestations à une masse de personne, on va voir comment faire ça avec Twilio ici.

Qu'est-ce que Twilio ?

Twilio est une plateforme cloud qui permet d'intégrer facilement des fonctionnalités de communication dans tes applications. SMS, appels vocaux, messagerie instantanée... tout y passe. Pour nous, on va se concentrer sur l'API SMS qui est simple et efficace.

Prérequis

Avant de commencer, assure-toi d'avoir :

  • Un compte Twilio (gratuit pour débuter)
  • Python 3.6+ installé
  • Une carte de crédit pour valider ton compte (même en version gratuite)
  • Un numéro de téléphone vérifié

Configuration du compte Twilio

Étape 1 : Créer ton compte

Rends-toi sur twilio.com et crée ton compte. Après vérification, tu auras accès à :

  • Un Account SID (identifiant unique)
  • Un Auth Token (clé d'authentification)
  • 15$ de crédit gratuit pour tester

Tout se trouve dans la section API keys de Twilio

Étape 2 : Obtenir un numéro Twilio

Dans la console Twilio, va dans "Phone Numbers" et achète un numéro. Ça coûte environ 1-6$ par mois. Ce numéro sera l'expéditeur de tes SMS.

Étape 3 : Installer les bibliothèques

Pour Python :

pip install twilio

Pour Node.js :

npm install twilio

Envoi d'un SMS simple

Version Python

from twilio.rest import Client

# Tes identifiants Twilio
account_sid = 'ton_account_sid'
auth_token = 'ton_auth_token'
twilio_number = '+33123456789'  # Ton numéro Twilio

# Initialiser le client
client = Client(account_sid, auth_token)

# Envoyer un SMS
message = client.messages.create(
    body="Salut ! Voici ton message automatisé 📱",
    from_=twilio_number,
    to='+33612345678'  # Numéro du destinataire
)

print(f"Message envoyé ! SID: {message.sid}")

Version Node.js

const twilio = require('twilio');

// Tes identifiants Twilio
const accountSid = 'ton_account_sid';
const authToken = 'ton_auth_token';
const twilioNumber = '+33123456789';  // Ton numéro Twilio

// Initialiser le client
const client = twilio(accountSid, authToken);

// Envoyer un SMS
client.messages
    .create({
        body: 'Salut ! Voici ton message automatisé 📱',
        from: twilioNumber,
        to: '+33612345678'  // Numéro du destinataire
    })
    .then(message => console.log(`Message envoyé ! SID: ${message.sid}`))
    .catch(error => console.error('Erreur:', error));

Automatisation pour l'envoi en masse

Gestion d'une liste de contacts

Version Python
import csv
import time
from twilio.rest import Client

# Configuration
account_sid = 'ton_account_sid'
auth_token = 'ton_auth_token'
twilio_number = '+33123456789'

client = Client(account_sid, auth_token)

# Lire les contacts depuis un fichier CSV
def lire_contacts(fichier_csv):
    contacts = []
    with open(fichier_csv, 'r', encoding='utf-8') as file:
        reader = csv.DictReader(file)
        for row in reader:
            contacts.append({
                'nom': row['nom'],
                'telephone': row['telephone'],
                'prenom': row['prenom']
            })
    return contacts

# Personnaliser le message
def creer_message(nom, prenom, service="mes services"):
    return f"Bonjour {prenom} {nom} ! Je vous propose {service}. Contactez-moi pour plus d'infos. Cordialement."

# Envoyer à tous les contacts
def envoyer_sms_masse(contacts, delai=2):
    for contact in contacts:
        try:
            message_personnalise = creer_message(
                contact['nom'], 
                contact['prenom'], 
                "une consultation gratuite"
            )
            
            message = client.messages.create(
                body=message_personnalise,
                from_=twilio_number,
                to=contact['telephone']
            )
            
            print(f"✅ SMS envoyé à {contact['prenom']} {contact['nom']}")
            time.sleep(delai)  # Pause entre les envois
            
        except Exception as e:
            print(f"❌ Erreur pour {contact['nom']}: {e}")

# Utilisation
contacts = lire_contacts('mes_contacts.csv')
envoyer_sms_masse(contacts)
Version Node.js
const twilio = require('twilio');
const fs = require('fs');
const csv = require('csv-parser');

// Configuration
const accountSid = 'ton_account_sid';
const authToken = 'ton_auth_token';
const twilioNumber = '+33123456789';

const client = twilio(accountSid, authToken);

// Lire les contacts depuis un fichier CSV
function lireContacts(fichierCsv) {
    return new Promise((resolve, reject) => {
        const contacts = [];
        fs.createReadStream(fichierCsv)
            .pipe(csv())
            .on('data', (row) => {
                contacts.push({
                    nom: row.nom,
                    telephone: row.telephone,
                    prenom: row.prenom
                });
            })
            .on('end', () => resolve(contacts))
            .on('error', reject);
    });
}

// Personnaliser le message
function creerMessage(nom, prenom, service = "mes services") {
    return `Bonjour ${prenom} ${nom} ! Je vous propose ${service}. Contactez-moi pour plus d'infos. Cordialement.`;
}

// Envoyer à tous les contacts
async function envoyerSmsmasse(contacts, delai = 2000) {
    for (const contact of contacts) {
        try {
            const messagePersonnalise = creerMessage(
                contact.nom,
                contact.prenom,
                "une consultation gratuite"
            );
            
            const message = await client.messages.create({
                body: messagePersonnalise,
                from: twilioNumber,
                to: contact.telephone
            });
            
            console.log(`✅ SMS envoyé à ${contact.prenom} ${contact.nom}`);
            await new Promise(resolve => setTimeout(resolve, delai));
            
        } catch (error) {
            console.error(`❌ Erreur pour ${contact.nom}:`, error);
        }
    }
}

// Utilisation
(async () => {
    try {
        const contacts = await lireContacts('mes_contacts.csv');
        await envoyerSmsmasse(contacts);
    } catch (error) {
        console.error('Erreur:', error);
    }
})();

Installation des dépendances Node.js :

npm install csv-parser

Fonctionnalités avancées

Programmation d'envois

Version Python
import schedule
import time
from datetime import datetime

def envoyer_rappel_quotidien():
    # Ton code d'envoi SMS ici
    print(f"Rappel envoyé à {datetime.now()}")

# Programmer l'envoi tous les jours à 9h
schedule.every().day.at("09:00").do(envoyer_rappel_quotidien)

# Boucle d'exécution
while True:
    schedule.run_pending()
    time.sleep(60)

Installation :

pip install schedule
Version Node.js
const cron = require('node-cron');

function envoyerRappelQuotidien() {
    // Ton code d'envoi SMS ici
    console.log(`Rappel envoyé à ${new Date()}`);
}

// Programmer l'envoi tous les jours à 9h
cron.schedule('0 9 * * *', envoyerRappelQuotidien);

console.log('Planificateur SMS démarré...');

Installation :

npm install node-cron

Gestion des erreurs et limitations

Version Python
def envoyer_sms_securise(numero, message):
    try:
        # Vérifier le format du numéro
        if not numero.startswith('+'):
            numero = '+33' + numero.lstrip('0')
        
        # Limiter la taille du message
        if len(message) > 160:
            message = message[:157] + "..."
        
        # Envoyer le SMS
        result = client.messages.create(
            body=message,
            from_=twilio_number,
            to=numero
        )
        
        return True, result.sid
        
    except Exception as e:
        print(f"Erreur d'envoi: {e}")
        return False, str(e)
Version Node.js
async function envoyerSmsSecurise(numero, message) {
    try {
        // Vérifier le format du numéro
        if (!numero.startsWith('+')) {
            numero = '+33' + numero.replace(/^0+/, '');
        }
        
        // Limiter la taille du message
        if (message.length > 160) {
            message = message.substring(0, 157) + "...";
        }
        
        // Envoyer le SMS
        const result = await client.messages.create({
            body: message,
            from: twilioNumber,
            to: numero
        });
        
        return { success: true, sid: result.sid };
        
    } catch (error) {
        console.error('Erreur d\'envoi:', error);
        return { success: false, error: error.message };
    }
}

Optimisation des coûts

  • Un SMS coûte environ 0,075€ de France à France, si c'est de USA à France ca fait 0.2€ c'est pas la même.
  • Utilise des messages courts (160 caractères max)
  • Groupe tes envois pour éviter les pics de trafic
  • Surveille ton crédit Twilio régulièrement

Sécurité

Version Python
import os
from dotenv import load_dotenv

# Utiliser des variables d'environnement
load_dotenv()

account_sid = os.getenv('TWILIO_ACCOUNT_SID')
auth_token = os.getenv('TWILIO_AUTH_TOKEN')
twilio_number = os.getenv('TWILIO_PHONE_NUMBER')

Installation :

pip install python-dotenv
Version Node.js
require('dotenv').config();

// Utiliser des variables d'environnement
const accountSid = process.env.TWILIO_ACCOUNT_SID;
const authToken = process.env.TWILIO_AUTH_TOKEN;
const twilioNumber = process.env.TWILIO_PHONE_NUMBER;

Installation :

npm install dotenv

Fichier .env (pour les deux versions) :

TWILIO_ACCOUNT_SID=ton_account_sid
TWILIO_AUTH_TOKEN=ton_auth_token
TWILIO_PHONE_NUMBER=+33123456789

Exemples d'utilisation business

Pour un auto-entrepreneur

Version Python
def envoyer_devis_rappel(clients_en_attente):
    message_template = """
    Bonjour {nom} !
    
    Votre devis expire dans 48h.
    Confirmez rapidement : {lien_devis}
    
    Cordialement,
    {signature}
    """
    
    for client in clients_en_attente:
        message = message_template.format(
            nom=client['nom'],
            lien_devis=client['lien_devis'],
            signature="John Doe"
        )
        
        envoyer_sms_securise(client['telephone'], message)
Version Node.js
function envoyerDevisRappel(clientsEnAttente) {
    const messageTemplate = `
    Bonjour {nom} !
    
    Votre devis expire dans 48h.
    Confirmez rapidement : {lien_devis}
    
    Cordialement,
    {signature}
    `;
    
    clientsEnAttente.forEach(async (client) => {
        const message = messageTemplate
            .replace('{nom}', client.nom)
            .replace('{lien_devis}', client.lienDevis)
            .replace('{signature}', 'John Doe');
        
        await envoyerSmsSecurise(client.telephone, message);
    });
}

Pour une campagne commerciale

Version Python
def campagne_promotion(prospects, offre_speciale):
    message = f"""
    🎉 Offre spéciale {offre_speciale['nom']} !
    
    Réduction de {offre_speciale['pourcentage']}% 
    jusqu'au {offre_speciale['date_fin']}
    
    Code: {offre_speciale['code']}
    
    STOP pour se désabonner
    """
    
    for prospect in prospects:
        envoyer_sms_securise(prospect['telephone'], message)
Version Node.js
function campagnePromotion(prospects, offreSpeciale) {
    const message = `
    🎉 Offre spéciale ${offreSpeciale.nom} !
    
    Réduction de ${offreSpeciale.pourcentage}% 
    jusqu'au ${offreSpeciale.dateFin}
    
    Code: ${offreSpeciale.code}
    
    STOP pour se désabonner
    `;
    
    prospects.forEach(async (prospect) => {
        await envoyerSmsSecurise(prospect.telephone, message);
    });
}

Surveillance et analytics

Suivi des envois

Version Python
from datetime import datetime, timedelta

def analyser_campagne(date_debut, date_fin):
    messages = client.messages.list(
        date_sent_after=date_debut,
        date_sent_before=date_fin
    )
    
    stats = {
        'total_envoyes': len(messages),
        'livres': sum(1 for m in messages if m.status == 'delivered'),
        'echecs': sum(1 for m in messages if m.status == 'failed'),
        'cout_total': sum(float(m.price or 0) for m in messages)
    }
    
    return stats

# Utilisation
hier = datetime.now() - timedelta(days=1)
aujourdhui = datetime.now()
stats = analyser_campagne(hier, aujourdhui)
print(f"Statistiques: {stats}")
Version Node.js
async function analyserCampagne(dateDebut, dateFin) {
    try {
        const messages = await client.messages.list({
            dateSentAfter: dateDebut,
            dateSentBefore: dateFin
        });
        
        const stats = {
            totalEnvoyes: messages.length,
            livres: messages.filter(m => m.status === 'delivered').length,
            echecs: messages.filter(m => m.status === 'failed').length,
            coutTotal: messages.reduce((sum, m) => sum + (parseFloat(m.price) || 0), 0)
        };
        
        return stats;
        
    } catch (error) {
        console.error('Erreur analyse:', error);
        return null;
    }
}

// Utilisation
(async () => {
    const hier = new Date(Date.now() - 24 * 60 * 60 * 1000);
    const aujourdhui = new Date();
    const stats = await analyserCampagne(hier, aujourdhui);
    console.log('Statistiques:', stats);
})();

Alternatives et comparaisons

Twilio vs autres services

  • Twilio : Flexible, documentation excellente, prix moyen
  • AWS SNS : Intégré AWS, moins cher en volume
  • MessageBird : Interface plus simple, support européen
  • Nexmo/Vonage : Bonnes performances internationales

Dépannage courant

Problèmes fréquents

  • Numéro non vérifié : Vérifier dans la console Twilio
  • Message trop long : Limiter à 160 caractères
  • Erreur d'authentification : Vérifier SID et token
  • Numéro invalide : Respecter le format international (+33...)

Conclusion

L'automatisation SMS avec Twilio est un outil puissant pour automatiser ta communication client. Que tu sois commercial, auto-entrepreneur ou développeur, cette solution s'adapte à tes besoins avec une API simple et des performances fiables.

Remember : utilise ces outils de manière éthique et respecte toujours la vie privée de tes contacts. L'automatisation c'est cool, mais le respect c'est mieux !

Avec quelques lignes de code, tu peux maintenant envoyer des SMS personnalisés à des centaines de contacts. À toi de jouer ! 🚀

Commentaires

0/500 caractères

Aucun commentaire pour le moment. Soyez le premier à commenter !