Bài viết này giới thiệu các mẫu (template) mà EzyDelivery sử dụng, mỗi mẫu dùng ở đâu, có cấu trúc như thế nào và cách tùy chỉnh để file Excel xuất ra hoặc tin nhắn gửi cho khách hàng đúng với nhu cầu của bạn.
EzyDelivery dùng 2 loại mẫu:
Loại mẫuKiểu (`type`)Định dạng nội dungDùng cho
Mẫu trường dữ liệu xuấtEXPORTABLE_DATA_FIELDSJSONQuy định các cột của file Excel khi xuất mã vận đơn, bao hàng, khách hàng được phân chia mã đơn.
Mẫu tin nhắn OAOA_RESPONSE_MESSAGEVăn bản hoặc ThymeleafNội dung tin nhắn gửi cho khách hàng qua OA (ví dụ Zalo OA): báo mã vận đơn mới, tra cứu mã vận đơn, theo dõi chuyển phát nhanh, báo công nợ.
Mỗi mẫu được xác định bởi cặp kiểu + tên mẫu (templateName). EzyDelivery tìm mẫu theo đúng cặp này, vì vậy không được đổi tên của các mẫu mặc định.

Mẫu được tạo tự động

Khi plugin EzyDelivery (admin) khởi động, hệ thống tự tạo các mẫu mặc định nếu chưa có. Điều này có nghĩa là:
  • Bạn có thể sửa nội dung mẫu mặc định, nội dung đã sửa sẽ được giữ nguyên sau khi khởi động lại.
  • Nếu bạn xóa một mẫu mặc định, lần khởi động tiếp theo hệ thống sẽ tạo lại mẫu đó với nội dung gốc.
  • Hai mẫu tin nhắn new_customer_message và payment_message không được tạo tự động, bạn cần tự tạo nếu muốn dùng (xem phần Các mẫu tin nhắn OA).
Các mẫu được xem, sửa và tạo mới qua plugin EzySupport (xem phần tiếp theo).

Cập nhật mẫu qua EzySupport

Trang quản trị cần cài plugin EzySupport. Các mẫu nằm ở menu Các mẫu của EzySupport (/ezysupport/templates).
Screenshot 2026-10-09 at 10.30.26.png

Tìm mẫu

  1. Vào Các mẫu (/ezysupport/templates).
  2. Ở ô Kiểu, chọn EXPORTABLE_DATA_FIELDS hoặc OA_RESPONSE_MESSAGE. Có thể mở thẳng đường dẫn đã lọc sẵn: /ezysupport/templates?type=EXPORTABLE_DATA_FIELDS.
  3. Gõ tên mẫu (ví dụ delivery_order_code) vào ô Từ khoá để lọc nhanh.
Mỗi dòng trong danh sách có các nút xem, sửa và xóa ở cột cuối.

Sửa mẫu có sẵn

  1. Bấm vào tên mẫu hoặc biểu tượng sửa để mở trang chi tiết, rồi bấm Sửa (/ezysupport/templates/{id}/edit).
  2. Sửa ô Nội dung:
    • Mẫu EXPORTABLE_DATA_FIELDS: sửa mảng JSON các cột.
    • Mẫu OA_RESPONSE_MESSAGE: sửa nội dung tin nhắn.
  3. Bấm Cập nhật.
Khi sửa mẫu có sẵn, giữ nguyên các ô sau:
ÔLý do
Tên mẫuEzyDelivery tìm mẫu theo tên. Đổi tên thì hệ thống không tìm thấy mẫu, và lần khởi động sau sẽ tạo lại một mẫu mặc định mới.
KiểuĐổi kiểu cũng làm hệ thống không tìm thấy mẫu. Riêng mẫu được chọn cho đại lý, nếu đổi kiểu thì đại lý quay về dùng mẫu mặc định.
Kiểu tiêu đề và nội dungMẫu EXPORTABLE_DATA_FIELDS là JSON. Mẫu track_shipment_message là THYMELEAF. Đổi kiểu này làm nội dung được hiểu sai.
Ô Tiêu đề chỉ để hiển thị trong danh sách và trong ô chọn mẫu ở trang chi tiết đại lý, có thể đổi thoải mái.

Xem trước mẫu tin nhắn

