115 lines
3.1 KiB
JavaScript
115 lines
3.1 KiB
JavaScript
const { create } = require('venom-bot');
|
|
const express = require('express');
|
|
const path = require('path');
|
|
|
|
let client;
|
|
let qrCodeBase64 = null;
|
|
let isConnected = false;
|
|
|
|
const app = express();
|
|
app.use(express.static('public'));
|
|
app.use(express.json());
|
|
|
|
// 📄 Page avec QR Code
|
|
app.get('/login', (req, res) => {
|
|
res.sendFile(path.join(__dirname, 'public', 'login.html'));
|
|
});
|
|
|
|
// 📄 Page "connecté"
|
|
app.get('/connected', (req, res) => {
|
|
res.sendFile(path.join(__dirname, 'public', 'connected.html'));
|
|
});
|
|
|
|
// 🔄 QR code en base64 + état de connexion
|
|
app.get('/api/qrcode', (req, res) => {
|
|
res.json({ qr: qrCodeBase64, connected: isConnected });
|
|
});
|
|
|
|
// ✅ API POST : envoie message avec boutons
|
|
app.post('/sendButtons', async (req, res) => {
|
|
const { phone, title, message, buttons } = req.body;
|
|
|
|
console.log('📥 Requête reçue :');
|
|
console.log('Phone:', phone);
|
|
console.log('Title:', title);
|
|
console.log('Message:', message);
|
|
console.log('Buttons brut:', buttons);
|
|
|
|
if (!client) return res.status(500).json({ error: 'Client WhatsApp non initialisé' });
|
|
if (!phone || !message || !title || !Array.isArray(buttons)) {
|
|
return res.status(400).json({ error: 'Paramètres manquants ou invalides' });
|
|
}
|
|
|
|
try {
|
|
const formattedButtons = buttons.map(btn => ({
|
|
buttonText: { displayText: btn.text }
|
|
}));
|
|
|
|
console.log('✅ Boutons formatés pour Venom :', formattedButtons);
|
|
|
|
await client.sendButtons(
|
|
`${phone}@c.us`,
|
|
title, // ✅ OBLIGATOIRE en 1er
|
|
message, // ✅ Description
|
|
formattedButtons // ✅ Format conforme
|
|
);
|
|
|
|
res.json({ success: true });
|
|
} catch (error) {
|
|
console.error('❌ Erreur sendButtons:', error);
|
|
res.status(500).json({ error: error.message || 'Erreur interne' });
|
|
}
|
|
});
|
|
|
|
app.post('/sendText', async (req, res) => {
|
|
const { phone, message } = req.body;
|
|
|
|
console.log('📥 Requête TEXT :');
|
|
console.log('Phone:', phone);
|
|
console.log('Message:', message);
|
|
|
|
if (!client) return res.status(500).json({ error: 'Client WhatsApp non initialisé' });
|
|
if (!phone || !message) {
|
|
return res.status(400).json({ error: 'Paramètres manquants' });
|
|
}
|
|
|
|
try {
|
|
await client.sendText(`${phone}@c.us`, message);
|
|
res.json({ success: true });
|
|
} catch (error) {
|
|
console.error('❌ Erreur sendText:', error);
|
|
res.status(500).json({ error: error.message || 'Erreur interne' });
|
|
}
|
|
});
|
|
|
|
|
|
|
|
// ▶️ Démarrage + QR code init
|
|
create({
|
|
session: 'session-web-api',
|
|
multidevice: false,
|
|
catchQR: (base64Qrimg, asciiQR) => {
|
|
qrCodeBase64 = base64Qrimg;
|
|
isConnected = false;
|
|
},
|
|
puppeteerOptions: {
|
|
headless: 'new',
|
|
args: ['--no-sandbox', '--disable-setuid-sandbox']
|
|
}
|
|
}).then((cl) => {
|
|
client = cl;
|
|
|
|
client.onStateChange((state) => {
|
|
if (state === 'CONNECTED') isConnected = true;
|
|
});
|
|
|
|
client.onStreamChange((state) => {
|
|
if (state === 'CONNECTED') isConnected = true;
|
|
});
|
|
|
|
}).catch((err) => {
|
|
console.error('Erreur init Venom:', err);
|
|
});
|
|
|
|
app.listen(3001, () => console.log('🚀 Serveur lancé sur http://localhost:3001/login'));
|