diff --git a/whatsapp-gateway/baileys-client.js b/whatsapp-gateway/baileys-client.js index a160545..d809751 100644 --- a/whatsapp-gateway/baileys-client.js +++ b/whatsapp-gateway/baileys-client.js @@ -104,36 +104,36 @@ async function startSession(session_key, webhook_url) { } if (m.type !== 'notify') return; - + for (const msg of m.messages) { // Ignore messages sent by ourselves if (msg.key.fromMe) continue; - + const remoteJid = msg.key.remoteJid; if (!remoteJid) continue; - + // Only process individual chats (ignore groups and broadcasts) const isGroup = remoteJid.endsWith('@g.us'); const isBroadcast = remoteJid.endsWith('@broadcast'); if (isGroup || isBroadcast) continue; - + // Extract text body - const body = msg.message?.conversation || - msg.message?.extendedTextMessage?.text || - msg.message?.imageMessage?.caption || - msg.message?.videoMessage?.caption || ''; - + const body = msg.message?.conversation || + msg.message?.extendedTextMessage?.text || + msg.message?.imageMessage?.caption || + msg.message?.videoMessage?.caption || ''; + const isAudio = !!msg.message?.audioMessage; const isImage = !!msg.message?.imageMessage; - + // Only process messages that have text content OR are audio/image messages if (!body && !isAudio && !isImage) continue; - + let audioBase64 = null; let audioMimeType = null; let imageBase64 = null; let imageMimeType = null; - + if (isAudio) { try { console.log(`[Baileys] Downloading audio message for ${remoteJid}`); @@ -141,7 +141,7 @@ async function startSession(session_key, webhook_url) { msg, 'buffer', {}, - { + { logger: pino({ level: 'silent' }), rekey: true } @@ -159,7 +159,7 @@ async function startSession(session_key, webhook_url) { msg, 'buffer', {}, - { + { logger: pino({ level: 'silent' }), rekey: true } @@ -171,7 +171,7 @@ async function startSession(session_key, webhook_url) { continue; // Skip if image download fails } } - + // Extract sender phone number (handle LID privacy scheme) let senderPhone = ''; if (msg.key.senderPn && msg.key.senderPn.endsWith('@s.whatsapp.net')) { @@ -180,12 +180,13 @@ async function startSession(session_key, webhook_url) { senderPhone = remoteJid.split('@')[0]; } else if (remoteJid.endsWith('@lid')) { senderPhone = remoteJid.split('@')[0]; + senderPhone = remoteJid.split('@')[0]; } - + if (!senderPhone) continue; - + const senderName = msg.pushName || ''; - + if (isAudio) { console.log(`[Message] Received audio voice note from ${senderPhone} (JID: ${remoteJid})`); } else if (isImage) { @@ -193,7 +194,7 @@ async function startSession(session_key, webhook_url) { } else { console.log(`[Message] Received from ${senderPhone} (JID: ${remoteJid}): ${body}`); } - + await sendWebhook(webhook_url, { session_key, state: 'message_received', @@ -317,13 +318,13 @@ async function sendMessage(session_key, phone, message, mediaUrl = null, audioBa let jid = phone.includes('@') ? phone : `${phone}@s.whatsapp.net`; let sentMsg; - + if (audioBase64) { const buffer = Buffer.from(audioBase64, 'base64'); - sentMsg = await sock.sendMessage(jid, { - audio: buffer, - mimetype: 'audio/mp4', - ptt: true + sentMsg = await sock.sendMessage(jid, { + audio: buffer, + mimetype: 'audio/mp4', + ptt: true }); } else if (mediaUrl) { const ext = mediaUrl.split('.').pop().toLowerCase(); @@ -337,7 +338,7 @@ async function sendMessage(session_key, phone, message, mediaUrl = null, audioBa } else { sentMsg = await sock.sendMessage(jid, { text: message }); } - + // Cache outbound messages for E2EE decryption retries if (sentMsg && sentMsg.key && sentMsg.key.id && sentMsg.message) { recentMessages.set(sentMsg.key.id, sentMsg.message); @@ -346,7 +347,7 @@ async function sendMessage(session_key, phone, message, mediaUrl = null, audioBa recentMessages.delete(firstKey); } } - + return sentMsg; }