Với mẫu OA_RESPONSE_MESSAGE, bạn có thể xem trước nội dung tin nhắn trước khi lưu:
  1. Ở ô Các tham số, nhập giá trị thử cho các biến dưới dạng JSON, ví dụ:
    {
         "vocative": "anh",
         "displayName": "Nguyễn Văn A",
         "deliveryOrderCodes": "7712345678n7712345679",
         "totalWeight": "2.5",
         "shippingRate": "30,000 VND",
         "totalShippingCost": "75,000 VND"
       }
    
  2. Bấm Xem trước ở phía trên ô nội dung để xem tin nhắn sau khi chèn biến. Bấm Trình soạn thảo để quay lại sửa.
Ô Các tham số chỉ dùng để xem trước, không ảnh hưởng tới tin nhắn thật.

Tạo mẫu mới

Dùng khi cần tạo mẫu riêng cho đại lý, hoặc tạo các mẫu tin nhắn không có sẵn (new_customer_message, payment_message).
  1. Ở trang Các mẫu, bấm Thêm mới.
  2. Điền các ô:
    ÔMẫu cột Excel cho đại lýMẫu tin nhắn OA
    Tên mẫuTên mới, chưa trùng, ví dụ agency_hn_delivery_order_codeĐúng tên hệ thống cần, ví dụ new_customer_message
    KiểuEXPORTABLE_DATA_FIELDSOA_RESPONSE_MESSAGE
    Kiểu tiêu đề và nội dungJSONVăn bản thường, hoặc THYMELEAF nếu cần vòng lặp
    Tiêu đềTên dễ nhận biết, ví dụ Mã vận đơn - Đại lý Hà NộiTên dễ nhận biết
    Nội dungMảng JSON các cộtNội dung tin nhắn
    ÔMẫu cột Excel cho đại lýMẫu tin nhắn OA
    Tên mẫuTên mới, chưa trùng, ví dụ agency_hn_delivery_order_codeĐúng tên hệ thống cần, ví dụ new_customer_message
    KiểuEXPORTABLE_DATA_FIELDSOA_RESPONSE_MESSAGE
    Kiểu tiêu đề và nội dungJSONVăn bản thường, hoặc THYMELEAF nếu cần vòng lặp
    Tiêu đềTên dễ nhận biết, ví dụ Mã vận đơn - Đại lý Hà NộiTên dễ nhận biết
    Nội dungMảng JSON các cộtNội dung tin nhắn
  3. Bấm Lưu.
Mẹo: để tạo mẫu cột Excel cho đại lý nhanh, mở mẫu mặc định (delivery_order_code hoặc product_package), sao chép toàn bộ nội dung, rồi dán vào mẫu mới và chỉnh sửa.

Xóa mẫu

Bấm biểu tượng thùng rác ở dòng của mẫu trong danh sách.
  • Xóa mẫu mặc định: lần khởi động sau, hệ thống tạo lại mẫu với nội dung gốc. Đây cũng là cách nhanh để khôi phục mẫu mặc định sau khi sửa sai.
  • Xóa mẫu đang được chọn cho đại lý: đại lý tự quay về dùng mẫu mặc định.
  • Xóa new_customer_message hoặc payment_message: khách hàng sẽ không nhận được tin trả lời trong các trường hợp tương ứng.

Khi nào thay đổi có hiệu lực

  • Mẫu cột Excel: được nạp khi mở trang có nút xuất. Sau khi sửa mẫu, tải lại trang Các bao hàng, Các phương tiện, Phân chia mã đơn hoặc trang vận đơn trên website đang mở, rồi xuất lại.
  • Mẫu tin nhắn OA: áp dụng cho tin nhắn gửi đi tiếp theo.

Các mẫu trường dữ liệu xuất

Danh sách mẫu

Tên mẫuTiêu đề mặc địnhDùng ở
delivery_order_codeDelivery order code exportable fieldsFile Excel các mã vận đơn (khai báo hải quan).
product_packageProduct package exportable fieldsFile Excel các bao hàng (khai báo hải quan).
order_code_allocation_customerOrder code allocation customer exportable fieldsFile Excel danh sách khách hàng được phân chia mã đơn.
user_delivery_order_codeUser delivery order code exportable fieldsFile Excel mã vận đơn mà khách hàng tự xuất trên website.

Nơi xuất file

