Punya data di Google Spreadsheet dan ingin langsung kirim notifikasi ke WhatsApp tanpa ribet? Tutorial ini menjelaskan cara mengirim pesan WhatsApp secara otomatis langsung dari Google Spreadsheet menggunakan Google Apps Script dan WhatsApp API — bisa pakai layanan official maupun non-official.
Gambaran Umum
Alurnya sederhana:
Data di Google Spreadsheet → Google Apps Script → WhatsApp API → Pesan terkirim ke HP
Kamu cukup menulis script sekali, lalu setiap kali ada data baru atau tombol diklik, pesan WA otomatis terkirim ke nomor yang ditentukan.
Pilih WhatsApp API
Sebelum mulai, pilih dulu layanan API yang ingin kamu gunakan.
| Layanan | Tipe | Keterangan |
|---|---|---|
| Fonnte | Non-official | Pakai nomor WA sendiri, mudah di-setup |
| WA-Gateway / WAblas / Watzap | Non-official | Mirip Fonnte, berbasis pairing |
| Whapi.cloud | Non-official | API modern berbasis cloud |
| WhatsApp Business API (Meta) | Official | Butuh verifikasi bisnis, untuk skala besar |
| Twilio for WhatsApp | Official (via Meta) | Mudah diintegrasikan, ada free tier |
Untuk kebutuhan internal atau skala kecil-menengah, layanan non-official (berbasis pairing nomor WA) paling cepat dan mudah diimplementasikan. Untuk bisnis yang butuh volume besar dan kepatuhan penuh, gunakan WhatsApp Business API resmi.
Yang Dibutuhkan
- Google Spreadsheet — berisi data yang ingin dikirim (nama, nomor WA, pesan, dll.)
- Akun di layanan WhatsApp API — untuk mendapatkan Token/API Key
- Google Apps Script — untuk menghubungkan keduanya (gratis, tidak perlu server)
Struktur Spreadsheet
Pastikan spreadsheet kamu punya kolom yang rapi.
| No | Nama | Pesan | Status | |
|---|---|---|---|---|
| 1 | Budi Santoso | 6281234567890 | Tagihan bulan ini Rp 500.000 | – |
| 2 | Sari Dewi | 6287654321098 | Selamat, pesanan sudah dikirim! | – |
Tips: Nomor WA sebaiknya dalam format internasional tanpa tanda
+(contoh:6281234567890).
Langkah 1: Buka Google Apps Script
- Buka Google Spreadsheet kamu
- Klik menu Extensions (atau Ekstensi)
- Pilih Apps Script
- Halaman editor script akan terbuka di tab baru
Langkah 2: Tulis Script Pengiriman
Hapus semua kode yang ada, lalu paste script berikut:
// =============================================
// KONFIGURASI — sesuaikan bagian ini
// =============================================
const API_URL = "https://api.layanan-wa-kamu.com/send"; // Endpoint API WA yang kamu pakai
const API_TOKEN = "isi-token-atau-api-key-kamu-di-sini"; // Token dari dashboard layanan
// Nama kolom di spreadsheet (harus sama persis dengan header)
const COL_NAMA = "Nama";
const COL_NOMOR_WA = "WhatsApp";
const COL_PESAN = "Pesan";
const COL_STATUS = "Status"; // Kolom untuk mencatat hasil pengiriman
// =============================================
// FUNGSI UTAMA
// =============================================
function kirimPesanWA() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
const data = sheet.getDataRange().getValues();
const header = data[0]; // Baris pertama = header
// Ambil index kolom berdasarkan nama header
const idxNama = header.indexOf(COL_NAMA);
const idxNomor = header.indexOf(COL_NOMOR_WA);
const idxPesan = header.indexOf(COL_PESAN);
const idxStatus = header.indexOf(COL_STATUS);
// Loop dari baris ke-2 (index 1) karena baris 0 adalah header
for (let i = 1; i < data.length; i++) {
const row = data[i];
const nama = row[idxNama];
const nomor = row[idxNomor].toString().trim();
const pesan = row[idxPesan];
const status = row[idxStatus];
// Skip baris yang sudah terkirim atau kosong
if (!nomor || status === "Terkirim") continue;
// Kirim pesan via API
const hasil = kirimKeAPI(nomor, pesan);
// Catat status di spreadsheet
const statusCell = sheet.getRange(i + 1, idxStatus + 1);
if (hasil) {
statusCell.setValue("Terkirim");
} else {
statusCell.setValue("Gagal");
}
// Jeda kecil agar tidak kena rate limit
Utilities.sleep(500);
}
}
// =============================================
// FUNGSI KIRIM KE API
// =============================================
function kirimKeAPI(nomor, pesan) {
const options = {
method: "post",
headers: {
"Authorization": API_TOKEN,
"Content-Type": "application/x-www-form-urlencoded"
},
payload: {
target: nomor,
message: pesan
},
muteHttpExceptions: true
};
try {
const response = UrlFetchApp.fetch(API_URL, options);
const result = JSON.parse(response.getContentText());
Logger.log("Response untuk " + nomor + ": " + JSON.stringify(result));
// Cek apakah berhasil (sesuaikan dengan format response API yang kamu pakai)
return result.status === true || result.status === "success" || response.getResponseCode() === 200;
} catch (e) {
Logger.log("Error untuk " + nomor + ": " + e.toString());
return false;
}
}
Langkah 3: Sesuaikan dengan API yang Kamu Pakai
Setiap layanan punya format request sedikit berbeda. Berikut contoh penyesuaiannya:
Untuk Fonnte
const API_URL = "https://api.fonnte.com/send";
const API_TOKEN = "token-dari-dashboard-fonnte";
// Payload sudah sesuai, tidak perlu ubah
Untuk Twilio
const API_URL = "https://api.twilio.com/2010-04-01/Accounts/ACCOUNT_SID/Messages.json";
const API_TOKEN = "Basic " + Utilities.base64Encode("ACCOUNT_SID:AUTH_TOKEN");
// Ubah fungsi kirimKeAPI - Twilio pakai format berbeda
function kirimKeAPI(nomor, pesan) {
const options = {
method: "post",
headers: { "Authorization": API_TOKEN },
payload: {
To: "whatsapp:+" + nomor,
From: "whatsapp:+14155238886", // Nomor sandbox Twilio
Body: pesan
},
muteHttpExceptions: true
};
const response = UrlFetchApp.fetch(API_URL, options);
return response.getResponseCode() === 201;
}
Untuk WhatsApp Business API (Meta)
const PHONE_NUMBER_ID = "id-nomor-bisnis-kamu";
const API_URL = `https://graph.facebook.com/v18.0/${PHONE_NUMBER_ID}/messages`;
const API_TOKEN = "Bearer token-akses-meta-kamu";
function kirimKeAPI(nomor, pesan) {
const payload = {
messaging_product: "whatsapp",
to: nomor,
type: "text",
text: { body: pesan }
};
const options = {
method: "post",
headers: {
"Authorization": API_TOKEN,
"Content-Type": "application/json"
},
payload: JSON.stringify(payload),
muteHttpExceptions: true
};
const response = UrlFetchApp.fetch(API_URL, options);
const result = JSON.parse(response.getContentText());
return result.messages && result.messages[0].id;
}
Langkah 4: Jalankan Script
Cara Manual (Run dari Editor)
- Di editor Apps Script, pastikan fungsi yang dipilih adalah
kirimPesanWA - Klik tombol ▶ Run
- Pertama kali, Google akan minta izin akses — klik Allow
- Cek kolom Status di spreadsheet — akan berisi “Terkirim” atau “Gagal”
- Cek log eksekusi via menu View → Execution log
Cara Tambah Tombol di Spreadsheet (Lebih Praktis)
- Di spreadsheet, klik menu Insert → Drawing
- Buat shape atau tuliskan teks tombol (misal “Kirim WA Sekarang”)
- Klik Save and Close
- Klik kanan gambar tombol → Assign Script → ketik
kirimPesanWA - Sekarang kamu bisa klik tombol itu langsung dari spreadsheet!
Langkah 5: (Opsional) Kirim Otomatis dengan Trigger
Kalau ingin pesan terkirim otomatis tanpa harus klik manual (misalnya setiap hari jam 8 pagi):
- Di editor Apps Script, klik ikon jam (Triggers) di sidebar kiri
- Klik + Add Trigger
- Atur konfigurasinya:
- Function:
kirimPesanWA - Event source:
Time-driven - Type:
Day timer - Time:
8am – 9am
- Function:
- Klik Save
Tips Tambahan
Pesan multi-baris — gunakan \n dalam teks pesan di spreadsheet atau di script:
const pesan = "Halo " + nama + ",\nTagihan kamu sudah jatuh tempo.\nSegera lakukan pembayaran.";
Kirim ke banyak nomor sekaligus — beberapa API mendukung target ganda dipisah koma:
target: "6281234567890,6287654321098"
Format bold/italic — ikuti format native WhatsApp:
- Bold:
*teks* - Italic:
_teks_ - Strikethrough:
~teks~
Hindari rate limit — jika kirim banyak pesan, tambahkan jeda antar pengiriman:
Utilities.sleep(1000); // Jeda 1 detik antar pesan
Troubleshooting
| Masalah | Kemungkinan Penyebab | Solusi |
|---|---|---|
| Status selalu “Gagal” | Token salah | Cek dan copy ulang token dari dashboard API |
ReferenceError: header not found |
Nama kolom tidak cocok | Pastikan nama kolom di script sama persis dengan header di spreadsheet (perhatikan spasi dan huruf besar/kecil) |
Authorization required |
Belum izinkan akses | Run ulang script dan klik Allow |
| Pesan tidak terkirim tapi status “Terkirim” | Logic pengecekan response berbeda | Cek log dan sesuaikan kondisi pengecekan result.status |
| Script timeout | Terlalu banyak baris | Bagi pengiriman per batch atau tambah jeda |
Kesimpulan
Dengan Google Apps Script dan WhatsApp API, kamu bisa kirim pesan WA otomatis langsung dari spreadsheet tanpa perlu server atau coding yang rumit. Pilihlah layanan API yang paling sesuai dengan kebutuhanmu — layanan non-official lebih mudah untuk mulai cepat, sementara WhatsApp Business API resmi cocok untuk kebutuhan bisnis berskala besar.
Script di atas bersifat generik dan bisa disesuaikan dengan hampir semua layanan WhatsApp API yang ada di pasaran. Chat saya melalui tombol di pojok kanan bawah website, untuk konsultasi lebih lanjut.