v27.0
New Features
- Broadcast Data Feeds: Added external data feed integration for broadcasts, allowing dynamic content injection from external APIs
- Global Feed: Fetch data once before broadcast starts, available to all recipients via
{{ global_feed.* }}template variable - Per-Recipient Feed: Fetch personalized data for each recipient via
{{ recipient_feed.* }}template variable - Custom HTTP headers support for API authentication
- Automatic retry with circuit breaker protection
- SSRF protection with URL validation (blocks localhost and private IPs)
- Real-time feed testing from the broadcast editor
- Global Feed: Fetch data once before broadcast starts, available to all recipients via
Database Migration
- Added
data_feedJSONB column tobroadcaststable (workspace migration) - Added
recurring_intervalandintegration_idcolumns totaskstable (system migration)
Fixes
- Upgrade from v26: Fixed startup crash when upgrading from v26 due to index referencing
integration_idcolumn before the migration could add it - SMTP M365 OAuth2: Fixed XOAUTH2 authentication to use sender email instead of fixed auth email, resolving SendAs permission errors and incorrect Sent folder placement (#250)
- File Manager: Sanitize uploaded filenames by replacing spaces with dashes and lowercasing extensions (#252)
- Broadcasts: Fixed custom endpoint URL not propagating to click tracking and open tracking URLs in sent emails (#254)
- Email Builder: Fixed text color/background changes not applying when re-selecting already-styled text in the rich text editor
- Contacts: Bulk import now processes contacts in batches of 500, fixing crashes on large imports and improving performance