Overview
Scheduled Messages enable you to automate Discord message delivery with precise timing control. Schedule one-time messages for specific dates or create recurring messages that send daily, weekly, or monthly. The system handles timezone conversions, file attachments, and automatic cleanup.Creating Scheduled Messages
Select Webhook
Choose which webhook will send the message:You can only schedule messages for webhooks you own or have editor/admin access to.
Select from your saved webhooks or shared webhooks where you have send permissions.
Choose Schedule Type
Select between one-time or recurring delivery:
- One-Time
- Recurring
Send the message once at a specific date and time.Use cases:
Select the exact date and time for delivery.Uses your selected timezone for scheduling.
- Event announcements
- Deadline reminders
- Scheduled releases
- One-off notifications
Configure Recurrence (Recurring Only)
For recurring messages, set the pattern:Sends every day at 9:00 AM in your selected timezone.
- Daily
- Weekly
- Monthly
Set Timezone
Select your timezone for accurate scheduling.Default: Europe/Madrid
All schedule calculations respect your timezone, including daylight saving time changes.
Compose Message
Design your message using the full editor:
- Message content (max 2000 characters)
- Embeds (up to 10)
- Files (up to 10, 10MB each)
- Dynamic variables
Optional template to load content from.Template content is copied, so future template changes won’t affect this scheduled message.
Attach Files (Optional)
Upload files to include with the message:Supported formats:
- Images: jpg, jpeg, png, gif, webp
- Videos: mp4, mov, avi
- Files are stored in
storage/app/scheduled_messages/{id}/ - Files are automatically deleted after successful sending
- This saves storage space and maintains privacy
Scheduled Message States
Messages progress through different states:- Pending
- Processing
- Completed
- Failed
- Paused
Status:
pendingThe message is scheduled and waiting for its send time.Characteristics:- Appears in active schedules list
- Shows next send time
- Can be edited, paused, or deleted
- Will be processed when
next_send_atarrives
Managing Scheduled Messages
Viewing Schedules
The scheduled messages dashboard shows: List View:- Message preview (first 100 characters)
- Associated webhook
- Schedule type (one-time/recurring)
- Next send time
- Status badge
- Send count (for recurring)
- Quick actions
- By Status: pending, processing, completed, failed, paused, all
- By Type: one-time, recurring, all
- By Webhook: filter by specific webhook
- Date Range: filter by scheduled date
Editing Schedules
Pausing & Resuming
For recurring messages: To Pause:- Click the pause icon/button
- Message status changes to “paused”
- No sends occur while paused
- Current progress preserved
- Click the resume icon/button
- Status returns to “pending”
- Next send time is recalculated from current time
- Sends resume on schedule
Pausing does not reset the send count. If a message has sent 5 times before pausing, it continues from 5 when resumed.
Deleting Schedules
Only the message creator or webhook owner can delete scheduled messages.How It Works
Processing Pipeline
The system uses Laravel’s scheduler and queue system:Scheduler Check
Laravel Scheduler executes the command:This runs every minute to check for due messages.
Worker Processing
Queue worker processes the job:
- Marks message as “processing”
- Loads message content and files
- Sends to Discord API via webhook
- Handles response
Timezone Handling
The system handles timezones carefully:- User Input: You select times in your timezone
- Storage: Times converted to UTC in database
- Calculation: Next send times calculated in your timezone
- Display: Times shown in your timezone
- Processing: UTC times used for comparisons
File Handling
Files are managed automatically: Upload:- Original filename preserved
- MIME type detected
- File size recorded
- Path stored in database
- Files sent as multipart/form-data
- Discord receives files as attachments
- Supports up to 10 files per message
Files are deleted immediately after sending to save storage space. This is by design.
Recurrence Patterns
Daily Recurrence
Configuration:- Get current time in user’s timezone
- Set time to 09:00
- If that time has passed today, add 1 day
- Convert to UTC for storage
- Today: March 6, 2026 at 09:00
- Next: March 7, 2026 at 09:00
- Then: March 8, 2026 at 09:00
- Continues daily indefinitely (or until max_sends)
Weekly Recurrence
Configuration:- Get current time in user’s timezone
- Check next 7 days for matching day of week
- Find first match after current time
- Set time to 14:00
- Convert to UTC
- Wednesday at 14:00 (day 3)
- Friday at 14:00 (day 5)
- Monday at 14:00 (day 1)
- Wednesday at 14:00 (day 3)
- Continues weekly cycle
Monthly Recurrence
Configuration:- Get current time in user’s timezone
- Set day of month to 1
- Set time to 12:00
- If that time has passed this month, move to next month
- Handle short months (day 31 in February → March 3)
- Convert to UTC
- April 1, 2026 at 12:00
- May 1, 2026 at 12:00
- June 1, 2026 at 12:00
- Continues on the 1st of each month
Send Count & Limits
Send Count Tracking
For all scheduled messages:Maximum Sends
For recurring messages, optionally limit total sends:- Message sends up to 10 times
- On 10th send, marked as “completed”
- No further sends occur
- Useful for limited campaigns
- Leave
max_sendsempty or null - Message continues indefinitely
- Must be manually paused or deleted
- Common for ongoing automation
Error Handling
When a send fails:Error Recording
Common Errors
- Invalid Webhook
- Permission Denied
- Rate Limited
- File Too Large
- Content Validation
Error: “Invalid webhook URL or webhook no longer exists”Cause: Webhook deleted in Discord or URL malformedSolution:
- Update webhook URL
- Verify webhook exists in Discord
- Check webhook permissions
Retry Strategy
Manual intervention required:- Review error message
- Fix the underlying issue
- Either:
- Edit and resume the schedule
- Delete and recreate
- Manually resend via webhook
Admin Features
Administrators have additional capabilities:Global Message View
Admins can see all scheduled messages from all users: Advanced Filters:- By user (all users visible)
- By webhook (across all users)
- By status
- By date range
- By type
- Total active schedules
- Total paused schedules
- Total completed today
- Failed messages requiring attention
- Per-user breakdown
Admin Actions
Admins can manage any scheduled message:- Pause/resume any user’s messages
- Delete problematic schedules
- View full message content
- See error details
- Access file attachments
Admin access is tracked in audit logs for security.
Best Practices
Scheduling
- Test First: Send manually before scheduling
- Use Templates: Create templates for recurring messages
- Set Realistic Times: Consider your audience’s timezone
- Limit Frequency: Don’t spam channels with too-frequent messages
- Monitor First Sends: Watch the first few sends to catch issues
Message Design
- Keep it Concise: Scheduled messages should be clear and brief
- Use Variables: Make messages dynamic with date/time variables
- Include Context: Mention that it’s an automated message if relevant
- Test Embeds: Verify embeds render correctly in Discord
- Optimize Files: Compress images/videos to reduce send time
Maintenance
- Regular Review: Check scheduled messages weekly
- Clean Up Completed: Archive or delete old completed schedules
- Monitor Failures: Address failed messages promptly
- Update Content: Keep recurring messages fresh and relevant
- Audit Permissions: Ensure you still have access to webhooks
File Attachments
- Mind the Size: Keep files under 8MB for reliable delivery
- Test Formats: Verify file types work in Discord
- Consider Hosting: For large media, host externally and link
- File Naming: Use clear, descriptive filenames
- Regular Content: Don’t use attachments for daily recurring (use links instead)
Troubleshooting
Message Not Sending
- Check message status (should be “pending”)
- Verify
next_send_attime hasn’t passed - Ensure webhook still exists and is valid
- Check server cron is running every minute
- Verify queue worker is processing jobs
- Review application logs for errors
Wrong Send Time
- Verify timezone setting matches your location
- Check for daylight saving time changes
- Ensure server time is correct (UTC)
- Review
next_send_atin database (stored as UTC) - Recalculate by editing and saving
Files Not Attaching
- Check files exist in storage before send time
- Verify file sizes under 10MB
- Ensure supported format (jpg, png, gif, webp, mp4, mov, avi)
- Check storage permissions
- Review disk space availability
Recurring Not Continuing
- Check status (should be “pending” not “completed”)
- Verify
max_sendsnot reached - Ensure pattern is valid
- Check for errors in last send
- Review
next_send_atcalculation
Related Features
- Webhooks - Manage webhooks for scheduled messages
- Templates - Create reusable content for scheduling
- Message Editor - Design message content
