import { create, Whatsapp } from 'venom-bot'; import express, { type Request, type Response } from 'express'; import type { UploadedFile } from 'express-fileupload'; let client: Whatsapp; function convertToPhoneNumber(number: string): number { if (number.startsWith('0')) { number = number.slice(1); } return parseInt(`62${number}`); } async function initBot() { try { client = await create({ session: 'kurir-bot', headless: 'new', browserArgs: ['--no-sandbox'], }); console.log('WhatsApp bot connected'); client.onMessage(async (message) => { if (message.body === 'hi' && !message.isGroupMsg) { await client.sendText(message.from, 'Hello! 👋'); } }); // Start the HTTP server after bot is ready startServer(); } catch (err) { console.error('Failed to initialize bot:', err); } } function startServer() { const app = express(); app.use(express.json()); app.post('/send-otp', async (req: Request, res: Response) => { let { number, otp } = req.body; number = convertToPhoneNumber(number); console.log(`Sending OTP ${otp} to ${number}`); const formattedNumber = `${number}@c.us`; try { await client.sendText(formattedNumber, `Kode OTP Anda: ${otp}`); console.log(`OTP ${otp} sent to ${number}`); res.status(200).json({ success: true }); } catch (error) { // console.error(error); if ( typeof error === 'object' && error !== null && 'status' in error && 'text' in error ) { const err = error as { status: number; text: string }; console.log(err.status); console.log(err.text); const text_response = err.status == 404 ? 'Nomor Telpon Tidak Terdaftar Pada Whatsapp
Silahkan Periksa Nomor Telpon Anda' : err.text res.status(err.status).json(text_response); return; } res.status(500).json({ error: 'Failed to send OTP.' }); } }); app.post('/send-message', async (req: Request, res: Response) => { let { number, message, img_stat = false , foto_paket , foto_name} = req.body; console.log(number, message, img_stat); number = convertToPhoneNumber(number); const formattedNumber = `${number}@c.us`; try { if(img_stat){ await client.sendImage(formattedNumber, foto_paket, foto_name, message); }else{ await client.sendText(formattedNumber, message); } res.status(200).json({ success: true }); } catch (error) { console.error(error); res.status(500).json({ error: 'Failed to send message.' }); } }); const PORT = 3012; app.listen(PORT, () => { console.log(`WhatsApp bot API listening on http://localhost:${PORT}`); }); } initBot();