Kampanya Oluştur

Yeni bir toplu arama kampanyası oluşturun ve maksimum 10,000 kişiye ulaşın

Endpoint

POST/api/v1/campaigns

Yeni bir toplu arama kampanyası oluşturur. Kişi listesini JSON array olarak gönderin.

Request Body

namezorunlu

Kampanya adı (1-255 karakter)

phoneNumberIdzorunlu

Kullanılacak telefon numarasının ID'si

assistantIdzorunlu

Aramaları gerçekleştirecek asistanın ID'si (yayınlanmış olmalı)

contactszorunlu

Aranacak kişilerin listesi (minimum 1, maksimum 10,000)

phoneNumber - E.164 formatında telefon (+905551234567)

name - Kişi adı (opsiyonel, greetingMessage içinde {{name}} ile kullanılabilir)

customData - Özel veri (opsiyonel, JSON object). Bu veriler specialInstructions içinde {{key}} formatıyla kullanılabilir.

greetingMessageopsiyonel

Asistanın karşılama mesajını özelleştirin. {{name}} kullanarak kişinin adını ekleyebilirsiniz.

Örnek: "Merhaba {{name}}, size özel bir teklifimiz var!"

Sonuç: "Merhaba Ahmet, size özel bir teklifimiz var!"

specialInstructionsopsiyonel

Asistana özel talimatlar ekleyin. customData içindeki değerleri {{key}} formatıyla kullanabilirsiniz.

Örnek customData: {"sonSiparis": "Laptop", "bakiye": "500"}

Örnek talimat: "Müşterinin son siparişi {{sonSiparis}}. Bakiyesi {{bakiye}} TL."

Sonuç: "Müşterinin son siparişi Laptop. Bakiyesi 500 TL."

metadataopsiyonel

Kampanyaya eklemek istediğiniz ek meta veriler

Gelişmiş Ayarlar

maxConcurrentCallsopsiyonel

Eşzamanlı arama limiti. null veya belirtilmezse plan limiti kullanılır.

maxRetriesopsiyonel

Başarısız aramalar için maksimum yeniden deneme sayısı (1-10). null = sistem varsayılanı (3).

retryIntervalMinsopsiyonel

Yeniden denemeler arası bekleme süresi (dakika, 1-1440). null = sistem varsayılanı (5).

timezoneopsiyonel

Arama penceresi için zaman dilimi (IANA formatı, ör: Europe/Istanbul). Varsayılan: Europe/Istanbul.

callWindowStartopsiyonel

Arama penceresi başlangıç saati (0-23). null = kısıtlama yok. callWindowEnd ile birlikte kullanılmalı.

callWindowEndopsiyonel

Arama penceresi bitiş saati (0-23). null = kısıtlama yok. Başlangıç saatinden büyük olmalı.

Örnek İstek

cURL
curl -X POST "https://api.wespoke.ai/api/v1/campaigns" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Yaz Kampanyası 2025",
    "phoneNumberId": "phone_123abc",
    "assistantId": "asst_456def",
    "contacts": [
      {
        "phoneNumber": "+905551234567",
        "name": "Ahmet Yılmaz",
        "customData": {
          "sonSiparis": "Laptop",
          "bakiye": "500",
          "uyelik": "Gold"
        }
      },
      {
        "phoneNumber": "+905559876543",
        "name": "Ayşe Demir",
        "customData": {
          "sonSiparis": "Telefon",
          "bakiye": "1200",
          "uyelik": "Standart"
        }
      }
    ],
    "greetingMessage": "Merhaba {{name}}, size özel bir teklifimiz var!",
    "specialInstructions": "Müşterinin son siparişi {{sonSiparis}}. Bakiyesi {{bakiye}} TL. Üyelik: {{uyelik}}.",
    "metadata": {
      "department": "sales",
      "region": "istanbul"
    },
    "maxConcurrentCalls": 10,
    "maxRetries": 3,
    "retryIntervalMins": 10,
    "timezone": "Europe/Istanbul",
    "callWindowStart": 9,
    "callWindowEnd": 18
  }'

