# Zamanlanmış Toplu Görevler

https://dev.wisecp.com/tr/zamanlanmis-toplu-gorevler

Kayıtlı kampanyaları belirlenen zamanda kendiliğinden gönderen altı uç.

## Genel Bakış

Zamanlanmış görev, kayıtlı bir kampanyayı belirlediğiniz zamanda **kendiliğinden** gönderir. Görev zamanlamayı tutar, mesajı değil: metin ve hedef kitle şablonda durur.

İki desen vardır. **Tek seferlik** görev bir tarihte çalışır ve biter. **Tekrarlayan** görev ay, gün ve saatten kurulur; bir parçayı boş bırakmak "her" demektir, yani ay boşken gün bir vermek her ayın ilk günü anlamına gelir.

## Referans

### Görevleri Listeleme

get/api/v1/admin/tools/bulk/scheduled-tasks

`Tools/GetBulkScheduledTasks` admin sayfalı

Kendiliğinden gönderilecek toplu bildirimlerin planını döndürür.

Sorgu parametreleri 3

pageintVarsayılan 1.

limitintVarsayılan 25, en çok 100.

searchstringGörevlerde arar.

Dönen alanlar data[] — 12

idintGörevin kimliği.

template_namestringGönderilecek kampanyanın adı.

template_typestringKanal: `mail` ya da `sms`.

statusstring`active` çalışıyor, `paused` durdurulmuş.

periodstring`onetime` bir kez, `recurring` tekrarlayan.

period_datetimestring | nullTek seferlik görevin zamanı.

period_monthint | nullTekrarlayan görevin ayı.

period_dayint | nullTekrarlayan görevin günü.

period_hourint | nullTekrarlayan görevin saati.

period_minuteint | nullTekrarlayan görevin dakikası.

created_atstring | nullOluşturulma zamanı.

last_execstring | nullEn son ne zaman çalıştığı. Boşsa hiç çalışmamıştır.

Hatalar 1

insufficient_scope403Anahtar gerekli kapsamı taşımıyor.

İstek cURL JavaScript PHP (HTTP) PHP (Dahili)

```bash
curl 'https://panel.ornek.com/api/v1/admin/tools/bulk/scheduled-tasks' \
  -H "Authorization: Bearer $API_KEY"
```

```javascript
const res  = await fetch('https://panel.ornek.com/api/v1/admin/tools/bulk/scheduled-tasks', {
  headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();
```

```php
$ch = curl_init('https://panel.ornek.com/api/v1/admin/tools/bulk/scheduled-tasks');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $apiKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
```

```php
// Bos son-calisma zamani gorevin HIC calismadigini soyler; duraklatilmis olabilir.
$tasks = Api::Tools()->GetBulkScheduledTasks()['data'];

$never = array_filter($tasks, fn (array $t): bool => $t['last_exec'] === null);
```

### Görev Oluşturma

post/api/v1/admin/tools/bulk/scheduled-tasks

`Tools/CreateBulkScheduledTask` admin 201

Var olan bir kampanyayı belirlediğiniz zamanda kendiliğinden gönderecek görev açar.

Gövde 6

template_idintzorunluGönderilecek kampanyanın kimliği. Kampanya kendiliğinden gönderim için işaretlenmemiş olmalı.

schedule_periodstring`onetime` ya da `recurring`. Varsayılan tek seferlik.

sending_timestringGönderim zamanı. Tek seferlikte **zorunlu**.

period_monthintTekrarlayan görevin ayı.

period_dayintTekrarlayan görevin günü.

period_timestringTekrarlayan görevin saati.

Dönen alanlar data — 12

idintGörevin kimliği.

template_namestringGönderilecek kampanyanın adı.

template_typestringKanal: `mail` ya da `sms`.

statusstring`active` çalışıyor, `paused` durdurulmuş.

periodstring`onetime` bir kez, `recurring` tekrarlayan.

period_datetimestring | nullTek seferlik görevin zamanı.

period_monthint | nullTekrarlayan görevin ayı.

period_dayint | nullTekrarlayan görevin günü.

period_hourint | nullTekrarlayan görevin saati.