Mã vận đơn và bao hàng (delivery_order_code và product_package) luôn được xuất cùng lúc: mỗi lần bấm xuất, trình duyệt sẽ tải về 2 file, một file mã vận đơn và một file bao hàng. Nút xuất có ở:
  • Các bao hàng (/ezydelivery/product-packages): chọn các bao hàng rồi bấm Xuất các mã vận đơn ra Excel.
  • Các phương tiện: chọn các phương tiện rồi bấm Xuất các mã vận đơn ra Excel, hoặc bấm biểu tượng Excel ở từng dòng. Khi xuất cho đúng một phương tiện, tên file được thêm tiền tố là biển số xe, ví dụ 29C12345_D-20261009-120.xlsx.
  • Các đại lý → Các bao hàng của đại lý: chọn các bao hàng rồi bấm Xuất các mã vận đơn ra Excel.
Khách hàng được phân chia mã đơn (order_code_allocation_customer): vào Phân chia mã đơn (/ezydelivery/allocate-delivery-order-codes), bấm Xuất ra Excel ở danh sách khách hàng. Nút này chỉ hiển thị với tài khoản có quyền truy cập API xuất dữ liệu.
Mã vận đơn của khách hàng (user_delivery_order_code): khách hàng đăng nhập website, vào trang danh sách vận đơn của tài khoản và bấm Xuất ra Excel.

Cấu trúc mẫu

Nội dung mẫu là một mảng JSON. Mỗi phần tử là một cột trong file Excel, thứ tự các phần tử chính là thứ tự các cột.
[
  {
    "title": "PACKAGE CODE",
    "field": "packageLabel",
    "defaultValue": ""
  },
  {
    "title": "CREATED AT",
    "field": "createdAt",
    "defaultValue": "",
    "dateTimeFormat": "YYYY-MM-DD HH:mm:ss"
  }
]
Thuộc tínhBắt buộcÝ nghĩa
titleCóTiêu đề cột, nằm ở dòng đầu tiên của file.
fieldCóĐường dẫn tới dữ liệu cần lấy. Dữ liệu lồng nhau được nối bằng dấu chấm, ví dụ product.productName, receiver.phoneNumber.
defaultValueCóGiá trị dùng khi dữ liệu trống hoặc field để trống.
dateTimeFormatKhôngĐịnh dạng ngày giờ cho các trường thời gian, theo cú pháp của thư viện moment, ví dụ YYYY-MM-DD HH:mm:ss, DD/MM/YYYY.
Một số mẹo:
  • Cột có giá trị cố định: để field trống và đặt giá trị vào defaultValue. Ví dụ mẫu product_package mặc định có cột SHIPPING METHOD luôn là VCN.
  • Cột để trống cho người dùng tự điền: để cả field và defaultValue trống. Ví dụ cột PRODUCT NAME trong mẫu delivery_order_code mặc định.
  • Bỏ cột: xóa phần tử tương ứng khỏi mảng.
  • Đổi tên cột: chỉ sửa title, giữ nguyên field.
  • Giá trị 0 cũng được coi là trống, nên cột số lượng, trọng lượng nên có defaultValue là "0".
  • Nội dung phải là JSON hợp lệ (dùng dấu nháy kép, không có dấu phẩy thừa ở phần tử cuối). Nếu JSON sai, trang chứa nút xuất sẽ bị lỗi script và không xuất được file.

Các trường thường dùng

Mẫu delivery_order_code:
`field`Dữ liệu
orderCodeMã vận đơn của người gửi.
orderIdText12Mã vận đơn phía người nhận.
productPackage.packageLabelMã bao hàng chứa mã vận đơn.
product.productNameTên sản phẩm.
product.weightInKgTrọng lượng (kg).
order.totalProductQuantitySố lượng sản phẩm.
order.formattedTotalAmountMoneyGiá trị hàng đã định dạng.
from, toNơi gửi, nơi nhận.
warehouse.addressShort, warehouse.nameAndAddressDetailsĐịa chỉ kho (rút gọn, chi tiết).
receiver.fullName, receiver.address, receiver.phoneNumberTên, địa chỉ, số điện thoại khách hàng.
district, province, recipientNameQuận/huyện, tỉnh/thành phố, tên người nhận.
Mẫu product_package:
`field`Dữ liệu
packageLabelMã bao hàng.
numberOfProductsSố mã vận đơn trong bao.
formattedWeightInKgTrọng lượng bao (kg).
createdAtThời gian tạo bao (nên kèm dateTimeFormat).
Mẫu order_code_allocation_customer:
`field`Dữ liệu
customerCodeMã khách hàng.
numberOfDeliveryOrdersSố mã vận đơn.
totalWeightInKgTổng trọng lượng (kg).
Mẫu user_delivery_order_code:
`field`Dữ liệu
orderCode, trackingIdMã vận đơn người gửi, mã theo dõi phía người nhận.
productName, userEnteredProductNameTên sản phẩm, tên sản phẩm khách hàng tự nhập.
quantity, userEnteredQuantitySố lượng, số lượng khách hàng tự nhập.
weightInKg, notesTrọng lượng (kg), ghi chú.
status, statusGroupTrạng thái, nhóm trạng thái.
estimatedDomesticWarehouseArrivalTime, estimatedReceiptTime, atReceivingWarehouseTime, exitReceivingWarehouseTimeCác mốc thời gian (nên kèm dateTimeFormat).
Danh sách đầy đủ có trong nội dung các mẫu mặc định. Khi cần thêm trường khác, hãy sao chép mẫu mặc định rồi chỉnh sửa từ đó.

