Mesajlaşma API'si
WhatsApp mesajı zamanlama API'si
Bir WhatsApp metnini, görselini veya belgesini seçtiğiniz tarih ve saatte bir telefon numarasına veya gruba gönderilmek üzere zamanlayın. Randevu hatırlatmaları, doğum günü kutlamaları, takip mesajları ve zamana duyarlı teklifler için kullanın.
https://wbiztool.com/api/v1/schedule_msg/Gövde: JSON veya form alanları
Mesaj zamanlanan saate kadar kuyruğunuzda bekler ve ardından WhatsApp numaranızdan gönderilir. Yanıt, durumunu kontrol etmek veya iptal etmek için kullanabileceğiniz bir msg_id verir.
Hızlı örnek#
curl -X POST https://wbiztool.com/api/v1/schedule_msg/ \
-H "Content-Type: application/json" \
-d '{
"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 is today at 11:30 AM.",
"date": "24/12/2026",
"time": "09:00",
"timezone": "Asia/Kolkata"
}'import requests
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 is today at 11:30 AM.",
"date": "24/12/2026",
"time": "09:00",
"timezone": "Asia/Kolkata",
},
timeout=60,
)
result = response.json() # read the body even when the HTTP code is 400
if result.get("status") == 1:
print("Scheduled with msg_id", result["msg_id"])
else:
print("Failed:", result.get("message", "no message in response"))// Node.js 18+ (built-in fetch). Save as .mjs to use top-level await.
const response = await fetch("https://wbiztool.com/api/v1/schedule_msg/", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
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 is today at 11:30 AM.",
date: "24/12/2026",
time: "09:00",
timezone: "Asia/Kolkata",
}),
});
const result = await response.json(); // read the body even when the HTTP code is 400
if (result.status === 1) {
console.log("Scheduled with msg_id", result.msg_id);
} else {
console.error("Failed:", result.message ?? "no message in response");
}<?php
$payload = [
'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 is today at 11:30 AM.',
'date' => '24/12/2026',
'time' => '09:00',
'timezone' => 'Asia/Kolkata',
];
$ch = curl_init('https://wbiztool.com/api/v1/schedule_msg/');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode($payload),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 60,
]);
$result = json_decode(curl_exec($ch), true);
curl_close($ch);
if (($result['status'] ?? 0) === 1) {
echo 'Scheduled with msg_id ' . $result['msg_id'];
} else {
echo 'Failed: ' . ($result['message'] ?? 'no message in response');
}12345, YOUR_API_KEY ve 678 değerlerini kendi değerlerinizle değiştirin. Bunları nerede bulacağınız için Kimlik doğrulama bölümüne bakın.
İstek parametreleri#
Kimlik doğrulama
client_idintegerzorunluAyarlar → API anahtarları sayfasındaki API Client ID'niz.
api_keystringzorunluAynı sayfadaki API anahtarınız.
whatsapp_clientintegerzorunluGönderimin yapılacağı WhatsApp numarasının ID'si; WhatsApp ayarları sayfasında bulunur. Mesaj gönderme endpoint'inden farklı olarak bu endpoint sizin için asla numara seçmez.
Zamanlama
datestringzorunluMesajın gönderileceği gün,
dd/mm/yyyybiçiminde; örneğin24/12/2026.timestringzorunluMesajın gönderileceği saat, 24 saatlik
HH:MMbiçiminde; örneğin09:00veya18:45. Saniye eklemeyin.timezonestringisteğe bağlıdatevetimedeğerlerinin ait olduğu saat dilimi. Göndermezseniz varsayılanIST(Hindistan) olur. Bkz. Saat dilimleri.
Alıcı ve mesaj
phonestringgroup_name göndermiyorsanız zorunluAlıcının WhatsApp numarası, yalnızca rakamlar. Boşluklar,
+,-,.ve parantezler sizin için kaldırılır. Numarayı ya ülke koduyla birlikte (919876543210) ya da ülke kodu olmadan (9876543210)country_codeile birlikte gönderin.group_namestringphone göndermiyorsanız zorunluNumaranızın üyesi olduğu bir WhatsApp grubunun adı. Gruba gönderme ile aynı şekilde bulunur.
phoneveyagroup_namegönderin, asla ikisini birden göndermeyin.country_codestringisteğe bağlı+olmadan ülke telefon kodu; örneğin Hindistan için91, ABD için1. Numara zaten bununla başlamıyorsaphonedeğerinin önüne eklenir. İstisna:91ile 10 haneli bir numaraya önek her zaman eklenir. Diğer kodlarda, aynı rakamlarla başlayan yerel numaraları ülke koduyla birlikte gönderin. Gruplarda yok sayılır.msg_typeintegeristeğe bağlı0metin (varsayılan),1görsel,2dosya veya belge.msgstringmsg_type 0 olduğunda zorunluMesaj metni. Görsel ve dosyalarda açıklama metnidir ve boş olabilir. WhatsApp biçimlendirmesi çalışır:
*bold*,_italic_,~strikethrough~.messageda takma ad olarak kabul edilir.
Görseller ve dosyalar
img_urlstringmsg_type 1 olduğunda zorunluGörselin herkese açık
httpveyahttpsURL'si.file_urlstringmsg_type 2 olduğunda zorunluDosyanın doğrudan indirilebileceği herkese açık
httpveyahttpsURL'si.file_namestringisteğe bağlıAlıcının gördüğü dosya adı, örneğin
invoice-4821.pdf. Küçük harflerle gönderilir,& : ? * $ ;gibi karakterler_ile değiştirilir ve 150 karaktere kısaltılır. Göndermezseniz ad URL'den alınır.
Teslimat seçenekleri
webhookstringisteğe bağlıMesaj gönderildiğinde veya başarısız olduğunda bir
POSTalan URL. İçerik, Mesaj gönderme ile aynıdır.
Mesaj ne zaman gönderilir#
- Wbiztool
date,timevetimezonedeğerlerini tek bir ana dönüştürür ve WhatsApp numaranız bağlı olduğu sürece o an geçtiğinde mesajı gönderir. - Geçmişteki bir saat kabul edilir. Mesaj normal bir gönderim gibi hemen gönderilir. Bir mesajı aylar önce göndermemek için tarih biçimini (
dd/mm/yyyy, önce gün) iki kez kontrol edin. - Zamanlanan saatte numaranızın bağlantısı kesikse, mesaj bekler ve numara yeniden bağlanır bağlanmaz gönderilir; bu planlanandan çok daha sonra olsa bile. Bu endpoint'te süre sonu yoktur, bu yüzden mesaj artık geçerli değilse iptal edin. Zamanlanan saatinden 90 gün sonra hâlâ bağlantısı kesik veya silinmiş bir numarada bekleyen mesaj silinir.
- Gönderilene kadar mesajın durumu
0(Created – Oluşturuldu) olur ve iptal edilebilir. Beklerken kalan kredilerinizden de düşülür.
Saat dilimleri#
timezone, bir saat dilimi adını veya aşağıdaki kısaltmalardan birini kabul eder.
Saat dilimi adları: Asia/Kolkata, America/New_York, Europe/London veya Australia/Sydney gibi. IANA saat dilimi veritabanındaki her ad çalışır. En güvenilir seçenek budur. Liste için Saat dilimi referansı sayfasına bakın.
Kısaltmalar büyük harfle yazılmalıdır. Her biri bir bölgeye karşılık gelir ve o bölgenin yaz saati uygulaması otomatik olarak uygulanır:
| Kısaltma | Karşılığı |
|---|---|
IST | Asia/Kolkata |
UTC | UTC |
GMT | GMT |
EST | US/Eastern |
CST | US/Central |
MST | US/Mountain |
PST | US/Pacific |
CET, CEST | Europe/Paris |
EET, EEST | Europe/Athens |
JST | Asia/Tokyo |
AEST, AEDT | Australia/Sydney |
Örneğin temmuz ayında EST, sabit UTC−5 değil, New York yaz saati (UTC−4) anlamına gelir.
Bir grup için zamanlama#
curl -X POST https://wbiztool.com/api/v1/schedule_msg/ \
-H "Content-Type: application/json" \
-d '{
"client_id": 12345,
"api_key": "YOUR_API_KEY",
"whatsapp_client": 678,
"msg_type": 0,
"group_name": "Sales Team Mumbai",
"msg": "Team meeting starts in 15 minutes.",
"date": "24/12/2026",
"time": "14:45",
"timezone": "Asia/Kolkata"
}'import requests
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,
"group_name": "Sales Team Mumbai",
"msg": "Team meeting starts in 15 minutes.",
"date": "24/12/2026",
"time": "14:45",
"timezone": "Asia/Kolkata",
},
timeout=60,
)
print(response.json())// Node.js 18+ (built-in fetch). Save as .mjs to use top-level await.
const response = await fetch("https://wbiztool.com/api/v1/schedule_msg/", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
client_id: 12345,
api_key: "YOUR_API_KEY",
whatsapp_client: 678,
msg_type: 0,
group_name: "Sales Team Mumbai",
msg: "Team meeting starts in 15 minutes.",
date: "24/12/2026",
time: "14:45",
timezone: "Asia/Kolkata",
}),
});
console.log(await response.json());<?php
$ch = curl_init('https://wbiztool.com/api/v1/schedule_msg/');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode([
'client_id' => 12345,
'api_key' => 'YOUR_API_KEY',
'whatsapp_client' => 678,
'msg_type' => 0,
'group_name' => 'Sales Team Mumbai',
'msg' => 'Team meeting starts in 15 minutes.',
'date' => '24/12/2026',
'time' => '14:45',
'timezone' => 'Asia/Kolkata',
]),
CURLOPT_RETURNTRANSFER => true,
]);
echo curl_exec($ch);
curl_close($ch);Yanıt#
Başarılı bir istek HTTP 200 döndürür:
{
"msg_id": 9817263,
"message": "Created",
"status": 1
}
| Alan | Tür | Açıklama |
|---|---|---|
status | integer | Mesaj zamanlandıysa 1, istek başarısız olduysa 0. |
message | string | Başarıda Created, aksi halde hata mesajı. |
msg_id | integer | Zamanlanan mesajın ID'si. Durumu kontrol etmek veya daha sonra iptal etmek için kaydedin. Yalnızca başarıda bulunur. |
Yanıt zamanlanan saati veya saat dilimini tekrarlamaz, bu yüzden ne gönderdiğinizi kaydedin.
Hatalar#
Çoğu hata, status değeri 0 olarak HTTP 200 döndürür; bu yüzden gövdedeki status değerini her zaman kontrol edin:
{ "message": "Scheduled date & time is not in valid format", "status": 0 }
| Mesaj | Nasıl düzeltilir |
|---|---|
Auth Error | client_id ve api_key değerlerinin ikisini de gönderin. |
Invalid Client Id | client_id değerini sayı olarak gönderin. HTTP 403 ile döner. |
Auth Error: invalid api key | Anahtarın mevcut olduğunu, silinmediğini ve bu client_id değerine ait olduğunu kontrol edin. HTTP 400 ile döner. |
Either phone or group_name parameter is required | phone veya group_name ekleyin. |
Please provide either phone OR group_name, not both | Birini kaldırın. |
Invalid phone number | phone yalnızca rakam (6–17 adet) içermeli, isteğe bağlı olarak + ile başlayabilir. |
Invalid Contact Number "…" | Ülke kodu eklendikten sonra numara 6–15 haneli olmalıdır. |
Msg cant be null | Metin mesajları (msg_type 0) msg gerektirir. |
Image Url Can't be null | msg_type 1 için img_url gönderin. |
File Url Can't be null | msg_type 2 için file_url gönderin. |
Scheduled date & time is not in valid format | date veya time eksik ya da timezone boş bir metin. |
Not enough credits | Planınızda mesaj hakkı kalmadı. |
Demo Account can not access apis | Normal bir hesap kullanın. |
Invalid JSON format: … | JSON gövdesi geçerli değil veya form alanlarını client_id olmadan gönderdiniz. |
İpuçları#
-
Tarihi dikkatle oluşturun: Python'da
strftime("%d/%m/%Y")vestrftime("%H:%M")kullanın. JavaScript'te tarihi ve saati sunucunuzun yerel saatine göre değil,timezoneiçinde gönderdiğiniz saat dilimine göre biçimlendirin:const tz = "Asia/Kolkata"; // d is the Date to send at const date = new Intl.DateTimeFormat("en-GB", { timeZone: tz, day: "2-digit", month: "2-digit", year: "numeric" }).format(d); // "24/12/2026" const time = new Intl.DateTimeFormat("en-GB", { timeZone: tz, hour: "2-digit", minute: "2-digit", hourCycle: "h23" }).format(d); // "09:00" -
Saati doğrulayın: beş dakika sonrası için bir test mesajı zamanlayın ve beklediğiniz zamanda ulaştığını kontrol edin.
-
Plan değişikliği: yeniden zamanlamak için mesajı iptal edin ve yeni bir mesaj zamanlayın.
-
Şimdilik zamanlama için resmi istemcileri kullanmayın: Python'daki
schedule_messagetarihiYYYY-MM-DDolarak gönderir (yanıt{}olur), Node'dakischeduleMessageise bu endpoint'in okumadığıschedule_timealanını gönderir. Endpoint'i yukarıda gösterildiği gibi doğrudan çağırın. -
Tekrarlanan mesajlar: aylık ödeme hatırlatmaları gibi tekrarlanan mesajlar için Hatırlatıcı oluşturma sayfasına bakın.