period_minuteint | nullTekrarlayan görevin dakikası.

created_atstring | nullOluşturulma zamanı.

last_execstring | nullEn son ne zaman çalıştığı. Boşsa hiç çalışmamıştır.

Hatalar 4

template_required422Kampanya verilmedi.

not_found404Kaynak kampanya bulunamadı.

schedule_required422Zamanlama verilmedi.

insufficient_scope403Anahtar gerekli kapsamı taşımıyor.

İstek cURL JavaScript PHP (HTTP) PHP (Dahili)

```bash
curl -X POST 'https://panel.ornek.com/api/v1/admin/tools/bulk/scheduled-tasks' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"template_id":5,"schedule_period":"onetime","sending_time":"2026-02-15 10:00:00"}'
```

```javascript
const res = await fetch('https://panel.ornek.com/api/v1/admin/tools/bulk/scheduled-tasks', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    template_id: 5,
    schedule_period: 'onetime',
    sending_time: '2026-02-15 10:00:00',
  }),
});

const body = await res.json();
```

```php
$ch = curl_init('https://panel.ornek.com/api/v1/admin/tools/bulk/scheduled-tasks');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'template_id'     => 5,
        'schedule_period' => 'onetime',
        'sending_time'    => '2026-02-15 10:00:00',
    ]),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
```

```php
// Her ayin ilk gunu 08:00: gun 1, ay bos (her ay).
Api::Tools()->CreateBulkScheduledTask([
    'template_id'     => 5,
    'schedule_period' => 'recurring',
    'period_day'      => 1,
    'period_time'     => '08:00',
]);
```

### Zamanlamayı Değiştirme

patch/api/v1/admin/tools/bulk/scheduled-tasks/{id}

`Tools/UpdateBulkScheduledTask` admin yalnız zamanlama

Görevin ne zaman çalışacağını değiştirir. Kampanyanın kendisi değişmez.

Gövde 5

schedule_periodstring`onetime` ya da `recurring`. Varsayılan tek seferlik.

sending_timestringGönderim zamanı. Tek seferlikte **zorunlu**.

period_monthintTekrarlayan görevin ayı.

period_dayintTekrarlayan görevin günü.

period_timestringTekrarlayan görevin saati.

Dönen alanlar data — 12

idintGörevin kimliği.

template_namestringGönderilecek kampanyanın adı.

template_typestringKanal: `mail` ya da `sms`.

statusstring`active` çalışıyor, `paused` durdurulmuş.

periodstring`onetime` bir kez, `recurring` tekrarlayan.

period_datetimestring | nullTek seferlik görevin zamanı.

period_monthint | nullTekrarlayan görevin ayı.

period_dayint | nullTekrarlayan görevin günü.

period_hourint | nullTekrarlayan görevin saati.

period_minuteint | nullTekrarlayan görevin dakikası.

created_atstring | nullOluşturulma zamanı.

last_execstring | nullEn son ne zaman çalıştığı. Boşsa hiç çalışmamıştır.

Hatalar 3

not_found404Zamanlanmış görev bulunamadı.

schedule_required422Zamanlama verilmedi.

insufficient_scope403Anahtar gerekli kapsamı taşımıyor.

İstek cURL JavaScript PHP (HTTP) PHP (Dahili)

```bash
curl -X PATCH 'https://panel.ornek.com/api/v1/admin/tools/bulk/scheduled-tasks/3' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"schedule_period":"recurring","period_day":1,"period_time":"08:00"}'
```

```javascript
const res = await fetch('https://panel.ornek.com/api/v1/admin/tools/bulk/scheduled-tasks/3', {
  method: 'PATCH',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    schedule_period: 'recurring',
    period_day: 1,
    period_time: '08:00',
  }),
});

const body = await res.json();
```

```php
$ch = curl_init('https://panel.ornek.com/api/v1/admin/tools/bulk/scheduled-tasks/3');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'PATCH',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'schedule_period' => 'recurring',
        'period_day'      => 1,
        'period_time'     => '08:00',
    ]),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
```

