Langsung ke konten
WbizTool

Kirim pesan WhatsApp dengan Python

Kirim teks, gambar, dan file WhatsApp dari skrip Python, dari nomor Anda sendiri yang ditautkan ke WbizTool seperti WhatsApp Web. Gunakan paket resmi wbiztool-client atau panggilan requests biasa ke endpoint yang sama.

Uji coba gratis: 50 pesan dalam 30 hari mana pun, tanpa kartu.

Cara kerjanya

  1. Dapatkan kunci API dan tautkan nomor Anda

    Daftar, lalu tautkan nomor WhatsApp Anda di halaman Nomor WhatsApp dengan kode QR atau kode penautan, seperti WhatsApp Web. Di Pengaturan → Kunci API, buat kunci dan salin Client ID Anda (panduan Kunci API di bawah menunjukkan letaknya). ID di kartu nomor (seperti ID 678) adalah whatsapp_client Anda.

  2. Instal client, atau gunakan requests

    Jalankan pip install wbiztool-client untuk client resmi. Jika tidak ingin menambah paket, library requests juga bisa – contoh di bawah menunjukkan keduanya.

  3. Kirim pesannya

    POST kredensial Anda, nomor telepon, dan teksnya ke https://wbiztool.com/api/v1/send_msg/. Balasan dengan "status": 1 dan msg_id berarti pesan sudah masuk antrean di nomor Anda.

  4. Pastikan pesan terkirim

    Sertakan URL webhook untuk diberi tahu saat pesan terkirim atau gagal, atau tanyakan ke endpoint Status pesan dengan msg_id.

Contoh kode Python

Instal client resmi
pip install wbiztool-client
Kirim teks dengan client resmi
from wbiztool_client import WbizToolClient

client = WbizToolClient(api_key="YOUR_API_KEY", client_id="12345")

result = client.send_message(
    phone="9876543210",
    country_code="91",
    msg="Hi Aman, your order #4821 has shipped.",
    whatsapp_client=678,
)
print(result)
Kirim teks dengan requests
import requests

response = requests.post(
    "https://wbiztool.com/api/v1/send_msg/",
    json={
        "client_id": 12345,
        "api_key": "YOUR_API_KEY",
        "whatsapp_client": 678,
        "msg_type": 0,
        "country_code": "91",
        "phone": "9876543210",
        "msg": "Hi Aman, your order #4821 has shipped and will arrive on Thursday.",
    },
    timeout=60,
)
result = response.json()  # read the body even when the HTTP code is 400

if result.get("status") == 1:
    print("Queued with msg_id", result["msg_id"])
else:
    print("Failed:", result.get("message"))
Balasan
{"status": 1, "message": "Created", "msg_id": 9817263}
Kirim PDF (unggah file)
import requests

with open("invoice-4821.pdf", "rb") as f:
    response = requests.post(
        "https://wbiztool.com/api/v1/send_msg/",
        data={
            "client_id": 12345,
            "api_key": "YOUR_API_KEY",
            "whatsapp_client": 678,
            "msg_type": 2,
            "country_code": "91",
            "phone": "9876543210",
            "msg": "Your invoice for order #4821 is attached.",
            "file_name": "invoice-4821.pdf",
        },
        files={"file": f},
        timeout=120,
    )
print(response.json())
Cek status pesan
import requests

msg_id = 9817263
response = requests.post(
    f"https://wbiztool.com/api/v1/message/status/{msg_id}/",
    json={
        "client_id": 12345,
        "api_key": "YOUR_API_KEY",
    },
    timeout=60,
)
result = response.json()  # read the body even when the HTTP code is 400

if result.get("message") == "Unknown message id":
    print("No message with this ID in your workspace")
elif "status_text" not in result:
    print("Request failed:", result.get("message", "no message in response"))
elif result["status"] == 1:
    print("Sent")
elif result["status"] == 2:
    print("Failed:", result["error"])
else:
    print("Status:", result["status_text"])
Jadwalkan pesan untuk nanti
from datetime import datetime, timedelta
from zoneinfo import ZoneInfo

import requests

send_at = datetime.now(ZoneInfo("Asia/Kolkata")) + timedelta(hours=2)

response = requests.post(
    "https://wbiztool.com/api/v1/schedule_msg/",
    json={
        "client_id": 12345,
        "api_key": "YOUR_API_KEY",
        "whatsapp_client": 678,
        "msg_type": 0,
        "country_code": "91",
        "phone": "9876543210",
        "msg": "Hi Aman, a reminder that your appointment starts in 30 minutes.",
        "date": send_at.strftime("%d/%m/%Y"),
        "time": send_at.strftime("%H:%M"),
        "timezone": "Asia/Kolkata",
    },
    timeout=60,
)
result = response.json()  # schedule errors come back with HTTP 200 and "status": 0

if result.get("status") == 1:
    print("Scheduled with msg_id", result["msg_id"])
else:
    print("Failed:", result.get("message", "no message in response"))
Terima webhook status (Flask)
from flask import Flask, request

app = Flask(__name__)

@app.post("/wbiztool-webhook")
def wbiztool_webhook():
    # WbizTool posts form fields, not JSON.
    msg_id = request.form["msg_id"]
    status = request.form["status"]  # SENT, FAILED, CANCELLED or EXPIRED
    print(msg_id, status)
    return "", 200

