Marketing · Book appointment
Embeds the external appointment-booking tool, with the redirect URL assembled from the centre’s configuration.
| Area | Marketing |
| Routes | marketing.book-appointment · marketing.book-appointment.index |
| Centre modules | marketingBookAppointment |
| Staff levels | root · admin · manager · crmmanager · weboperator · content_creator |
| Models | — |
| UI label | title.header.book-appointment / menu.navbar.marketing.book-appointment |
| Coverage | 3 use cases · 1 happy · 3 failure |
How it works
The controller builds the embed address from redirectBaseUrl + fetchExternalURL into bookingRedirectUrl, i.e. the URL is fetched rather than statically configured — which is why this embed has a real error message where the others do not. A matching booking_appointment MOF type exposes it as an app button, and that button type requires a linked activity (error.mof.campaign.required).
Use cases
Why someone opens this (3)
- Letting customers book a slot for a service (e.g. a gift-wrapping desk or a kids’ workshop).
- Staff checking or managing today’s bookings.
- Surfacing booking from the app via a dedicated button.
Path map
flowchart LR F(["Book appointment"]):::feat F --> H1["Booking tool opened"]:::ok F -.-> X1["URL fetch fails"]:::bad F -.-> X2["Module disabled"]:::bad F -.-> X3["App button without an activity"]:::bad classDef feat fill:#b0432c,stroke:#b0432c,color:#ffffff,font-weight:bold classDef ok fill:#e3f1ea,stroke:#0d6b42,color:#0d4a2e classDef bad fill:#f7e6e2,stroke:#9a2d1c,color:#6e1f13
Happy paths
Booking tool opened
- Centre has the book-appointment module enabled.
- User opens Marketing → Book appointment.
- The redirect URL is fetched and resolved and the tool loads in the frame.
Failure paths
URL fetch fails
Cause — The request that resolves the external URL errors.
What happens —
marketing.book-appointment.error-message(‘There was an error loading Book Appointment page.’).
Module disabled
Cause —
marketingBookAppointmentoff for the centre.What happens —
canAccessfalse; entry hidden and route blocked.
App button without an activity
Cause — A
booking_appointmentMOF button saved without a campaign.What happens —
error.mof.campaign.required.
QA checklist
Tick these off while regression-testing this feature. The boxes are plain Markdown, so progress is visible in git diffs.
- ✅ Booking tool opened
- ⛔ URL fetch fails
- ⛔ Module disabled
- ⛔ App button without an activity
Implementation
app/controllers/marketing/book-appointment/index.jsapp/routes/marketing/book-appointment/index.jsapp/abilities/module-marketing-book-appointment.js
Translation keys (5)
Key English title.header.book-appointmentBook appointment menu.navbar.marketing.book-appointmentBook appointment marketing.book-appointment.error-messagePlease try again later. There was an error loading Book Appointment page. mof-type.booking-appointmentBooking appointment error.mof.campaign.requiredThe activity is required
Related
- Same area — Activity list & duplication · Activity editor (loyalty mechanics, rules & targeting) · Activity report & PDF · Activity campaigns (programme grouping) · Email campaign list, duplication & stop · Email campaign builder (wizard, A-B test, scheduling) · Digital games (lottery) · Fidcard · Present cards (Fideliza gift cards)
Generated from doc/feature-inventory.json · id marketing-book-appointment · commit 276788ca6