```php
// Mesaji degistirmek icin bu uc DEGIL, sablon guncelleme ucu kullanilir.
Api::Tools()->UpdateBulkTemplate(['id' => 5, 'subject' => 'Updated']);
Api::Tools()->UpdateBulkScheduledTask(['id' => 3, 'period_time' => '09:00']);
```

### Görevi Duraklatma

post/api/v1/admin/tools/bulk/scheduled-tasks/{id}/pause

`Tools/PauseBulkScheduledTask` admin

Görevi durdurur. Plan durur ama silinmez.

Gövde —

——Gövde gerekmez, boş gönderin. Görevi adresteki kimlik belirler.

Dönen alanlar data — 12

idintGörevin kimliği.

template_namestringGönderilecek kampanyanın adı.

template_typestringKanal: `mail` ya da `sms`.

statusstring`active` çalışıyor, `paused` durdurulmuş.

periodstring`onetime` bir kez, `recurring` tekrarlayan.

period_datetimestring | nullTek seferlik görevin zamanı.

period_monthint | nullTekrarlayan görevin ayı.

period_dayint | nullTekrarlayan görevin günü.

period_hourint | nullTekrarlayan görevin saati.

period_minuteint | nullTekrarlayan görevin dakikası.

created_atstring | nullOluşturulma zamanı.

last_execstring | nullEn son ne zaman çalıştığı. Boşsa hiç çalışmamıştır.

Hatalar 2

not_found404Zamanlanmış görev bulunamadı.

insufficient_scope403Anahtar gerekli kapsamı taşımıyor.

İstek cURL JavaScript PHP (HTTP) PHP (Dahili)

```bash
curl -X POST 'https://panel.ornek.com/api/v1/admin/tools/bulk/scheduled-tasks/3/pause' \
  -H "Authorization: Bearer $API_KEY"
```

```javascript
const res = await fetch('https://panel.ornek.com/api/v1/admin/tools/bulk/scheduled-tasks/3/pause', {
  method: 'POST',
  headers: { Authorization: `Bearer ${apiKey}` },
});

const body = await res.json();
```

```php
$ch = curl_init('https://panel.ornek.com/api/v1/admin/tools/bulk/scheduled-tasks/3/pause');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $apiKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
```

```php
// Duraklatmak KUYRUKTAKI bildirimleri durdurmaz: gonderim baslamissa kuyruktan silmeniz gerekir.
Api::Tools()->PauseBulkScheduledTask(['id' => 3]);
```

### Görevi Sürdürme

post/api/v1/admin/tools/bulk/scheduled-tasks/{id}/resume

`Tools/ResumeBulkScheduledTask` admin geçmiş zaman kaçırılır

Duraklatılmış görevi yeniden çalışır hâle getirir.

Gövde —

——Gövde gerekmez, boş gönderin. Görevi adresteki kimlik belirler.

Dönen alanlar data — 12

idintGörevin kimliği.

template_namestringGönderilecek kampanyanın adı.

template_typestringKanal: `mail` ya da `sms`.

statusstring`active` çalışıyor, `paused` durdurulmuş.

periodstring`onetime` bir kez, `recurring` tekrarlayan.

period_datetimestring | nullTek seferlik görevin zamanı.

period_monthint | nullTekrarlayan görevin ayı.

period_dayint | nullTekrarlayan görevin günü.

period_hourint | nullTekrarlayan görevin saati.

period_minuteint | nullTekrarlayan görevin dakikası.

created_atstring | nullOluşturulma zamanı.

last_execstring | nullEn son ne zaman çalıştığı. Boşsa hiç çalışmamıştır.

Hatalar 2

not_found404Zamanlanmış görev bulunamadı.

insufficient_scope403Anahtar gerekli kapsamı taşımıyor.

İstek cURL JavaScript PHP (HTTP) PHP (Dahili)

```bash
curl -X POST 'https://panel.ornek.com/api/v1/admin/tools/bulk/scheduled-tasks/3/resume' \
  -H "Authorization: Bearer $API_KEY"
```

```javascript
const res = await fetch('https://panel.ornek.com/api/v1/admin/tools/bulk/scheduled-tasks/3/resume', {
  method: 'POST',
  headers: { Authorization: `Bearer ${apiKey}` },
});

const body = await res.json();
```

