Changelog

Product Updates & Release Notes

RippleTXT Changelog

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.


✨ Added

  • Organization Provisioning Workflow (/api/create_organization/):

    • Introduced a secure endpoint that allows trusted partners to provision new organizations directly through the API.
    • The workflow automatically handles:
      • Creating a new organization with the correct defaults for entity type and industry vertical.
      • Generating the organization’s first user, initialized with a temporary credential for login.
      • Issuing a dedicated API key scoped to the new organization for immediate integration.
    • The endpoint returns identifiers and credentials required for onboarding the new organization into the RippleTXT platform.
  • API Documentation Update:

    • The OpenAPI/Swagger library now includes the new provisioning endpoint with defined request/response contracts and error codes.

📄 Technical

  • Organization creation is now decoupled from existing organization-scoped API tokens and instead secured through a system-level provisioning key.
  • System configuration values drive the provenance of newly created organizations, ensuring consistent attribution and auditability.
  • Endpoint implementation ensures optional metadata fields are handled gracefully while enforcing required contact and organization information.
  • Expanded changelog and documentation to reflect the new provisioning workflow as part of the platform’s integration layer.

✨ Added

  • Enhanced Campaign Sending (send_batch.php):

    • Implemented full support for MMS attachments:
      • Relative paths in campaigns.media_url are now automatically converted to absolute URLs.
      • Campaign sends now mirror the test message flow, ensuring images are properly attached.
    • Enforced Telnyx MMS limits:
      • Maximum of 10 attachments per message.
      • Combined media size capped at 1 MB (skips excess items).
    • Added idempotency keys (per-queue ID) to prevent accidental duplicate sends.
    • Debug logging improvements for payload inspection.
  • Unified Test Sending (send_test_message.php):

    • Test sends now use the same send_message() helper as live campaigns.
    • Ensures consistent payload handling, MMS attachment support, and error surfacing.
  • send_message() Enhancements:

    • Supports both single media_url and array-based media_urls parameters.
    • Properly sanitizes and validates attachment URLs.
    • Surfaces Telnyx error codes (e.g., 40317 Invalid MMS content) with detailed context.
    • Optional support for messaging_profile_id and idempotency keys.
  • Progress & Stats Updates:

    • Campaign progress bars (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.

🛠 Fixed

  • Campaign messages with media previously sent as SMS instead of MMS due to missing media normalization; fixed by aligning campaign send logic with test flow.
  • Progress view stuck at 0% when only failures occurred; corrected by counting attempted (sent + failed) messages.
  • Error handling now truncates and stores Telnyx error details in message_queue.error_message for visibility.

📄 Technical

  • New helper functions:
    • 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.
  • Database tables leveraged:
    • 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}.

✨ Added

  • Campaign Completion Flow:
    • Added a "Complete" button to campaigns.php allowing campaigns to be moved from ACTIVE to COMPLETE status.
    • Visual update: campaigns marked complete now display a distinct background color and a white check icon for clarity.
  • Campaign Management Enhancements:
    • Updated manage_campaign.php to support the new complete action alongside archive, restore, and delete.
  • Reporting:
    • Added Download CSV Report button in message_logs.php to export filtered logs for a specific campaign.
  • Opt-Out Enforcement:
    • Sending pipeline (send.php) now enforces blacklist rules in addition to opt-outs:
      • Contacts present in either opt_outs or blacklist are automatically excluded when queueing messages.
      • Ensures campaigns respect compliance and user preferences at the time of queuing.

🛠 Fixed

  • Campaign completion button styling (check icon now displays with a white foreground for visibility).
  • Minor query consistency fixes when applying filters for CSV export.

📄 Technical

  • Introduced complete action in campaign lifecycle.
  • Updated send.php SQL contact filter to join against blacklist table in addition to opt_outs.
  • Transaction logic in send.php updated to guarantee blacklist exclusions occur before queue insertion.

✨ Added

  • Inbox & Replies UI: iPhone-style inbox and threaded conversation view.
  • Blacklist Functionality:
    • Added a new blacklist table.
    • Numbers blacklisted by an organization cannot be messaged again.
    • Admin UI includes a "Blacklist" button in the message reply view.
  • Webhook Enhancements:
    • Improved message logging for both inbound and outbound SMS/MMS.
    • Campaign and organization ID detection from Telnyx numbers and tags.
    • Email notifications for inbound replies (with styled template via Mailgun).
  • Organization Filtering:
    • All campaign and message log views now restrict data visibility based on the user's organization or impersonation mode.
  • Message Logs Page:
    • Campaign dropdown now filters by organization context.
    • Logs are only shown after clicking the “Filter” button.
  • Send Test Message Flow:
    • Test messages now tag outbound messages correctly.
    • Replies to test messages are routed and logged via the webhook system.
  • Email Notifications:
    • Inbound text replies now trigger styled HTML email alerts to all employees under the responding organization.

🛠 Fixed

  • is_internal_user() logic now checks employee role (rather than null org ID).
  • Campaign dropdowns now correctly reflect organization filtering.
  • messages_inbox.js properly loads phone context and passes it to the blacklist logic.
  • Fixed a bug where JSON parse warnings caused reply threads to break.

📄 Technical

  • Added Parsedown support instructions for rendering changelogs on-site.
  • Cleaned up webhook logging and improved debug verbosity in logs.