Otomatisasi Pengiriman Pesan WhatsApp Massal dengan Python
Tue, 29 Apr 2025
Follow the stories of academics and their research expeditions
Kategori: Pemrograman Python, Otomatisasi, Marketing Digital
Keywords: Python, WhatsApp API, Pywhatkit, Pandas, Otomatisasi Pesan, Bulk Message, WhatsApp Marketing, Python Automation, Excel Data Processing
Di era digital saat ini, komunikasi efektif menjadi kunci sukses dalam berbagai aspek bisnis dan organisasi. WhatsApp telah menjadi salah satu platform pesan instan yang paling populer dengan lebih dari 2 miliar pengguna aktif di seluruh dunia. Dengan jangkauan yang luas, WhatsApp menjadi sarana ideal untuk menyebarkan informasi seperti pengumuman acara, promosi, atau pemberitahuan penting.
Namun, mengirim pesan ke banyak orang secara manual bisa memakan waktu dan rentan terhadap kesalahan. Untungnya, dengan kemampuan Python dan beberapa library pendukung, kita dapat mengotomatisasi proses ini. Dalam artikel ini, saya akan membahas bagaimana cara membuat sistem pengiriman pesan WhatsApp otomatis menggunakan Python, yang dapat disesuaikan dengan kebutuhan Anda.
Mari kita bahas kode yang dapat digunakan untuk mengirim pesan WhatsApp massal secara otomatis:
import pandas as pd
import pywhatkit as kit
import time
import os
# Baca file Excel
df = pd.read_excel("data2.xlsx", header=None)
df.columns = ["No", "Nama", "NomorHP"]
# Format nomor
def format_nomor(nomor):
nomor_str = str(nomor)
if nomor_str.startswith("0"):
return "+62" + nomor_str[1:]
elif nomor_str.startswith("8"):
return "+62" + nomor_str
elif nomor_str.startswith("62"):
return "+" + nomor_str
else:
return nomor_str
df["NomorFormatted"] = df["NomorHP"].apply(format_nomor)
# Path untuk file gambar poster
poster_path = "poster.jpg"
# Pastikan file poster ada
if not os.path.exists(poster_path):
print(f"Error: File poster '{poster_path}' tidak ditemukan.")
exit()
# Kirim pesan ke semua nomor
for index, row in df.iterrows():
nama = row["Nama"]
nomor = row["NomorFormatted"]
pesan = f"""???? WEBINAR TEKNOLOGI AI TERKINI
Halo {nama}!
???? Penasaran dengan perkembangan AI terbaru dan bagaimana penerapannya di industri?
Gabung dalam Webinar "AI Revolution: Transformasi Digital di Era Modern" ????
???? Yang akan kamu dapatkan:
✅ Update teknologi AI terbaru
✅ Studi kasus implementasi di berbagai industri
✅ Tips memulai karir di bidang AI
✅ Networking dengan pakar teknologi
✅ Sertifikat kehadiran digital
???? Tanggal: 15 Mei 2025
⏰ Pukul: 13.00 - 16.00 WIB
???? Via Zoom - Tempat terbatas!
???? Daftar sekarang: bit.ly/ai-webinar-2025"""
try:
print(f"Mengirim pesan dan poster ke {nama} ({nomor})...")
# Kirim gambar dengan caption - menggunakan parameter yang benar
kit.sendwhats_image(
receiver=nomor,
img_path=poster_path,
caption=pesan,
wait_time=30,
tab_close=True
)
print(f"Berhasil mengirim ke {nama}")
time.sleep(10) # jeda antar pesan, biar gak dianggap spam
except Exception as e:
print(f"Gagal kirim ke {nama} ({nomor}) - {e}")
print("Proses pengiriman pesan selesai!")
import pandas as pd
import pywhatkit as kit
import time
import os
df = pd.read_excel("data2.xlsx", header=None)
df.columns = ["No", "Nama", "NomorHP"]
Kode ini membaca data dari file Excel bernama "data2.xlsx" dan memberikan nama kolom yang sesuai. Data ini berisi informasi penerima pesan, termasuk nama dan nomor telepon.
def format_nomor(nomor):
nomor_str = str(nomor)
if nomor_str.startswith("0"):
return "+62" + nomor_str[1:]
elif nomor_str.startswith("8"):
return "+62" + nomor_str
elif nomor_str.startswith("62"):
return "+" + nomor_str
else:
return nomor_str
df["NomorFormatted"] = df["NomorHP"].apply(format_nomor)
Fungsi ini memastikan nomor telepon dalam format yang benar untuk WhatsApp. Format internasional seperti "+62xxx" diperlukan untuk Indonesia.
poster_path = "poster.jpg"
if not os.path.exists(poster_path):
print(f"Error: File poster '{poster_path}' tidak ditemukan.")
exit()
Kode ini memeriksa apakah file poster gambar ada di lokasi yang ditentukan.
for index, row in df.iterrows():
nama = row["Nama"]
nomor = row["NomorFormatted"]
pesan = f"""???? WEBINAR TEKNOLOGI AI TERKINI
Halo {nama}!
...
Loop ini akan mengirim pesan ke setiap kontak dalam file Excel, dengan personalisasi nama penerima.
try:
print(f"Mengirim pesan dan poster ke {nama} ({nomor})...")
kit.sendwhats_image(
receiver=nomor,
img_path=poster_path,
caption=pesan,
wait_time=30,
tab_close=True
)
print(f"Berhasil mengirim ke {nama}")
time.sleep(10) # jeda antar pesan, biar gak dianggap spam
except Exception as e:
print(f"Gagal kirim ke {nama} ({nomor}) - {e}")
Kode ini menangani pengiriman pesan dengan citra menggunakan pywhatkit dan menerapkan mekanisme error handling untuk memastikan program tetap berjalan meskipun ada kesalahan pada pengiriman individual.
time.sleep() berdasarkan kecepatan internet Anda. Nilai terlalu rendah bisa menyebabkan WhatsApp mendeteksi aktivitas sebagai spamTambahkan variasi acak pada waktu jeda untuk menghindari deteksi otomatisasi:
import random
# Di dalam loop pengiriman
time.sleep(random.uniform(8, 15)) # Jeda acak antara 8-15 detik
Implementasikan kemampuan untuk melanjutkan dari titik terakhir jika proses terhenti:
# Simpan progress
with open("last_sent.txt", "w") as f:
f.write(str(index))
# Untuk memulai dari index terakhir
last_index = 0
if os.path.exists("last_sent.txt"):
with open("last_sent.txt", "r") as f:
last_index = int(f.read().strip())
# Modifikasi loop
for index, row in df.iloc[last_index:].iterrows():
# proses pengiriman
Implementasikan validasi nomor yang lebih ketat:
import re
def validate_phone(nomor):
# Format ke format internasional
formatted = format_nomor(nomor)
# Cek pola untuk nomor Indonesia yang valid
pattern = r'^\+62[8-9][0-9]{8,11}$'
if re.match(pattern, formatted):
return formatted
else:
return None
Tambahkan kolom prioritas di Excel dan urutkan pengiriman berdasarkan prioritas:
# Tambahkan kolom prioritas di Excel
df["Prioritas"] = [1, 2, 1, 3, 2, ...] # Sesuai kebutuhan
# Urutkan berdasarkan prioritas
df = df.sort_values(by="Prioritas")
# Lanjutkan dengan loop pengiriman
Buat laporan pengiriman yang komprehensif:
import datetime
report = {
"total": len(df),
"success": 0,
"failed": 0,
"start_time": datetime.datetime.now(),
"end_time": None,
"failed_numbers": []
}
# Di dalam loop, update report
if success:
report["success"] += 1
else:
report["failed"] += 1
report["failed_numbers"].append(nomor)
# Di akhir proses
report["end_time"] = datetime.datetime.now()
report["duration"] = report["end_time"] - report["start_time"]
# Simpan laporan ke file
with open("report.txt", "w") as f:
for key, value in report.items():
f.write(f"{key}: {value}\n")
Otomatisasi pengiriman pesan WhatsApp dengan Python menawarkan efisiensi dan personalisasi yang tidak bisa dicapai dengan metode manual. Dengan menggunakan kode yang telah dibahas, Anda dapat mengirim pesan promosi, pengumuman, atau pemberitahuan penting ke sejumlah besar kontak sekaligus, sambil tetap mempertahankan sentuhan personal dengan menyertakan nama penerima.
Namun, perlu diingat bahwa dengan kekuatan otomatisasi ini juga datang tanggung jawab. Pastikan untuk selalu menghormati privasi penerima, mendapatkan izin yang diperlukan, dan mengikuti etika komunikasi digital yang baik.
Dengan mengintegrasikan tips dan teknik yang dibahas di artikel ini, Anda dapat mengoptimalkan proses pengiriman pesan WhatsApp massal Anda, meningkatkan efisiensi operasional, dan pada akhirnya memperkuat strategi komunikasi digital Anda.
Selamat mencoba dan semoga berhasil dengan kampanye WhatsApp Anda berikutnya!
Severity: Warning
Message: Trying to access array offset on value of type null
Filename: default-new/blog_details.php
Line Number: 47
Backtrace:
File: /home/udakitac/public_html/application/views/frontend/default-new/blog_details.php
Line: 47
Function: _error_handler
File: /home/udakitac/public_html/application/views/frontend/default-new/index.php
Line: 153
Function: include
File: /home/udakitac/public_html/application/controllers/Blog.php
Line: 114
Function: view
File: /home/udakitac/public_html/index.php
Line: 289
Function: require_once
Tue, 29 Apr 2025
Sat, 26 Apr 2025
A PHP Error was encountered
Severity: Warning
Message: Trying to access array offset on value of type null
Filename: default-new/blog_details.php
Line Number: 51
Backtrace:
File: /home/udakitac/public_html/application/views/frontend/default-new/blog_details.php
Line: 51
Function: _error_handler
File: /home/udakitac/public_html/application/views/frontend/default-new/index.php
Line: 153
Function: include
File: /home/udakitac/public_html/application/controllers/Blog.php
Line: 114
Function: view
File: /home/udakitac/public_html/index.php
Line: 289
Function: require_once
A PHP Error was encountered
Severity: Warning
Message: Trying to access array offset on value of type null
Filename: default-new/blog_details.php
Line Number: 51
Backtrace:
File: /home/udakitac/public_html/application/views/frontend/default-new/blog_details.php
Line: 51
Function: _error_handler
File: /home/udakitac/public_html/application/views/frontend/default-new/index.php
Line: 153
Function: include
File: /home/udakitac/public_html/application/controllers/Blog.php
Line: 114
Function: view
File: /home/udakitac/public_html/index.php
Line: 289
Function: require_once
Sun, 07 Dec 2025
mantap
Reply