Guide complet pour intégrer et automatiser WhatsApp avec notre API puissante et simple d'utilisation. Testez les endpoints directement depuis cette page.
Toutes les requêtes à l'API nécessitent deux en-têtes pour l'authentification :
Ces clés sont générées pour chaque application dans votre dashboard.
API Key: wapi_1234567890abcdef1234567890abcdef
API Secret: abcdef1234567890abcdef1234567890abcdef
Ces clés sont fictives et ne fonctionneront pas. Inscrivez-vous pour obtenir des clés réelles et tester l'API.
Envoyez un message texte ou un média (image, vidéo, document) à un numéro WhatsApp spécifié.
image (JPEG, PNG, GIF), video (MP4, 3GP), document (PDF, DOC, DOCX)
{
"phone": "24104570040",
"message": "Voici une image de test!",
"mediaUrl": "https://example.com/sample.jpg",
"mediaType": "image"
}
# Message texte simple
curl -X POST https://apiwx.alissa-ia.ga/api/send-message \
-H "X-API-Key: wapi_1234567890abcdef1234567890abcdef" \
-H "X-API-Secret: abcdef1234567890abcdef1234567890abcdef" \
-H "Content-Type: application/json" \
-d '{"phone": "24104570040", "message": "Bonjour de test!"}'
# Message avec média (image)
curl -X POST https://apiwx.alissa-ia.ga/api/send-message \
-H "X-API-Key: wapi_1234567890abcdef1234567890abcdef" \
-H "X-API-Secret: abcdef1234567890abcdef1234567890abcdef" \
-H "Content-Type: application/json" \
-d '{"phone": "24104570040", "message": "Voici une image!", "mediaUrl": "https://example.com/sample.jpg", "mediaType": "image"}'
{
"success": true,
"message": "Message envoyé",
"timestamp": "2025-10-07T12:00:00Z"
}
Vérifiez le statut de connexion WhatsApp de votre application.
Aucun paramètre requis.
curl -X GET https://apiwx.alissa-ia.ga/api/status \
-H "X-API-Key: wapi_1234567890abcdef1234567890abcdef" \
-H "X-API-Secret: abcdef1234567890abcdef1234567890abcdef"
{
"appName": "Mon App",
"connected": true,
"phoneNumber": "24104570040"
}
Récupérez la liste des messages WhatsApp reçus.
curl -X GET https://apiwx.alissa-ia.ga/api/messages/received?limit=50 \
-H "X-API-Key: wapi_1234567890abcdef1234567890abcdef" \
-H "X-API-Secret: abcdef1234567890abcdef1234567890abcdef"
{
"success": true,
"count": 2,
"messages": [
{
"phone": "24104570040",
"message": "Bonjour!",
"media_type": null,
"media_url": null,
"created_at": "2025-10-07T12:00:00Z"
},
...
]
}
Récupérez la liste des messages WhatsApp envoyés.
curl -X GET https://apiwx.alissa-ia.ga/api/messages/sent?limit=50 \
-H "X-API-Key: wapi_1234567890abcdef1234567890abcdef" \
-H "X-API-Secret: abcdef1234567890abcdef1234567890abcdef"
{
"success": true,
"count": 2,
"messages": [
{
"phone": "24104570040",
"message": "Bonjour!",
"media_type": "image",
"media_url": "https://example.com/sample.jpg",
"created_at": "2025-10-07T12:00:00Z"
},
...
]
}
Créez une campagne d'envoi en masse avec délais programmés. Envoyez à des centaines de contacts avec un système de lots intelligents.
image, video, documentComment ça marche :
{
"name": "Campagne Marketing Janvier",
"phones": [
"237690000001",
"237690000002",
"237690000003"
],
"message": "Bonjour ! Découvrez nos offres exclusives 🎉",
"delayMinutes": 10,
"mediaUrl": "https://example.com/promo.jpg",
"mediaType": "image"
}
curl -X POST https://apiwx.alissa-ia.ga/api/campaigns/create \
-H "X-API-Key: wapi_1234567890abcdef1234567890abcdef" \
-H "X-API-Secret: abcdef1234567890abcdef1234567890abcdef" \
-H "Content-Type: application/json" \
-d '{
"name": "Campagne Test",
"phones": ["237690000001", "237690000002"],
"message": "Message de test",
"delayMinutes": 5
}'
{
"success": true,
"message": "Campagne créée et démarrée",
"campaign": {
"id": 1,
"name": "Campagne Marketing Janvier",
"total_recipients": 3,
"delay_minutes": 10,
"batch_size": 10,
"estimated_duration_minutes": 10,
"status": "running"
}
}
Vérifiez le statut et la progression d'une campagne en cours ou terminée.
curl -X GET https://apiwx.alissa-ia.ga/api/campaigns/1/status \
-H "X-API-Key: wapi_1234567890abcdef1234567890abcdef" \
-H "X-API-Secret: abcdef1234567890abcdef1234567890abcdef"
{
"success": true,
"campaign": {
"id": 1,
"name": "Campagne Marketing Janvier",
"status": "running",
"total_recipients": 50,
"sent_count": 30,
"failed_count": 2,
"pending_count": 18,
"delay_minutes": 10,
"progress_percentage": 60,
"created_at": "2025-01-15T10:00:00Z",
"started_at": "2025-01-15T10:00:05Z",
"completed_at": null
}
}
Statuts possibles :
pending - En attente de démarragerunning - En cours d'envoicompleted - Terminée avec succèscancelled - Annulée manuellementfailed - Échec (WhatsApp déconnecté ou erreur)Annulez une campagne en cours. Les messages déjà envoyés ne seront pas affectés, seuls les envois en attente seront stoppés.
curl -X POST https://apiwx.alissa-ia.ga/api/campaigns/1/cancel \
-H "X-API-Key: wapi_1234567890abcdef1234567890abcdef" \
-H "X-API-Secret: abcdef1234567890abcdef1234567890abcdef"
{
"success": true,
"message": "Campagne annulée"
}
Note importante : Les messages déjà envoyés ne peuvent pas être annulés. Seuls les messages en attente (pending) seront ignorés. La campagne passera au statut "cancelled".
Script pour créer une campagne et suivre sa progression en temps réel avec affichage stylé dans le terminal.
npm install axios
const axios = require('axios');
const API_KEY = 'wapi_1234567890abcdef1234567890abcdef';
const API_SECRET = 'abcdef1234567890abcdef1234567890abcdef';
const BASE_URL = 'https://apiwx.alissa-ia.ga';
// Fonction pour créer une campagne
async function createCampaign() {
try {
const response = await axios.post(
`${BASE_URL}/api/campaigns/create`,
{
name: 'Ma Campagne Test',
phones: [
'237690000001',
'237690000002',
'237690000003',
// Ajoutez autant de numéros que nécessaire
],
message: 'Bonjour ! Ceci est un message de test.',
delayMinutes: 10, // 5, 10 ou 20 minutes
// Optionnel : ajouter un média
// mediaUrl: 'https://example.com/promo.jpg',
// mediaType: 'image'
},
{
headers: {
'X-API-Key': API_KEY,
'X-API-Secret': API_SECRET,
'Content-Type': 'application/json'
}
}
);
console.log('✅ Campagne créée :', response.data);
return response.data.campaign.id;
} catch (error) {
console.error('❌ Erreur création :', error.response?.data || error.message);
throw error;
}
}
// Fonction pour suivre la progression
async function trackCampaign(campaignId) {
console.log(`\\n📊 Suivi de la campagne ${campaignId}...\\n`);
const interval = setInterval(async () => {
try {
const response = await axios.get(
`${BASE_URL}/api/campaigns/${campaignId}/status`,
{
headers: {
'X-API-Key': API_KEY,
'X-API-Secret': API_SECRET
}
}
);
const campaign = response.data.campaign;
console.clear();
console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
console.log(`📋 Campagne: ${campaign.name}`);
console.log(`📊 Statut: ${campaign.status.toUpperCase()}`);
console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
console.log(`✅ Envoyés: ${campaign.sent_count}/${campaign.total_recipients}`);
console.log(`❌ Échecs: ${campaign.failed_count}`);
console.log(`⏳ En attente: ${campaign.pending_count}`);
console.log(`📈 Progression: ${campaign.progress_percentage}%`);
console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\\n');
// Arrêter si terminée ou annulée
if (['completed', 'cancelled', 'failed'].includes(campaign.status)) {
clearInterval(interval);
console.log(`\\n🏁 Campagne terminée avec le statut: ${campaign.status}\\n`);
}
} catch (error) {
console.error('❌ Erreur suivi :', error.response?.data || error.message);
clearInterval(interval);
}
}, 5000); // Vérifier toutes les 5 secondes
}
// Fonction pour annuler une campagne
async function cancelCampaign(campaignId) {
try {
const response = await axios.post(
`${BASE_URL}/api/campaigns/${campaignId}/cancel`,
{},
{
headers: {
'X-API-Key': API_KEY,
'X-API-Secret': API_SECRET
}
}
);
console.log('🛑', response.data.message);
} catch (error) {
console.error('❌ Erreur annulation :', error.response?.data || error.message);
}
}
// Utilisation
(async () => {
try {
// Créer la campagne
const campaignId = await createCampaign();
// Suivre la progression
await trackCampaign(campaignId);
// Pour annuler (décommentez si besoin) :
// setTimeout(() => cancelCampaign(campaignId), 30000); // Annuler après 30s
} catch (error) {
console.error('Erreur globale :', error);
}
})();
campaign.jsnpm install axiosnode campaign.jsCas d'usage typiques :
Plus il y a de destinataires, plus le délai doit être élevé. Recommandé : 5 min pour <30 contacts, 10 min pour 30-100 contacts, 20 min pour +100 contacts.
Assurez-vous d'avoir suffisamment de requêtes disponibles dans votre abonnement avant de lancer une campagne. Chaque message compte comme 1 requête.
Envoyez à 2-3 numéros de test avant de lancer la vraie campagne pour vérifier le message et le média.
Utilisez l'endpoint de statut pour détecter les problèmes rapidement (échecs, déconnexion WhatsApp).
Format international sans le signe + (ex: 237690000000 pour le Cameroun).
Assurez-vous que votre application est bien connectée à WhatsApp avant de lancer une campagne (utilisez GET /api/status).
N'envoyez que des messages à des contacts qui ont consenti à recevoir vos communications. Respectez les lois anti-spam.
Obtenez le QR code pour connecter WhatsApp ou vérifiez l'état de connexion actuel. Cette route initialise automatiquement la connexion si nécessaire.
Aucun paramètre requis.
curl -X GET https://apiwx.alissa-ia.ga/api/qr-code \
-H "X-API-Key: wapi_1234567890abcdef1234567890abcdef" \
-H "X-API-Secret: abcdef1234567890abcdef1234567890abcdef"
WhatsApp déjà connecté :
{
"success": true,
"connected": true,
"phoneNumber": "237690000000",
"message": "WhatsApp déjà connecté"
}
QR Code disponible :
{
"success": true,
"connected": false,
"qrCode": "2@eL9kF3hTvN1pQ8w...",
"message": "QR code généré"
}
En attente :
{
"success": true,
"connected": false,
"qrCode": null,
"message": "En attente de QR code"
}
Tip : Utilisez cette route pour implémenter votre propre système de connexion WhatsApp. Pollez toutes les 2-3 secondes pour obtenir le QR code ou détecter quand la connexion est établie.
Générez un code de pairing pour connecter WhatsApp via numéro de téléphone, sans QR code. Entrez ce code dans WhatsApp sur votre appareil principal (Paramètres > Appareils connectés > Connecter avec numéro de téléphone).
Important :
{
"phoneNumber": "24104570040"
}
curl -X POST https://apiwx.alissa-ia.ga/api/request-pairing-code \
-H "X-API-Key: wapi_1234567890abcdef1234567890abcdef" \
-H "X-API-Secret: abcdef1234567890abcdef1234567890abcdef" \
-H "Content-Type: application/json" \
-d '{"phoneNumber": "24104570040"}'
Succès :
{
"success": true,
"pairingCode": "12345678",
"message": "Code de pairing généré. Entrez-le dans WhatsApp sur votre téléphone.",
"phoneNumber": "24104570040",
"expiresIn": "5 minutes"
}
Erreurs courantes :
{
"error": "Numéro non autorisé",
"message": "Vérifiez le format du numéro (sans + ni espaces)"
}
{
"error": "Trop de tentatives",
"message": "Attendez quelques minutes avant de réessayer"
}
{
"error": "WhatsApp déjà connecté",
"message": "Déconnectez d'abord pour utiliser un autre numéro (utilisez /api/disconnect)"
}
Étapes sur votre téléphone :
Déconnectez WhatsApp de votre application et supprimez définitivement la session. Vous devrez scanner un nouveau QR code pour vous reconnecter.
Aucun paramètre requis.
curl -X POST https://apiwx.alissa-ia.ga/api/disconnect \
-H "X-API-Key: wapi_1234567890abcdef1234567890abcdef" \
-H "X-API-Secret: abcdef1234567890abcdef1234567890abcdef"
{
"success": true,
"message": "WhatsApp déconnecté avec succès"
}
Attention : Cette action supprime définitivement la session WhatsApp. Le dossier d'authentification est supprimé et tous les WebSockets actifs sont fermés. Vous devrez scanner un nouveau QR code pour vous reconnecter.
Script complet pour obtenir le QR code, l'afficher dans le terminal et détecter automatiquement la connexion.
npm install axios qrcode-terminal
const axios = require('axios');
const qrcode = require('qrcode-terminal');
const API_KEY = 'wapi_1234567890abcdef1234567890abcdef';
const API_SECRET = 'abcdef1234567890abcdef1234567890abcdef';
const BASE_URL = 'https://apiwx.alissa-ia.ga';
// Fonction pour connecter WhatsApp
async function connectWhatsApp() {
console.log('🔍 Vérification de la connexion WhatsApp...\n');
let connected = false;
while (!connected) {
try {
const response = await axios.get(`${BASE_URL}/api/qr-code`, {
headers: {
'X-API-Key': API_KEY,
'X-API-Secret': API_SECRET
}
});
if (response.data.connected) {
console.log('✅ WhatsApp connecté !');
console.log(`📞 Numéro: +${response.data.phoneNumber}`);
connected = true;
break;
}
if (response.data.qrCode) {
console.clear();
console.log('📱 Scannez ce QR Code avec WhatsApp:\n');
qrcode.generate(response.data.qrCode, { small: true });
console.log('\n⏳ En attente de la connexion...\n');
} else {
console.log('⏳ Génération du QR code en cours...');
}
// Attendre 3 secondes avant la prochaine vérification
await new Promise(resolve => setTimeout(resolve, 3000));
} catch (error) {
console.error('❌ Erreur:', error.response?.data || error.message);
break;
}
}
}
// Fonction pour déconnecter WhatsApp
async function disconnectWhatsApp() {
try {
const response = await axios.post(
`${BASE_URL}/api/disconnect`,
{},
{
headers: {
'X-API-Key': API_KEY,
'X-API-Secret': API_SECRET
}
}
);
console.log('✅', response.data.message);
} catch (error) {
console.error('❌ Erreur:', error.response?.data || error.message);
}
}
// Utilisation
connectWhatsApp();
// Pour déconnecter plus tard :
// disconnectWhatsApp();
connect-whatsapp.js avec le code ci-dessusAPI_KEY et API_SECRET par vos vraies clésnpm install axios qrcode-terminalnode connect-whatsapp.jsAvantage : Ce script vérifie automatiquement l'état de connexion toutes les 3 secondes et affiche un nouveau QR code si nécessaire. Une fois connecté, il affiche le numéro de téléphone et arrête le polling.
Testez un chatbot en temps réel qui utilise WebSocket pour recevoir les messages WhatsApp et une route serveur pour générer des réponses avec OpenAI. La clé OpenAI n'est pas stockée.
⚠️ Cette clé est envoyée au serveur pour les tests uniquement et n'est pas stockée. Pour une utilisation sécurisée en production, utilisez l'exemple Node.js ci-dessous.
Pour une utilisation en production, implémentez le chatbot dans un environnement Node.js sécurisé afin de protéger vos clés API :
npm install ws openai
Utilisez le code ci-dessous dans un fichier, par exemple chatbot.js. Remplacez les clés par vos valeurs réelles.
node chatbot.js
Envoyez un message WhatsApp au numéro associé à votre application WAxion. Le chatbot recevra le message via WebSocket, générera une réponse avec OpenAI, et répondra automatiquement.
Note de sécurité : Le script Node.js s'exécute côté serveur, gardant vos clés API (WAxion et OpenAI) sécurisées.
const WebSocket = require('ws');
const { OpenAI } = require('openai');
const API_KEY = 'wapi_0389114cb8edcd50d4570b505e3a8a4b';
const API_SECRET = '52f5a8dfac2d951c0d253756cee8c0f9ca4a2e99dd09fd9e00711f314d30ebe7';
const OPENAI_API_KEY = 'sk-****';
const WS_URL = `wss://apiwx.alissa-ia.ga/ws?apiKey=${API_KEY}&apiSecret=${API_SECRET}`;
const openai = new OpenAI({ apiKey: OPENAI_API_KEY });
const ws = new WebSocket(WS_URL);
ws.on('open', () => {
console.log('✅ Connecté au WebSocket !');
});
ws.on('message', async (data) => {
try {
const event = JSON.parse(data.toString());
if (event.type === 'new_message') {
const incomingMessage = event.message;
console.log(`🤖 Génération IA : "${incomingMessage}"`);
const completion = await openai.chat.completions.create({
model: 'gpt-3.5-turbo',
messages: [
{ role: 'system', content: 'Tu es un assistant WhatsApp amical et concis.' },
{ role: 'user', content: incomingMessage }
]
});
const reply = completion.choices[0].message.content.trim();
ws.send(JSON.stringify({
type: 'reply',
phone: event.from,
message: reply
}));
console.log(`✅ Réponse envoyée : "${reply}"`);
}
} catch (error) {
console.error('❌ Erreur:', error.message);
}
});
ws.on('error', (error) => {
console.error('❌ Erreur WebSocket:', error.message);
});
ws.on('close', () => {
console.log('🔌 WebSocket fermé.');
});
Copiez ce code dans un fichier chatbot.js, configurez vos clés, et exécutez-le avec Node.js. Installez les dépendances avec npm i ws openai.