Skip to Content
Welcome to Zendera Knowledge Hub
GuidesFor DispatchersSMS & Email (Add-on)

SMS & Email Notifications (Add-on)

Add-on Feature

SMS & Email Notifications is an add-on feature that enables automated communication with customers throughout the delivery process via SMS and email messages.

Set up automated notifications to keep customers informed at every stage of their delivery journey.

Key Benefits

Automated Communication

  • Trigger-based messaging for key delivery events
  • Professional templates with your branding
  • Multi-channel delivery (SMS and email)

Enhanced Customer Experience

  • Proactive delivery updates
  • Reduced support inquiries
  • Professional, branded communication

Access notification settings through: Settings → Notifications → Notification Wizard

Overview

Zendera’s notification system allows you to automatically send emails and SMS messages when specific events occur in your system. Notifications are triggered by changes to orders, order locations, and track & trace reports.

Event-Driven Notifications

Notifications are triggered by specific events in your system, allowing for real-time communication with customers and stakeholders throughout the delivery process.

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.

Track & Trace Integration

This event type requires the Track & Trace add-on feature to be enabled in your system.

Order Status Reference

Available Order Statuses

These are all the possible order status values that can be used in notification conditions and templates.

Order Status Values

The following status values are available for use in notification conditions and template variables:

StatusDescriptionTypical Use Case
unassignedOrder created but no driver assignedInitial order confirmation notifications
plannedOrder assigned to driver but not yet startedDispatch planning notifications
dispatchedDriver has started the order routeCustomer notification of dispatch
in_transitDriver is en route between locationsProgress update notifications
arrivedDriver has arrived at pickup/delivery locationArrival notifications for recipients
deliveredOrder delivery completed successfullyFinal delivery confirmation
completeEntire order lifecycle finishedFinal completion notifications
cancelledOrder has been cancelledCancellation 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"

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

Recipient Types

Flexible Recipient Targeting

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

Prerequisites

Before setting up notifications:

  • Administrative access to Zendera TMS
  • SMS service configured (if using SMS)
  • Email service configured (if using email)

Setting Up Notifications

The Notification Wizard guides you through four simple steps to create automated notifications.

Step 1: Choose Notification Type

Order Lifecycle Notifications

  • Order Created - Immediate confirmation when order is placed
  • Order Dispatched - Driver assigned and en route notification
  • Arrived for Pickup - Driver at pickup location alert
  • Pickup Completed - Goods collected confirmation
  • Arrived for Delivery - Driver at delivery location alert
  • Delivery Completed - Final delivery confirmation

Exception & Deviation Notifications (Add-on Feature)

Add-on Feature

Deviation reporting is an add-on feature that requires Track & Trace to be enabled. This enhanced functionality includes photo documentation and detailed exception reporting.

Exception Notifications (requires Track & Trace)

  • Damage Reported - Package damage documentation alerts
  • Quantity Discrepancy - Wrong quantity notifications
  • Missing Items - Missing shipment alerts

Step 2: Set Conditions with Expr

Use expr language  expressions to filter when notifications are sent. Conditions must evaluate to a boolean value.

Smart Filtering

Expr conditions allow you to create sophisticated rules for when notifications should be sent, ensuring customers only receive relevant messages.

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"

Step 3: Customize Messages

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"}}

Step 4: Choose Recipients and Delivery Method

Who receives notifications:

  • Order Customer (primary contact)
  • Pickup Contact (pickup location)
  • Delivery Contact (delivery location)
  • Custom contacts (manually added)

Delivery methods:

  • SMS: Fast, immediate delivery
  • Email: Detailed information with formatting
  • Both: Maximum coverage

Step 5: Activate Notification

  1. Name your notification for easy management
  2. Activate immediately - starts sending for matching events
  3. Review settings before final activation

Best Practices

Start Simple

  1. Begin with core notifications: Order Created, Dispatched, Delivered
  2. Add arrival notifications and pickup confirmations
  3. Enable exception handling for quality control

Message Guidelines

  • SMS: Under 160 characters, essential info only
  • Email: Professional subject lines, clear structure, company branding
  • Both: Use customer names and order details for personalization

Timing Considerations

  • Immediate: Order confirmations, critical alerts
  • Real-time: Arrival notifications, status changes
  • Scheduled: Delivery reminders, follow-ups

Complete Template Examples

Real-World Templates

These examples show complete notification templates using actual field names and conditional logic.

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 delivered

Email 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

Understanding Data Flow

Understanding how data objects relate to each other helps create more effective notification templates.

  • 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

Advanced Features

Track & Trace Report Notifications

Add-on Feature Required

Track & Trace report notifications require the Track & Trace add-on feature to be enabled.

When customers submit delivery reports through the track & trace system, additional data becomes available:

Report Data:

  • {{.CreatedAt}} - Report creation timestamp
  • {{.TrackTraceUUID}} - Unique track & trace identifier
  • {{.Comment}} - Recipient’s comment
  • {{.OrganizationLogo}} - Company logo attachment

Irregularities:

  • {{.Irregularities[].Comment}} - Irregularity comment
  • {{.Irregularities[].IsDamaged}} - Whether damage was reported
  • {{.Irregularities[].ProductName}} - Product name
  • {{.Images[]}} - Report images uploaded by recipient

Full Variable Reference

For a complete list of all available template variables, see the complete template variable reference section below.

Troubleshooting

Common Issues

Most notification issues stem from configuration errors or missing data. Follow this troubleshooting guide systematically.

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 Notifications Log API to programmatically access delivery logs

Complete Template Variable Reference

Comprehensive Field Reference

This section provides the complete list of all available template variables for advanced notification design.

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

Support

For advanced configuration, API integration, or multi-language support, contact your account manager or access support through Settings → Support.

Last updated on