NetSendo Logo
Platform Updates

NetSendo v2.1.1: Webinar Pages, Calendly & Autoresponder Overhaul

NetSendo TeamJuly 24, 20268 Min. Lesezeit
NetSendo v2.1.1: Webinar Pages, Calendly & Autoresponder Overhaul
TL;DR: NetSendo v2.1.1 ships editable webinar funnels with embedded Calendly scheduling, fixes a long-standing double opt-in SQL crash that silently prevented subscriber activation, and completely rebuilds autoresponder sequence triggering across every signup path β€” from WooCommerce webhooks to MCP tool calls.

Every marketing platform eventually hits the same wall: the features look great in a demo, but real-world edge cases quietly swallow leads. Confirmation links that error out. Autoresponder sequences that never fire. Webinar registration pages you can't customize. NetSendo v2.1.1 tackles all three at once β€” released on July 24, 2026, this is the most impactful maintenance-and-features release since v2.0.

Whether you run a SaaS onboarding funnel, a webinar-driven lead generation campaign, or a WooCommerce store with post-purchase email sequences, this release directly affects your deliverability and conversion rates. Let's break down exactly what changed and why it matters.

πŸš€ What's New in v2.1.1

Editable Webinar Registration & Thank-You Pages

Previously, your public webinar signup page was a take-it-or-leave-it template with a handful of editable copy fields. Starting with v2.1.1, you have full compositional control over both the registration page and the thank-you flow.

πŸ“

Custom Content Sections

Add up to 20 ordered text or video sections above or below your signup form β€” reorder, edit, and remove inline.

πŸŽ₯

Video Embedding

Paste any YouTube or Vimeo URL (watch, shorts, live, unlisted) and NetSendo extracts the embed safely via regex β€” no arbitrary iframe injection possible.

πŸ“…

Calendly Integration

Embed a Calendly inline widget on your thank-you page, pre-filled with the registrant's name and email for a one-click booking experience.

πŸ”—

Standalone Thank-You Page

A new public route /webinar/{slug}/thank-you serves as a post-purchase redirect target β€” complete with editable headline, sections, and Calendly widget.

How It Works

In the webinar Create / Edit screen you'll find two new cards: "Additional registration page sections" and "Thank-you page". Both use the new SectionListEditor.vue component β€” a reusable drag-and-drop section builder that handles ordering, validation, and removal entirely in the browser.

All configuration is stored in the existing webinars.settings JSON column under new keys (registration_sections, thankyou_sections, calendly). No database migration is required for this feature. Malformed or empty sections are silently dropped at render time via Webinar::pageSections(), so legacy webinar records are unaffected.

πŸ’‘ Pro Tip: Use the standalone /webinar/{slug}/thank-you URL as the redirect target in your payment processor (e.g. Stripe, PayU). The page URL is displayed with a one-click copy button directly in the webinar Edit panel.
⚠️ Important: Calendly scheduling links are validated to start with https://calendly.com/ at save time and re-checked against *.calendly.com at render time. Do not use shortened or redirected URLs β€” they will be rejected.

AI Model Catalog β€” Single Source of Truth

The AI Integrations settings page previously maintained its own hardcoded defaultModels list in Index.vue that had drifted from the backend catalog β€” resulting in stale labels like "Claude 4.5 Opus (Najnowszy β€” StyczeΕ„ 2026)" appearing in the model picker months after release.

The fix is architectural: AiIntegrationController::index() now exposes the backend AiIntegration::getDefaultModels() catalog as a default_models field per provider, and the Vue page renders that directly. All time-based labels ("Latest", "NowoΕ›Δ‡", month/year tags) have been removed from every locale file (PL/EN/DE/ES) β€” only functional descriptors like Legacy, Reasoning, and Fast remain.

A companion migration (2026_07_11_000000_clean_seeded_ai_models) removes previously-seeded non-custom rows from ai_models that were surfacing those outdated labels. Custom models you added manually are preserved.

πŸ”§ Critical Fixes in v2.1.1

Double Opt-In Was Completely Broken (#29)

This is the most impactful fix in the release. The ActivationController attempted to write confirmed_at and resubscribed_at into the contact_list_subscriber pivot table β€” but those columns never existed. Every confirmation click produced an Unknown column QueryException, the catch block silently rendered a generic error page, and the subscriber was never activated.

  • ❌ Double opt-in signups never started their autoresponder sequence
  • ❌ The resubscribe link was equally dead for every subscriber
  • ❌ Re-signing up on a double opt-in list demoted active subscribers back to pending, pausing all their mailings

The fix adds the missing columns via migration 2026_07_24_000001_add_confirmation_columns_to_contact_list_subscriber.php, registers them in both withPivot() relations, and ensures that resubscribe() also resets subscribed_at and clears unsubscribed_at β€” anchoring the autoresponder sequence at the actual re-signup moment.

ℹ️ Note: Active subscribers who re-submit a double opt-in form now stay active, receive an "already subscribed" notification, and have their sequence restarted immediately (they are already confirmed). They are no longer demoted to pending.

Autoresponder Sequences β€” Complete Signup Path Overhaul

The sequence engine is driven by the SubscriberSignedUp event. The problem: most code paths that attached or reactivated a subscriber on a list never fired it. The result was that sequences only reliably started for brand-new subscribers signing up through the main public form.

Every affected path is now fixed:

  • βœ… REST API POST /api/v1/subscribers β€” fires for existing subscribers added to a new list or reactivated after unsubscribing
  • βœ… Batch API POST /subscribers/batch β€” same fix applied to both branches
  • βœ… Public list subscribe API POST /api/lists/{id}/subscribe β€” never dispatched the event for anyone; fixed, including parent-list propagation
  • βœ… Subscriber edit form β€” fires only when a list is newly attached or reactivated, not on every save
  • βœ… Co-registration β€” previously skipped existing (even unsubscribed) subscribers entirely; now reactivates and dispatches
  • βœ… Calendly webhook add-to-list β€” was silent; now dispatches
  • βœ… List delete-with-transfer β€” transfer crashed with a duplicate-key error for subscribers already on the target list; rewritten via Subscriber::addToList()
  • βœ… Funnel move/copy to list actions β€” called methods that didn't exist, throwing at runtime (silently swallowed in the sales-funnel path); fully rewritten
  • βœ… WooCommerce webhook β€” still used the pre-refactor schema (subscribers.contact_list_id), crashing on every call; rewritten for the pivot schema

Re-signup Burst Fix β€” Scheduled Queue Timestamps

When a subscriber re-signed up on a list configured to keep the original signup date, every day-offset in their autoresponder sequence lay in the past β€” and CRON sent all queued messages simultaneously. This "burst" behavior could spam contacts with dozens of emails at once.

Queue entries now carry an explicit scheduled_for timestamp computed once at creation time by CreateAutoresponderQueueEntries via the new shared Message::calculateExpectedSendAt() helper (which is also timezone-aware for time_of_day and send_in_subscriber_timezone). CRON gates on this timestamp and falls back to the legacy pivot computation only for entries created before the migration.

⚠️ Important: This fix requires migration 2026_07_24_000002_add_scheduled_for_to_message_queue_entries.php. Run php artisan migrate immediately after updating β€” CRON behavior for existing queue entries will degrade gracefully via the legacy fallback until the column is populated.

Additional Fixes

  • βœ… MCP create_subscriber tool β€” was sending a lists array while the REST endpoint requires contact_list_id; every call returned 422. Now calls POST /subscribers once per list id.
  • βœ… "Delete unconfirmed subscribers" maintenance β€” looked for pivot status unconfirmed while double opt-in stores pending; now matches both.
  • βœ… Queue/recipient counters β€” planned_recipients_count was never calculated for autoresponders; the queue-stats modal's pending count was computed but never rendered; buckets now include scheduled_for-aware distribution and the previously omitted "today" bucket, so percentages finally add up to 100%.

πŸ’Ό Benefits & Use Cases

πŸŽ“

Webinar & Course Creators

You can now build a complete webinar funnel inside NetSendo: a registration page with a YouTube teaser video and social proof text sections, followed by a thank-you page with an embedded Calendly widget for attendee onboarding calls β€” all without touching a page builder or third-party landing page tool.

  • Add a video invitation above the signup form to boost conversions
  • Embed Calendly so attendees book a 1-on-1 immediately after registering
  • Use the standalone thank-you URL as the redirect in your payment processor
πŸ›’

E-commerce (WooCommerce)

The WooCommerce webhook rewrite means that customer signups from your store now reliably create the list membership and β€” crucially β€” trigger the welcome autoresponder sequence. Combined with the burst fix, customers who previously purchased and re-purchase will receive the correct sequence at the correct cadence, not all at once.

  • Post-purchase welcome sequences now start reliably for every order
  • Re-purchasing customers receive properly spaced follow-up emails
  • Unsubscribed customers who return are reactivated cleanly per your list settings
βš™οΈ

SaaS & API-Driven Onboarding (n8n / MCP)

If you use n8n workflows or the NetSendo MCP tool to add users to lists programmatically, every subscriber added via API will now correctly start their onboarding autoresponder sequence β€” including users who previously existed in your database but were being added to a new list for the first time.

  • n8n-driven signups now trigger sequences end-to-end
  • MCP create_subscriber calls no longer return 422 errors
  • Multi-list enrollments work correctly across all batch paths

πŸ“‹ Step-by-Step: Setting Up Webinar Pages with Calendly

  1. Open or Create a Webinar

    Navigate to Webinars β†’ Create (or edit an existing webinar). Fill in the basic details as usual.

  2. Add Registration Page Sections

    Scroll to the new "Additional registration page sections" card. Click + Add Section and choose Text (heading + body) or Video (YouTube/Vimeo URL). Use the up/down arrows to position sections above or below the signup form.

  3. Configure the Thank-You Page

    Open the "Thank-you page" card. Set your headline and message using the content.purchase_thankyou_headline and content.purchase_thankyou_message fields. Add text/video sections as needed.

  4. Enable Calendly

    Toggle "Enable Calendly widget" to on. Paste your full Calendly scheduling link (must start with https://calendly.com/). Optionally add a heading and description above the calendar widget.

  5. Copy the Standalone Thank-You URL

    At the bottom of the "Thank-you page" card, you'll see the public URL for the standalone thank-you page (/webinar/{slug}/thank-you). Click the copy button and paste it as the success redirect in your payment processor or funnel tool.

  6. Save and Preview

    Click Save. Open the public registration URL in an incognito window to verify your sections render correctly. Register a test account and confirm the Calendly widget loads on the thank-you page with your name and email pre-filled.

πŸ› οΈ Upgrading: Migrations to Run

v2.1.1 ships three migrations. Run them in order immediately after pulling the new image:

# Pull the latest image
docker compose pull

# Run all pending migrations
docker compose exec app php artisan migrate

# Restart the queue workers to pick up fixed event dispatching
docker compose restart worker

The three migrations are:

  • πŸ“¦ 2026_07_11_000000_clean_seeded_ai_models β€” removes stale AI model rows (custom models preserved)
  • πŸ“¦ 2026_07_24_000001_add_confirmation_columns_to_contact_list_subscriber β€” fixes double opt-in activation
  • πŸ“¦ 2026_07_24_000002_add_scheduled_for_to_message_queue_entries β€” prevents autoresponder burst on re-signup
⚠️ Important: Do not skip the migrations. Running the new application code without 2026_07_24_000001 will cause double opt-in confirmation to fail with an SQL error, exactly as it did before the fix.

🎯 Expert Tips

1
Test Your Double Opt-In Flow End-to-End

After upgrading, use a fresh email address to sign up on every double opt-in list you operate. Confirm the email, verify the subscriber is marked active, and check that the first autoresponder message is queued. This takes five minutes and confirms the fix is working in your environment.

2
Audit Your Queue Stats Dashboard

The queue-stats modal now correctly shows a pending count and distributes entries into today/tomorrow/3–7-day buckets. Open it for your highest-volume autoresponder lists immediately after upgrading β€” a sudden spike in "today" entries is normal and reflects previously miscounted items now being accurately reported.

3
Use Subscriber Timezone Sending

The new Message::calculateExpectedSendAt() helper is fully timezone-aware. If you use send_in_subscriber_timezone on your sequences, scheduled_for is now computed correctly at queue entry creation β€” meaning CRON no longer needs to recalculate it on every pass, reducing database load on large lists.

4
Secure Your Calendly Link

NetSendo validates Calendly links at save time and re-validates at render time. For team-based booking, use a Calendly team page link (https://calendly.com/your-team/event-type) rather than a personal link β€” this lets you rotate team members without updating the webinar settings.

5
Restart Queue Workers After Every Upgrade

Laravel queue workers cache classes in memory. After any NetSendo upgrade β€” especially one that changes event dispatching logic β€” always restart workers with docker compose restart worker (or php artisan queue:restart) to ensure they pick up the new code paths immediately.

πŸ“Œ Summary

NetSendo v2.1.1 is a release you should prioritize upgrading to immediately if you use double opt-in lists, autoresponder sequences, or WooCommerce / API-driven signups β€” the bugs fixed in this release were silently preventing subscriber activation and sequence delivery across a wide range of code paths.

On the feature side, the editable webinar pages with Calendly integration open up a meaningful new conversion layer: you can now turn a post-registration thank-you page into a meeting booking engine, keeping prospects engaged at the peak of their interest β€” all self-hosted, all in your control.

Ready to Upgrade?

Get v2.1.1 now and restore reliable sequence delivery across your entire subscriber base:

#webinars#calendly#autoresponder#double-opt-in#automation#woocommerce#platform-updates
Share: