edezdzdezdez

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

View File

@ -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 });