Skip to content

Feature request: LatePoint booking integration (source for the conversions Type) #147

Description

@sadmansakibnadvi

Feature request: LatePoint booking integration

Summary

Add LatePoint (booking/appointment plugin, 10k+ active installs) as a free realtime notification source feeding the existing conversions (Sales) Type. Confirmed appointments become social-proof popups — "Sarah C. just booked a Deep Tissue Massage."

This would be NotificationX's first booking-plugin integration — there is currently no Amelia, Bookly, or LatePoint source.

Motivation

This came from a live customer running LatePoint + NotificationX who wanted "someone just booked an appointment" social proof. Booking/appointment plugins are a category NotificationX doesn't cover yet, and LatePoint is the largest free one.

Why it's more than a stock integration

LatePoint's event model has some sharp edges that a naive source would get wrong. The design that came out of building this handles them explicitly:

  • Buffered, order-anchored capture. latepoint_booking_created fires once per booking with no cap, so a recurring or multi-item checkout would emit N popups for one customer. Bookings are buffered per request and flushed as a single notification on latepoint_order_created.
  • Status allowlist, not denylist. LatePoint lets admins define arbitrary custom statuses, so only an explicit allowlist (Approved/Completed by default) is shown.
  • Delete-then-reinsert on status change, since nx_entries has no upsert.
  • A daily reconciliation cron. LatePoint deletes bookings through several paths that fire no usable hook (customer deletion cascades silently; order deletion never fires booking_deleted; the abilities/MCP layer fires nothing), so hooks alone can't keep the data correct — this also covers the GDPR-erasure case where a deleted customer's name would otherwise persist in public popups.
  • Privacy-first payload. A hand-written DTO (never LatePoint's get_data_vars(), which serializes email, phone, and no-auth management URLs), first-name + last-initial masking, and a "Hide Service Name" toggle for sensitive services.

Status — a complete, tested implementation exists

This was opened as #145 (now closed). The work is still available on the branch if it's useful:

  • Branch: sadmansakibnadvi:nadvi-dev/latepoint-integration (b02df28)
  • One source (LatePointConversions), one file plus registration and three builder fields; no new Type, no DB migration, no JS/build changes.
  • Verified against LatePoint 5.6.9 on a local WordPress install: the PHPUnit suite passes and a 30-scenario behavioural harness (duplicate/recurring/cart, status transitions, order & customer deletion, hidden services, midnight bookings, backfill bounds) is green.

Happy to reopen a PR, rework it to your preferences, or hand it over — whatever fits how you'd like integrations contributed. If the integration isn't something you want maintained in core, no problem; this is mainly to have it tracked.

Related

Three pre-existing bugs surfaced while building this, filed separately: #142, #143, #144.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions