diff --git a/index.js b/index.js index df6d2b8..5bd484e 100644 --- a/index.js +++ b/index.js @@ -121,57 +121,70 @@ app.post('/sendButtons', async (req, res) => { res.status(500).json({ error: e.message }); } }); +// Votre route POST app.post('/sendInteractiveImage', async (req, res) => { const { phone, caption, footer } = req.body; if (!sock || !isConnected) { - return res.status(400).json({ error: 'Non connecté' }); + return res.status(400).json({ error: 'Non connecté à WhatsApp' }); } try { - // URL publique de votre image (hébergée dans ./public via express.static) + // 1) Construire l'URL publique de l'image const BASE_URL = process.env.BASE_URL || 'https://wa.canguidev.fr'; const imageUrl = `${BASE_URL}/static/logo-merlo-cs-FR.jpg`; - // **Envoi 100% “interactive”** — format officiel pris en charge par iOS - await sock.sendMessage( - `${phone}@s.whatsapp.net`, - { - interactive: { - type: 'button', - header: { - type: 'IMAGE', - image: { url: imageUrl } + // 2) Préparer le contenu brut du message + const rawMessage = { + viewOnceMessage: { + message: { + messageContextInfo: { + deviceListMetadata: {}, + deviceListMetadataVersion: 2 }, - body: { - text: caption || 'Description par défaut' - }, - footer: { - text: footer || 'Pied de page' - }, - action: { - buttons: [ - { - type: 'url', - title: '📄 Proposition', - url: 'https://merlo-ch.com/uploads/proposition/f_p_250505_0000136_00008_EB00001909.pdf' - }, - { - type: 'url', - title: '🔧 Spécifications', - url: 'https://merlo-ch.com/uploads/proposition/d_p_250505_0000136_00008_EB00001909.pdf' - } - ] - } + interactiveMessage: proto.Message.InteractiveMessage.create({ + header: proto.Message.InteractiveMessage.Header.create({ + type: proto.Message.InteractiveMessage.HeaderType.IMAGE, + imageMessage: { url: imageUrl } + }), + body: proto.Message.InteractiveMessage.Body.create({ + text: caption || 'Description par défaut' + }), + footer: proto.Message.InteractiveMessage.Footer.create({ + text: footer || 'Pied de page' + }), + action: proto.Message.InteractiveMessage.Action.create({ + buttons: [ + { + urlButton: proto.Message.InteractiveMessage.URLButton.create({ + displayText: '📄 Voir proposition', + url: 'https://merlo-ch.com/uploads/proposition/f_p_250505_0000136_00008_EB00001909.pdf' + }) + }, + { + urlButton: proto.Message.InteractiveMessage.URLButton.create({ + displayText: '🔧 Spécifications', + url: 'https://merlo-ch.com/uploads/proposition/d_p_250505_0000136_00008_EB00001909.pdf' + }) + } + ] + }) + }) } } - ); + }; + + // 3) Générer et relayer le message + const jid = `${phone}@s.whatsapp.net`; + const msg = generateWAMessageFromContent(jid, rawMessage, {}); + await sock.relayMessage(jid, msg.message, { messageId: msg.key.id }); return res.json({ success: true }); } catch (e) { - console.error('❌ Erreur interactive image :', e); + console.error('❌ Erreur /sendInteractiveImage :', e); return res.status(500).json({ error: e.message }); } }); + // app.post('/sendInteractiveImage', async (req, res) => { // const { phone, caption, title, subtitle, footer } = req.body; // if (!sock || !isConnected) return res.status(400).json({ error: 'Non connecté' });