# Popup felépítése elejétől a végéig

Canonical URL: https://support.optimonk.com/hu/articles/build-a-popup-end-to-end

A teljes design thread ciklus: brief → kérdések → koncepciók → kiválasztás.

A kanonikus konverzációs ciklus egyetlen, csak bővíthető (append-only) design threadet használ:

1. `start_design_thread` a briefel → kapsz egy `sessionId`.

2. Poll `get_design_thread`. Amikor a legutóbbi `agent_message` tartalmaz `asking: true`, válaszolj rá ezzel: `send_design_message`. Ismételd ezt a felfedezés és a felmérés szakaszban. Ha a discovery olyan domainre esik, amelyet a fiók nem birtokol, a következő `agent_message` megkérdezi erről a kereskedőt (`askingDomain` van beállítva) a koncepciókra lépés helyett — válaszolj rá ugyanígy, majd folytasd.

3. Amikor a koncepciókártyák elkészültek, hívd meg a `select_variant` -t egy vagy több kártya id-vel. Küldd el a teljes, sorrendben megadott kiválasztást; több id A/B készletet hoz létre. Ez az ügynök „Build it” funkciója: a kiválasztás egyetlen hívásban történik meg ÉS épül fel, a piszkozat kampány azonnal létrejön, és a válasz tartalmaz egy `jobId` -t, amire várhatsz a `watch_job`. Ahhoz, hogy LÁSD a kártyákat, hívd meg a `get_concept_board`: ugyanazokat a kártyákat egyetlen fix 2×2-es képként, amelybe bele van renderelve az egyes kártyák betűje és neve.

4. Folytasd a `send_design_message` -vel a kiválasztott popup szerkesztéséhez. Ha inkább egy újabb koncepciókört kérnél, állítsd be a `newVariant: true`-t; opcionálisan add át egy kiválasztott run-t `newVariantFrom`-ként. Folyamatosan kérdezd le (poll) a `get_design_thread` -t a teljes, sorrendben megadott naplóért.

5. A piszkozat kampányt általában azonnal létrehozza a `select_variant` (az id-je a `campaignId`-ban található): olvasd be és mentsd el a célzását a `get_campaign_settings` / `set_campaign_settings`-vel, majd a `publish_campaign`-vel. A hívás körülbelül 40 másodpercen belül válaszol, még akkor is, ha az építés még csak most kezdődik el — egy `pending: true` válasz null `campaignId` -vel pontosan ezt jelenti; figyeld a `jobId` -t, és olvasd ki a kampányt a `get_design_thread` -ból röviddel utána. `create_campaign` továbbra is elérhető egy befejezett run esetén, amelyhez még nincs kampány, egyébként pedig a már létező piszkozatot adja vissza.

6. `select_variant` és `create_campaign` egyaránt elutasít `409 domain_not_on_account` -val, ha a kampány olyan domainre kerülne, amelyet a fiók nem birtokol — ennek `agentMessage` megkéri a kereskedőt, hogy adja hozzá a domaint, vagy nevezzen meg egy saját domaint. Ismételd meg ugyanazt a hívást a kereskedő válaszával, mint opcionális `domain` paraméterrel.

```
start_design_thread({ text: "A 10% welcome popup for shop.com" }) → { sessionId } # poll get_design_thread({ sessionId }) → { events: [{ type: "agent_message", payload: { asking: true, ... } }] } send_design_message({ sessionId, message: "New visitors" }) → { routedTo: "board" } # after concept cards arrive — picks, builds and creates the draft campaign select_variant({ sessionId, conceptIds: ["0-a", "0-b"] }) → { runId, runIds, campaignId, jobId: "run:<runId>", next } watch_job({ jobId }) → { status: "completed", hasHtml: true } send_design_message({ sessionId, message: "Make the CTA more prominent" }) → { routedTo: "run", runId } # explicitly start another concept round instead of editing the picked popup send_design_message({ sessionId, message: "Try a bolder direction", newVariant: true, newVariantFrom: runId }) → { routedTo: "board" } # the draft campaign already exists: agree targeting, then publish get_campaign_settings({ campaignId }) set_campaign_settings({ campaignId, ... }) publish_campaign({ campaignId })
```

Közvetlen képernyőkép-alapú rekonstrukcióhoz, design beszélgetés nélkül, használd az `upload_reference_image` (ha szükséges), `build_popup`, `watch_job`, és a `get_popup_html`-t. Használd a `get_job` -t helyette, ha egyetlen státuszlekérdezésre van szükséged, vagy ha a kliens nem tud nyitva tartani egy kérést; mindkét esetben a `runId` a `jobId`. Egy önálló `build_popup` run-hoz nincs designer session, így nem adható át a `create_campaign`.

`get_popup_html` visszaadja a markupot; `get_popup_preview` visszaadja a képet — egy elkészült build szerveroldalon renderelt képernyőképeit valós böngészőarányban (asztali: 1440×900, mobil: 390×844), viewportonként egy képpel.
