Skip to content

Notifications

Neverline includes a notification system for sending SMS and push notifications to customers at key moments during their queue experience.

Notification Templates

The following notification types are available, each with SMS and push variants:

EventTriggerSMS Content
Session CalledCustomer's turn arrives"It's your turn! Please proceed to {location}"
ApproachingCustomer is almost next"You're {posLabel} in line. Running late? {link}"
No-ShowCustomer missed their turn"We couldn't reach you. Tap to rejoin"
Away ReminderAway timer nearing expiry"Return soon — {minutes}min left of away time"
Jump OfferEarlier slot became available"A slot just opened! Can you come early?"

All SMS notifications include the organization name and relevant action links.

Notifications contain signed action URLs that allow customers to respond with one tap. These links are secured with HMAC-SHA256 signatures and include an expiration timestamp.

Supported Actions

ActionDescriptionExpiry
lateMark yourself as running lateSession expiry window
cancelLeave the queueSession expiry window
returnConfirm return from awaySession expiry window
jump_acceptAccept a queue jump offer5 minutes

URL Format

https://app.neverline.fi/action?payload={base64json}&sig={hmac-sha256}

The payload contains the session token, action type, and expiration timestamp. The server verifies the signature and checks expiration before executing the action.

Security

  • Links are signed with HMAC-SHA256 using the PII_ENCRYPTION_KEY
  • Buffer lengths are checked before timingSafeEqual comparison
  • Expired links are rejected with a clear error message
  • Each link is scoped to a specific session and action

Timer Processor

A background service (TimerProcessor) runs every 60 seconds to scan for expired timers:

  • Expired away timers — customers whose away time has elapsed are automatically returned to normal status
  • Expired late timers — customers whose late grace period has elapsed are returned to normal status

Each expiration emits a queue event (session.away_expired / session.late_expired) for webhook integrations.