---
title: "Kampanya grafiği şeması"
description: "Kaydedilmiş bir kampanya grafiğinin şekli — düğüm ve bağlantı alanları, her düğüm türü için yapılandırma nesnesi ve geçerli bir grafiğin karşıladığı kısıtlamalar."
canonical: https://docs.afp.monster/tr/reference/campaign-graph-schema
updated: 2026-08-19
pageType: reference
---

Kaydedilmiş bir kampanya grafiği iki dizidir: her biri bir tür ve bir yapılandırma nesnesi taşıyan `nodes` ve her biri bir düğümün numaralandırılmış çıktısını başka bir düğümün girdisine birleştiren `edges`. Grafikte başka hiçbir şey saklanmaz — kampanya adı, sayfası ve aktif durumu grafikte değil kampanyada yaşar. Kaydetmek her iki dizinin de yeni bir sürümünü yazar.

## Düğüm alanları

| Alan | Tür | Gerekli | Açıklama |
|---|---|---|---|
| `id` | string | evet | Düğümü bu grafiğin içinde tanımlar ve bağlantıların işaret ettiği şeydir. Grafik kaydedildiğinde yeni bir tanımlayıcıyla değiştirilir, bu yüzden yalnızca bir sürüm içinde kararlıdır. |
| `type` | string | evet | [Düğüm türlerindeki](/tr/reference/node-types) türlerden biri veya aşağıda listelenen yalnızca-çalışma-zamanı türlerinden biri. |
| `config` | object | evet | Düğümün ayarları. Boş bir nesne geçerlidir ve yeni eklenen bir düğümün başladığı şeydir. |
| `canvas_x` | number | evet | Düğümün tuvaldeki yatay konumu. Grafik açıldığında geri yüklenir. |
| `canvas_y` | number | evet | Düğümün tuvaldeki dikey konumu. Grafik açıldığında geri yüklenir. |

## Bağlantı alanları

| Alan | Tür | Gerekli | Açıklama |
|---|---|---|---|
| `id` | string | evet | Bağlantıyı bu grafiğin içinde tanımlar. |
| `from_node_id` | string | evet | Bağlantının ayrıldığı düğümün `id`'si. Aynı `nodes` dizisinde görünmelidir, yoksa bağlantı kaydetme sırasında düşürülür. |
| `to_node_id` | string | evet | Bağlantının girdiği düğümün `id`'si. Aynı `nodes` dizisinde görünmelidir, yoksa bağlantı kaydetme sırasında düşürülür. |
| `output_index` | number | evet | Bağlantının kaynak düğümün hangi çıktısından ayrıldığı. `0` varsayılan çıktıdır; bir `condition`'da `0` Eşleşme ve `1` Eşleşme Yok'tur; bir `random_split`'te `0`'dan N-1'e kadar yapılandırılmış sıradaki kollardır. |
| `label` | string | hayır | Bağlantı üzerinde gösterilen görüntü metni, kaynak çıktının adından alınır — örneğin `Match` veya `No Match`. Çalıştırmalar `output_index` ile yönlendirilir, asla `label` ile değil. |

## İşlenmiş örnek

Bir yorum kampanyayı tetikler, bir anahtar kelime listesi dalı belirler, eşleşen kişiler bir özel mesaj ve bir saat sonra bir etiket alır ve diğer her çalıştırma hemen sona erer.

```d2 title="A saved graph: trigger to condition, then send DM, delay and add tag on match, and stop on no match"
direction: down
trigger: trigger_comment
cond: "condition\nkeyword_list" {shape: diamond}
dm: send_dm
wait: "delay 3600s"
tag: add_tag
halt: stop
trigger -> cond
cond -> dm: "Match (output 0)"
dm -> wait -> tag
cond -> halt: "No Match (output 1)"
```

