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
Navigation
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:
| 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"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
- Name your notification for easy management
- Activate immediately - starts sending for matching events
- Review settings before final activation
Best Practices
Start Simple
- Begin with core notifications: Order Created, Dispatched, Delivered
- Add arrival notifications and pickup confirmations
- 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 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
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
Related Documentation
- Notifications Log API - Retrieve and search notification logs via API
- Track & Trace Setup - Configure customer tracking portal
- Customer Management - Set up customer contacts
- For Receivers Guide - Customer perspective on notifications
Support
For advanced configuration, API integration, or multi-language support, contact your account manager or access support through Settings → Support.