Yang bisa Anda lakukan

  • Teks, gambar, dan file

    Atur msg_type ke 0 untuk teks, 1 untuk gambar, atau 2 untuk file. Beri img_url atau file_url publik, atau unggah filenya langsung dengan files= di requests.

  • Pesan personal dari data Anda

    Susun msg dari data Anda sendiri – nama, nomor pesanan, tanggal jatuh tempo. Format WhatsApp seperti *tebal* dan _miring_ bisa dipakai, hingga 3.000 karakter.

  • Status lewat webhook atau dengan bertanya

    Webhook menerima POST dengan msg_id dan SENT, FAILED, CANCELLED, atau EXPIRED. Atau panggil Status pesan: pesan yang gagal disertai error-nya, seperti Phone number invalid.

  • Jadwalkan untuk nanti

    POST ke /api/v1/schedule_msg/ dengan date (dd/mm/yyyy), time (HH:MM), dan timezone seperti Asia/Kolkata. strftime("%d/%m/%Y") dan strftime("%H:%M") menyusunnya untuk Anda.

  • Buang pesan yang terlambat

    expire_after_seconds menandai pesan sebagai kedaluwarsa jika belum terkirim tepat waktu, cocok untuk pesan yang sensitif waktu seperti perkiraan waktu pengiriman.

  • Pengingat berulang

    API Pengingat mengulang pesan sesuai jadwal cron, seperti pukul 10.00 setiap tanggal 1. Pengingat memerlukan paket berbayar.

Perlu diketahui

  • "status": 1 berarti pesan masuk antrean, bukan sudah diterima. Terkirim (Sent) adalah status sukses terakhir; API tidak melaporkan apakah pesan sudah diterima atau dibaca.
  • Error Kirim pesan kembali dengan HTTP 400 (429 saat batas harian); error Jadwalkan pesan biasanya kembali dengan HTTP 200 dan "status": 0, jadi baca response.json() dan periksa status, bukan kode HTTP. Client resmi memunculkan requests.HTTPError: baca alasannya dengan e.response.json()["message"].
  • Client resmi belum menangani semua endpoint dengan benar: schedule_message dan check_credentials() di dalamnya tidak berfungsi dengan API saat ini. Panggil /api/v1/schedule_msg/ dengan requests seperti contoh di atas, dan /api/v1/me/ dengan cara yang sama.
  • Simpan kunci API di server Anda, misalnya di environment variable. Siapa pun yang memilikinya bisa mengirim dari nomor-nomor Anda, jadi jangan pernah menaruhnya di JavaScript browser, aplikasi mobile, atau kode yang Anda publikasikan.
  • Uji coba gratis berisi 50 pesan dalam 30 hari mana pun dan 1 nomor, tanpa kartu. Paket berbayar mulai $25 per bulan di AS (harga Anda ada di halaman Harga) dan mengirim pesan tanpa batas sesuai penggunaan wajar: hingga 1.000 per hari per nomor.
  • Pesan dikirim dari nomor WhatsApp Anda sendiri, jadi aturan WhatsApp sendiri berlaku: kirim pesan ke orang yang menunggu kabar dari Anda.

Pertanyaan

Apakah ada library Python resmi untuk API WbizTool?
Ada: wbiztool-client di PyPI (pip install wbiztool-client). Gunakan send_message dan get_message_status miliknya. Untuk penjadwalan dan cek kredensial, panggil endpoint-nya dengan requests.
Bagaimana cara mengirim PDF atau gambar dari Python?
Gunakan msg_type 1 dengan img_url untuk gambar, atau msg_type 2 dengan file_url untuk file. Untuk mengirim file dari disk, kirim sebagai multipart form data di field bernama file, dan atur file_name dengan ekstensinya, seperti invoice-4821.pdf.
Bagaimana saya tahu pesan sudah terkirim?
Balasan dengan "status": 1 dan msg_id berarti pesan sudah masuk antrean. Sertakan URL webhook untuk menerima POST dengan SENT, FAILED, CANCELLED, atau EXPIRED, atau panggil endpoint Status pesan dengan msg_id. Terkirim (Sent) adalah status akhir: API tidak melaporkan pesan diterima atau dibaca.
Format nomor telepon apa yang harus saya kirim?
Kirim nomor dengan kode negaranya (6281234567890), atau tanpa kode negara (81234567890) bersama country_code (62). Spasi, +, tanda hubung, dan tanda kurung dihapus otomatis, jadi +62 812-3456-7890 juga bisa.
Apakah saya perlu WhatsApp Business API atau persetujuan Meta?
Tidak. WbizTool mengirim dari nomor WhatsApp atau WhatsApp Business Anda sendiri, yang ditautkan seperti WhatsApp Web. Tidak perlu persetujuan Meta dan tidak ada template pesan yang harus disetujui.
Apakah ada biaya per pesan?
Tidak. Uji coba gratis mencakup 50 pesan dalam 30 hari mana pun. Paket berbayar mengirim pesan tanpa batas sesuai penggunaan wajar, hingga 1.000 per hari per nomor: Lite $25, Standard $59, dan Advanced $149 per bulan di AS; halaman Harga menampilkan harga untuk negara Anda.

Baca panduannya

Terkait

Kirim pesan WhatsApp otomatis pertama Anda hari ini

Buat akun, scan kode QR, dan kirim pesan dalam waktu kurang dari lima menit.

Mulai gratis

Paket berbayar mulai $25 per bulan di AS. Harga