Aller au contenu principal
Guides Techniques• 6 min de lecture

Envoyer des documents PDF via WhatsApp Business API

Comment envoyer des documents PDF, Word et autres fichiers via l'API WhatsApp Business Cloud. Formats supportés, limites, exemples de code et cas d'usage professionnels.

Envoyer des factures, des devis, des contrats, des bons de livraison, des brochures ou des rapports directement dans WhatsApp est une fonctionnalité que de nombreuses entreprises africaines utilisent au quotidien. C'est le moyen le plus direct de partager un document officiel avec un client qui n'a pas forcément un email professionnel actif mais qui consulte WhatsApp plusieurs fois par heure. L'API WhatsApp Business Cloud permet d'automatiser ces envois à grande échelle, avec la même facilité que l'envoi d'un message texte. Voici tout ce qu'il faut savoir.

Formats de documents supportés

L'API WhatsApp Business Cloud prend en charge un large spectre de formats documentaires :

Format Extension Taille max
PDF .pdf 100 MB
Microsoft Word .doc, .docx 100 MB
Microsoft Excel .xls, .xlsx 100 MB
Microsoft PowerPoint .ppt, .pptx 100 MB
OpenDocument .odt, .ods, .odp 100 MB
Texte .txt 100 MB

Conseil pratique : même si la limite est de 100 MB, visez des documents de moins de 5-10 MB pour des raisons de performance réseau. Un PDF de 50 pages bien optimisé ne devrait pas dépasser 2-3 MB.

En pratique, le PDF est de loin le format le plus utilisé pour les communications professionnelles via WhatsApp. Il s'ouvre nativement dans WhatsApp sur iOS et Android et offre une mise en page préservée.

Envoyer un document par URL

La méthode la plus simple : si votre document est hébergé sur un serveur web accessible publiquement :

async function sendDocumentByUrl(to, documentUrl, filename, caption = '') {
    const payload = {
        messaging_product: 'whatsapp',
        to: to,
        type: 'document',
        document: {
            link: documentUrl,
            filename: filename,  // Nom affiché dans WhatsApp
            caption: caption     // Description optionnelle (max 1024 chars)
        }
    };
    
    const response = await axios.post(API_URL, payload, { headers: HEADERS });
    return response.data;
}

// Exemples concrets pour des entreprises africaines

// Facture après commande WooCommerce
await sendDocumentByUrl(
    '237671234567',
    'https://boutique-douala.com/factures/FAC-2025-1234.pdf',
    'Facture-2025-1234.pdf',
    'Veuillez trouver ci-joint votre facture pour la commande #1234. Merci de votre achat !'
);

// Envoi d'un devis à un prospect
await sendDocumentByUrl(
    '212661234567',
    'https://agence-casablanca.com/devis/DEV-MARTIN-2025.pdf',
    'Devis-Agence-Digitale-2025.pdf',
    'Bonjour, voici le devis que vous avez demandé. Répondez à ce message pour toute question.'
);

// Bulletin de paie (avec URL sécurisée, token temporaire)
const secureUrl = await generateSignedUrl('bulletins/employe-123/mars-2025.pdf', 3600); // Expire dans 1h
await sendDocumentByUrl(
    '221781234567',
    secureUrl,
    'Bulletin-Mars-2025.pdf',
    'Votre bulletin de salaire de mars 2025 est disponible.'
);

Envoyer un document en l'uploadant d'abord

Pour les documents générés dynamiquement (factures créées à la volée, rapports personnalisés) ou stockés sur des serveurs privés :

const FormData = require('form-data');
const fs = require('fs');
const path = require('path');

async function uploadDocument(filePath) {
    const mediaUrl = `https://graph.facebook.com/v18.0/${process.env.PHONE_NUMBER_ID}/media`;
    const ext = path.extname(filePath).toLowerCase();
    
    const mimeTypes = {
        '.pdf': 'application/pdf',
        '.docx': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
        '.xlsx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
        '.doc': 'application/msword',
        '.xls': 'application/vnd.ms-excel'
    };
    
    const mimeType = mimeTypes[ext] || 'application/octet-stream';
    
    const form = new FormData();
    form.append('messaging_product', 'whatsapp');
    form.append('type', mimeType);
    form.append('file', fs.createReadStream(filePath), {
        filename: path.basename(filePath),
        contentType: mimeType
    });
    
    const response = await axios.post(mediaUrl, form, {
        headers: { ...HEADERS, ...form.getHeaders() }
    });
    
    return response.data.id;
}

async function sendUploadedDocument(to, mediaId, filename, caption = '') {
    const payload = {
        messaging_product: 'whatsapp',
        to: to,
        type: 'document',
        document: {
            id: mediaId,
            filename: filename,
            caption: caption
        }
    };
    
    const response = await axios.post(API_URL, payload, { headers: HEADERS });
    return response.data;
}

Cas d'usage : génération et envoi automatique de factures

Un exemple complet intégrant la génération PDF et l'envoi WhatsApp, très courant pour les e-commerces africains :

const PDFDocument = require('pdfkit'); // npm install pdfkit
const path = require('path');
const os = require('os');

