Membuat API Untuk Mengirim Pesan WhatsApp dari Node JS

By | 23 Desember 2022

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

Sebelumnya kita sudah dapat mengirim pesan ke WhatsApp melalui Node JS, tetapi selalu harus menjalankan perintah npm run dev setiap saat ingin mengirim pesan. Tentu ini tidak efisien dan tidak bisa digunakan untuk project nyata. Untuk mengatasi hal tersebut, kita perlu membuat API supaya dapat mengirim pesan dari manapun.

Untuk membuat API, kita perlu menggunakan Express JS. Express JS merupakan sebuah framework yang berbasis Node JS yang dirancang untuk membuat arsitektur RESTful API.

Menginstal Express JS

Untuk menginstal Express JS, silahkan jalankan perintah berikut.

npm i express cors body-parser multer

Package cors merupakan package yang digunakan untuk menangani isu CORS saat sistem sudah di deploy. Kita juga perlu menggunakan package multer untuk menerima request body berupa form-data.

Kemudian import package express dan cors dengan perintah berikut.

const express = require("express");
const cors = require("cors");
const bodyParser = require('body-parser');
const multer = require('multer');

const upload = multer();

Selanjutnya, didalam event on-ready kita perlu mendeklarasikan variabel app yang berisi objek dari Express JS.

var app = express();
app.use(cors());
app.use(upload.array());

Membuat Route

Kita perlu membuat route untuk menerima request pengirim pesan. Tuliskan kode berikut.

app.post("/api/send-message", (req, res) => {
});

Kemudian, di dalam route tersebut tuliskan kode berikut.

const { number, message } = req.body;

client.getNumberId(number).then((contact) => {
  let formattedNumber = contact._serialized;

  client.sendMessage(formattedNumber, message).then((response) => {
    let messageId = response.id._serialized;

    res.send({
      success: true,
      message: "Message sent successfully",
      data: {
        messageId,
      },
    });
  });
});

Pada baris pertama, kita perlu mendapatkan data number dan message yang didapatkan dari form-data. Pada baris ke-3 kita perlu menggunakan method getNumberId() untuk mendapatkan ID WhatsApp terdaftar dari sebuah nomor. Jika nomor tidak terdaftar di WhatsApp, maka akan mengembalikan null. Namun disini kita asumsikan bahwa setiap nomor sudah terdaftar di WhatsApp sehingga tidak perlu dilakukan validasi.

Pada baris ke-6, kita mengirim pesan menggunakan method sendMessage() yang menerima dua argumen, yaitu ID nomor WhatsApp terdaftar dan pesan yang akan dikirim. Jika berhasil, maka akan mengembalikan response 200.

Sampai disini, kode yang sudah kita tulis adalah sebagai berikut.

const qrcode = require("qrcode-terminal");
const { Client, LocalAuth } = require("whatsapp-web.js");
const express = require("express");
const cors = require("cors");
const bodyParser = require("body-parser");
const multer = require("multer");

const upload = multer();

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

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

client.on("ready", () => {
  var app = express();
  app.use(cors());
  app.use(upload.array());

  app.post("/api/send-message", (req, res) => {
    const { number, message } = req.body;

    client.getNumberId(number).then((contact) => {
      let formattedNumber = contact._serialized;

      client.sendMessage(formattedNumber, message).then((response) => {
        let messageId = response.id._serialized;

        res.send({
          success: true,
          message: "Message sent successfully",
          data: {
            messageId,
          },
        });
      });
    });
  });

  app.listen(3000, () => {
    console.log("Server is running on port 3000");
  });
});

client.initialize();

Menguji API untuk Mengirim Pesan

Pertama, jalankan perintah npm run dev seperti biasa. Maka Express JS akan membuat server dengan port 3000. Buka aplikasi Postman dan buat request seperti berikut.

Membuat API Untuk Mengirim Pesan WhatsApp dari Node JS
Mengirim pesan ke WhatsApp menggunakan Node JS

Jika berhasil, maka akan mengembalikan response seperti diatas. Yang harus diingat, nomor yang dikirim harus diawali dengan kode negara dan tidak boleh diawali dengan “0” atau tanda “+”. Contohnya, jika ingin mengirim pesan ke nomor: 082281xxxxxx, maka harus diubah menjadi: 6282281xxxxxx.

Sampai disini, kita sudah berhasil mengirim pesan melalui API. Selanjutnya kita perlu mendeploy API ke VPS.

Source code selengkapnya dapat dilihat di: https://github.com/mulyosyahidin/whatsapp-api-gateway

Tinggalkan Balasan