- Add SMTP fields to TicketEmailSettings model (host, port, TLS/SSL, credentials, from email/name) - Update serializers with SMTP fields and is_smtp_configured flag - Add TicketEmailTestSmtpView for testing SMTP connections - Update frontend API types and hooks for SMTP settings - Add collapsible IMAP and SMTP configuration sections with "Configured" badges - Fix TypeScript errors in mockData.ts (missing required fields, type mismatches) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
134 lines
4.6 KiB
Markdown
134 lines
4.6 KiB
Markdown
# Email Templates & Messaging TODO
|
|
|
|
## Completed Features
|
|
|
|
### Email Template System (Implemented)
|
|
- [x] EmailTemplate model with BUSINESS and PLATFORM scopes
|
|
- [x] Categories: Appointment, Reminder, Confirmation, Marketing, Notification, Report, Other
|
|
- [x] Template variables: `{{BUSINESS_NAME}}`, `{{CUSTOMER_NAME}}`, `{{APPOINTMENT_DATE}}`, etc.
|
|
- [x] Backend API (CRUD, preview, duplicate)
|
|
- [x] Frontend Email Templates page with list/create/edit/delete
|
|
- [x] EmailTemplateForm component with code editor and preview
|
|
- [x] EmailTemplateSelector component for plugin configuration
|
|
- [x] Plugin config support for `email_template` type variables
|
|
- [x] Footer enforcement for FREE tier tenants
|
|
- [x] Default templates seed command (`python manage.py seed_email_templates`)
|
|
|
|
### Default Email Templates Created
|
|
- [x] Appointment Confirmation
|
|
- [x] Appointment Reminder - 24 Hours
|
|
- [x] Appointment Reminder - 1 Hour
|
|
- [x] Appointment Rescheduled
|
|
- [x] Appointment Cancelled
|
|
- [x] Thank You - Appointment Complete
|
|
- [x] Welcome New Customer
|
|
|
|
### Ticket Email Templates (Added)
|
|
- [x] Ticket Assigned - Notification to staff when assigned
|
|
- [x] Ticket Status Changed - Status update notification
|
|
- [x] Ticket Reply - Staff Notification - When customer replies
|
|
- [x] Ticket Reply - Customer Notification - When staff replies
|
|
- [x] Ticket Resolved - Resolution confirmation
|
|
|
|
### Plugin Documentation Updated
|
|
- [x] Documented `email_template` variable type in SCHEDULER_PLUGIN_SYSTEM.md
|
|
- [x] Added template variable types table (text, textarea, email, number, url, email_template)
|
|
- [x] Added ticket-related insertion codes to template_parser.py
|
|
|
|
---
|
|
|
|
## Pending Features
|
|
|
|
### Customer Onboarding Email Process
|
|
- [ ] Welcome email when customer creates account
|
|
- [ ] Email verification workflow
|
|
- [ ] First booking celebration email
|
|
- [ ] Loyalty program introduction email (if enabled)
|
|
|
|
### Internal Staff Messaging System
|
|
- [ ] Message model (sender, recipient, subject, body, read status)
|
|
- [ ] Conversation threading
|
|
- [ ] Messaging UI in sidebar/header
|
|
- [ ] Unread count badge
|
|
- [ ] Push notifications for new messages
|
|
- [ ] Email notification option for messages
|
|
|
|
### Ticket Email Notifications
|
|
- [x] Email templates created (see "Ticket Email Templates" in Completed)
|
|
- [x] Ticket email notification service (`tickets/email_notifications.py`)
|
|
- TicketEmailService class with methods for each notification type
|
|
- Renders email templates with ticket context variables
|
|
- Falls back to default text templates if custom templates not found
|
|
- Includes Reply-To header with ticket ID for email threading
|
|
- [x] Django signals to trigger emails on ticket events (`tickets/signals.py`)
|
|
- Pre-save handler to track state changes (assignee, status)
|
|
- Post-save handlers for assignment, status change, and resolution
|
|
- Comment handler for reply notifications
|
|
- [x] Reply-To header with ticket ID for inbound processing
|
|
- Format: `support+ticket-{id}@{domain}`
|
|
- X-Ticket-ID header for easy parsing
|
|
|
|
### Email Reply Forwarding (Inbound Email Processing)
|
|
- [ ] Setup inbound email handling (mail.talova.net integration)
|
|
- [ ] Parse incoming emails to support@smoothschedule.com (or per-tenant)
|
|
- [ ] Extract ticket ID from subject line or headers
|
|
- [ ] Create ticket reply from email content
|
|
- [ ] Notify assignee of new reply
|
|
- [ ] Handle attachments
|
|
|
|
---
|
|
|
|
## Email Server Details
|
|
|
|
Current email server: `mail.talova.net`
|
|
Test account: `poduck@mail.talova.net`
|
|
|
|
### Inbound Email Options
|
|
|
|
1. **Mailgun/SendGrid Inbound Routes**
|
|
- Forward to webhook endpoint
|
|
- Parse and process programmatically
|
|
- Best for scalability
|
|
|
|
2. **IMAP Polling**
|
|
- Connect to mail.talova.net via IMAP
|
|
- Poll for new messages periodically
|
|
- Process and delete/archive
|
|
|
|
3. **Email Piping**
|
|
- Configure MTA to pipe emails to a Django management command
|
|
- Real-time processing
|
|
- Requires server access
|
|
|
|
---
|
|
|
|
## Platform vs Business Templates
|
|
|
|
### Platform Templates (Scope: PLATFORM)
|
|
Used for system-wide emails:
|
|
- Tenant invitation
|
|
- Platform announcements
|
|
- System notifications
|
|
|
|
### Business Templates (Scope: BUSINESS)
|
|
Per-tenant customizable templates:
|
|
- Appointment confirmations
|
|
- Reminders
|
|
- Customer communications
|
|
- Marketing emails
|
|
|
|
---
|
|
|
|
## Running the Seed Command
|
|
|
|
```bash
|
|
# Seed templates for all tenant schemas
|
|
docker compose -f docker-compose.local.yml exec django python manage.py seed_email_templates
|
|
|
|
# Seed for specific schema
|
|
docker compose -f docker-compose.local.yml exec django python manage.py seed_email_templates --schema=demo
|
|
|
|
# Reset to defaults (overwrites existing)
|
|
docker compose -f docker-compose.local.yml exec django python manage.py seed_email_templates --reset
|
|
```
|