async function generateAndSendInvoice(order) {
    const { orderId, customerName, customerPhone, items, total, date } = order;
    
    // 1. Générer le PDF en mémoire
    const pdfPath = path.join(os.tmpdir(), `facture-${orderId}.pdf`);
    await generateInvoicePDF(pdfPath, order);
    
    // 2. Uploader sur WhatsApp API
    const mediaId = await uploadDocument(pdfPath);
    
    // 3. Envoyer le message avec le document
    const result = await sendUploadedDocument(
        customerPhone,
        mediaId,
        `Facture-${orderId}.pdf`,
        `Bonjour ${customerName} ! Voici votre facture pour la commande #${orderId} du ${date}. Total : ${total} FCFA.`
    );
    
    // 4. Nettoyer le fichier temporaire
    fs.unlinkSync(pdfPath);
    
    return result;
}

async function generateInvoicePDF(outputPath, order) {
    return new Promise((resolve, reject) => {
        const doc = new PDFDocument({ margin: 50 });
        const stream = fs.createWriteStream(outputPath);
        
        doc.pipe(stream);
        
        // En-tête
        doc.fontSize(20).text('FACTURE', { align: 'center' });
        doc.moveDown();
        doc.fontSize(12).text(`N° ${order.orderId}`, { align: 'right' });
        doc.text(`Date : ${order.date}`, { align: 'right' });
        doc.moveDown();
        
        // Client
        doc.fontSize(14).text('Facturer à :');
        doc.fontSize(12).text(order.customerName);
        doc.moveDown();
        
        // Articles
        doc.fontSize(14).text('Détail de la commande :');
        doc.moveDown(0.5);
        
        order.items.forEach(item => {
            doc.fontSize(11).text(
                `${item.name} × ${item.qty}    ${item.price} FCFA`,
                { indent: 20 }
            );
        });
        
        doc.moveDown();
        doc.fontSize(14).text(`Total : ${order.total} FCFA`, { align: 'right' });
        
        doc.end();
        stream.on('finish', resolve);
        stream.on('error', reject);
    });
}

Pour d'autres types de médias WhatsApp, consultez les articles sur l'envoi d'images et les templates de messages WhatsApp. La documentation technique de base reste le guide WhatsApp Business API.

FAQ

Q: Les PDFs WhatsApp sont-ils accessibles hors ligne une fois téléchargés ?

R: Oui. Une fois qu'un contact a téléchargé le document dans WhatsApp, il est stocké sur son appareil et consultable hors ligne. WhatsApp demande à l'utilisateur de télécharger manuellement les documents (ils ne se téléchargent pas automatiquement pour économiser les données mobiles). Précisez dans votre caption qu'il s'agit d'un document important pour inciter au téléchargement.

Q: Peut-on envoyer plusieurs documents dans le même message WhatsApp ?

R: Non, un message API WhatsApp ne peut contenir qu'un seul média (une image OU un document OU une vidéo). Pour envoyer plusieurs documents, envoyez plusieurs messages successifs avec un court délai entre chacun (500ms à 1 seconde). Précisez le contexte dans la caption de chaque document ("1/3 : Devis", "2/3 : Conditions générales").

Q: Un document envoyé via WhatsApp API peut-il être visionné directement dans l'app sans téléchargement ?

R: Les PDFs peuvent être prévisualisés directement dans WhatsApp sur iOS et Android (sans quitter l'application). Les fichiers Word, Excel et autres formats nécessitent une application externe. Pour une consultation fluide sans app tierce, convertissez vos documents en PDF avant l'envoi — c'est la meilleure pratique universelle.

Q: Comment protéger par mot de passe un PDF envoyé via WhatsApp ?

R: Vous pouvez envoyer des PDFs protégés par mot de passe via WhatsApp API. L'utilisateur verra une interface de saisie du mot de passe lors de l'ouverture. Communiquez le mot de passe via un message texte séparé (ou un autre canal) pour la sécurité. Pour des documents très sensibles (contrats, bulletins de paie), cette protection est recommandée.

Q: Le nom du fichier dans la caption correspond-il toujours au nom affiché dans WhatsApp ?

R: Le champ filename dans votre requête API détermine le nom affiché dans WhatsApp. Si vous utilisez la méthode URL (sans upload préalable), WhatsApp peut utiliser le nom du fichier extrait de l'URL si filename n'est pas spécifié. Spécifiez toujours explicitement le filename pour un affichage professionnel et cohérent.


Automatisez l'envoi de vos documents professionnels via WhatsApp. Whakup simplifie la gestion des médias et l'automatisation de vos communications business.

#envoyer pdf whatsapp api#documents whatsapp business#whatsapp media documents#pdf whatsapp#whatsapp business api fichiers
Pablo Lenormand
Pablo LenormandCo-fondateur & CPO

Co-fondateur et Chief Product Officer de Whakup, Pablo conçoit les fonctionnalités qui permettent aux marques africaines de maximiser leur impact sur WhatsApp.

🚀

Prêt à passer à l'action ?

Essayez Whakup gratuitement pendant 15 jours. Aucune carte bancaire requise.

Démarrer l'essai gratuit