Tích hợp Viettel Post vào EzyDelivery
Back to ezydeliveryBài viết này hướng dẫn cách kết nối EzyDelivery với Viettel Post để tạo đơn chuyển phát nhanh trực tiếp từ trang quản trị, nhận mã vận đơn Viettel Post, và tự động cập nhật trạng thái đơn khi Viettel Post giao hàng.
Sau khi tích hợp xong, luồng làm việc sẽ như sau:
- Nhân viên tạo đơn giao hàng trong EzyDelivery với phương thức giao hàng Chuyển phát nhanh và chọn dịch vụ Viettel Post.
- EzyDelivery gửi đơn sang Viettel Post, tự chọn gói cước rẻ nhất phù hợp, nhận về mã vận đơn Viettel Post và in tem.
- Trong quá trình giao, Viettel Post gọi lại (webhook) về hệ thống, EzyDelivery cập nhật trạng thái đơn theo thời gian thực.
Chuẩn bị
Trước khi cấu hình, cần có:
| Thứ cần có | Ghi chú |
|---|---|
| Tài khoản Viettel Post dành cho đối tác | Đăng ký tại <https://partner.viettelpost.vn>.Tài khoản này phải có ít nhất một kho lấy hàng (địa chỉ gửi hàng) đã khai báo trên Viettel Post. |
| Đã hoàn thành phần Cài đặt ban đầu cho EzyDelivery | Đặc biệt là quốc gia nhận (Việt Nam) có đủ tỉnh/thành phố, quận/huyện, phường/xã, và kho nhận hàng có địa chỉ đầy đủ. |
Tiền tệ VND đã được kích hoạt | Viettel Post chỉ nhận tiền VND. Nếu đơn dùng tiền tệ khác (ví dụ CNY), cần có tỉ giá quy đổi sang VND, nếu không đơn sẽ gửi thất bại. |
| Trang web (web plugin) truy cập được từ Internet | Để Viettel Post gọi lại cập nhật trạng thái đơn. |
Hai dịch vụ Viettel Post trong EzyDelivery
EzyDelivery cung cấp sẵn 2 dịch vụ Viettel Post, cách hoạt động giống nhau nhưng được cấu hình độc lập:
| Mã dịch vụ | Dùng khi nào |
|---|---|
VIETTEL_POST | Dịch vụ chính, dùng cho hầu hết trường hợp. |
VIETTEL_POST_SMALL | Dùng khi bạn có tài khoản Viettel Post thứ hai (ví dụ tài khoản riêng cho hàng nhỏ, hoặc kho lấy hàng khác) và muốn nhân viên chọn được giữa hai tài khoản khi tạo đơn. |
Nếu chỉ có một tài khoản Viettel Post, bạn chỉ cần cấu hình
VIETTEL_POST. Các bước dưới đây áp dụng giống nhau cho cả hai.Cấu hình dịch vụ Viettel Post
Vào Thương mại điện tử → Các dịch vụ vận chuyển (
/ecommerce/delivery-services), tìm dòng VIETTEL_POST và bấm sửa (hoặc mở thẳng /ecommerce/delivery-services/VIETTEL_POST/edit).Điền các ô như sau:
| Ô | Giá trị | Ghi chú |
|---|---|---|
| Tên | Viettel Post | Tên hiển thị trong ô chọn dịch vụ khi tạo đơn. Không được trùng tên với dịch vụ khác. |
| Phiên bản | v2 | Bắt buộc điền, để trống thì không gửi được đơn. |
| Đường dẫn dịch vụ | https://viettelpost.com.vn | Dùng để tạo đường dẫn tra cứu hành trình đơn cho khách hàng. |
| Đường dẫn API dịch vụ | https://partner.viettelpost.vn/v2 | Địa chỉ API của Viettel Post. Không thêm dấu / ở cuối. |
| Đường dẫn gọi lại | https://<tên-miền-web-của-bạn>/callback/VIETTEL_POST | Để ghi nhớ địa chỉ đã khai báo với Viettel Post (xem phần Cấu hình webhook). |
| Khoá máy khách | Một chuỗi bí mật do bạn tự đặt | Viettel Post sẽ gửi kèm chuỗi này mỗi lần gọi lại. EzyDelivery dùng nó để xác thực, bắt buộc điền nếu muốn nhận cập nhật trạng thái. |
| Tên đăng nhập | Tên đăng nhập tài khoản Viettel Post | Thường là số điện thoại. |
| Mật khẩu | Mật khẩu tài khoản Viettel Post | |
| Khoá bí mật | Để trống | Hệ thống tự điền sau khi đăng nhập thành công (xem lưu ý bên dưới). |
| Trạng thái | ACTIVATED | Chỉ dịch vụ đang ACTIVATED mới xuất hiện khi tạo đơn. |
Các ô còn lại (logo, ảnh bìa, tiền tệ phí vận chuyển, phí vận chuyển tối thiểu, giá trị hàng hoá mặc định, ...) không bắt buộc cho Viettel Post.
Bấm Lưu. Khi lưu, hệ thống sẽ đăng nhập thử vào Viettel Post bằng tên đăng nhập và mật khẩu vừa nhập:
- Nếu đúng: lưu thành công, token đăng nhập được lưu vào ô Khoá bí mật (hiển thị dạng ẩn).
- Nếu sai: hiện lỗi ở ô Tên đăng nhập và Mật khẩu, kiểm tra lại thông tin tài khoản và Đường dẫn API dịch vụ.
Về token đăng nhập
Token của Viettel Post có thời hạn. EzyDelivery lưu thời điểm hết hạn và tự đăng nhập lại bằng tên đăng nhập, mật khẩu đã lưu khi token sắp hết hạn, bạn không cần làm gì thêm. Vì vậy:
- Hãy dùng cách đăng nhập bằng tên đăng nhập + mật khẩu. Nếu chỉ nhập Khoá bí mật (token lấy từ trang đối tác Viettel Post), hệ thống không tự gia hạn được khi token hết hạn.
- Khi đổi mật khẩu tài khoản Viettel Post, nhớ cập nhật lại mật khẩu ở trang này.
- Khi sửa các ô khác, cứ để nguyên ô Mật khẩu và Khoá bí mật đang hiển thị dạng ẩn, hệ thống sẽ giữ giá trị cũ.
Đặt làm dịch vụ mặc định (tuỳ chọn)
Ở trang danh sách Các dịch vụ vận chuyển, có thể đặt
VIETTEL_POST làm dịch vụ mặc định. Dịch vụ mặc định sẽ được chọn sẵn khi tạo đơn giao hàng.Ánh xạ tiền tố đơn vị hành chính
Viettel Post nhận diện địa chỉ dựa trên văn bản, nên tên đơn vị hành chính cần có tiền tố quen thuộc như
TP., Q., P.. Khi gửi đơn, EzyDelivery ghép địa chỉ người nhận theo mẫu ánh xạ tiền tố của từng dịch vụ vận chuyển.Mẫu cho Viettel Post được tạo tự động khi plugin EzyDelivery (admin) khởi động, và hiển thị ở ô Ánh xạ giữa kiểu và tiền tố địa giới hành chính trên trang sửa dịch vụ. Nội dung mặc định:
[
{ "type": "PROVINCE", "prefix": "T." },
{ "type": "CITY", "prefix": "TP." },
{ "type": "DISTRICT_IN_CITY", "prefix": "Q." },
{ "type": "DISTRICT_IN_PROVINCE", "prefix": "H." },
{ "type": "TOWN_IN_PROVINCE", "prefix": "TX." },
{ "type": "WARD", "prefix": "X." },
{ "type": "WARD_IN_CITY", "prefix": "P." },
{ "type": "TOWN", "prefix": "TT." }
]
Mỗi dòng gồm:
-
type: loại đơn vị hành chính, khớp với loại bạn chọn khi tạo tỉnh/thành phố, quận/huyện, phường/xã trên trang quốc gia. -
prefix: tiền tố được thêm trước tên đơn vị khi gửi sang Viettel Post. Ví dụ phườngBến Nghécó loạiWARD_IN_CITYsẽ thànhP. Bến Nghé.
Thông thường không cần sửa mẫu này. Chỉ sửa khi Viettel Post báo không nhận diện được địa chỉ, hoặc khi bạn dùng thêm loại đơn vị hành chính khác. Nếu xoá mẫu, lần khởi động sau hệ thống sẽ tạo lại với nội dung mặc định.
Điều quan trọng hơn là dữ liệu đơn vị hành chính phải đúng: tỉnh, quận, phường của kho gửi hàng và người nhận cần được chọn đầy đủ, đúng loại, và tên đúng với tên mà Viettel Post đang dùng.
Cấu hình webhook trên Viettel Post
Để trạng thái đơn tự cập nhật, cần khai báo webhook trên trang đối tác Viettel Post (mục cấu hình webhook / đường dẫn nhận trạng thái đơn hàng):
| Ô trên Viettel Post | Giá trị |
|---|---|
| Đường dẫn (URL) | https://<tên-miền-web-của-bạn>/callback/VIETTEL_POST (với dịch vụ thứ hai là /callback/VIETTEL_POST_SMALL) |
| Token / Secret | Giống hệt giá trị ô Khoá máy khách đã điền ở trang cấu hình dịch vụ |
Một số điểm cần biết về webhook:
- Đường dẫn trên thuộc trang web (web plugin), không phải trang quản trị. Tên miền phải truy cập được từ Internet và nên dùng
https. - Mỗi lần nhận webhook, EzyDelivery kiểm tra token Viettel Post gửi kèm. Token không khớp Khoá máy khách sẽ bị từ chối với lỗi
Token: invalid. - EzyDelivery chỉ chấp nhận cập nhật cho đơn mà nó đã tạo và có mã vận đơn khớp với mã Viettel Post gửi về. Các đơn tạo trực tiếp trên trang Viettel Post sẽ bị bỏ qua (trả về
deliveryOrder: notFound).
Tạo đơn giao hàng qua Viettel Post
Khi khách hàng có yêu cầu giao hàng với phương thức Chuyển phát nhanh:
- Vào Các yêu cầu giao hàng (
/ezydelivery/shipping-requests) và mở yêu cầu cần giao. - Bấm Tạo vận đơn, kiểm tra Tổng số cân (kg).
- Ở ô Dịch vụ vận chuyển, chọn Viettel Post (chỉ hiện khi phương thức giao hàng là chuyển phát nhanh).
- Bấm Tạo hoặc Tạo và hoàn thành.
Khi gửi đơn, EzyDelivery tự xử lý các việc sau:
| Việc | Cách làm |
|---|---|
| Chọn gói cước | Hỏi Viettel Post tất cả gói cước phù hợp với địa chỉ gửi, địa chỉ nhận, khối lượng, kích thước, rồi chọn gói có giá cước thấp nhất. |
| Chọn kho lấy hàng | Dùng kho lấy hàng đầu tiên trong danh sách kho của tài khoản Viettel Post. |
| Loại hàng | Nếu tất cả sản phẩm là tài liệu thì gửi là thư/tài liệu, ngược lại gửi là hàng hoá. |
| Quy đổi tiền | Giá hàng và tiền thu hộ được quy đổi sang VND theo tỉ giá hiện có. |
| Thu hộ (COD) và người trả phí | Xác định theo bảng bên dưới. |
Cách xác định tiền thu hộ và người trả phí vận chuyển:
| Đơn đã thanh toán? | Người trả phí vận chuyển | Viettel Post thu của người nhận |
|---|---|---|
| Đã thanh toán | Người gửi | Không thu gì |
| Đã thanh toán | Người nhận | Chỉ thu phí vận chuyển |
| Chưa thanh toán | Người gửi | Chỉ thu tiền hàng (COD) |
| Chưa thanh toán | Người nhận | Thu cả tiền hàng và phí vận chuyển |
Kết quả:
- Thành công: đơn chuyển sang trạng thái Đã gửi yêu cầu, mã vận đơn Viettel Post được lưu làm mã vận đơn của đơn, và tem được in ngay. Các thông tin cước Viettel Post trả về (tổng cước, phí thu hộ, VAT, thời gian giao dự kiến, ...) được lưu kèm đơn.
- Thất bại: đơn chuyển sang trạng thái Gửi yêu cầu thất bại, nội dung lỗi Viettel Post trả về được lưu vào đơn để xem lại. Sau khi sửa nguyên nhân có thể gửi lại.
Cập nhật trạng thái đơn
Mỗi lần Viettel Post gọi webhook, EzyDelivery cập nhật trạng thái đơn, đồng thời lưu thêm tên và số điện thoại bưu tá, vị trí hiện tại, ngày giao dự kiến, ghi chú của Viettel Post. Nếu Viettel Post báo đơn đang chuyển hoàn, đơn được đánh dấu là đang hoàn hàng.
Bảng ánh xạ trạng thái Viettel Post sang trạng thái trong EzyDelivery:
| Mã Viettel Post | Trạng thái trong EzyDelivery |
|---|---|
-100 | Đã tạo yêu cầu |
100 | Đã nhận yêu cầu |
101 | Dịch vụ vận chuyển yêu cầu huỷ |
102 | Không lấy được hàng |
103 | Dịch vụ vận chuyển đang xử lý |
104 | Đang lấy hàng |
105 | Đã lấy hàng |
107 | Bị huỷ |
200 | Nhận từ bưu tá - Bưu cục gốc |
201 | Hủy nhập phiếu gửi |
202 | Sửa phiếu gửi |
300 | Khai thác đi |
400 | Khai thác đến |
500 | Giao bưu tá đi phát |
501 | Đã giao hàng |
502 | Chuyển hoàn bưu cục gốc |
503 | Khách yêu cầu huỷ |
504 | Bị trả lại |
505 | Thông báo trả hàng lỗi |
506 | Khách không có nhà |
507 | Khách cần đến bưu cục nhận |
508 | Đã yêu cầu giao lại |
509 | Chuyển tiếp bưu cục khác |
515 | Duyệt hoàn |
550 | Khách yêu cầu giao lại |
Mã trạng thái không có trong bảng sẽ được ghi nhận là không xác định.
Khi Viettel Post điều chỉnh số tiền thu hộ của đơn (ví dụ do khách hàng và bưu tá thống nhất lại), EzyDelivery cũng tự cập nhật lại tiền thu hộ của đơn theo giá trị mới.
Khách hàng có thể tra cứu hành trình đơn qua đường dẫn dạng:
https://viettelpost.com.vn/thong-tin-don-hang?peopleTracking=sender&orderNumber=<mã-vận-đơn>
Phần đầu của đường dẫn lấy từ ô Đường dẫn dịch vụ đã cấu hình.
Xử lý sự cố thường gặp
| Hiện tượng | Nguyên nhân thường gặp | Cách xử lý |
|---|---|---|
| Lưu cấu hình báo sai tên đăng nhập / mật khẩu | Sai tài khoản, hoặc sai Đường dẫn API dịch vụ | Kiểm tra đăng nhập trên trang Viettel Post. Kiểm tra URL API không có / ở cuối. |
| Không thấy Viettel Post khi tạo đơn | Dịch vụ chưa ACTIVATED, hoặc phương thức giao hàng không phải chuyển phát nhanh | Kích hoạt dịch vụ, kiểm tra lại phương thức giao hàng của yêu cầu. |
Gửi đơn thất bại với lỗi deliveryServiceNotSetup | Thiếu Phiên bản, Đường dẫn API dịch vụ hoặc chưa đăng nhập được | Điền đủ các ô và lưu lại cấu hình. |
Gửi đơn thất bại với lỗi noCurrencyVND | Chưa có tiền tệ VND | Kích hoạt tiền tệ VND. |
| Gửi đơn thất bại do không quy đổi được tiền | Thiếu tỉ giá từ tiền tệ của đơn sang VND | Thêm tỉ giá trong Thương mại điện tử. |
Gửi đơn thất bại với lỗi not matching viettel post delivery services | Viettel Post không nhận diện được địa chỉ gửi hoặc nhận, hoặc không có gói cước phù hợp | Kiểm tra tỉnh, quận, phường của kho và người nhận, kiểm tra mẫu ánh xạ tiền tố, kiểm tra khối lượng và kích thước sản phẩm. |
Gửi đơn thất bại với lỗi get store information from viettel post failed | Tài khoản Viettel Post chưa có kho lấy hàng | Tạo kho lấy hàng trên trang Viettel Post. |
| Trạng thái đơn không tự cập nhật | Chưa khai báo webhook, token không khớp Khoá máy khách, hoặc tên miền web không truy cập được từ Internet | Kiểm tra lại phần Cấu hình webhook. |