Design Change Request — AI Agent Idle Action: Step-List Builder
| Field | Value |
|---|---|
| To | Wulan (Design) |
| From | Dimas Fauzi Hidayat (PM, BOT squad) |
| Date | 2026-07-05 |
| Feature | AI Agent — Sequential Idle Follow-up (ai-agent-idle-action initiative) |
| PRD | Sequential Idle Follow-up — see CHG-002 + story IDLE-ADJ-S01 |
| BE contract | Frozen — BE RFC §2.4 (reviewed 8.5/10). The fields and rules below will not move under you. |
| What we need | Figma frames for the step-list builder (list below). This is the blocking dependency for the FE RFC and build kickoff. |
Why (1 paragraph)
Today the AI Agent's idle action fires one action after one timer — nudge or close, never "nudge, then close". Customers have asked for a polite multi-step wind-down ("Are you still there?" → "Last reminder" → auto-close). The backend now supports an ordered sequence of up to 3 steps, each with its own action, timer, and message. The configuration UI is the only missing piece.
Where it lives today (prototype reference — read-only)
qontak-designer → app/pages/bot-automation/ai-agents/[id].vue,
Advanced settings → "Idle action" section (≈ lines 717–900). Current
anatomy, all Pixel components:
- Idle action select (
MpPopover+ list) — options incl. resolve / assign / follow-up. - Customer idle time — hours + minutes inputs (
MpInputGroupwith unit addons). - Assign conversation (only when action = assign) —
MpRadiotrio: Any available agent / Specific division / Specific agent, each with its select. - Closing message textarea.
The same section appears on the create flow
(app/pages/bot-automation/ai-agents/create/).
The change (single picker → step list)
Replace the single action block with a step list of 1–3 rows. Each row is essentially today's full block, repeated:
| Per-step element | Rules (frozen by BE contract) |
|---|---|
| Action | one of Follow up / Assign / Resolve — no new action types |
| Customer idle time | hrs + min (stored as seconds; min 1 s, max 24 h). Step 1 measures from the customer's last activity; steps 2–3 measure from the previous step firing — worth conveying in helper text |
| Message | required for Follow up and Resolve; optional for Assign |
| Assign target | required when action = Assign (same trio as today: any / division / agent) |
List-level interactions:
- Add step — disabled (with reason) once 3 steps exist. Hard cap, not a soft warning.
- Remove step — per row; minimum 1 row remains.
- No reordering for this phase (steps run strictly top-to-bottom; drag-reorder is out of scope — PRD Non-Goal 4 has no branching/jumping).
- Last-step hint — when the final step is Follow up (non-terminal), show an inline informational hint: "conversation stays open after the last nudge". Informational, not blocking — saving is allowed.
- Legacy mode — when the feature flag is OFF for the org, the form renders today's single-action UI unchanged. (Flag-ON orgs with an old single-action config should see it as a 1-step list.)
Frames we need (suggested set)
- Default state — 1 empty step row (empty state of the section).
- Filled 3-step sequence (Follow up → Follow up → Resolve) — the hero case.
- A step with Assign expanded (radio trio + division select open).
- Cap reached — 3 rows, Add step disabled with its affordance/tooltip.
- Last-step-is-Follow-up hint visible.
- Validation errors — empty required message; idle time out of range (field-level errors; the API rejects the whole save, nothing partial).
- Legacy single-action fallback (flag OFF) — likely just a reference to the existing design, called out for completeness.
- Loading / saved-success states if they differ from the section's existing patterns.
Non-goals (don't design for these)
- More than 3 steps; step templates; conditional branching between steps; new action types (e.g. send template / webhook / tag); reordering; per-channel step variants.
Acceptance checklist for the frames
- Every per-step element above appears with its required/optional state
- Add/remove affordances follow the cap (≤3) and floor (≥1)
- Last-step Follow-up hint present and non-blocking
- Error presentation matches the section's existing field-level pattern
- Uses existing Pixel (
Mp*) components — flag any net-new component you believe is needed so we can raise it early
Open design questions (yours to decide or bounce back)
- Row presentation: repeat the full block per row, or a collapsed summary-row that expands to edit? (3 full blocks may get tall.)
- Step numbering/visual sequencing: numbered badges, timeline connector, or plain stacked cards?
- Where the last-step hint sits: inline under the row vs a banner under the list.
Ping Dimas when frames are ready — the FE RFC will be authored directly against them.