Marketing: Campaign Scheduling
Problem Statement
Scheduling a campaign to go live involves setting a date/time, timezone, and optionally configuring send-time optimization. This transitions a campaign from draft to scheduled — a state change with real-world consequences.
Why Human-Only Semantics Fail
- Date/time pickers don't declare their timezone handling
- "Schedule" vs "Send Now" buttons don't declare the difference in side-effects
- Send-time optimization toggles don't declare what they enable
- The state transition (draft → scheduled) is implicit
Why Scraping Fails Here
- Calendar/date pickers are complex widgets that differ across libraries
- Timezone dropdowns contain 400+ options rendered lazily
- Scheduling confirmation modals appear conditionally
- Time validation (can't schedule in the past) happens client-side
How AXAG Eliminates Scraping
campaign.schedule declares the exact parameters (campaign_id, send_at, timezone), preconditions (must be in draft with approved creative), and side-effects (messages will be sent at the scheduled time).
Annotated UI Example
Marketing — schedule campaign ⚠️
<button
axag-intent="campaign.schedule"
axag-entity="campaign"
axag-action-type="write"
axag-required-parameters='["campaign_id","send_at","timezone"]'
axag-optional-parameters='["send_time_optimization"]'
axag-preconditions='["campaign must be in draft status","creative must be approved"]'
axag-postconditions='["campaign status changed to scheduled","messages queued for delivery"]'
axag-risk-level="high"
axag-confirmation-required="true"
axag-idempotent="true"
axag-side-effects='["message_delivery_queued"]'
axag-description="Schedule a campaign for delivery at a specific date and time"
>Schedule Campaign</button>
Semantic Manifest Excerpt
Manifest — campaign.schedule
{
"intent": "campaign.schedule",
"entity": "campaign",
"operation_id": "campaign_schedule",
"action_type": "write",
"parameters": {
"campaign_id": { "type": "string", "required": true },
"send_at": { "type": "string", "required": true, "format": "date-time" },
"timezone": { "type": "string", "required": true },
"send_time_optimization": { "type": "boolean", "required": false, "default": false }
},
"preconditions": [
"campaign must be in draft status",
"creative must be approved"
],
"postconditions": [
"campaign status changed to scheduled",
"messages queued for delivery"
],
"risk_level": "high",
"confirmation_required": true,
"idempotent": true,
"side_effects": ["message_delivery_queued"]
}
Generated Tool Example
Tool — campaign_schedule
{
"tool_name": "campaign_schedule",
"description": "Schedule a campaign for delivery at a specific date and time",
"input_schema": {
"type": "object",
"properties": {
"campaign_id": { "type": "string" },
"send_at": { "type": "string", "format": "date-time" },
"timezone": { "type": "string" },
"send_time_optimization": { "type": "boolean", "default": false }
},
"required": ["campaign_id", "send_at", "timezone"]
},
"safety": {
"risk_level": "high",
"confirmation_required": true,
"idempotent": true,
"side_effects": ["message_delivery_queued"]
}
}
Constraints & Safety Notes
- High risk: scheduling triggers message delivery to potentially millions of recipients
- Confirmation required: agent MUST get user approval
- Idempotent: re-scheduling with the same parameters is safe (updates the schedule)
send_atmust be in the future; past dates are rejected- Preconditions ensure the campaign is review-ready before scheduling