Settings — Notifications, Track-and-trace, Alerts
Permission: Admin only.
Three related areas live in this section: outbound Notifications (SMS and email), the Track-and-trace customer view, and event-driven Alerts.
For an overview of all Settings tabs, see Settings.
Add-on Feature. SMS & Email Notifications and Track & Trace are add-on features. Deviation/exception reporting requires Track & Trace to be enabled.
Notifications
Settings → Notifications
Controls whether your company sends SMS and email notifications, when they’re sent, and what the message content is. The page has three main areas.
SMS Settings
Limit SMS to a specified time of day interval. Delays most SMS notifications until a chosen hourly window (e.g. 05:00 – 20:00).
- Delayed — SMS are held back until inside the window.
- Anytime — SMS go out immediately, no time restriction.
- From / To — the allowed time window when “Delayed” is selected.
Some SMS — like login one-time passwords — do not respect this setting and always go out immediately.
Notifications list
A table of every notification rule your organization has set up. This is where you set up notifications, either by SMS or email. Each row shows:
| Column | What it means |
|---|---|
| Name | Your label for the rule (e.g. Email – Pickup from Nortura to warehouse). |
| Type | The event that triggers it (e.g. Order status changes). |
| Interface | The channel used — Email or SMS. |
| Actions | Edit (blue button) or delete (red button) the rule. |
Click + Create new notification to add a new rule, or click the blue edit button on a row to open the Edit notification dialog.
The Edit notification dialog
When you create or edit a notification, you’ll see four sections:
1. Basic Information
- Notification Name — a label for your team (e.g. SMS – Pickup to warehouse ALL).
2. Trigger Configuration
- Send a notification when — pick the event that fires the notification (e.g. Order status changes).
- and this expression is met — optional extra conditions on top of the trigger. Edit in Visual mode (a friendly builder) or Text mode (raw expression).
- Combine conditions with: AND / OR — choose how multiple conditions are joined.
- Conditions — each row picks a field (e.g. To Status ID, Order Type ID), a comparator (equals, etc.), and a value. Click + Add Condition for more rows.
3. Notification Settings
- Send notification via — choose SMS or Email.
- Delay SMS after creation (Seconds) — optional delay before the SMS goes out. Leave empty for no delay.
4. Template Configuration
- Template Content — the message body. Use template variables in
{{ . }}syntax to insert dynamic data (e.g.{{.Order.InternalOrderNumber}},{{.Pickup.LocationName}},{{.Delivery.EstimatedStart}},{{.Delivery.TrackingLink}}). - Available Variables (click to insert) — searchable list grouped into tabs: Customer, Delivery, Driver, Event, Order, Pickup, Recipient. Click a variable token to insert it into the template at your cursor.
- Preview panel (right side) — shows a live preview of the rendered SMS or email using sample data.
- Character / SMS counter (SMS only) — shows the character count and how many SMS segments the message will be sent as. Counts are based on sample data; actual length varies with the real values.
Click Save to apply, or Cancel to discard.
Recipient types
Choose who receives notifications based on their relationship to the order or delivery process:
- Customer Contacts — recipients associated with the order’s customer account.
- Stop Contacts — recipients associated with a specific pickup or delivery location.
- Pickup Contacts — recipients specifically associated with the pickup location.
- Delivery Contacts — recipients specifically associated with the delivery location.
- Custom Contacts — manually specified email addresses or phone numbers.
Track-and-trace (T&T) Settings
Controls what the track-and-trace customer web view shows to your customers. The portal gives customers complete visibility into their deliveries without requiring app downloads or logins — they receive tracking links via SMS or email notifications. All toggles are Yes / No.
| Section | Setting | What it does |
|---|---|---|
| Package overview | Is visible | Show the package overview block to customers. |
| Freight bill | Allow to download freight bill | Lets customers download a freight bill PDF. |
| Contactless | Allow to set contactless pick-up / delivery | Lets the customer flag the stop as contactless. |
| Delivery intervals | Allow to change delivery intervals | Lets the customer change their delivery time window. |
| Driver | Show driver phone number | Show the assigned driver’s phone number to the customer. |
| Package details modal | View type | How products are grouped in the package details popup (e.g. Group products by warehouse location). |
| Package details modal | Allow to register wrong quantity or damage | Lets the customer report wrong quantity or damage. |
| Package details modal | Group order products by ERP order | Group products by the originating ERP order. |
| Stop details | Use alternative UI | Switch to the alternative stop-details layout. |
| Stop status | Use alternative UI | Switch to the alternative stop-status layout. |
Track-and-trace — Cargo carriers
Controls which cargo carrier sections are visible in the customer web view, plus a global product toggle.
| Section | What it does |
|---|---|
| Cargo carrier overview | Show the overview block. |
| Picked-up cargo carriers | Show carriers picked up at the location. |
| Delivered cargo carriers | Show carriers delivered to the location. |
| Balance | Show the running carrier balance for the location. |
| Show all cargo-carrier products | Include every cargo-carrier product, not just the active ones. |
How customers use Track & Trace
- Receive notification with tracking link via SMS or email.
- Click link to access real-time tracking (no login required).
- Add instructions for delivery if needed (gate codes, floor details).
- Monitor progress as the driver approaches.
- Verify delivery and report any issues (damage, wrong quantity).
- Confirm completion when satisfied.
Rollout best practice
Start with core features (basic tracking, package overview, driver contact), then gradually enable self-service options (delivery instructions, contactless, time changes), and enable deviation reporting last once customers are comfortable with tracking.
Alerts
Alerts are automated notifications triggered by events on orders, drivers, or stops.
How to create an alert rule
- Settings → Alerts.
- Click New alert.
- In the condition builder:
- Trigger — pick the event type (e.g. “Stop is more than 30 minutes late”, “Driver hasn’t started workday”).
- Action — what to do (notify a user, notify the driver, hit a webhook, send SMS).
- Use Test send to fire one test before saving.
- Save.
Common alert recipes
| Goal | Trigger | Action |
|---|---|---|
| Late-stop early warning | Stop late > 15 min | Notify dispatcher Slack channel |
| New high-priority order | Order created with priority = High | Notify on-call dispatcher |
| Driver hasn’t started | Workday start + 10 min, no GPS ping | SMS to driver |
| Webhook to your ERP | Order completed | POST to your endpoint |
How to silence or disable an alert
Open the alert → toggle Active off → save. To delete, ⋮ → Delete.
Alerts can fail silently if the webhook URL is wrong or down. Check the logs in Settings → Alerts → [alert] → Logs.
Template & condition reference
This is the deep reference for building notification triggers, conditions, and message templates. Notifications are triggered by changes to orders, order locations, and track & trace reports. Conditions are written in the expr language , and templates use Go template syntax.
Event types and triggers
1. Order Status Changed (ORDER_STATE_CHANGED)
Triggered when an order’s status changes (e.g., from “pending” to “dispatched” or “delivered”).
Data Objects Available:
- Order — The order that changed status
- Pickup — The pickup location for the order
- Delivery — The delivery location for the order
- Driver — Assigned driver (if any)
- Customer — Order’s customer information
- Recipient — Who this notification is being sent to
2. Order Location Status Changed (ORDER_LOCATION_STATE_CHANGED)
Triggered when a specific stop (pickup or delivery location) changes status (e.g., “dispatched” to “arrived” or “completed”).
Data Objects Available:
- Stop — The specific location that changed status
- Order — The parent order
- Pickup — The order’s pickup location
- Delivery — The order’s delivery location
- Driver — Driver handling the stop
- Customer — Order’s customer
- Recipient — Who this notification is being sent to
3. Order Created (ORDER_CREATED)
Triggered when a new order is created in the system.
4. Track & Trace Shipment Report Created (TT_SHIPMENT_REPORT_CREATED)
Triggered when a recipient submits a delivery report through the track & trace system.
This event type requires the Track & Trace add-on feature to be enabled in your system.
Order status reference
The following status values are available for use in notification conditions and template variables:
| Status | Description | Typical Use Case |
|---|---|---|
unassigned | Order created but no driver assigned | Initial order confirmation notifications |
planned | Order assigned to driver but not yet started | Dispatch planning notifications |
dispatched | Driver has started the order route | Customer notification of dispatch |
in_transit | Driver is en route between locations | Progress update notifications |
arrived | Driver has arrived at pickup/delivery location | Arrival notifications for recipients |
delivered | Order delivery completed successfully | Final delivery confirmation |
complete | Entire order lifecycle finished | Final completion notifications |
cancelled | Order has been cancelled | Cancellation notifications |
Status usage examples
Order creation notification:
// Trigger when new orders are created
Order.Status == "unassigned"Dispatch notification:
// Trigger when orders are dispatched
OldStatus == "planned" && NewStatus == "dispatched"Arrival notifications:
// Trigger when driver arrives at any location
NewStatus == "arrived"Completion notifications:
// Trigger when delivery is completed
NewStatus == "delivered" || NewStatus == "complete"Exception handling:
// Trigger for cancelled orders
NewStatus == "cancelled"Setting conditions with Expr
Use expr language expressions to filter when notifications are sent. Conditions must evaluate to a boolean value.
Common examples:
// Only for specific order statuses
Order.Status == "delivered"
// Only for pickup locations
Stop.LocationType == "pickup"
// Only for external drivers
Driver.IsExternal == true
// Multiple conditions
Order.OrderType == "express" && NewStatus == "dispatched"
// Customer-specific notifications
Customer.SendNotificationBeforeArriving == true
// Status transitions
OldStatus == "in_transit" && NewStatus == "delivered"Available operators:
- Comparison:
==,!=,<,<=,>,>= - Logical:
&&,||,! - String operations:
contains(),startsWith(),endsWith() - Arithmetic:
+,-,*,/,%
Advanced status-based conditions
Single status triggers:
// Trigger only when order becomes unassigned
NewStatus == "unassigned"
// Trigger only when order is planned
NewStatus == "planned"
// Trigger only when order is dispatched
NewStatus == "dispatched"
// Trigger only when driver is in transit
NewStatus == "in_transit"
// Trigger only when driver arrives
NewStatus == "arrived"
// Trigger only when delivery is complete
NewStatus == "delivered"
// Trigger only when order is fully complete
NewStatus == "complete"
// Trigger only when order is cancelled
NewStatus == "cancelled"Status transition conditions:
// Order assignment notification
OldStatus == "unassigned" && NewStatus == "planned"
// Dispatch notification
OldStatus == "planned" && NewStatus == "dispatched"
// Journey progress notification
OldStatus == "dispatched" && NewStatus == "in_transit"
// Arrival notification
OldStatus == "in_transit" && NewStatus == "arrived"
// Delivery completion notification
OldStatus == "arrived" && NewStatus == "delivered"
// Final completion notification
OldStatus == "delivered" && NewStatus == "complete"
// Cancellation from any status
OldStatus != "cancelled" && NewStatus == "cancelled"Combined conditions:
// Express orders that are dispatched
Order.OrderType == "express" && NewStatus == "dispatched"
// Delivery arrivals only (not pickup arrivals)
Stop.LocationType == "delivery" && NewStatus == "arrived"
// Pickup completions only
Stop.LocationType == "pickup" && NewStatus == "delivered"
// External driver notifications
Driver.IsExternal == true && NewStatus == "dispatched"
// High-priority cancellations
Order.Priority == "high" && NewStatus == "cancelled"Notification interfaces
Email notifications
- Subject Line — customizable email subject
- HTML Content — rich email body with templates
- Attachments — include images, documents, signatures
SMS notifications
- Text Message — plain text SMS content
- Sender ID — organization shortname or name (max 11 chars)
- Delivery Windows — respect SMS allowed time windows
Message guidelines
SMS guidelines:
- Keep under 160 characters
- Include essential information only
- Always add tracking link when relevant
Example SMS:
Order [ORDER_NUMBER] dispatched! Driver [DRIVER_NAME] assigned.
Pickup expected [PICKUP_ETA]. Track: [TRACKING_LINK]Email guidelines:
- Professional subject lines
- Clear, structured content
- Include complete order details
- Provide clear next steps
Example email:
Subject: Order Dispatched - [ORDER_NUMBER]
Dear [CUSTOMER_NAME],
Your order has been dispatched:
Order: [ORDER_NUMBER]
Driver: [DRIVER_NAME] ([DRIVER_PHONE])
Pickup: [PICKUP_LOCATION]
Expected: [PICKUP_ETA]
Track: [TRACKING_LINK]
Best regards,
[COMPANY_NAME]Template variables reference
Go Template Syntax. Zendera uses Go template syntax with {{.FieldName}}
format. All field names are case-sensitive.
Order data (Order.*):
{{.Order.OrderID}}— Unique order identifier{{.Order.InternalOrderNumber}}— Human-readable order number (e.g., “ABCZ214”){{.Order.TrackingLink}}— Public tracking URL{{.Order.Status}}— Current order status string{{.Order.OrderType}}— Order type (e.g., “express”, “regular”){{.Order.Reference}}— Customer reference
Location data (Pickup.*, Delivery.*, Stop.*):
{{.Stop.LocationName}}— Location name{{.Stop.FullAddress}}— Complete formatted address{{.Stop.ETA}}— Formatted ETA string (e.g., “15:30 on 20 June 2022”){{.Stop.TrackingLink}}— Location-specific tracking URL{{.Pickup.Earliest}}/{{.Delivery.Latest}}— Service time windows
Driver data (Driver.*):
{{.Driver.Name}}— Full driver name{{.Driver.FirstName}}— Driver first name{{.Driver.PhoneNumber}}— Driver contact number
Customer & recipient data:
{{.Customer.Name}}— Customer name{{.Recipient.FirstName}}— Recipient first name{{.Recipient.Email}}— Recipient email address
Event data:
{{.OldStatus}}/{{.NewStatus}}— Status change information{{.Timestamp}}— Event timestamp
Template functions and conditionals
Conditional logic:
{{if eq .Order.Status "delivered"}}
<p>Your order has been delivered!</p>
{{else if eq .Order.Status "in_transit"}}
<p>Your order is on the way.</p>
{{else}}
<p>Order status: {{.Order.Status}}</p>
{{end}}Driver conditional:
{{if .Driver}}
Driver: {{.Driver.Name}} ({{.Driver.PhoneNumber}})
{{else}}
No driver assigned yet
{{end}}Date formatting:
{{.Pickup.Earliest.Format "2006-01-02 15:04"}}
{{.Timestamp.Format "January 2, 2006"}}Complete template examples
Example 1: Customer delivery notification
Event: Order Location Status Changed
Condition: Stop.LocationType == "delivery" && NewStatus == "delivered"
Recipients: Customer Contacts
Email subject:
Your order #{{.Order.InternalOrderNumber}} has been deliveredEmail body:
<h2>Delivery Confirmation</h2>
<p>Hello {{.Recipient.FirstName}},</p>
<p>Great news! Your order #{{.Order.InternalOrderNumber}} has been successfully delivered to {{.Stop.LocationName}}.</p>
<p><strong>Delivery Details:</strong></p>
<ul>
<li>Delivered to: {{.Stop.FullAddress}}</li>
<li>Delivery time: {{.Stop.CompletedAt.Format "January 2, 2006 at 15:04"}}</li>
{{if .Driver.Name}}
<li>Delivered by: {{.Driver.Name}}</li>
{{end}}
</ul>
<p>Thank you for choosing our service!</p>Example 2: Driver arrival SMS
Event: Order Location Status Changed
Condition: NewStatus == "arrived"
Recipients: Stop Contacts
SMS:
Driver {{.Driver.FirstName}} has arrived at {{.Stop.LocationName}} for order #{{.Order.InternalOrderNumber}}. ETA was {{.Stop.ETA}}.Example 3: Express order alert
Event: Order Created
Condition: Order.OrderType == "express"
Recipients: Custom Contacts (dispatch team)
Email subject:
URGENT: Express Order Created - #{{.Order.InternalOrderNumber}}Email body:
<h2>Express Order Alert</h2>
<p>A new express order has been created and requires immediate attention:</p>
<ul>
<li><strong>Order:</strong> #{{.Order.InternalOrderNumber}}</li>
<li><strong>Customer:</strong> {{.Customer.Name}}</li>
<li><strong>Pickup:</strong> {{.Pickup.LocationName}}</li>
<li><strong>Delivery:</strong> {{.Delivery.LocationName}}</li>
<li><strong>Pickup Window:</strong> {{.Pickup.Earliest.Format "15:04"}} - {{.Pickup.Latest.Format "15:04"}}</li>
<li><strong>Delivery Window:</strong> {{.Delivery.Earliest.Format "15:04"}} - {{.Delivery.Latest.Format "15:04"}}</li>
</ul>
<p>Please assign a driver immediately.</p>Data object relationships
- Order → Order Locations: Each order has one pickup and one delivery location
- Order → Customer: Every order belongs to a customer account
- Order → Driver: Orders may have an assigned driver (can be null)
- Order Location → Documentation: Each location can have associated documentation
Complete template variable reference
Recipient data (Recipient.*)
{{.Recipient.FullName}}— Complete recipient name (e.g., “OW”){{.Recipient.FirstName}}— Recipient first name (e.g., “Obi”){{.Recipient.LastName}}— Recipient last name (e.g., “Wan”){{.Recipient.Email}}— Recipient email address (e.g., “obiwan@jedi”){{.Recipient.Phone}}— Recipient phone number (e.g., “0740000000”)
Order data (Order.*)
{{.Order.OrderID}}— Unique order identifier{{.Order.SerialCode}}— Sequential order number{{.Order.InternalOrderNumber}}— Human-readable order number (e.g., “ABCZ214”){{.Order.TrackingLink}}— Public tracking URL{{.Order.StatusID}}— Numeric status identifier{{.Order.Status}}— Current order status string{{.Order.OrderTypeID}}— Numeric order type identifier{{.Order.OrderType}}— Order type string (e.g., “express”, “regular”){{.Order.Reference}}— Customer reference{{.Order.ShipmentID}}— Shipment identifier{{.Order.Documentations}}— Associated documentation data
Location data (Pickup/Delivery/Stop)
Status and identification:
{{.Stop.StatusID}}/{{.Pickup.StatusID}}/{{.Delivery.StatusID}}— Numeric status{{.Stop.Status}}/{{.Pickup.Status}}/{{.Delivery.Status}}— Status string{{.Stop.OrderLocationID}}— Unique location identifier{{.Stop.InternalStopNumber}}— Human-readable stop number (e.g., “ABCZ214-COLLECTION”){{.Stop.LocationID}}— Location master data identifier{{.Stop.LocationName}}— Location name{{.Stop.LocationType}}— “pickup” or “delivery”{{.Stop.LocationTypeID}}— 1 = pickup, 2 = delivery
Time fields:
{{.Pickup.Earliest}}/{{.Delivery.Earliest}}— Earliest service time{{.Pickup.Latest}}/{{.Delivery.Latest}}— Latest service time{{.Stop.EstimatedStart}}— Estimated start time{{.Stop.ETA}}— Formatted ETA string (e.g., “15:30 on 20 June 2022”){{.Stop.ArrivedAt}}— Actual arrival time (if completed){{.Stop.CompletedAt}}— Actual completion time (if completed)
Address fields:
{{.Stop.FullAddress}}— Complete formatted address (e.g., “Storgata 32, 0184 Oslo, Norway”){{.Stop.Address1}},{{.Stop.Address2}},{{.Stop.Address3}}— Address lines{{.Stop.AddressNumber}}— Street number{{.Stop.City}}— City name{{.Stop.Region}}— Region/state{{.Stop.Country}}— Country name{{.Stop.PostalCode}}— Postal/ZIP code{{.Stop.AddressCoordinates.Latitude}}/{{.Stop.AddressCoordinates.Longitude}}— GPS coordinates
Tracking and completion:
{{.Stop.TrackingLink}}— Location-specific tracking URL{{.Stop.ArrivedCoordinates.Latitude}}/{{.Stop.ArrivedCoordinates.Longitude}}— GPS at arrival{{.Stop.CompletedCoordinates.Latitude}}/{{.Stop.CompletedCoordinates.Longitude}}— GPS at completion
Driver data (Driver.*)
{{.Driver.Name}}— Full driver name (e.g., “Yoda Force”){{.Driver.FirstName}}— Driver first name (e.g., “Yoda”){{.Driver.PhoneNumber}}— Driver contact number (e.g., “0723000000”){{.Driver.ExportOrders}}— Whether driver exports orders{{.Driver.IsExternal}}— Whether driver is external{{.Driver.OptimizeRoutes}}— Whether routes are optimized
Customer data (Customer.*)
{{.Customer.ID}}— Customer identifier{{.Customer.Name}}— Customer name
Event data (status change events)
{{.OldStatusID}}/{{.OldStatus}}— Previous status{{.NewStatusID}}/{{.NewStatus}}— New status{{.OrderID}}— Related order ID{{.OrderLocationID}}— Related location ID (for location events){{.OrganizationID}}— Organization identifier{{.Timestamp}}— Event timestamp
Track & Trace report data (TT Report events)
{{.CreatedAt}}— Report creation timestamp{{.TrackTraceUUID}}— Unique track & trace identifier{{.TrackTraceLink}}— Public track & trace URL{{.Comment}}— Recipient’s comment{{.OrganizationLogo}}— Company logo attachment
Irregularities:
{{.Irregularities[].Comment}}— Irregularity comment{{.Irregularities[].IsDamaged}}— Whether damage was reported{{.Irregularities[].IsWrongQuantity}}— Whether quantity issue was reported{{.Irregularities[].ProductName}}— Product name{{.Irregularities[].InternalOrderProductNumber}}— Product number{{.Irregularities[].WrongQuantity.Ordered}}— Expected quantity{{.Irregularities[].WrongQuantity.Received}}— Actual quantity received{{.Irregularities[].Images[]}}— Associated images
Images:
{{.Images[]}}— Report images uploaded by recipient
Attachment functions (email only)
{{.AttachImage .SomeImage}}— Attach image for email{{.AttachImageInline .SomeImage}}— Embed image inline in email
Troubleshooting
Notifications not sending
Check configuration:
- Verify SMS/Email service configuration in system settings
- Ensure notification configuration is activated
- Confirm expr conditions are syntactically correct
- Test conditions with sample data
Verify recipients:
- Check that recipients have valid email/phone numbers
- Ensure recipient types are correctly configured
- Verify custom contacts are properly formatted
Template issues:
- Validate template syntax (case-sensitive field names)
- Test templates with known data
- Check for typos in variable names
Customers not receiving messages
Email issues:
- Check spam/junk folders
- Verify email addresses are valid and not blocked
- Monitor email service delivery reports
- Test with different email providers
SMS issues:
- Check SMS delivery windows and timing restrictions
- Verify phone number formats (include country codes)
- Confirm SMS service provider reputation
- Test with different mobile carriers
Condition expression errors
Syntax validation:
- Use the expr language documentation for reference
- Ensure conditions return boolean values
- Test expressions with mock data
- Use parentheses for complex logic
Common mistakes:
// Incorrect: Assignment instead of comparison
Order.Status = "delivered"
// Correct: Comparison operator
Order.Status == "delivered"
// Incorrect: Missing quotes for strings
Order.Status == delivered
// Correct: Quoted string values
Order.Status == "delivered"Performance issues
High volume notifications:
- Review conditions to avoid unnecessary triggers
- Stagger notifications for large batches
- Monitor system resources during peak times
- Use specific conditions rather than broad filters
Delivery monitoring:
- Track notification delivery rates
- Monitor failed delivery reports
- Set up alerts for delivery failures
- Review customer feedback regularly
- Use the API to programmatically access delivery logs
What’s next
- Settings → Integrations & Webhooks — push events to your own systems.
- Settings — overview.