Mẫu riêng cho từng đại lý

Mỗi đại lý có thể xuất file theo cột riêng, khác với mẫu mặc định, cho mã vận đơn và bao hàng.
  1. Vào EzySupport → Các mẫu và tạo mẫu mới (xem phần Tạo mẫu mới) với kiểu EXPORTABLE_DATA_FIELDS, tên mẫu khác với các tên mặc định (ví dụ agency_hn_delivery_order_code), nội dung JSON theo cấu trúc ở trên. Nên tạo 2 mẫu: một cho mã vận đơn và một cho bao hàng.
  2. Vào Các đại lý → Chi tiết đại lý.
  3. Ở ô Mẫu trường dữ liệu xuất mã vận đơn và Mẫu trường dữ liệu xuất bao hàng, gõ tên mẫu để tìm và chọn. Ô chỉ gợi ý các mẫu kiểu EXPORTABLE_DATA_FIELDS.
  4. Bấm Lưu.
Để trống một ô (hiển thị Mặc định) nghĩa là đại lý dùng mẫu mặc định cho loại dữ liệu đó.
Mẫu của đại lý được áp dụng ở:
  • Các đại lý → Các bao hàng của đại lý.
  • Các bao hàng, khi tài khoản quản trị đang đăng nhập là thành viên của đại lý.
Trang Các phương tiện luôn dùng mẫu mặc định.
Nếu mẫu đã chọn bị xóa hoặc bị đổi sang kiểu khác, hệ thống tự quay về dùng mẫu mặc định.

Tên file xuất

Tên file được cấu hình ở Quản lý vận chuyển → Cài đặt (/ezydelivery/settings), phần Nhập mã vận đơn.
TrườngMặc địnhBiến có thể dùng
Mẫu tên tập tin các mã vận đơn khai báo hải quanD--, ,
Mẫu tên tập tin các bao hàng khai báo hải quanP--, ,
Mẫu tên tập tin các khách hàng phân chia mã đơnOrder-Code-Allocation-Customer--, ,
Mẫu tên tập tin các mã vận đơn của khách hàngUser-Delivery-Order-Code--, ,
  • có dạng YYYYMMDD, ví dụ 20261009.
  • có dạng YYYYMMDD_HH_mm_ss, ví dụ 20261009_14_30_05.
  • Biến đếm số mã vận đơn ở dòng đầu là (không có chữ y), khác với ở dòng cuối. Hãy gõ đúng tên biến của từng dòng.
  • Đuôi .xlsx được tự động thêm vào, không cần ghi trong mẫu.

Các mẫu tin nhắn OA

Các mẫu này dùng khi EzyDelivery được kết nối với OA (ví dụ Zalo OA), để tự trả lời hoặc chủ động gửi tin nhắn cho khách hàng.

Danh sách mẫu

