curl -X POST "https://app.whattalk.ai/api/user/whatsapp/send-freeform" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"sender_id": 12,
"recipient_phone": "+1234567890",
"message": "Thank you for your inquiry! Our team will review your request and get back to you within 2 hours."
}'
const response = await fetch(
'https://app.whattalk.ai/api/user/whatsapp/send-freeform',
{
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
sender_id: 12,
recipient_phone: '+1234567890',
message: 'Thank you for your inquiry! Our team will review your request and get back to you within 2 hours.'
})
}
);
const data = await response.json();
console.log(data);
import requests
response = requests.post(
'https://app.whattalk.ai/api/user/whatsapp/send-freeform',
headers={
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
json={
'sender_id': 12,
'recipient_phone': '+1234567890',
'message': 'Thank you for your inquiry! Our team will review your request and get back to you within 2 hours.'
}
)
print(response.json())
{
"success": true,
"conversation_id": 1234,
"message_id": 567,
"whatsapp_message_id": 890,
"message_sid": "SMxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"session_status": {
"is_open": true,
"can_send_freeform": true,
"requires_template": false,
"message": "Session open (23 hr 45 min remaining). Unlimited free-form messages allowed.",
"minutes_remaining": 1425,
"expires_at": "2026-02-25T10:30:00+00:00"
}
}
{
"success": false,
"error": "Insufficient balance. Please top up your account.",
"error_code": "INSUFFICIENT_BALANCE"
}
{
"success": false,
"error": "The 24-hour messaging window is closed. Customer must reply first, or use a template message.",
"error_code": "SESSION_EXPIRED",
"session_status": {
"is_open": false,
"can_send_freeform": false,
"requires_template": true,
"message": "Session expired. Send a template or wait for customer to reply.",
"expired_at": "2026-02-23T10:30:00+00:00"
}
}
{
"success": false,
"error": "Sender not found or does not belong to you",
"error_code": "SENDER_NOT_FOUND"
}
{
"success": false,
"error": "Invalid phone number format. Use E.164 format (e.g., +14155551234).",
"error_code": "INVALID_PHONE"
}
{
"success": false,
"error": "Sender is not online. Current status: Offline",
"error_code": "SENDER_OFFLINE"
}
WhatsApp
Serbest Form Mesaj Gönder
Aktif bir 24 saatlik oturum içinde serbest metin WhatsApp mesajı gönderin
POST
/
user
/
whatsapp
/
send-freeform
curl -X POST "https://app.whattalk.ai/api/user/whatsapp/send-freeform" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"sender_id": 12,
"recipient_phone": "+1234567890",
"message": "Thank you for your inquiry! Our team will review your request and get back to you within 2 hours."
}'
const response = await fetch(
'https://app.whattalk.ai/api/user/whatsapp/send-freeform',
{
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
sender_id: 12,
recipient_phone: '+1234567890',
message: 'Thank you for your inquiry! Our team will review your request and get back to you within 2 hours.'
})
}
);
const data = await response.json();
console.log(data);
import requests
response = requests.post(
'https://app.whattalk.ai/api/user/whatsapp/send-freeform',
headers={
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
json={
'sender_id': 12,
'recipient_phone': '+1234567890',
'message': 'Thank you for your inquiry! Our team will review your request and get back to you within 2 hours.'
}
)
print(response.json())
{
"success": true,
"conversation_id": 1234,
"message_id": 567,
"whatsapp_message_id": 890,
"message_sid": "SMxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"session_status": {
"is_open": true,
"can_send_freeform": true,
"requires_template": false,
"message": "Session open (23 hr 45 min remaining). Unlimited free-form messages allowed.",
"minutes_remaining": 1425,
"expires_at": "2026-02-25T10:30:00+00:00"
}
}
{
"success": false,
"error": "Insufficient balance. Please top up your account.",
"error_code": "INSUFFICIENT_BALANCE"
}
{
"success": false,
"error": "The 24-hour messaging window is closed. Customer must reply first, or use a template message.",
"error_code": "SESSION_EXPIRED",
"session_status": {
"is_open": false,
"can_send_freeform": false,
"requires_template": true,
"message": "Session expired. Send a template or wait for customer to reply.",
"expired_at": "2026-02-23T10:30:00+00:00"
}
}
{
"success": false,
"error": "Sender not found or does not belong to you",
"error_code": "SENDER_NOT_FOUND"
}
{
"success": false,
"error": "Invalid phone number format. Use E.164 format (e.g., +14155551234).",
"error_code": "INVALID_PHONE"
}
{
"success": false,
"error": "Sender is not online. Current status: Offline",
"error_code": "SENDER_OFFLINE"
}
Bu endpoint, bir alıcıya serbest form (serbest metin) WhatsApp mesajı gönderir. Şablon mesajlarından farklı olarak, serbest form mesajlar herhangi bir metin içerebilir ancak aktif bir 24 saatlik mesajlaşma penceresi gerektirir — yani alıcının son 24 saat içinde WhatsApp gönderenize bir mesaj göndermiş olması gerekir.
Serbest form mesajlar yalnızca aktif bir 24 saatlik mesajlaşma penceresi süresince gönderilebilir. Oturum süresi dolduysa, konuşmayı yeniden başlatmak için önce bir şablon mesajı göndermeniz gerekir. Oturumun aktif olup olmadığını kontrol etmek için Oturum Durumu endpoint’ini kullanın.
Bu endpoint, kullanıcı başına saniyede 5 istek ile hız sınırlıdır.
İstek Gövdesi
integer
gerekli
Mesajın gönderileceği WhatsApp göndereninin kimliği (Gönderenleri Getir endpoint’inden elde edilir)
string
gerekli
Alıcının uluslararası formattaki telefon numarası (ör.
+1234567890)string
gerekli
Gönderilecek mesaj içeriği (maksimum 4096 karakter)
Yanıt Alanları
boolean
Mesajın başarıyla gönderilip gönderilmediği
integer
Bu mesajla ilişkili konuşma kimliği
integer
Konuşma mesajı kaydının kimliği
integer
WhatsApp mesaj kaydının kimliği
string
Teslimat takibi için Twilio mesaj SID’i
object
Mesaj gönderildikten sonra güncellenen oturum durumu
Göster Oturum durumu özellikleri
Göster Oturum durumu özellikleri
boolean
24 saatlik mesajlaşma penceresinin şu anda açık olup olmadığı
boolean
Şu anda serbest form mesajlar gönderilip gönderilemeyeceği
boolean
Şablon mesajı gerekip gerekmediği
string
Oturum durumunun okunabilir açıklaması
integer
24 saatlik pencerede kalan dakika sayısı
string
Oturumun sona ereceği ISO 8601 zaman damgası
Hata Yanıtları
curl -X POST "https://app.whattalk.ai/api/user/whatsapp/send-freeform" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"sender_id": 12,
"recipient_phone": "+1234567890",
"message": "Thank you for your inquiry! Our team will review your request and get back to you within 2 hours."
}'
const response = await fetch(
'https://app.whattalk.ai/api/user/whatsapp/send-freeform',
{
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
sender_id: 12,
recipient_phone: '+1234567890',
message: 'Thank you for your inquiry! Our team will review your request and get back to you within 2 hours.'
})
}
);
const data = await response.json();
console.log(data);
import requests
response = requests.post(
'https://app.whattalk.ai/api/user/whatsapp/send-freeform',
headers={
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
json={
'sender_id': 12,
'recipient_phone': '+1234567890',
'message': 'Thank you for your inquiry! Our team will review your request and get back to you within 2 hours.'
}
)
print(response.json())
{
"success": true,
"conversation_id": 1234,
"message_id": 567,
"whatsapp_message_id": 890,
"message_sid": "SMxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"session_status": {
"is_open": true,
"can_send_freeform": true,
"requires_template": false,
"message": "Session open (23 hr 45 min remaining). Unlimited free-form messages allowed.",
"minutes_remaining": 1425,
"expires_at": "2026-02-25T10:30:00+00:00"
}
}
{
"success": false,
"error": "Insufficient balance. Please top up your account.",
"error_code": "INSUFFICIENT_BALANCE"
}
{
"success": false,
"error": "The 24-hour messaging window is closed. Customer must reply first, or use a template message.",
"error_code": "SESSION_EXPIRED",
"session_status": {
"is_open": false,
"can_send_freeform": false,
"requires_template": true,
"message": "Session expired. Send a template or wait for customer to reply.",
"expired_at": "2026-02-23T10:30:00+00:00"
}
}
{
"success": false,
"error": "Sender not found or does not belong to you",
"error_code": "SENDER_NOT_FOUND"
}
{
"success": false,
"error": "Invalid phone number format. Use E.164 format (e.g., +14155551234).",
"error_code": "INVALID_PHONE"
}
{
"success": false,
"error": "Sender is not online. Current status: Offline",
"error_code": "SENDER_OFFLINE"
}
24 Saatlik Mesajlaşma Penceresi
WhatsApp 24 saatlik mesajlaşma penceresi politikası uygular:- Bir müşteri WhatsApp Business numaranıza mesaj gönderdiğinde, 24 saatlik bir pencere açılır.
- Bu pencere süresince kısıtlama olmaksızın serbest form mesajlar gönderebilirsiniz.
- Pencere süresi dolduktan sonra, konuşmayı yeniden başlatmak için şablon mesajı kullanmanız gerekir.
- Her yeni müşteri mesajı 24 saatlik zamanlayıcıyı sıfırlar.
Notlar
- Maksimum mesaj uzunluğu 4.096 karakterdir (WhatsApp limiti).
- Gönderen
onlineolmalıdır. Çevrimdışı gönderenler503hatası döndürür. - Mesaj maliyetleri otomatik olarak hesap bakiyenizden düşülür.
- Hız limiti: Kullanıcı başına saniyede 5 istek.

