AI Scheduler
AI Scheduler
The AI Scheduler lets you define recurring content-generation jobs that run automatically on a cron schedule. Each job sends a prompt to an AI provider and places the output in Content Review for approval before publishing.
How it works
Cron trigger
│
▼
plg_task_joomlaai (Joomla) / wpai_run_due_jobs (WP-Cron)
│
▼
SchedulerService::runDueJobs()
│ Locks job row (UPDATE WHERE is_running = 0)
▼
AIService::generateForJob($job)
│ Calls provider API
▼
Output saved → ContentReview table (status: pending)
│
▼
Email notification (if configured)
Row-level locking prevents the same job from running twice if two cron triggers fire simultaneously.
Job list
Navigate to JoomlaAI → AI Scheduler.
| Column | Description |
|---|---|
| Title | Human-readable name |
| Prompt snippet | First 80 characters of the prompt |
| Schedule | Cron expression (human-readable label) |
| Provider | AI provider used |
| Last run | Timestamp of the most recent execution |
| Status | active / paused / error |
| Actions | Edit · Pause/Resume · Run now · Delete |
Run now button triggers the job immediately regardless of its schedule. Useful for testing.
Creating a job
Click New in the toolbar.
General tab
| Field | Required | Description |
|---|---|---|
| Title | Yes | Descriptive name shown in the job list |
| Prompt | Yes | The text sent to the AI. Use {placeholders} for dynamic content. |
| Schedule | Yes | How often the job runs (see schedules below) |
| Provider | No | Override the global default provider |
| Model | No | Override the global default model |
| Status | Yes | Active or Paused |
Content tab
| Field | Description |
|---|---|
| Output title template | Template for the generated article title (e.g., {date} — Weekly Update) |
| Target category | Joomla category / WP category to assign on publish |
| Tags | Comma-separated tags to apply on publish |
| Post-publish action | draft, published, or pending (WP) / 0 or 1 (Joomla state) |
Options tab
| Field | Default | Description |
|---|---|---|
| Max tokens | 1024 | Output length cap |
| Temperature | 0.7 | Creativity level (0 = deterministic, 2 = very creative) |
| Retry on failure | 2 | How many times to retry if the provider returns an error |
| Notify on success | OFF | Send email when output is ready for review |
| Notify on failure | ON | Send email if all retries fail |
Schedule options
| Label | Cron expression | Runs |
|---|---|---|
| Every 5 minutes | */5 * * * * | 288× / day |
| Hourly | 0 * * * * | 24× / day |
| Daily (midnight) | 0 0 * * * | 1× / day |
| Daily (8 AM) | 0 8 * * * | 1× / day |
| Weekly (Monday 8 AM) | 0 8 * * 1 | 1× / week |
| Monthly (1st, 8 AM) | 0 8 1 * * | 1× / month |
| Custom | — | Enter any valid cron expression |
Prompt placeholders
Use curly-brace placeholders in your prompt text. The scheduler substitutes them at runtime:
| Placeholder | Value |
|---|---|
{date} | Current date (YYYY-MM-DD) |
{day} | Day name (Monday, Tuesday…) |
{month} | Month name (January…) |
{year} | Four-digit year |
{site_name} | Your site's name |
{site_url} | Your site's URL |
Custom placeholders from Template Library are also supported.
Built-in scheduled tasks
Three tasks are pre-installed and run automatically:
| Task | Default schedule | Description |
|---|---|---|
| JoomlaAI: run due jobs | Every 5 minutes | Executes all active scheduler jobs whose next-run time has passed |
| JoomlaAI: provider health check | Hourly | Pings each configured provider and updates the Dashboard status |
| JoomlaAI: cleanup old data | Daily (03:00) | Purges chat history older than the retention period, expired sessions, old audit records |
Permissions
| Capability | Access |
|---|---|
joomlaai.scheduler / wpai_manage_scheduler | Create, edit, delete, run jobs |
core.manage / wpai_dashboard | View the Scheduler (read-only) |
_Last updated: 2026-05-19 · v2.5.3_
