others
Membuat whatsapp web js multi session dengan remoteauth dan mongodb
Library
- nodemon
- socket.io
- express
- whatsappweb.js
- wwebjs-mongo
- cors
Alat
- apache server
- mongoDB server
- buat database baru dengan namam whatsappBot
- masuk ke
mongoshdan ketikkan perintah berikut use whatsappBot
Persiapan
- buat folder project dengan nama wa-api
- buka terminal editor dan masuk ke folder project tersebut
- misal
cd Desktop/web-socket
- misal
- inisialisasi aplikasi dalam folder project
npm init --y
- install library yang akan digunakan
npm install -g nodemonnpm i whatsapp-web.jsnpm i wwebjs-mongonpm i expressnpm i corsnpm i qrcodenpm install socket.ionpm install mongoose
- pada file project buat file baru dengan nama index.js
- masukkan kode berikut
//library
const express = require('express');
const app = express();
const http = require('http');
const server = http.createServer(app)
const QRCode = require('qrcode');
// handle wa
const { Client, RemoteAuth } = require('whatsapp-web.js')
// socket
const socketIO = require("socket.io");
const io = socketIO(server, { cors: { origin: '*' } });
// end
// Require database
const { MongoStore } = require('wwebjs-mongo');
const mongoose = require('mongoose');
const MONGODB_URI = "mongodb://127.0.0.1:27017/whatsappBot"
// Load the session data
let store
mongoose.connect(MONGODB_URI).then(() => {
console.log("mongoDB Connected")
store = new MongoStore({ mongoose: mongoose });
});
//client page
app.get('/', (req, res) => {
//res.send('<h1>Hello world</h1>');
res.sendFile(__dirname + '/index.html');
});
server.listen(8001, function() {
console.log('app running on *: '+8001)
})
//handling conn socket.io
io.on('connection', (socket) => {
console.log('a user connected');
socket.on('request_create_sess', (data) => {
// console.log(data)
const { id } = data
socket.emit('message','request create session')
createWhatsappSession(id,socket)
});
socket.on('request_get_sess', (data) => {
// console.log(data)
const { id } = data
socket.emit('message','request get session')
getWhatsappSession(id,socket)
});
socket.on('disconnect', () => {
socket.emit('message','user disconnected')
console.log('user disconnected');
});
});//simpan variabel client agar bisa dipakai diluar function
const allSessionsObject = {}
//function
const allSessionsObject = {}
const getWhatsappSession = (id, socket) => {
const client = new Client({
authStrategy: new RemoteAuth({
clientId: id,
store: store,
backupSyncIntervalMs: 300000
}),
puppeteer: { headless: true,args: ['--no-sandbox', '--disable-setuid-sandbox']}
})
client.on('ready', () => {
socket.emit('ready', {
id,
messages: "Whatsapp is ready again"
});
allSessionsObject[id] = client;
});
client.on("qr", qr => {
QRCode.toDataURL(qr, (err, url) => {
if (err) throw err;
// Kirim QR Code ke client
socket.emit('qrcode', url);
socket.emit('message','client is logout, please scan qr code please..')
});
})
client.on('authenticated', () => {
console.log('AUTHENTICATED');
socket.emit('message','client is authenticated')
});
client.on('remote_session_saved', () => {
socket.emit('message','Remote Session Saved')
console.log("Remote Session Saved")
});
client.initialize()
}
const createWhatsappSession = (id, socket) => {
const client = new Client({
authStrategy: new RemoteAuth({
clientId: id,
store: store,
backupSyncIntervalMs: 300000
}),
puppeteer: { headless: true,args: ['--no-sandbox', '--disable-setuid-sandbox']}
})
client.on("qr", qr => {
QRCode.toDataURL(qr, (err, url) => {
if (err) throw err;
// Kirim QR Code ke client
socket.emit('qrcode', url);
socket.emit('message','QR Code received, scan please..')
});
})
//The authenticated event
client.on('authenticated', () => {
console.log('AUTHENTICATED');
socket.emit('message','client is authenticated')
});
client.on('ready', () => {
socket.emit('ready','Whatsapp is ready')
socket.emit('message','Whatsapp is ready')
allSessionsObject[id] = client;
});
client.on('remote_session_saved', () => {
socket.emit('message','Remote Session Saved')
console.log("Remote Session Saved")
});
client.initialize()
}
- buat client page
- buat file index.html
<!DOCTYPE html>
<html>
<head>
<title>Whatsapp API by Aswin</title>
</head>
<body>
<button id='stop_ws'>Disconnect ws</button><br>
<input id='session' type="text">
<button id='create_sess' >create session</button>
<br>
<input id='get_session' type="text">
<button id='get_sess' >get session</button>
<div id='app'>
<h1>Whatsapp API</h1>
<p>Powered by Aswindev</p>
<img src="" alt="QR Code" id="qrcode">
<h3>Logs:</h3>
<ul class="logs"></ul>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js" integrity="sha512-bLT0Qm9VnAYZDflyKcBaQ2gg0hSYNQrJ8RilYldYQ1FxQYoCLtUjuuRuZo+fjqhx/qtq/1itJ0C2ejDxltZVFg==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/4.4.0/socket.io.min.js" integrity="sha512-I9p4eOeWXGM9m5GhJYd3UDUA5Lr+Epp5e4ykWFYW9hv3jZqdR92S5p+ApMSWuMaV4E+JqILepP1G9kNer4AFGQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<script>
var socket = io.connect('http://localhost:8001/',{path: '/socket.io'})
$('#stop_ws').click(()=>{
console.log('stop');
socket.close();
});
$('#create_sess').click(()=>{
var session = $('#session').val();
console.log(session);
socket.emit("request_create_sess",{
id: session,
});
});
$('#get_sess').click(()=>{
var session = $('#get_session').val();
console.log(session);
socket.emit("request_get_sess",{
id: session,
});
});
$(document).ready(function(){
socket.on('message', function(msg){
// console.log(msg)
$('.logs').append($('<li>').text(msg))
})
socket.on('qrcode', function(src){
$('#qrcode').attr('src',src)
})
socket.on('ready', function(src){
$('#qrcode').hide()
})
socket.on('authenticated', function(src){
$('#qrcode').hide()
})
})
</script>
</div>
</body>
</html>// library dan variabel
const express = require('express');
const app = express();
const http = require('http');
const server = http.createServer(app);
const QRCode = require('qrcode');
// Require database
const { MongoStore } = require('wwebjs-mongo');
const mongoose = require('mongoose');
const MONGODB_URI = "mongodb://127.0.0.1:27017/whatsapp"
// handling cross-origin
const cors = require('cors');
// socket
const { Server } = require("socket.io");
const io = new Server(server, { cors: { origin: '*' } });
// end
// Load the session data
let store
mongoose.connect(MONGODB_URI).then(() => {
console.log("mongoDB Connected")
store = new MongoStore({ mongoose: mongoose });
});
// handle wa
const { Client, LocalAuth, RemoteAuth } = require('whatsapp-web.js')
// wa client & session
const allSessionsObject = {}
const getWhatsappSession = (id, socket) => {
const client = new Client({
authStrategy: new RemoteAuth({
clientId: id,
store: store,
backupSyncIntervalMs: 300000
}),
puppeteer: { headless: true,args: ['--no-sandbox', '--disable-setuid-sandbox']}
})
client.on('ready', () => {
socket.emit('ready', {
id,
messages: "Whatsapp is ready again"
});
});
client.on("qr", qr => {
QRCode.toDataURL(qr, (err, url) => {
if (err) throw err;
// Kirim QR Code ke client
socket.emit('qrcode', url);
socket.emit('message','client is logout, please scan qr code please..')
});
})
client.on('authenticated', () => {
console.log('AUTHENTICATED');
socket.emit('message','client is authenticated')
});
client.on('remote_session_saved', () => {
socket.emit('message','Remote Session Saved')
console.log("Remote Session Saved")
});
client.initialize()
}
const createWhatsappSession = (id, socket) => {
const client = new Client({
authStrategy: new RemoteAuth({
clientId: id,
store: store,
backupSyncIntervalMs: 300000
}),
puppeteer: { headless: true,args: ['--no-sandbox', '--disable-setuid-sandbox']}
})
client.on("qr", qr => {
QRCode.toDataURL(qr, (err, url) => {
if (err) throw err;
// Kirim QR Code ke client
socket.emit('qrcode', url);
socket.emit('message','QR Code received, scan please..')
});
})
//The authenticated event
client.on('authenticated', () => {
console.log('AUTHENTICATED');
socket.emit('message','client is authenticated')
});
client.on('ready', () => {
socket.emit('ready','Whatsapp is ready')
socket.emit('message','Whatsapp is ready')
allSessionsObject[id] = client;
});
client.on('remote_session_saved', () => {
socket.emit('message','Remote Session Saved')
console.log("Remote Session Saved")
});
client.initialize()
}
//page
app.get('/', (req, res) => {
//res.send('<h1>Hello world</h1>');
res.sendFile(__dirname + '/index.html');
});
io.on('connection', (socket) => {
console.log('a user connected');
socket.on('request_qrCode', function() {
// Generate QR Code
client.on("qr", qr => {
QRCode.toDataURL(qr, (err, url) => {
if (err) throw err;
// Kirim QR Code ke client
socket.emit('qrcode', url);
socket.emit('message','QR Code received, scan please..')
});
})
client.on('ready', () => {
socket.emit('ready','Whatsapp is ready')
socket.emit('message','Whatsapp is ready')
});
//The authenticated event
client.on('authenticated', (session) => {
socket.emit('authenticated','Whatsapp is authenticated')
socket.emit('message','Whatsapp is authenticated')
console.log('AUTHENTICATED', session);
sessionCfg=session;
fs.writeFile(SESSION_FILE_PATH, JSON.stringify(session), function (err) {
if (err) {
console.error(err);
}
});
});
// end
});
socket.on('request_create_sess', (data) => {
// console.log(data)
const { id } = data
socket.emit('message','request create session')
createWhatsappSession(id,socket)
});
socket.on('request_get_sess', (data) => {
// console.log(data)
const { id } = data
socket.emit('message','request get session')
getWhatsappSession(id,socket)
});
socket.on('disconnect', () => {
socket.emit('message','user disconnected')
console.log('user disconnected');
});
});
// end
server.listen(6060, () => {
console.log('listening on *:6060');
});
- jalankan server
- nodemon index.js
- buka browser dengan url : localhost:8001

masukkan nama session dan klik create session

scan qr code

jika dicek di database mongosh
- use whatsappBot
- show collections

mencoba mendapatkan session yang telah disimpan
