Membangun Chatbot WhatsApp Autoreply Menggunakan Node.js dan Gemini AI

Di era komunikasi yang serba cepat, membalas pesan WhatsApp satu per satu dapat menjadi tantangan, terutama ketika jumlah pesan masuk sangat banyak atau datang di luar jam kerja. Hal ini semakin terasa bagi instansi yang bergerak di bidang layanan permintaan data publik. Untuk menjaga kualitas dan kepuasan layanan, diperlukan solusi yang efektif dan efisien.

Salah satu solusi tersebut adalah penggunaan autoreply WhatsApp berbasis chatbot. Chatbot ini mampu melayani berbagai kebutuhan, seperti menjawab pertanyaan umum masyarakat, khususnya terkait permintaan data statistik, secara otomatis selama 24 jam nonstop.

Dengan memanfaatkan Gemini API, chatbot yang dibangun tidak hanya dapat membalas pesan secara otomatis, tetapi juga mampu memahami konteks percakapan dan memberikan respons yang lebih relevan, akurat, dan natural.

Secara teknis, alur garis besarnya sebagai berikut:

  1. Instalasi Node.Js. Node.js adalah perangkat lunak yang digunakan untuk menjalankan JavaScript di luar browser (misalnya di komputer atau server). Untuk proses instalasi, Anda bisa peroleh secara mudah di banyak referensi (https://nodejs.org/en).
  2. Penyiapan skrip Chatbot yang berjalan di Node.Js. Untuk skripnya, Anda bisa lakukan clone atau unduh dari repository yang sudah saya buat. Di mana skrip tersebut juga saya peroleh dari sumber github dengan beberapa bagian yang saya hapus agar ringkas. Berikut tautannya: https://github.com/syamsofa/GeminiAIWhatsappWebJs.
  3. Gemini API Key. Yang bisa diakses pada https://aistudio.google.com/api-keys. Terkait key, Anda tentu harus membeli terlebih dahulu, dan saya tidak membahas di sini.
  4. Smartphone pertama sebagai device untuk dijadikan chatbot. Smartphone kedua untuk menguji/tes.

Dalam artikel ini, penulis tidak membahas penggunaan database dalam pemrosesan pesan. Hal ini karena chatbot yang dibangun hanya menerima pesan dari nomor pengguna, meneruskannya langsung ke Gemini, lalu mengirimkan kembali respons dari Gemini kepada pengirim.

Adapun kelemahan dari pendekatan ini adalah keterbatasan pada Gemini API yang digunakan. Berdasarkan pengalaman penulis, API tersebut terkadang tidak mampu memberikan jawaban yang akurat dan bahkan menghasilkan respons seperti “Tidak tahu”. Kemungkinan hal ini terjadi karena model yang digunakan melalui API tidak seoptimal model yang digunakan saat berinteraksi langsung dengan Google Gemini.

Oke langsung saja. Langkah pertama, tentu saja kita harus mengistal Node.Js. Silakan unduh dan install Node.Js di website resminya. Jika sudah install, dan mau memastikan terinstal, silakan buka terminal. Dan tuliskan command berikut.

node -v

Jika muncul versinya, berarti Node.Js berhasil terinstal.

Selanjutnya kita siapkan skrip Chatbotnya. Untuk keperluan ini, saya sudah siapkan repository lengkap. Anda bisa unduh/clone di https://github.com/syamsofa/GeminiAIWhatsappWebJs. Berikut tampilan repositorinya.

Simpan repository di komputer lokal, misalnya di folder: C:/Chatbot
Selanjutnya, buka folder tersebut menggunakan editor kode pilihan Anda. Kemudian kita fokus pada file chatbot.js. File ini merupakan inti dari chatbot, karena di sinilah logika utama untuk menerima pesan, memprosesnya, dan mengirim balasan berada.

const { Client, Location, Poll, List, Buttons, LocalAuth } = require('./index');
const axios = require('axios').default;
const client = new Client({
    authStrategy: new LocalAuth(),
    puppeteer: {
        headless: false,
    },
    
});

client.initialize();

client.on('loading_screen', (percent, message) => {
    console.log('LOADING SCREEN', percent, message);
});

client.on('qr', async (qr) => {
    // NOTE: This event will not be fired if a session is specified.
    console.log('QR RECEIVED', qr);
});

client.on('code', (code) => {
    console.log('Pairing code:', code);
});

client.on('authenticated', () => {
    console.log('AUTHENTICATED');
});

client.on('auth_failure', msg => {
    // Fired if session restore was unsuccessful
    console.error('AUTHENTICATION FAILURE', msg);
});

client.on('ready', async () => {
    console.log('READY');
    const debugWWebVersion = await client.getWWebVersion();
    console.log(`WWebVersion = ${debugWWebVersion}`);

    client.pupPage.on('pageerror', function (err) {
        console.log('Page error: ' + err.toString());
    });
    client.pupPage.on('error', function (err) {
        console.log('Page error: ' + err.toString());
    });

});

const responGeminiAi = async (msg) => {
    const response = await axios.post(
        'https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent',
        // '{\n    "contents": [\n      {\n        "parts": [\n          {\n            "text": "Explain how AI works in a few words"\n          }\n        ]\n      }\n    ]\n  }',
        {
            'contents': [
                {
                    'parts': [
                        {
                            'text': msg.body
                        }
                    ]
                }
            ]
        },
        {
            headers: {
                'Content-Type': 'application/json',
                'X-goog-api-key': 'AIzaSyCqIWrBRFm6PB--K-TmZAY5MQ92kvmjfpo'
            }
        }
    );
    console.log('mantap ', response.data.candidates[0].content.parts[0].text)
     msg.reply(response.data.candidates[0].content.parts[0].text);
    return response.data.candidates[0].content.parts[0].text
}


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


});



// Change to false if you don't want to reject incoming calls
let rejectCalls = true;



Penjelasan

Baris 77 (client.on('message')): Skrip ini menangani event pesan masuk. Artinya, setiap kali ada pesan masuk, kode di dalam fungsi ini akan dijalankan.

Baris 79: Memanggil fungsi responGeminiAi(msg) dengan parameter msg. Fungsi ini berada di baris 49 dan berisi logika untuk memproses pesan yang diterima dan mengirimkan respons AI.

const responGeminiAi = async (msg) => {
    const response = await axios.post(
        'https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent',
        // '{\n    "contents": [\n      {\n        "parts": [\n          {\n            "text": "Explain how AI works in a few words"\n          }\n        ]\n      }\n    ]\n  }',
        {
            'contents': [
                {
                    'parts': [
                        {
                            'text': msg.body
                        }
                    ]
                }
            ]
        },
        {
            headers: {
                'Content-Type': 'application/json',
                'X-goog-api-key': 'KEY ANDA TARUH DI SINI'
            }
        }
    );
    console.log('mantap ', response.data.candidates[0].content.parts[0].text)
    msg.reply(response.data.candidates[0].content.parts[0].text);
}

Baris 49: Merupakan endpoint yang digunakan untuk mengirimkan teks ke model Gemini, di mana model AI yang dipakai adalah Gemini 2.0 Flash.

Baris 5–15: Berisi body dari data yang dikirim. Teks yang dikirim diambil dari parameter msg.body, dan akan diproses oleh Gemini AI.

Baris 18: Menentukan bahwa data yang dikirim berbentuk JSON.

Baris 19: Tempat memasukkan Google API Key; silakan gunakan API Key yang sudah dimiliki.

Baris 24: Merupakan fungsi untuk mengirimkan balasan ke pengirim pesan.

Setelah selesai, masuk ke command line/terminal, dan masukkan perintah berikut:

node chatbot.js

Jika proses berhasil, jendela Chrome akan terbuka dan Anda akan diminta untuk login seperti saat menggunakan WhatsApp Web. Setelah login berhasil, chatbot akan langsung siap digunakan dan bisa mulai menerima serta membalas pesan.

Terima kasih .

Leave a Reply

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