Natural Language Reminders
Create reminders using everyday language without worrying about complex syntax.Supported Time Formats
The reminder parser recognizes multiple patterns:- Minutes/Hours:
30 min,2 hours,5m,1hr - AM/PM:
7am,6:30pm,18:00 - Relative:
in 30 min,5 min from now - Tomorrow:
tomorrow at 7am,wake me up tomorrow at 8am
All times are interpreted using your configured timezone. Set your timezone in the user settings to ensure accurate scheduling.
Voice Call Reminders (Pingram)
Asta can trigger voice calls for important reminders using the Pingram (NotificationAPI) integration.Set your phone number
Configure your phone number for voice calls:
Phone numbers must include the country code (e.g., +1 for US).
Pingram Configuration Options
Cron Scheduling
For recurring tasks, Asta uses standard 5-field cron expressions with powerful scheduling capabilities.Cron Expression Format
Common Cron Examples
Creating Recurring Jobs
Cron jobs are stored in the database and loaded on startup. They can trigger:- Direct notifications - Simple text notifications
- AI turns - Run a message through the AI handler for dynamic responses
- Voice calls - Trigger Pingram voice notifications
Timezone-aware scheduling is supported via the
tz field. Use IANA timezone names like America/New_York or Europe/London.One-Shot vs Recurring
Asta supports two types of scheduled tasks:One-Shot Reminders
- Created with natural language (
remind me in 30 min) - Stored with special
@at:cron expression format - Automatically fired at startup if past due
- Marked as
sentafter execution - Removed from scheduler after firing
Recurring Jobs
- Use standard 5-field cron expressions
- Remain active until disabled
- Support timezone-aware scheduling
- Can trigger AI responses or notifications
- Execution history tracked in database
Implementation Details
The reminder system is implemented across two main files:backend/app/reminders.py
- Natural language parsing with regex patterns
- Timezone-aware time conversion
- Pingram voice call integration
- Telegram notification delivery
- Reminder scheduling and persistence
backend/app/cron_runner.py
- APScheduler integration for job execution
- Cron expression parsing and validation
- One-shot and recurring job management
- Job execution history and error tracking
- Startup job reload and past-due handling
Best Practices
Use natural language for one-time reminders
Natural language is perfect for quick, one-off reminders:
remind me in 30 min to switch the laundrywake me up at 7amalarm in 5 minutes
Use cron for recurring tasks
Cron expressions are ideal for regular schedules:
- Daily standups
- Weekly reports
- Monthly billing reminders
- Periodic health checks
Set appropriate timezones
Always configure your timezone for accurate scheduling:
- User settings for personal reminders
- Cron job
tzfield for specific schedules - Server timezone as fallback
Troubleshooting
Reminders not firing
- Check timezone: Ensure your timezone is configured correctly
- Verify cron expression: Use a cron validator to check syntax
- Check scheduler logs: Look for errors in the application logs
- Past-due jobs: One-shot reminders fire immediately on startup if past due
Voice calls not working
- Verify Pingram credentials: Check API key and client ID
- Phone number format: Must include country code (e.g.,
+1234567890) - Check logs: Look for Pingram API errors in application logs
- Test notification: Use NotificationAPI dashboard to test
Cron jobs not loading
- Database connection: Ensure database is accessible
- Job enabled flag: Check that
enabled=truein database - Cron expression validation: Verify expression is valid
- Startup logs: Check for reload messages on application start