Membuat BOT Whatsapp Menggunakan NodeJS | Part #2

1 min read

Part #2 Making A BOT

Example BOT

Ok setelah kemarin kita di Part #1 Membuat session whatsapp webnya, sekarang kita lanjut ke Part #2 untuk membuat BOT nya.

Masih ingat dengan Code yang ini ?

const { Client } = require('whatsapp-web.js');
const fs = require('fs');

const SESSION_FILE_PATH = './session.json';
let sessionCfg;
if (fs.existsSync(SESSION_FILE_PATH)) { //mengecek apakah udah ada session yang tersimpan
    sessionCfg = require(SESSION_FILE_PATH);
}

const client = new Client({ puppeteer: { headless: false }, session: sessionCfg });
client.initialize();

client.on('qr', (qr) => { //menampilkan qr code dan menerima qr code
    console.log('QR RECEIVED', qr);
});

client.on('authenticated', (session) => {
    console.log('AUTHENTICATED', session);
    sessionCfg=session;
    fs.writeFile(SESSION_FILE_PATH, JSON.stringify(session), function (err) {  //jika session belum tersimpan maka akan membuat session baru 
        if (err) {
            console.error(err);
        }
    });
});

client.on('auth_failure', msg => {
    console.error('AUTHENTICATION FAILURE', msg);
});

client.on('ready', () => {
    console.log('READY');
});

client.on('message', async msg => {
    console.log('MESSAGE RECEIVED', msg);
});

client.on('disconnected', (reason) => {
    console.log('Client was logged out', reason);
});

Di puppeteer config Nya Bisa kalian change headless Nya ke true.

const client = new Client({ puppeteer: { headless: false }, session: sessionCfg });

Jadi seperti ini :

const client = new Client({ puppeteer: { headless: true }, session: sessionCfg });

Apa sih bedanya ?

Jadi, kalau headless nya Kita set Ke false maka akan Menampilkan instance chromium-Nya seperti popup window chromium seperti sebelumnya di Part #1. Sedangkan kalau True dia tidak akan memunculkannya.

Karena Kita sudah mendapatkan sessionnya jadi kita tidak perlu lagi untuk menampilkan Popup tersebut maka sekarang kita set ke True.

Ok selanjutnya setelah itu kalian bisa fokus kedalam Code ini :

client.on('message', async msg => {
    console.log('MESSAGE RECEIVED', msg);
});

Nah didalam function ini kita akan menerima semua Message / Pesan yang dikirim oleh orang lain Ke BOT Kita.

Kalian bisa test sendiri dengan mengirim Pesan ke BOT Masing – Masing :

Maka kita akan menerima sebuah payload seperti ini :

Bisa kalian liat untuk Pesan yang kita Kirimkan ada didalam field body dan disana juga terdapat data seperti Pengirim dan Penerima nah sekarang tinggal kita buat kondisi dari Pesan Pesan yang dikirimkan ke BOT Kita.

Kalian Bisa lihat example Code Nya di Repository WhatsApp-web.js

Disitu terdapat example seperti mengirim balasan ke chat, Group dan Banyak lagi.

Ok sekarang akan admin contohkan bagaimana cara membalas pesan jika ada yang mengirim !corona dan akan dibalas oleh bot kita dengan Info Detail Corona.

Kita tambahkan code berikut ini kedalam function message :

 if (msg.body == '!corona') {
        msg.reply('Info Detail Corona');
    }

Maka akan menjadi :

client.on('message', async msg => {
    if (msg.body == '!corona') {
        msg.reply('Info Detail Corona');
    }
});

Sekarang kita Run ulang BOT nya dan coba kirim !corona maka BOT kita akan membalas Info Detail Corona.

Yeay!! Bot kita sudah bisa membalas pesan.

Hmmm tapi ada masalah nih, jika kita menggunakan code diatas dia akan membalas ke grup juga walau sebenarnya kita hanya ingin membalas ke orang yang mengirim chat tersebut dan tidak group🧐

Tenang!!! Kalian bisa mengaturnya.

Ok kalian bisa rubah code yang kalian buat menjadi :

let chat = await msg.getChat();
    if (!chat.isGroup) { //dia akan menanggapi !corona jika chat bukan group
        if (msg.body == '!corona') {
            msg.reply('Info Detail Corona');
        }
    }

Ok sampai sini saja untuk tutorial membuat Bot nya kalian bisa improve sendiri, untuk Part #1 nya bisa kalian liat disini.

Untuk example Bot Corona seperti pada Featured Image diatas bisa kalian liat disini : https://github.com/M1n007/wa-bot

10

Leave a Reply

Your email address will not be published. Required fields are marked *