CMS · Push notification editor (scheduling, geofencing, deep links)

Composes a push notification: subject and message with personalisation variables, target segment, send frequency (single or recurring), an optional geofence (latitude/longitude for on-location delivery), an image, and an action that either opens the app or deep-links to a specific proposal.

AreaCMS
Routescms.push-notifications.new · cms.push-notifications.edit
Centre modulescms · foreground_location · marketingActivityCampaigns
Staff levelsroot · admin · manager · crmmanager · weboperator · content_creator
Modelscampaign · proposal · push-notification · segment
UI labelcms.push-notification.general-data
Coverage5 use cases · 2 happy · 7 failure

Known issues (1)

How it works

Validation is heavily conditional on frequency: endDatetime is only required for non-single sends, and latitude/longitude only for on-location, each with explicit range checks (±90 / ±180). startDatetime must be in the future — a rule that also makes editing a scheduled push fail once its time has passed. actionType: 'proposal' requires actionData.proposal_id, validated both by presence and by a custom rule, with resetActionData clearing it when the type changes. checkImageSize guards the image, and the activity-campaign picker only appears when the centre flag is on, behind a confirmation modal (onAcceptActivityCampaignModal).

Use cases

Why someone opens this (5)

  • Announcing an event to a segment the evening before.
  • Triggering a geofenced message when customers are near the centre.
  • Deep-linking a notification straight to the relevant proposal.
  • Setting up a recurring reminder over a date range.
  • Personalising the message with the recipient’s name.

Path map

flowchart LR
    F(["Push notification editor scheduling, geofencing…"]):::feat
    F --> H1["Single scheduled push with a deep link"]:::ok
    F --> H2["Geofenced recurring push"]:::ok
    F -.-> X1["Core fields missing"]:::bad
    F -.-> X2["Start datetime not in the future"]:::bad
    F -.-> X3["End before start"]:::bad
    F -.-> X4["Coordinates out of range"]:::bad
    F -.-> X5["Proposal action without a proposal"]:::bad
    F -.-> X6["Image too large"]:::bad
    F -.-> X7["Submit while invalid"]:::bad
    classDef feat fill:#6a4a8f,stroke:#6a4a8f,color:#ffffff,font-weight:bold
    classDef ok fill:#e3f1ea,stroke:#0d6b42,color:#0d4a2e
    classDef bad fill:#f7e6e2,stroke:#9a2d1c,color:#6e1f13

Happy paths

Single scheduled push with a deep link

  1. User sets subject, message and a future start datetime.
  2. Frequency is single sending, so no end datetime is required.
  3. Action type is proposal and a proposal is searched and selected, filling actionData.proposal_id.
  4. A segment is chosen and the image passes the size check.
  5. submit validates and saves; the push appears as scheduled.

Geofenced recurring push

  1. Frequency is set to on-location, requiring latitude and longitude.
  2. Coordinates are entered within ±90 / ±180.
  3. An end datetime after the start is supplied.
  4. The notification saves and fires when matching users are nearby.

Failure paths

QA checklist

Tick these off while regression-testing this feature. The boxes are plain Markdown, so progress is visible in git diffs.

  • ✅ Single scheduled push with a deep link
  • ✅ Geofenced recurring push
  • ⛔ Core fields missing
  • ⛔ Start datetime not in the future
  • ⛔ End before start
  • ⛔ Coordinates out of range
  • ⛔ Proposal action without a proposal
  • ⛔ Image too large
  • ⛔ Submit while invalid

Implementation


Generated from doc/feature-inventory.json · id cms-push-notification-editor · commit 276788ca6