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.