#Issue Sending Message
1 messages · Page 1 of 1 (latest)
Post your code
session creation function
const createSession = (sessionId) => {
const client = new Client({
authStrategy: new LocalAuth({ clientId: sessionId }),
puppeteer: {
headless: true,
// Render-friendly flags for quick, sandboxed startup
args: [
"--no-sandbox",
"--disable-setuid-sandbox",
]
}
});
sessions[sessionId] = { client, ready: false, qrDataUrl: null };
client.on("qr", async (qr) => {
try {
const dataUrl = await QRCode.toDataURL(qr);
sessions[sessionId].qrDataUrl = dataUrl;
emitTo(sessionId, "qr", { qr: dataUrl });
emitTo(sessionId, "status", { status: "WAITING_QR" });
log("INFO", "QR generated", sessionId);
} catch (e) {
emitTo(sessionId, "error", { message: "QR generation failed" });
log("ERROR", "QR generation failed", sessionId, { error: String(e) });
}
});
client.on("authenticated", () => {
log("INFO", "Authenticated", sessionId);
emitTo(sessionId, "status", { status: "AUTHENTICATED" });
});
client.on("ready", () => {
sessions[sessionId].ready = true;
sessions[sessionId].qrDataUrl = null;
log("INFO", "Client ready", sessionId);
emitTo(sessionId, "status", { status: "LOGGED_IN" });
});
client.on("auth_failure", (msg) => {
sessions[sessionId].ready = false;
log("WARN", "Auth failure", sessionId, { msg });
emitTo(sessionId, "status", { status: "AUTH_FAILURE", detail: msg });
});
client.on("disconnected", (reason) => {
log("WARN", "Client disconnected", sessionId, { reason });
emitTo(sessionId, "status", { status: "DISCONNECTED", reason });
delete sessions[sessionId];
});
client.initialize();
log("INFO", "Session initializing", sessionId);
};
session and sent message function
// Start/Re-use session
app.post("/start-session", (req, res) => {
const { sessionId } = req.body;
if (!sessionId) return res.status(400).json({ error: "sessionId required" });
if (!sessions[sessionId]) {
createSession(sessionId);
return res.json({ status: "STARTING" });
}
const sess = sessions[sessionId];
return res.json({ status: sess.ready ? "LOGGED_IN" : (sess.qrDataUrl ? "WAITING_QR" : "STARTING") });
});
// Session status (quick QR fallback)
app.get("/session-status/:sessionId", async (req, res) => {
const { sessionId } = req.params;
const sess = sessions[sessionId];
if (!sess) return res.json({ status: "NOT_STARTED" });
const state = await ensureConnected(sessionId);
if (state.ok) return res.json({ status: "LOGGED_IN" });
return res.json({
status: sess.qrDataUrl ? "WAITING_QR" : "NOT_CONNECTED",
qr: sess.qrDataUrl || null
});
});
// Send text
app.post("/send-message", async (req, res) => {
const { sessionId, number, message } = req.body;
if (!sessionId || !number || !message) {
return res.status(400).json({ error: "sessionId, number, message required" });
}
const sess = sessions[sessionId];
if (!sess) return res.status(404).json({ error: "Session not found" });
const ok = await ensureConnected(sessionId);
if (!ok.ok) return res.status(400).json({ error: "Session not connected" });
try {
console.log(number + " " + message);
await sess.client.sendMessage(${number}@c.us, message);
emitTo(sessionId, "sent", { to: number, type: "text" });
log("INFO", "Text sent", sessionId, { to: number });
res.json({ status: "SENT" });
} catch (e) {
log("ERROR", "Send text failed", sessionId, { error: String(e) });
res.status(500).json({ error: "Failed to send message" });
}
});