Yeni bir toplu arama kampanyası oluşturun ve maksimum 10,000 kişiye ulaşın
/api/v1/campaignsYeni bir toplu arama kampanyası oluşturur. Kişi listesini JSON array olarak gönderin.
namezorunluKampanya adı (1-255 karakter)
phoneNumberIdzorunluKullanılacak telefon numarasının ID'si
assistantIdzorunluAramaları gerçekleştirecek asistanın ID'si (yayınlanmış olmalı)
contactszorunluAranacak 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.
greetingMessageopsiyonelAsistanı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!"
specialInstructionsopsiyonelAsistana ö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."
metadataopsiyonelKampanyaya eklemek istediğiniz ek meta veriler
maxConcurrentCallsopsiyonelEşzamanlı arama limiti. null veya belirtilmezse plan limiti kullanılır.
maxRetriesopsiyonelBaşarısız aramalar için maksimum yeniden deneme sayısı (1-10). null = sistem varsayılanı (3).
retryIntervalMinsopsiyonelYeniden denemeler arası bekleme süresi (dakika, 1-1440). null = sistem varsayılanı (5).
timezoneopsiyonelArama penceresi için zaman dilimi (IANA formatı, ör: Europe/Istanbul). Varsayılan: Europe/Istanbul.
callWindowStartopsiyonelArama penceresi başlangıç saati (0-23). null = kısıtlama yok. callWindowEnd ile birlikte kullanılmalı.
callWindowEndopsiyonelArama penceresi bitiş saati (0-23). null = kısıtlama yok. Başlangıç saatinden büyük olmalı.
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:
"Merhaba Ahmet, size özel bir teklifimiz var!""Müşterinin son siparişi Laptop. Bakiyesi 500 TL. Üyelik: Gold.""Merhaba Ayşe, size özel bir teklifimiz var!""Müşterinin son siparişi Telefon. Bakiyesi 1200 TL. Üyelik: Standart."{
"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
}
}
}{
"success": false,
"error": {
"message": "Phone number not found or not active",
"code": "PHONE_NUMBER_NOT_FOUND"
}
}{
"success": false,
"error": {
"message": "Assistant must be published before use",
"code": "ASSISTANT_NOT_PUBLISHED"
}
}{
"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)"
}
]
}
}PENDING durumunda başlar/start endpoint'ini kullanın{{name}} ve {{key}} placeholder'ları büyük/küçük harf duyarsızdırcallWindowStart ve callWindowEnd birlikte kullanılmalıdırpauseReason: "outside_call_window")pauseReason: "insufficient_credits")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.