diff --git a/index.js b/index.js index 352dbcb..47ea124 100644 --- a/index.js +++ b/index.js @@ -123,69 +123,79 @@ app.post('/sendButtons', async (req, res) => { }); // Votre route POST app.post('/sendInteractiveImage', async (req, res) => { - const { phone, caption, footer } = req.body; + const { phone, caption, title, subtitle, footer } = req.body; if (!sock || !isConnected) { return res.status(400).json({ error: 'Non connecté à WhatsApp' }); } try { - // 1) URL publique de votre image const BASE_URL = process.env.BASE_URL || 'https://wa.canguidev.fr'; const imageUrl = `${BASE_URL}/static/logo-merlo-cs-FR.jpg`; - console.log(imageUrl); - // 2) Contenu brut du message interactif - const rawMessage = { + // Construire le Header correct + const header = proto.Message.InteractiveMessage.Header.create({ + title, // 'Igna' ou envoyé par le client + subtitle, // 'test' ou envoyé par le client + hasMediaAttachment: true, // ← impératif pour afficher un media + imageMessage: { + url: imageUrl, // URL publique de l'image + mimetype: 'image/jpeg' // type MIME + }, + media: 'imageMessage' // ← sélectionne le bon union field + }); + + // Body et Footer + const body = proto.Message.InteractiveMessage.Body.create({ + text: caption || 'Description par défaut' + }); + const foot = proto.Message.InteractiveMessage.Footer.create({ + text: footer || 'Pied de page' + }); + + // Vos boutons URL + const nativeFlow = proto.Message.InteractiveMessage.NativeFlowMessage.create({ + buttons: [ + { + name: 'cta_url', + buttonParamsJson: JSON.stringify({ + display_text: '📄 Voir proposition', + url: 'https://merlo-ch.com/uploads/proposition/f_p_250505_0000136_00008_EB00001909.pdf' + }) + }, + { + name: 'cta_url', + buttonParamsJson: JSON.stringify({ + display_text: '🔧 Spécifications', + url: 'https://merlo-ch.com/uploads/proposition/d_p_250505_0000136_00008_EB00001909.pdf' + }) + } + ] + }); + + // Construire l'InteractiveMessage complet + const interactiveMsg = proto.Message.InteractiveMessage.create({ + header, + body, + footer: foot, + nativeFlowMessage: nativeFlow + }); + + // Envelopper (ici dans viewOnceMessage, comme dans votre exemple) + const raw = { viewOnceMessage: { message: { messageContextInfo: { deviceListMetadata: {}, deviceListMetadataVersion: 2 }, - interactiveMessage: proto.Message.InteractiveMessage.create({ - header: proto.Message.InteractiveMessage.Header.create({ - // On donne simplement l'URL, Baileys s'en charge - imageMessage: { url: imageUrl }, - media: 'imageMessage', - title: 'Igna', // facultatif - subtitle: 'test' , // facultatif - }), - body: proto.Message.InteractiveMessage.Body.create({ - text: caption || 'Description par défaut' - }), - footer: proto.Message.InteractiveMessage.Footer.create({ - text: footer || 'Pied de page' - }), - // Ici on utilise nativeFlowMessage plutôt que `action` ou `buttons` - nativeFlowMessage: proto.Message.InteractiveMessage.NativeFlowMessage.create({ - buttons: [ - // bouton URL “Proposition” - { - name: 'cta_url', - buttonParamsJson: JSON.stringify({ - display_text: '📄 Voir proposition', - url: 'https://merlo-ch.com/uploads/proposition/f_p_250505_0000136_00008_EB00001909.pdf' - }) - }, - // bouton URL “Spécifications” - { - name: 'cta_url', - buttonParamsJson: JSON.stringify({ - display_text: '🔧 Spécifications', - url: 'https://merlo-ch.com/uploads/proposition/d_p_250505_0000136_00008_EB00001909.pdf' - }) - } - ] - }) - }) + interactiveMessage: interactiveMsg } } }; - - // 3) Générer et envoyer + // Générer et relayer const jid = `${phone}@s.whatsapp.net`; - const msg = generateWAMessageFromContent(jid, rawMessage, {}); + const msg = generateWAMessageFromContent(jid, raw, {}); await sock.relayMessage(jid, msg.message, { messageId: msg.key.id }); return res.json({ success: true });