edezdzdezdez

This commit is contained in:
julien 2025-05-06 17:21:46 +02:00
parent 67ddec2cd9
commit ae4f9929c0

View File

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