```php
$ch = curl_init('https://panel.ornek.com/api/v1/admin/tools/bulk/scheduled-tasks/3/resume');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $apiKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
```

```php
// Zamani gecmis tek seferlik gorev surdurulunce calismaz: once zamanlamayi ileri alin.
$task = Api::Tools()->ResumeBulkScheduledTask(['id' => 3])['data'];

if ($task['period'] === 'onetime' && $task['period_datetime'] < $now) {
    Api::Tools()->UpdateBulkScheduledTask([
        'id'           => 3,
        'sending_time' => $tomorrow,
    ]);
}
```

### Görevi Silme

delete/api/v1/admin/tools/bulk/scheduled-tasks/{id}

`Tools/DeleteBulkScheduledTask` admin kayıtları da gider

Zamanlanmış görevi ve ona ait koşu kayıtlarını siler. Kampanya kalır.

Dönen alanlar data — 2

deletedboolSilme başarılı mı.

idintSilinen görevin kimliği.

Hatalar 2

not_found404Zamanlanmış görev bulunamadı.

insufficient_scope403Anahtar gerekli kapsamı taşımıyor.

İstek cURL JavaScript PHP (HTTP) PHP (Dahili)

```bash
curl -X DELETE 'https://panel.ornek.com/api/v1/admin/tools/bulk/scheduled-tasks/3' \
  -H "Authorization: Bearer $API_KEY"
```

```javascript
const res = await fetch('https://panel.ornek.com/api/v1/admin/tools/bulk/scheduled-tasks/3', {
  method: 'DELETE',
  headers: { Authorization: `Bearer ${apiKey}` },
});

const body = await res.json();
```

```php
$ch = curl_init('https://panel.ornek.com/api/v1/admin/tools/bulk/scheduled-tasks/3');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'DELETE',
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $apiKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
```

```php
// Gorevi silmek KAMPANYAYI silmez: sablon yerinde kalir ve elle gonderilebilir.
Api::Tools()->DeleteBulkScheduledTask(['id' => 3]);
```

## Tuzaklar

> **Zamanı geçmiş görev sürdürülünce çalışmaz**
> 
> Tek seferlik bir görevi duraklatıp gönderim zamanı geçtikten sonra sürdürürseniz görev **çalışmaz**: geçmiş bir zaman bir daha gelmez ve bunu size kimse söylemez. Sürdürmeden önce zamanı ileri almanız gerekir.

> **Görev mesajı tutmaz**
> 
> Bu uçlar yalnız **zamanlamayı** değiştirir. Metni, konuyu ya da hedef kitleyi düzeltmek için şablon uçlarına gitmeniz gerekir; oradaki değişiklik de bir sonraki koşuda geçerli olur.

> **Duraklatmak gitmiş bildirimi durdurmaz**
> 
> Duraklatma yalnız **sonraki** koşuları engeller. Görev az önce çalıştıysa bildirimler kuyruğa alınmıştır ve gitmeye devam eder; onları durdurmanın yolu bildirim kuyruğundaki bekleyen satırları silmektir.

> **Kampanya kendiliğinden gönderim için işaretli olmamalı**
> 
> Görev oluşturma, kaynak kampanyanın kendiliğinden gönderim için işaretli olmamasını ister. Aksi hâlde aynı duyuru iki yoldan birden gidebilir. Kampanyanın bu durumunu şablon detayından okuyabilirsiniz.

> **Boş bırakmak "her" demektir**
> 
> Tekrarlayan bir görevde ay ya da gün boş bırakılırsa o parça **her** değer için geçerli sayılır. Yalnız saat verip günü unutmak, duyurunun her gün gitmesine yol açar; oluşturduktan sonra listeden okuyup deseni doğrulayın.

## İlgili Makaleler

- [Toplu Şablonlar](https://dev.wisecp.com/tr/toplu-sablonlar)
- [Toplu Bildirim](https://dev.wisecp.com/tr/toplu-bildirim)
- [Bildirim Kuyruğu](https://dev.wisecp.com/tr/bildirim-kuyrugu)
