Mengirim Pesan WhatsApp Menggunakan Node JS

By | 22 Desember 2022

Artikel ini merupakan bagian dari seri “Membuat REST API Untuk Mengirim Pesan WhatsApp menggunakan Node JS“.

Sebenarnya, WhatsApp menyediakan API secara official alias resmi dalam layanan WhatsApp Bussiness API. Layanan ini merupakan produk WhatsApp yang memungkinkan interaksi dengan pengguna melalui API yang disediakan. Untuk mendapatkan layanan ini, kita harus mendaftar melalui Business Solution Partner (BSP) di Indonesia yang kemudian mereka akan membantu kita mendapatkan WhatsApp API. Terdengar ribet? Sebenarnya tidak. Asal sabar dan mengikuti setiap tahap dan aturan yang ada.

Tapi disini kita tidak akan membahas layanan API resmi dari WhatsApp, karena kita akan membuat gateway API sendiri untuk mengirim pesan ke pengguna WhatsApp. Ya, membuat sendiri! Kita akan menggunakan Node JS dan package pedroslopez/whatsapp-web.js. Package ini terbilang lengkap dan selama ini mencukupi kebutuhan yang saya perlukan. Menerima pesan, mengirim pesan, mengirim foto, video, melihat daftar kontak, membuat grup, mendapatkan foto profil dan lain-lain dapat dilakukan package ini. Sebagai pembelajaran, saya membuat “clone” WhatsApp memanfaatkan fitur-fitur package tersebut. Berikut penampakannya.

Clone WhatsApp
Kloning whatsapp menggunakan whatsapp-web.js

Kenapa Harus Membuat API Sendiri?

Sebenarnya, di ada cukup banyak layanan yang menyediakan API untuk kebutuhan mengirim pesan WhatsApp, seperti Zenziva, Twilio, Whapi, Ruang WA, dan lain sebagainya. Harganya juga cukup terjangkau bagi yang punya uang dan budget lebih. Menggunakan API sendiri lebih bebas, tidak ada batasan, dan bisa membuat sistem yang sangat sesuai dengan kebutuhan.

Disclaimer

Karena cara ini bukan cara resmi, tentu ada resiko yang mungkin akan diterima. Penulis package ini menyatakan:

NOTE: I can’t guarantee you will not be blocked by using this method, although it has worked for me. WhatsApp does not allow bots or unofficial clients on their platform, so this shouldn’t be considered totally safe.

Yang kesimpulannya lebih kurang tidak ada jaminan bahwa kita (nomor sender) tidak akan diblokir oleh WhatsApp. Namun, selama pengalaman saya menggunakan cara ini masih aman dan lancar saja.

Sebelum memulai, dalam pembuatan tutorial ini saya menggunakan sistem operasi Windows 11 dan Node JS 18.12.1. Namun semua kode yang saya buat bisa dijalankan baik di Windows, Linux maupun Mac.

Membuat Project Node JS dan Package whatsapp-web.js

Pada folder apapun, buatlah project Node JS baru dengan perintah npm init.

npm init -y

Perintah tersebut akan menghasilkan sebuah file package.json di folder tersebut.

Membuat Project Node JS Baru
Membuat Project Node JS Baru

Selanjutnya, instal package whatsapp-web.js dengan perintah berikut.

npm i whatsapp-web.js

Instal juga package qrcode-terminal untuk membuat QR Code yang bisa tampil di terminal.

npm install qrcode-terminal

Silahkan buka folder project tersebut di kode editor kamu untuk memulai.

Membuat Entry Point

Silahkan buat file baru di folder project tersebut dengan nama index.js. Di file ini kita akan menulis kode-kode yang dibutuhkan.

Pada baris pertama, silahkan import package yang dibutuhkan.

const qrcode = require('qrcode-terminal');
const { Client, LocalAuth } = require('whatsapp-web.js');

Membuat Initializer

Pertama buatlah variabel dengan nama client yang akan menyimpan objek dari kelas Client() dari whatsapp-web.js. Disini kita menggunakan strategi auth yaitu local auth. Dengan strategi tersebut, session kita tidak akan dihapus sampai dihapus manual dari ponsel.

Ada 3 auth strategy yang bisa digunakan, yaitu no-auth, local auth dan legacy session auth.

const client = new Client({
    authStrategy: new LocalAuth(),
});

client.initialize();

Membuat QR Code untuk Scan

Di baris selanjutnya tuliskan kode berikut:

client.on('qr', (qr) => {
    qrcode.generate(qr, { small: true });
});

client.on('ready', () => {
    console.log('Client is ready!');
});

Kode tersebut berguna untuk membuat qr code yang akan di scan untuk authentikasi. Setelah berhasil melakukan autentikasi, maka akan menampilkan pesan “Client is ready!” untuk memberitahukan bahwa sistem siap digunakan.

Berikut merupakan kode yang sudah kita tulis sejauh ini.

const qrcode = require('qrcode-terminal');
const { Client, LocalAuth } = require('whatsapp-web.js');

const client = new Client({
    authStrategy: new LocalAuth(),
});

client.initialize();

client.on('qr', (qr) => {
    qrcode.generate(qr, { small: true });
});

client.on('ready', () => {
    console.log('Client is ready!');
});

Melakukan authentikasi

Pertama, jalankan file index.js tersebut di terminal dengan perintah:

node index.js

Tunggulah sampai muncul sebuah QR Code dan scan menggunakan aplikasi WhatsApp kamu. Jika berhasil, akan menghasilkan response seperti berikut.

Scan QR Code WhatsApp
Scan QR Code whatsapp-web.js

Sampai disini, di aplikasi WhatsApp kita akan terhubung dengan perangkat baru, yaitu Google Chrome di Mac OS.

Device baru di ponsel
Device baru di aplikasi WhatsApp

Mengirim Pesan

Pertama, tentukan nomor yang akan dikirim pesan. Disini kita akan mengirimkan ke nomor yang sudah disiapkan (bukan dari query parameter atau database). Contohnya saja akan mengirim pesan ke nomor: 0822 8177 7584

Ubah nomor tersebut menjadi: [email protected]

Ingat, ubah menjadi nomor dengan awalan kode negara dan diakhiri dengan “@c.us”. Akhiran ini merupakan server nomor WhatsApp tersebut dan bisa berbeda untuk setiap nomor. Tetapi untuk nomor-nomor Indonesia yang saya tau menggunakan server tersebut (untuk mengetahui sebuah nomor berada di server mana juga ada caranya, tetapi tidak akan dibahas sekarang).

Di dalam event on ready, tambahkan kode berikut:

//Kirim pesan ke nomor tertentu
client.sendMessage('[email protected]', 'Hello from whatsapp-web.js!');
console.log('Pesan berhasil terkirim');

Pada argumen pertama merupakan nomor tujuan, sedangkan pada argumen kedua merupakan pesan yang akan dikirim. Kita juga dapat mengirim pesan lain seperti foto, video, lokasi, maupun kontak, tetapi untuk awalan ini cukup mengirim pesan teks saja.

Berikut kode yang sudah kita tulis sejauh ini.

const qrcode = require('qrcode-terminal');
const { Client, LocalAuth } = require('whatsapp-web.js');

const client = new Client({
    authStrategy: new LocalAuth(),
});

client.initialize();

client.on('qr', (qr) => {
    qrcode.generate(qr, { small: true });
});

client.on('ready', () => {
    console.log('Client is ready!');

    //Kirim pesan ke nomor tertentu
    client.sendMessage('[email protected]', 'Hello from whatsapp-web.js!');
    console.log('Pesan berhasil terkirim');
});

Setelah itu, jalankan ulang perintah node index.js dan lihatlah di nomor tujuan pesan yang kita kirimkan.

Mengirim pesan dengan WhatsApp JS
Mengirim pesan WhatsApp dengan Node JS

Sebagai catatan, nomor yang dikirim pesan haruslah nomor yang valid. Dan saat menjalankan perintah node index.js untuk yang kedua, ketiga dan seterusnya kita tidak perlu melakukan scan ulang, karena session kita masih tersimpan. Session authentikasi disimpan di folder .wwebjs_auth, jika folder tersebut dihapus, maka perlu melakukan scan ulang.

Menggunakan Package nodemon

Tentu sangat merepotkan jika setiap melakukan perubahan kode, atau sekedar memperbaiki typo kita perlu menjalankan ulang perintah node index.js. Untuk itu, kita akan menggunakan package nodemon supaya terminal “auto restart” saat kode program di file index.js berubah. Silahkan instal package nodemon dengan perintah berikut.

npm i nodemon

Kemudian, pada file package.json buat script baru dengan isi sebagai berikut:

"dev": "nodemon index.js"

Sehingga file package.json kita akan menjadi seperti berikut:

{
  "name": "workspace",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "dev": "nodemon index.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "nodemon": "^2.0.20",
    "qrcode-terminal": "^0.12.0",
    "whatsapp-web.js": "^1.18.4"
  }
}

Selanjutnya, di terminal kita tidak perlu menjalankan “node index.js” lagi, tetapi “npm run dev”.

npm run dev

Maka akan menghasilkan response sebagai berikut.

Menggunakan Package Nodemon
Menggunakan Package Nodemon

Dengan menggunakan nodemon, maka terminal akan auto restart saat ada perubahan dalam project kita. Sangat menghemat waktu bukan?

Sampai disini kita sudah berhasil mengirim pesan ke nomor WhatsApp tertentu. Selanjutnya kita akan membuat API supaya sistem gateway ini bisa digunakan di platform manapun!

Source code dapat dilihat di commit berikut: https://github.com/mulyosyahidin/whatsapp-api-gateway/tree/c0624444b512d5a50a4c9b4841978141c78c3e8a

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *