Files
WooNooW/NOTIFICATION_SYSTEM.md
dwindown c3904cc064 docs: Consolidate documentation - 52% reduction (56 → 27 files)
 Documentation Cleanup:
- Deleted 30 obsolete/completed docs
- Created NOTIFICATION_SYSTEM.md (consolidates all notification docs)
- Reduced from 56 to 27 MD files (52% reduction)

🗑️ Removed Categories:
- Completed features (ALL_ISSUES_FIXED, BASIC_CARD_COMPLETE, etc.)
- Superseded plans (NOTIFICATION_STRATEGY, NOTIFICATION_REFACTOR_*, etc.)
- Duplicate/fragmented docs (MARKDOWN_*, TEMPLATE_*, etc.)

📝 Consolidated:
- All notification documentation → NOTIFICATION_SYSTEM.md
  - Architecture & flow
  - Markdown syntax reference
  - Variables reference
  - Backend integration details
  - API endpoints
  - Email queue system
  - Global system toggle
  - Q&A section

 Kept Essential Docs (27):
- Core architecture guides
- Addon development guides
- Feature-specific docs (shipping, payment, tax)
- Implementation guides (i18n, hooks)
- Project docs (README, PROJECT_BRIEF, PROJECT_SOP)

📊 Result:
- Clearer navigation
- Less confusion
- Single source of truth for notifications
- Easier for new developers
2025-11-15 22:07:38 +07:00

296 lines
7.1 KiB
Markdown

# Notification System Documentation
**Status:** ✅ Complete & Fully Wired
**Last Updated:** November 15, 2025
---
## Overview
WooNooW features a modern, flexible notification system that supports multiple channels (Email, Push, WhatsApp, Telegram, SMS) with customizable templates and markdown support.
### Key Features
- ✅ Multi-channel support (Email, Push, + Addons)
- ✅ Custom markdown templates with visual builder
- ✅ Variable system for dynamic content
- ✅ Global system toggle (WooNooW vs WooCommerce)
- ✅ Per-channel and per-event toggles
- ✅ Email customization (colors, logo, branding)
- ✅ Async email queue (prevents 30s timeout)
- ✅ Full backend wiring complete
---
## Architecture
### Structure
```
Notifications
├── Staff Notifications (toggle channels/events)
├── Customer Notifications (toggle channels/events)
├── Channel Configuration (global settings)
│ ├── Email (template + connection)
│ └── Push (template + connection)
└── Activity Log (coming soon)
```
### Notification Flow
```
Event → EmailManager → Check System Mode → Check Channel Toggle
→ Check Event Toggle → EmailRenderer → Get Template → Replace Variables
→ Parse Markdown → Apply Branding → Queue via MailQueue → Send
```
---
## Markdown Syntax
### Cards
```markdown
[card:info]
Your content here
[/card]
[card:success]
Success message
[/card]
[card:warning]
Warning message
[/card]
```
### Buttons
```markdown
[button:solid](https://example.com)
Click Me
[/button]
[button:outline](https://example.com)
Learn More
[/button]
```
### Images
```markdown
![Alt text](https://example.com/image.png)
```
---
## Variables
### Order Variables
- `{order_number}` - Order number
- `{order_date}` - Order date
- `{order_total}` - Order total
- `{order_status}` - Order status
- `{order_items_table}` - Formatted table
- `{order_items_list}` - Formatted list
### Customer Variables
- `{customer_name}` - Customer full name
- `{customer_first_name}` - First name
- `{customer_last_name}` - Last name
- `{customer_email}` - Email address
### Store Variables
- `{store_name}` - Store name
- `{store_url}` - Store URL
- `{store_email}` - Store email
---
## Backend Integration
### API Endpoints
| Method | Endpoint | Purpose |
|--------|----------|---------|
| GET | `/notifications/system-mode` | Get current mode |
| POST | `/notifications/system-mode` | Switch mode |
| GET | `/notifications/channels` | Get all channels |
| POST | `/notifications/channels/toggle` | Toggle channel |
| GET | `/notifications/events` | Get all events |
| POST | `/notifications/events/update` | Update event |
| GET | `/notifications/templates/{id}/{ch}` | Get template |
| POST | `/notifications/templates` | Save template |
| GET | `/notifications/email-settings` | Get email customization |
| POST | `/notifications/email-settings` | Save email customization |
### Database Options
```php
// System mode
woonoow_notification_system_mode = 'woonoow' | 'woocommerce'
// Channel toggles
woonoow_email_notifications_enabled = true | false
woonoow_push_notifications_enabled = true | false
// Event settings
woonoow_notification_settings = [
'order_processing' => [
'channels' => [
'email' => ['enabled' => true, 'recipient' => 'customer']
]
]
]
// Templates
woonoow_notification_templates = [
'order_processing_email_customer' => [
'subject' => '...',
'body' => '...'
]
]
// Email customization
woonoow_email_settings = [
'primary_color' => '#7f54b3',
'logo_url' => '...',
...
]
```
---
## Email Queue System
### Purpose
Prevents 30-second timeout when sending emails via SMTP.
### Implementation
- **WooEmailOverride**: Intercepts `wp_mail()` calls
- **MailQueue**: Queues emails via Action Scheduler
- **Async Processing**: Emails sent in background
### Files
- `includes/Core/Mail/WooEmailOverride.php`
- `includes/Core/Mail/MailQueue.php`
### Initialization
```php
// In Bootstrap.php
MailQueue::init();
WooEmailOverride::init();
```
---
## Key Classes
### NotificationManager
**File:** `includes/Core/Notifications/NotificationManager.php`
- `should_send_notification()` - Validates all toggles
- `send()` - Main sending method
- `is_channel_enabled()` - Check global channel state
- `is_event_channel_enabled()` - Check per-event state
### EmailManager
**File:** `includes/Core/Notifications/EmailManager.php`
- `is_enabled()` - Check if WooNooW system active
- `disable_wc_emails()` - Disable WooCommerce emails
- Hooks into WooCommerce order status changes
### EmailRenderer
**File:** `includes/Core/Notifications/EmailRenderer.php`
- `render()` - Render email from template
- `replace_variables()` - Replace variables with data
- `parse_cards()` - Parse markdown cards
- Applies email customization
### TemplateProvider
**File:** `includes/Core/Notifications/TemplateProvider.php`
- `get_template()` - Get custom or default template
- `get_variables()` - Get available variables
- `get_default_template()` - Get default template
---
## Global System Toggle
### Purpose
Allow users to switch between WooNooW and WooCommerce notification systems.
### Modes
**WooNooW Mode** (default):
- Custom templates with markdown
- Multi-channel support
- Full customization
- WooCommerce emails disabled
**WooCommerce Mode**:
- Standard WooCommerce emails
- WooNooW notifications disabled
- For users who prefer classic system
### Implementation
```php
// Check mode
$mode = get_option('woonoow_notification_system_mode', 'woonoow');
// EmailManager respects mode
if (!EmailManager::is_enabled()) {
return; // Skip WooNooW notifications
}
// NotificationManager checks mode
if ($system_mode !== 'woonoow') {
return false; // Use WooCommerce instead
}
```
---
## Q&A
### Q: Are templates saved and used when sending?
**A:** ✅ Yes. Templates saved via API are fetched by EmailRenderer and used when sending.
### Q: Are channel toggles respected?
**A:** ✅ Yes. NotificationManager checks both global and per-event toggles before sending.
### Q: Does the global system toggle work?
**A:** ✅ Yes. EmailManager and NotificationManager both check the mode before processing.
### Q: Is email sending async?
**A:** ✅ Yes. MailQueue queues emails via Action Scheduler to prevent timeouts.
### Q: Are variables replaced correctly?
**A:** ✅ Yes. EmailRenderer replaces all variables with actual data from orders/customers.
### Q: Does markdown parsing work?
**A:** ✅ Yes. Cards, buttons, and images are parsed correctly in both visual builder and email output.
---
## Related Documentation
- **NEW_MARKDOWN_SYNTAX.md** - Markdown syntax reference
- **NOTIFICATION_SYSTEM_QA.md** - Q&A and backend status
- **BACKEND_WIRING_COMPLETE.md** - Backend integration details
- **CUSTOM_EMAIL_SYSTEM.md** - Email system architecture
- **FILTER_HOOKS_GUIDE.md** - Available hooks for customization
---
## Future Enhancements
### Planned Features
- Activity Log page
- WhatsApp addon
- Telegram addon
- SMS addon
- A/B testing for templates
- Scheduled notifications
- Customer notification preferences page
### Addon Development
See **ADDON_DEVELOPMENT_GUIDE.md** for creating custom notification channels.