```json
{
  "nodes": [
    {
      "id": "3f6c1a80-5d2b-4c11-9e64-7a0b8d43f215",
      "type": "trigger_comment",
      "config": { "post_scope": "all", "unique_per_user": false },
      "canvas_x": 240,
      "canvas_y": 40
    },
    {
      "id": "9b1d47e2-08af-4d5c-bb37-2c6e5f90a4d1",
      "type": "condition",
      "config": {
        "match_type": "keyword_list",
        "keyword_list_id": 41,
        "reverse_keywords": false,
        "wait_for_reply": false
      },
      "canvas_x": 240,
      "canvas_y": 200
    },
    {
      "id": "c74a2f19-6e30-4b8d-8f52-19d7c3b6e084",
      "type": "send_dm",
      "config": {
        "message_type": "text",
        "text": "Thanks for commenting. The price list is on its way."
      },
      "canvas_x": 80,
      "canvas_y": 380
    },
    {
      "id": "1a58e63d-4c97-42f0-9b18-6d2f7ae5c390",
      "type": "delay",
      "config": { "delay_seconds": 3600, "only_if_no_reply": true },
      "canvas_x": 80,
      "canvas_y": 540
    },
    {
      "id": "e2079b45-13cd-4a6e-8c71-5f83d0b29a6c",
      "type": "add_tag",
      "config": { "tag_ids": [12] },
      "canvas_x": 80,
      "canvas_y": 700
    },
    {
      "id": "7d3fb0c6-92e1-4f57-a840-3b6c1d5e2087",
      "type": "stop",
      "config": {},
      "canvas_x": 440,
      "canvas_y": 380
    }
  ],
  "edges": [
    {
      "id": "5c8e1b73-2f40-4d19-9a6b-8e7d0c34f512",
      "from_node_id": "3f6c1a80-5d2b-4c11-9e64-7a0b8d43f215",
      "to_node_id": "9b1d47e2-08af-4d5c-bb37-2c6e5f90a4d1",
      "output_index": 0,
      "label": ""
    },
    {
      "id": "b06d4a92-7e15-48c3-bf20-6a9c2d813e47",
      "from_node_id": "9b1d47e2-08af-4d5c-bb37-2c6e5f90a4d1",
      "to_node_id": "c74a2f19-6e30-4b8d-8f52-19d7c3b6e084",
      "output_index": 0,
      "label": "Match"
    },
    {
      "id": "48f1c25e-3b7d-4096-8ea4-1c5b7f02d9a3",
      "from_node_id": "9b1d47e2-08af-4d5c-bb37-2c6e5f90a4d1",
      "to_node_id": "7d3fb0c6-92e1-4f57-a840-3b6c1d5e2087",
      "output_index": 1,
      "label": "No Match"
    },
    {
      "id": "a91b7e04-6c58-4d2f-93a1-7e04b8c5f261",
      "from_node_id": "c74a2f19-6e30-4b8d-8f52-19d7c3b6e084",
      "to_node_id": "1a58e63d-4c97-42f0-9b18-6d2f7ae5c390",
      "output_index": 0,
      "label": ""
    },
    {
      "id": "d5720af8-9134-4be6-8c07-2f6a5d18b3e9",
      "from_node_id": "1a58e63d-4c97-42f0-9b18-6d2f7ae5c390",
      "to_node_id": "e2079b45-13cd-4a6e-8c71-5f83d0b29a6c",
      "output_index": 0,
      "label": ""
    }
  ]
}
```

## Düğüm türüne göre yapılandırma anahtarları

| Düğüm türü | `config` içindeki anahtarlar |
|---|---|
| `trigger_comment` | `post_scope` (`all` veya `specific`), `post_id` (`post_scope` `specific` olduğunda gerekli), `unique_per_user` |
| `trigger_dm` | `unique_per_user` |
| `condition` | `match_type` (`any`, `contains`, `exact`, `keyword_list`), `text`, `keyword_list_id`, `reverse_keywords`, `wait_for_reply`, `filter_images`, `filter_gifs`, `filter_links` |
| `send_dm` | `message_type` (`text`, `image`, `card`, `text_with_buttons`), `text`, `image_url`, `title`, `subtitle`, `buttons`, `buttons_text` |
| `reply_comment` | `text` |
| `send_comment` | `text`, `post_id` |
| `hide_comment`, `delete_comment` | `also_block_user` (yalnızca Facebook) |
| `delay` | `delay_seconds` (1 ila 31536000), `only_if_no_reply` |
| `random_split` | `paths`, her yüzdesi 0 ila 100 arasında ve toplamı 100'ü geçmeyen bir `{ "percent": number }` dizisi |
| `add_tag`, `remove_tag` | `tag_ids`, sayısal etiket tanımlayıcılarının bir dizisi |
| `stop` | yok |

[Düğüm türleri](/tr/reference/node-types) her anahtarın ne yaptığını ve bir çalıştırma ona ulaştığında her düğümün ne yaptığını açıklar.

## Bağlantı kısıtlamaları

Tuval, bir bağlantı sürüklenirken bunları uygular, bu yüzden geçersiz bir bağlantı asla kaydedilmiş bir grafiğe ulaşmaz.

1. Bir tetikleyici asla bir bağlantının hedefi olmaz.
2. Bir düğüm asla kendisine bağlanmaz.
3. Bir döngü oluşturacak bir bağlantı reddedilir.
4. Bir düğüm bir gelen bağlantı kabul eder.
5. Her çıktı bir giden bağlantı taşır.
6. Bir tetikleyici yalnızca bir `condition`'a bağlanır.
7. Bir `condition` asla başka bir `condition`'a bağlanmaz.
8. Tetikleyici `trigger_dm` olduğunda yorum eylemleri kullanılamaz.
9. Bir `delete_comment`'in altında, `reply_comment` ve `hide_comment` reddedilir.

