Product Updates & Release Notes
All notable changes to the RippleTXT platform will be documented in this file.
The format is based on Keep a Changelog, and this project uses calendar versioning.
Organization Provisioning Workflow (/api/create_organization/):
API Documentation Update:
Enhanced Campaign Sending (send_batch.php):
campaigns.media_url are now automatically converted to absolute URLs.Unified Test Sending (send_test_message.php):
send_message() helper as live campaigns.send_message() Enhancements:
media_url and array-based media_urls parameters.messaging_profile_id and idempotency keys.Progress & Stats Updates:
campaigns.php, send_progress.php) now count both sent and failed messages for accuracy.send_stats.php updated to include failed sends directly from message_queue alongside delivery receipts.0% when only failures occurred; corrected by counting attempted (sent + failed) messages.message_queue.error_message for visibility.normalize_attachment_urls() — builds absolute URLs from campaign media paths.http_content_length() — lightweight HEAD request for media size enforcement.parse_telnyx_error() — extracts structured Telnyx error codes and messages.send_batch.php refactored for maintainability and stricter Telnyx compliance.campaigns for message_type, media_url, and messaging_profile_id:contentReference[oaicite:0]{index=0}.message_queue for status tracking (queued, sent, failed) with retries and error logging:contentReference[oaicite:1]{index=1}.message_logs for accurate Telnyx delivery receipts, including message_type (SMS/MMS):contentReference[oaicite:2]{index=2}.campaigns.php allowing campaigns to be moved from ACTIVE to COMPLETE status.manage_campaign.php to support the new complete action alongside archive, restore, and delete.message_logs.php to export filtered logs for a specific campaign.send.php) now enforces blacklist rules in addition to opt-outs:opt_outs or blacklist are automatically excluded when queueing messages.complete action in campaign lifecycle.send.php SQL contact filter to join against blacklist table in addition to opt_outs.send.php updated to guarantee blacklist exclusions occur before queue insertion.blacklist table.is_internal_user() logic now checks employee role (rather than null org ID).messages_inbox.js properly loads phone context and passes it to the blacklist logic.Parsedown support instructions for rendering changelogs on-site.