POS + Upsell + QR-Checkin + Marketing (PL-T200)
I korthet
A growth and operations layer for chain venues. POS integrations with Square, Zettle/iZettle and Stripe Terminal using signed webhooks and a 15-minute device health-check that fires ops-alerts when readers drop offline. Rule-based smart upsell prompts evaluated at multiple touchpoints, signed-JWT QR check-in tokens with offline JWKS-cache support, and four configurable marketing-automation flows: birthday offer, win-back, gift-card promo, and post-detractor NPS recovery.
Så fungerar det
POS integrations push transactions into the booking platform from the bar's existing terminal — Square, Zettle/iZettle, and Stripe Terminal each have a dedicated provider with transaction push and signed webhooks (Square HMAC, Zettle JWS, Stripe Stripe-Signature with skew tolerance). A device health-check job pings each registered terminal every 15 minutes and fires an ops-alert if a device drops offline so operators learn about a dead card reader before customers do. Smart upsell uses rule-driven prompts evaluated at multiple touchpoints (wizard checkout, operator confirm, customer portal).
Rules combine color_type, party size, weekday, and season — for example, "on Friday evenings for parties of 4+, suggest the 4-person sharing platter" — and surface as preview prompts the customer can dismiss for the session. The smart upsell preview API returns the eligible prompts plus the rule-id so operators can attribute conversions per-rule in analytics. QR check-in issues signed JWTs (HS256 with per-tenant keys derived via HKDF, kid-rotation supported) embedded in booking confirmations.
The customer shows the QR at the door; the operator scans, the JWT verifies offline against a JWKS-cache (so a momentary network blip doesn't stop check-in), and the booking flips to CHECKED_IN instantly. Marketing automation runs four flows out of the box. Birthday: send an offer days_before_birthday via the configured channel.
Win-back: target customers with inactivity_days exceeded and historical_min visits to filter out one-time visitors. Gift-card-promo: an annual push around a chosen date for gift-card sales. Post-detractor recovery: triggered by NPS scores ≤ 6, opens a recovery message with a make-good offer.
Every flow is configurable per tenant, can be enabled/disabled independently, and respects the customer's per-channel opt-out from F22.14.
Centrala funktioner
- POS integrations: Square + Zettle + Stripe Terminal with signed webhooks
- POS device health-check (15 min ping + ops-alert)
- Rule-based smart upsell (color_type · party · weekday · season) with preview API
- Signed-JWT QR check-in with offline JWKS-cache + kid-rotation
- Birthday-offer + win-back + annual gift-card promo flows
- Post-detractor recovery flow triggered by NPS ≤ 6
- Per-tenant enable/disable + per-customer channel opt-out respected
I praktiken
On a Friday morning the marketing manager configures the win-back flow: target customers with inactivity_days = 90 and historical_min = 3, send via email with a 15% discount code valid for 14 days. The cron runs that night and identifies 87 eligible customers, sending each a personalized offer. Over the next two weeks, 19 of them book through the link — the analytics dashboard shows the campaign's contribution.
Meanwhile, every customer arriving for tonight's bookings shows the QR from their email; the host scans with the operator console, the JWT verifies offline (the venue's wifi is patchy near the door), and check-in is one beep. After dinner, a server's Square terminal goes offline — the device health-check fires an ops-alert within 15 minutes and a manager swaps in a backup before the dinner rush peaks. At checkout, the wizard surfaces "Add a 4-person sharing platter" because the smart upsell rule for Friday-evening parties of 4+ matches; one in three customers accepts.
Features i detta subsystem
12| ID | Status | Funktioner |
|---|---|---|
| F22.18.01 | Levererad | POS integration Square (transaction push + signed webhook) ✅ |
| F22.18.02 | Levererad | POS integration Zettle/iZettle (transaction push + signed webhook) ✅ |
| F22.18.03 | Levererad | POS integration Stripe Terminal (PaymentIntent + Stripe-Signature skew) ✅ |
| F22.18.04 | Levererad | POS device health-check job (15 min ping + ops-alert) ✅ |
| F22.18.05 | Levererad | Rule-based smart upsell prompts (color_type · party · weekday · season) ✅ |
| F22.18.06 | Levererad | Smart upsell preview API + sessions-dismiss UI ✅ |
| F22.18.07 | Levererad | Signed-JWT QR check-in tokens (HS256, per-tenant HKDF, kid-rotation) ✅ |
| F22.18.08 | Levererad | Instant QR check-in via operator scan (offline-capable via JWKS-cache) ✅ |
| F22.18.09 | Levererad | Marketing-automation: birthday offer (days_before_birthday) ✅ |
| F22.18.10 | Levererad | Marketing-automation: win-back (inactivity_days · historical_min) ✅ |
| F22.18.11 | Levererad | Marketing-automation: gift-card-promo (årlig push) ✅ |
| F22.18.12 | Levererad | Marketing-automation: post-detractor recovery (NPS-trigger) ✅ |
Relaterade subsystem
Intressenter som behöver detta subsystem
Förekommer i 9 intressentanalyser