Campaign orchestration

캠페인 오케스트레이션

Coordinate channel timing and exclusions on a shared campaign timeline.

···
html
<div class="orch"><div class="orch-top"><strong>DAY <span id="orch-day">1</span></strong><span id="orch-state">EMAIL SENT</span></div><div class="orch-track"><span>EMAIL</span><span>OPEN?</span><span>APP</span><span>ADS</span><i id="orch-cursor"></i></div><input id="orch-range" type="range" min="0" max="3" value="0" aria-label="Campaign day"><div class="orch-foot"><b id="orch-next">NEXT: CHECK RESPONSE</b><small>OPENED → SKIP APP</small></div></div>
css
:root{--font-sans:"Pretendard Variable",Pretendard,-apple-system,BlinkMacSystemFont,"Apple SD Gothic Neo","Segoe UI",sans-serif}.orch{width:min(90%,660px);font:800 clamp(13px,3.5vmin,17px)/1.2 var(--font-sans)}.orch-top,.orch-foot{display:flex;justify-content:space-between;gap:8px;align-items:center}.orch-top{margin-bottom:clamp(15px,4vmin,35px)}.orch-top strong{font-size:clamp(14px,5vmin,29px);color:var(--accent)}.orch-track{display:flex;justify-content:space-between;position:relative;gap:3px}.orch-track:before{content:'';position:absolute;left:7%;right:7%;top:50%;height:3px;background:var(--line)}.orch-track span{position:relative;z-index:1;padding:clamp(6px,1.8vmin,15px);border:2px solid var(--line);background:var(--surface)}.orch-track span.active{background:var(--accent);color:white;border-color:var(--accent)}.orch input{width:100%;margin:clamp(13px,3vmin,26px) 0;accent-color:var(--accent)}.orch-foot{border-top:2px solid var(--fg);padding-top:clamp(7px,2vmin,16px)}.orch-foot small{font-size:clamp(12px,3vmin,14px);color:var(--muted)}
js
const range=document.querySelector('#orch-range');const nodes=[...document.querySelectorAll('.orch-track span')];const states=['EMAIL SENT','CHECK RESPONSE','APP SKIPPED','ADS SUPPRESSED'];const next=['NEXT: CHECK RESPONSE','OPENED: YES','NO DUPLICATE MESSAGE','CAMPAIGN COMPLETE'];let step=0;function render(){range.value=String(step);document.querySelector('#orch-day').textContent=String(step+1);document.querySelector('#orch-state').textContent=states[step];document.querySelector('#orch-next').textContent=next[step];nodes.forEach((node,index)=>node.classList.toggle('active',index===step))}range.addEventListener('input',()=>{step=Number(range.value);render()});render();setInterval(()=>{if(document.activeElement===range)return;step=(step+1)%4;render()},1100);

Campaign orchestration coordinates sequence and message conflicts across email, app, and ads. If channels send independently, a customer may see the same offer repeatedly in a short period.

The demo scrubs a timeline: a customer who responds to email skips the app reminder, while an unresponsive customer reaches the next touchpoint. The timeline can also be moved manually in the detail view.

Check channel reachability and recent purchases before execution. Shared timing without exclusions can still create excessive contact.

When to use

Use it when multiple channels target one audience and need shared timing and exclusions.

Open as page ↗