Tên mẫuTạo tự độngKhi nào được gửi
new_customer_messageKhôngKhách hàng nhắn số điện thoại hoặc email đã đăng ký nhưng chưa có phần hàng nào được phân chia tại kho.
new_delivery_order_codes_messageCóKhách hàng nhắn số điện thoại hoặc email và đã có phần hàng được phân chia tại kho. Cũng được gửi chủ động khi có phần hàng mới cho khách hàng. Tin nhắn trả lời kèm ảnh QR thanh toán.
payment_messageKhôngDùng thay cho new_delivery_order_codes_message khi nội dung khách hàng nhắn là một lệnh thanh toán.
search_delivery_order_code_messageCóKhách hàng nhắn # kèm mã vận đơn (ví dụ #7712345678) hoặc nhắn một mã vận đơn dạng số dài, để tra cứu trạng thái.
track_shipment_messageCóKhách hàng nhắn lệnh theo dõi chuyển phát nhanh, mặc định là /cpn.
outstanding_balance_notice_messageCóGửi thông báo công nợ cho khách hàng.
delivery_order_codes_messageCóĐược tạo sẵn, hiện không có luồng nào trong EzyDelivery tự gửi mẫu này.
new_delivery_order_itemCóĐược tạo sẵn, hiện không có luồng nào trong EzyDelivery tự gửi mẫu này.
Nếu hệ thống cần gửi một mẫu mà mẫu đó không tồn tại (ví dụ chưa tạo new_customer_message), khách hàng sẽ không nhận được tin trả lời. Vì vậy nên tạo đủ new_customer_message và payment_message ngay khi bật OA.

Cú pháp nội dung

Mẫu tin nhắn có 2 dạng.
Văn bản thường (mặc định): chèn biến bằng , xuống dòng bằng n.
Hello  ! Below are your new delivery order codes:

The total weight is: .
Biến thời gian có thể kèm định dạng theo cú pháp hoặc , ví dụ .
Thymeleaf: đặt kiểu nội dung (contentType) là THYMELEAF khi cần lặp qua danh sách hoặc dùng bản dịch. Mẫu track_shipment_message mặc định dùng dạng này:
<th:block th:each="shipment : ">
Tracking ID: [[]]
Current location: [[]]
Status: [[#{}]]
</th:block>
Các bản dịch #{...} dùng ngôn ngữ mặc định của website.

Các biến thường dùng

BiếnCó trong mẫuÝ nghĩa
displayName, username, phoneHầu hết các mẫuTên hiển thị, tên đăng nhập (mã khách hàng), số điện thoại.
vocative, customerCodeCác mẫu gửi cho khách hàng đã có hồ sơDanh xưng, mã khách hàng (lấy từ thông tin khách hàng, có thể trống nếu chưa khai báo).
deliveryOrderCodesnew_delivery_order_codes_message, payment_messageDanh sách mã vận đơn, mỗi mã một dòng.
totalWeight, shippingRate, totalShippingCostnew_delivery_order_codes_message, payment_messageTổng trọng lượng, đơn giá vận chuyển, tổng tiền.
websiteUrlnew_delivery_order_codes_message, payment_message, search_delivery_order_code_messageĐịa chỉ website.
deliveryOrderCode, statusGroupsearch_delivery_order_code_messageMã vận đơn được tra cứu, nhóm trạng thái hiện tại.
estimateDeliveryDate, estimatedReceiptDate, exitReceivingWarehouseDatesearch_delivery_order_code_messageCác mốc ngày dự kiến giao, dự kiến nhận, rời kho nhận.
shipmentstrack_shipment_messageDanh sách lịch sử chuyển phát nhanh, mỗi phần tử có trackingId, location, status, deliveryServiceName, expectedDeliveryDate, ...
totalDebtIncludeIsoCodeoutstanding_balance_notice_messageTổng công nợ kèm mã tiền tệ.
Nội dung mặc định của các mẫu là tiếng Anh. Nên dịch lại sang ngôn ngữ của khách hàng trước khi đưa vào sử dụng.

Kiểm tra lại

  • [ ] Các mẫu EXPORTABLE_DATA_FIELDS có nội dung JSON hợp lệ, đúng thứ tự cột mong muốn.
  • [ ] Các đại lý cần file riêng đã được chọn mẫu ở trang chi tiết đại lý.
  • [ ] Mẫu tên tập tin trong Cài đặt dùng đúng tên biến của từng dòng.
  • [ ] Đã tạo new_customer_message và payment_message nếu dùng OA.
  • [ ] Các mẫu tin nhắn OA đã được dịch sang ngôn ngữ của khách hàng.
Bạn có thể kiểm tra nhanh bằng cách chọn một bao hàng ở trang Các bao hàng, bấm Xuất các mã vận đơn ra Excel và mở 2 file vừa tải về để xem các cột.