Fix reconnect logic and audio mimetype support
This commit is contained in:
@@ -231,25 +231,29 @@ async function startSession(session_key, webhook_url) {
|
||||
if (connection === 'close') {
|
||||
const statusCode = lastDisconnect?.error?.output?.statusCode;
|
||||
const shouldReconnect = statusCode !== DisconnectReason.loggedOut;
|
||||
const retries = (retryCounters.get(session_key) || 0) + 1;
|
||||
retryCounters.set(session_key, retries);
|
||||
|
||||
console.log(`[Connection] ${session_key} closed | code=${statusCode} | retry=${retries}/${MAX_RETRIES} | shouldReconnect=${shouldReconnect}`);
|
||||
|
||||
if (shouldReconnect && retries <= MAX_RETRIES) {
|
||||
// Try reconnecting with exponential backoff
|
||||
if (!shouldReconnect) {
|
||||
console.log(`[Connection] ${session_key} permanently closed (logged out). Cleaning up.`);
|
||||
sessions.delete(session_key);
|
||||
const delay = Math.min(retries * 3000, 15000); // 3s, 6s, 9s, 12s, 15s
|
||||
console.log(`[Connection] Reconnecting ${session_key} in ${delay}ms...`);
|
||||
setTimeout(() => startSession(session_key, webhook_url), delay);
|
||||
} else {
|
||||
// Either logged out, banned, or max retries exceeded
|
||||
console.log(`[Connection] ${session_key} permanently closed. Cleaning up.`);
|
||||
await cleanupSession(session_key);
|
||||
await sendWebhook(webhook_url, {
|
||||
session_key,
|
||||
state: 'disconnected'
|
||||
});
|
||||
} else {
|
||||
const retries = (retryCounters.get(session_key) || 0) + 1;
|
||||
retryCounters.set(session_key, retries);
|
||||
|
||||
sessions.delete(session_key);
|
||||
let delay;
|
||||
if (retries <= MAX_RETRIES) {
|
||||
delay = Math.min(retries * 3000, 15000); // 3s, 6s, 9s, 12s, 15s
|
||||
console.log(`[Connection] Reconnecting ${session_key} (quick retry ${retries}/${MAX_RETRIES}) in ${delay}ms...`);
|
||||
} else {
|
||||
delay = 60000; // 60s
|
||||
console.log(`[Connection] Reconnecting ${session_key} (long-term retry ${retries}) in 60s...`);
|
||||
}
|
||||
setTimeout(() => startSession(session_key, webhook_url), delay);
|
||||
}
|
||||
} else if (connection === 'open') {
|
||||
console.log(`[Connection] ✅ ${session_key} connected successfully!`);
|
||||
@@ -310,7 +314,7 @@ async function disconnectSession(session_key) {
|
||||
/**
|
||||
* Send a message using an active session
|
||||
*/
|
||||
async function sendMessage(session_key, phone, message, mediaUrl = null, audioBase64 = null) {
|
||||
async function sendMessage(session_key, phone, message, mediaUrl = null, audioBase64 = null, mimetype = null) {
|
||||
const sock = sessions.get(session_key);
|
||||
if (!sock) {
|
||||
throw new Error(`Session ${session_key} is not active or connected`);
|
||||
@@ -323,7 +327,7 @@ async function sendMessage(session_key, phone, message, mediaUrl = null, audioBa
|
||||
const buffer = Buffer.from(audioBase64, 'base64');
|
||||
sentMsg = await sock.sendMessage(jid, {
|
||||
audio: buffer,
|
||||
mimetype: 'audio/mp4',
|
||||
mimetype: mimetype || 'audio/mp4',
|
||||
ptt: true
|
||||
});
|
||||
} else if (mediaUrl) {
|
||||
|
||||
Reference in New Issue
Block a user