Bir grafik pratikte bir tetikleyici tutar, ancak verinin şekli birden fazlasına izin verir. Düğümlerinde yapılandırma hataları olan bir grafik hiç kaydedilemez — tuval bunun yerine hataları bildirir. [Bir kampanya oluşturun](/tr/guides/build-a-campaign) bunların hepsini karşılayan bir grafiği bir araya getirmeyi anlatır.

## Palet dışındaki düğüm türleri

Çalışma zamanı, palet karosu ve ayarlar paneli olmayan sekiz tür daha tanır. Tuvalde oluşturulan bir grafik onları asla içermez; yalnızca editörü atlayan bir yol aracılığıyla görünürler, bu yüzden onları bir özellik olarak değil yalnızca çalışma zamanına özgü olarak ele alın.

| Düğüm türü | Çalıştırmanın ne yaptığı |
|---|---|
| `switch` | Her kolun kurallarını değerlendirir ve eşleşen ilk kolu izler, veya yapılandırılmışsa varsayılan bir kolu. Eşleşme ve varsayılan kol olmadığında çalıştırma sona erer. |
| `wait_until` | Yapılandırılmış bir zamana kadar bekler ve sonra devam eder, bir `delay`'in planlandığı şekilde planlanır. |
| `block_user` | Kişiyi engeller ve devam eder. Yalnızca Facebook; Instagram'da hiçbir şey yapmaz ve uyarır. |
| `unhide_comment`, `typing_indicator`, `mark_seen`, `set_field`, `note` | Çalıştırılabilir, ancak ayarlar paneli taşımazlar ve bu sayfanın arkasındaki kaynaklar onlar için hiçbir yapılandırma kaydetmez. |

## Kaydetme bir grafiğe ne yapar

- Her kaydetme grafiğin yeni bir sürümünü yazar. Kampanya en yeni sürüme işaret eder ve yalnızca o sürümün tetikleyicisi yeni çalıştırmalar başlatır.
- Her düğüm tanımlayıcısı kaydetme sırasında yeniden oluşturulur ve bağlantılar yeni tanımlayıcılara yeniden eşlenir. Bu yüzden tanımlayıcılar bir sürüm içinde kararlıdır, kaydetmeler arasında değil.
- `from_node_id`'si veya `to_node_id`'si aynı `nodes` dizisinde olmayan bir bağlantı düşürülür ve grafiğin geri kalanı yine de kaydedilir.
- Boş bir grafik — her iki dizi de boş — başarıyla kaydedilir. İçinde tetikleyici olmadan, hiçbir şey bir çalıştırma başlatmaz.
- Zaten devam eden bir çalıştırma başladığı sürümde kalır, bu yüzden bir kampanyayı düzenlemek ve kaydetmek devam etmekte olan çalıştırmaları asla değiştirmez.
- Hiçbir çalıştırma onlara referans vermediğinde daha eski sürümler kaldırılır.

## Notlar

- Bir `send_dm` düğümündeki bir `postback` düğmesi kendi çıktısını alır. Kaydetme sırasında tuval her düğme dalını ekstra `condition` düğümlerine genişletir ve bağlantıları düğmenin tanımlayıcısıyla etiketler; grafiği açmak onları tekrar düğme çıktılarına daraltır.
- Bir çalıştırma, `output_index`'i düğümün seçtiği çıktıyla eşleşen bağlantıyı izler. Hiçbir bağlantı o indeksi taşımadığında, çalıştırma o düğümde tamamlanır.
- Zaten ziyaret ettiği bir düğüme ulaşan bir çalıştırma bir döngü hatasıyla sona erer, bu yüzden editör zaten döngüleri reddeder.
- Bu referanstaki yapılandırma anahtarları yazılacak olanlardır. Bazı düğüm türleri, daha önce kaydedilmiş grafiklerin hala çalışması için tutulan daha eski anahtar yazımlarına da yanıt verir.

## İlgili

- [Düğüm türleri](/tr/reference/node-types) — `config` içindeki her anahtar için tam düğüm başına referans
- [Bir kampanya oluşturun](/tr/guides/build-a-campaign) — yukarıdaki kısıtlamaları karşılayan bir grafik oluşturma
- [Kampanyaları test edin ve hata ayıklayın](/tr/guides/test-and-debug-campaigns) — kaydedilmiş bir grafiği çalıştırma ve aldığı yolu okuma
- [Çalıştırma durumları](/tr/reference/execution-states) — bir çalıştırmanın bir grafiği gezerken geçtiği durumlar
