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

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 gratuitArticles similaires
Contacts et vCards dans WhatsApp Business API : partage professionnel
Comment partager des contacts et vCards via l'API WhatsApp Business Cloud. Format, implémentation et cas d'usage professionnels pour les entreprises africaines.
Location messages WhatsApp : partager une adresse ou position GPS
Comment envoyer et recevoir des messages de localisation via WhatsApp Business API. Partage d'adresse, coordonnées GPS, cas d'usage livraison et points de vente.
Messages audio WhatsApp Business : création, envoi et cas d'usage
Comment envoyer des messages audio via WhatsApp Business API. Formats supportés, enregistrement, cas d'usage et stratégies pour les entreprises africaines.