Implement Gemini audio voice note replies

This commit is contained in:
Hamza-Ayed
2026-05-22 15:10:13 +03:00
parent 395c8ee8eb
commit 2e7cd11f85
5 changed files with 264 additions and 13 deletions

View File

@@ -288,7 +288,7 @@ async function disconnectSession(session_key) {
/**
* Send a message using an active session
*/
async function sendMessage(session_key, phone, message, mediaUrl = null) {
async function sendMessage(session_key, phone, message, mediaUrl = null, audioBase64 = null) {
const sock = sessions.get(session_key);
if (!sock) {
throw new Error(`Session ${session_key} is not active or connected`);
@@ -296,6 +296,15 @@ async function sendMessage(session_key, phone, message, mediaUrl = null) {
let jid = phone.includes('@') ? phone : `${phone}@s.whatsapp.net`;
if (audioBase64) {
const buffer = Buffer.from(audioBase64, 'base64');
return await sock.sendMessage(jid, {
audio: buffer,
mimetype: 'audio/mp4',
ptt: true
});
}
if (mediaUrl) {
const ext = mediaUrl.split('.').pop().toLowerCase();
if (['jpg', 'jpeg', 'png', 'webp'].includes(ext)) {

View File

@@ -83,14 +83,18 @@ app.get('/api/sessions/active', (req, res) => {
// Send outbound message
app.post('/api/messages/send', async (req, res) => {
const { session_key, phone, message, media_url } = req.body;
const { session_key, phone, message, media_url, audio } = req.body;
if (!session_key || !phone || !message) {
return res.status(400).json({ error: 'Missing session_key, phone, or message' });
if (!session_key || !phone) {
return res.status(400).json({ error: 'Missing session_key or phone' });
}
if (!message && !audio) {
return res.status(400).json({ error: 'Missing message or audio' });
}
try {
const result = await sendMessage(session_key, phone, message, media_url);
const result = await sendMessage(session_key, phone, message, media_url, audio);
res.json({ status: 'success', data: result });
} catch (err) {
console.error(`Error sending message via ${session_key} to ${phone}:`, err);