Bu örnekte:

  • Ahmet arandığında: Karşılama "Merhaba Ahmet, size özel bir teklifimiz var!"
  • Ahmet için talimat: "Müşterinin son siparişi Laptop. Bakiyesi 500 TL. Üyelik: Gold."
  • Ayşe arandığında: Karşılama "Merhaba Ayşe, size özel bir teklifimiz var!"
  • Ayşe için talimat: "Müşterinin son siparişi Telefon. Bakiyesi 1200 TL. Üyelik: Standart."
  • Eşzamanlı arama limiti: 10 arama
  • Başarısız aramalar: 3 kez denenecek, 10 dakika aralıkla
  • Arama penceresi: 09:00 - 18:00 (Europe/Istanbul)

Örnek Yanıt

201 Created
{
  "success": true,
  "data": {
    "campaign": {
      "id": "camp_abc123",
      "name": "Yaz Kampanyası 2025",
      "status": "PENDING",
      "phoneNumberId": "phone_123abc",
      "assistantId": "asst_456def",
      "userId": "user_xyz",
      "totalContacts": 2,
      "successfulCalls": 0,
      "failedCalls": 0,
      "pendingCalls": 2,
      "maxConcurrentCalls": 10,
      "maxRetries": 3,
      "retryIntervalMins": 10,
      "timezone": "Europe/Istanbul",
      "callWindowStart": 9,
      "callWindowEnd": 18,
      "pauseReason": null,
      "metadata": {
        "department": "sales",
        "region": "istanbul",
        "greetingMessage": "Merhaba, size özel bir teklifimiz var!",
        "specialInstructions": "Eğer müşteri ilgiliyse, detayları email ile gönder."
      },
      "createdAt": "2025-01-20T10:00:00Z",
      "updatedAt": "2025-01-20T10:00:00Z",
      "startedAt": null,
      "completedAt": null
    },
    "statistics": {
      "totalContacts": 2,
      "pendingContacts": 2,
      "successfulCalls": 0,
      "failedCalls": 0,
      "averageCallDuration": null
    }
  }
}

Hata Yanıtları

400 Bad Request

{
  "success": false,
  "error": {
    "message": "Phone number not found or not active",
    "code": "PHONE_NUMBER_NOT_FOUND"
  }
}

400 Bad Request - Asistan Yayınlanmamış

{
  "success": false,
  "error": {
    "message": "Assistant must be published before use",
    "code": "ASSISTANT_NOT_PUBLISHED"
  }
}

400 Bad Request - Validasyon Hatası

{
  "success": false,
  "error": {
    "message": "Validation error",
    "code": "VALIDATION_ERROR",
    "details": [
      {
        "path": ["contacts", 0, "phoneNumber"],
        "message": "Phone number must be in E.164 format (+followed by 10-15 digits)"
      }
    ]
  }
}

💡Önemli Notlar

  • Kampanya oluşturulduktan sonra PENDING durumunda başlar
  • Kampanyayı başlatmak için /start endpoint'ini kullanın
  • Telefon numaraları E.164 formatında olmalı (+905551234567)
  • Asistan yayınlanmış (published) durumda olmalı
  • Maksimum 10,000 kişi ekleyebilirsiniz
  • Geçersiz numaralar otomatik olarak filtrelenir
  • {{name}} ve {{key}} placeholder'ları büyük/küçük harf duyarsızdır
  • Eşleşmeyen placeholder'lar otomatik olarak kaldırılır
  • callWindowStart ve callWindowEnd birlikte kullanılmalıdır
  • Arama penceresi dışında kampanya otomatik olarak duraklatılır (pauseReason: "outside_call_window")
  • Yetersiz bakiye durumunda kampanya duraklatılır (pauseReason: "insufficient_credits")

📁CSV Dosyası ile customData

Dashboard üzerinden CSV yüklerken, phone ve name dışındaki tüm sütunlar otomatik olarak customData olarak kaydedilir.

Örnek CSV:

phone,name,sonSiparis,bakiye,uyelik
+905551234567,Ahmet Yılmaz,Laptop,500,Gold
+905559876543,Ayşe Demir,Telefon,1200,Standart

Bu CSV'de sonSiparis, bakiye ve uyelik sütunları otomatik olarak her kişinin customData'sına eklenir.