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.
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:
latepoint_booking_createdfires 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 onlatepoint_order_created.nx_entrieshas no upsert.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.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:
sadmansakibnadvi:nadvi-dev/latepoint-integration(b02df28)LatePointConversions), one file plus registration and three builder fields; no new Type, no DB migration, no JS/build changes.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.