API Dokümantasyonu

Wharobot API'si ile kendi yazılımınızdan — e-ticaret siteniz, WHMCS/WISECP paneliniz veya herhangi bir uygulamanızdan — tek bir HTTP isteğiyle WhatsApp mesajı gönderin. Mesajlar hesabınıza bağlı olan WhatsApp numarasından iletilir.

Hızlı Başlangıç

Beş dakikada ilk mesajınızı gönderin:

1

API anahtarınızı alın

Panelde Modül Yönetimi sayfasından anahtar oluşturun. midev_ ile başlar ve yalnızca size aittir.

2

WhatsApp cihazınızı bağlayın

Cihaz Bağla sayfasından QR kodu okutun. Mesajlar bu numaradan gönderilir.

3

İlk isteğinizi gönderin

midev_xxx yerine kendi anahtarınızı, numara yerine kendi test numaranızı yazın:

cURL
curl -X POST https://fortisense.net/api/send-message \
  -H "Content-Type: application/json" \
  -d '{
    "api_key": "midev_xxxxxxxxxxxx",
    "phone": "905321234567",
    "message": "İlk mesajım 🎉"
  }'

Kimlik Doğrulama

Kimlik doğrulama, istek gövdesindeki api_key alanı ile yapılır. Ayrı bir başlık (header) veya token akışı yoktur.

API anahtarınızı asla tarayıcıya koymayın. Anahtar yalnızca sunucu tarafı kodunuzda (backend) bulunmalıdır; JavaScript'e koyarsanız siteyi ziyaret eden herkes onu görür ve sizin numaranızdan mesaj gönderebilir. Anahtarı .env gibi bir yapılandırmada saklayın.

Mesaj Gönderme

POST https://fortisense.net/api/send-message

Content-Type: application/json

İstek Parametreleri

AlanTipZorunluAçıklama
api_keystringZorunluModül Yönetimi'nden aldığınız anahtar.
phonestringZorunluAlıcı numarası, ülke kodu ile: 905321234567. Rakam dışı karakterler ve baştaki 0 otomatik temizlenir.
messagestringZorunluGönderilecek metin. Satır atlamak için \n kullanın.

Örnek İstek

curl -X POST https://fortisense.net/api/send-message \
  -H "Content-Type: application/json" \
  -d '{
    "api_key": "midev_xxxxxxxxxxxx",
    "phone": "905321234567",
    "message": "Siparişiniz alındı ✅"
  }'
<?php
$ch = curl_init("https://fortisense.net/api/send-message");
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ["Content-Type: application/json"],
    CURLOPT_POSTFIELDS     => json_encode([
        "api_key" => getenv("WHAROBOT_API_KEY"),  // gizli tut
        "phone"   => "905321234567",
        "message" => "Siparişiniz alındı ✅",
    ]),
    CURLOPT_CONNECTTIMEOUT => 10,
    CURLOPT_TIMEOUT        => 30,
]);
$response = curl_exec($ch);
$code     = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

$data = json_decode($response, true);
if ($code === 200 && ($data["status"] ?? null) === "success") {
    // gönderildi — kalan kredi: $data["credits_remaining"]
} else {
    error_log("WA gönderilemedi: " . ($data["error"] ?? $response));
}
const res = await fetch("https://fortisense.net/api/send-message", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    api_key: process.env.WHAROBOT_API_KEY,   // gizli tut
    phone: "905321234567",
    message: "Siparişiniz alındı ✅",
  }),
});

const data = await res.json();
if (res.status === 200 && data.status === "success") {
  console.log("Gönderildi. Kalan kredi:", data.credits_remaining);
} else {
  console.error("Hata:", data.error);
}
import os, requests

res = requests.post(
    "https://fortisense.net/api/send-message",
    json={
        "api_key": os.environ["WHAROBOT_API_KEY"],   # gizli tut
        "phone": "905321234567",
        "message": "Siparişiniz alındı ✅",
    },
    timeout=30,
)

data = res.json()
if res.status_code == 200 and data.get("status") == "success":
    print("Gönderildi. Kalan kredi:", data["credits_remaining"])
else:
    print("Hata:", data.get("error"))

Yanıt & Alanlar

Başarılı Yanıt (HTTP 200)

JSON
{
  "status": "success",
  "message": "Mesaj gonderildi",
  "credits_remaining": 49
}
AlanTipAçıklama
statusstringBaşarılıysa "success".
messagestringİnsan-okunur durum metni.
credits_remainingintegerBu gönderimden sonra hesabınızda kalan kredi.

Hata Kodları

Hatalar HTTP durum kodu ve error alanı ile döner.

KodAnlamıNe yapmalı
400Eksik parametreapi_key, phone veya message gönderilmemiş.
401Geçersiz API anahtarıAnahtarı kontrol edin; yeniden oluşturduysanız eskisi geçersizdir.
402Yetersiz bakiyeKrediniz bitmiş. Paket yenileyin veya bakiye yükleyin.
403Paket süresi doldu / alan adı yasaklıPaketinizi yenileyin. Tarayıcıdan çağırıyorsanız alan adınızı Modül'de tanımlayın.
405Yöntem desteklenmiyorYalnızca POST kabul edilir.
429Rate limit aşıldıSaniyede birden fazla istek göndermeyin; araya gecikme koyun.
500Gönderim hatasıCihaz bağlı değil veya servise ulaşılamadı. Cihaz durumunu kontrol edin.

Limitler

  • Hız: saniyede en fazla 1 istek. Toplu gönderimde her mesaj arasına ~1 saniye gecikme koyun.
  • Kredi: başarılı her mesaj 1 kredi düşer; kalanı credits_remaining ile takip edin.
  • Paket süresi: API anahtarı, paketinizin gün sayısı boyunca geçerlidir; süre dolunca 403 döner.
  • Alan adı kısıtı: yalnızca istekte Origin başlığı varsa (tarayıcıdan çağrı) uygulanır. Sunucu tarafı çağrılarda devreye girmez.

Örnek Senaryolar

Sık kullanılan entegrasyon noktaları:

Sipariş bildirimi

Sipariş kaydedildikten sonra: "Merhaba {ad}, #{no} numaralı siparişiniz alındı ✅"

Kargo bildirimi

Durum "kargoya verildi" olunca: "Siparişiniz kargoya verildi 🚚 Takip: {takip_no}"

Doğrulama kodu (OTP)

Giriş/işlem doğrulamasında: "Doğrulama kodunuz: {kod}. Kimseyle paylaşmayın."

İpucu: Gönderimi sipariş kaydından sonra, tercihen arka planda (kuyruk) yapın — WhatsApp yavaşlarsa müşteri checkout'ta beklemesin.

En İyi Pratikler

  • Anahtarı sunucuda tutun. .env veya ortam değişkeni kullanın; koda gömmeyin, repoya commit etmeyin.
  • Sunucu tarafından çağırın. Tarayıcıdan çağırırsanız anahtar herkese görünür.
  • Zaman aşımı koyun. İsteklerinize timeout tanımlayın (örneklerde var).
  • Hataları yönetin. 402/429/500 durumlarını loglayın; 429 ve 500 için gecikmeli tekrar deneyin.
  • Kullanıcıyı bekletmeyin. Gönderimi arka planda (kuyruk/iş) yapın.

Sıkça Sorulanlar

Mesajlar hangi numaradan gidiyor?

Hesabınıza bağladığınız WhatsApp numarasından. İstediğiniz zaman cihazı değiştirebilirsiniz.

Grup mesajı veya buton gönderebilir miyim?

Şu an yalnızca bireysel metin/medya mesajı desteklenir. Buton/liste gibi etkileşimli mesajlar için resmi WhatsApp Business Platform gerekir.

Medya (resim/dosya) gönderebilir miyim?

Panel üzerinden medya gönderimi desteklenir. API üzerinden medya için destek ile iletişime geçin.

Takıldım, nereden yardım alırım?

Destek Talebi oluşturabilir veya bize ulaşabilirsiniz.