Mục lục
- Chọn những topic đáng để cắt ngang bạn
- Bước 1 — Tạo kênh
- Bước 2 — Thêm webhook trong Shopify
- Bước 3 — Chỉ đưa vào template những trường bạn thật sự đọc
- Bước 4 — Định tuyến theo topic bằng điều kiện
- Chỉ đánh thức tôi khi có đơn lớn
- Những gì cách này không làm
- Câu hỏi thường gặp
- Tôi có cần một ứng dụng Shopify để làm việc này không?
- Kho của tôi có thể xem đơn hàng mà không xem được trang quản trị Shopify không?
- Có nên đưa tên khách hàng vào thông báo không?
- Tôi có nhận được cuộc gọi khi bị đòi bồi hoàn không?
- Kết lại
- Nội dung liên quan
Email đơn hàng mặc định của Shopify đến vào lúc ứng dụng mail của bạn muốn đồng bộ, rơi vào một thư mục bạn đã đặt bộ lọc, và trông y hệt nhau dù đơn đó 12 euro hay 1.200 euro. Nếu chính bạn đang vận hành cửa hàng, đó là dạng tín hiệu sai.
Webhook giải quyết việc này. Shopify sẽ POST từng đơn hàng tới một URL do bạn chọn, và Echobell biến POST đó thành một thông báo mà độ to do bạn quyết định.
Chọn những topic đáng để cắt ngang bạn
Shopify gọi các loại sự kiện webhook là topic. Bốn cái sau đủ cho phần lớn cửa hàng do một người quán xuyến:
| Topic | Nghĩa là gì | Mức khẩn |
|---|---|---|
orders/create | Có đơn hàng được đặt. | Thường |
orders/paid | Thanh toán đã thành công. Dùng cái này nếu bạn chỉ quan tâm tới tiền thật sự đã về. | Thường |
orders/cancelled | Khách đã huỷ. Nên biết trước khi bạn đóng gói. | Nhạy cảm thời gian |
refunds/create | Đã hoàn tiền. | Nhạy cảm thời gian |
Hãy đăng ký orders/create hoặc orders/paid, đừng cả hai, trừ khi bạn thật sự muốn hai thông báo cho mỗi lần bán. Với hầu hết cửa hàng, orders/paid mới là cái trung thực.
Bước 1 — Tạo kênh
Tạo một kênh trong Echobell, đặt tên kiểu "Đơn hàng Shopify", sao chép URL webhook của nó và bật Chỉ POST. Shopify luôn gửi bằng POST.
Nếu bạn muốn một kênh riêng, to hơn, dành cho huỷ đơn và hoàn tiền, hãy tạo luôn bây giờ và đặt ở mức nhạy cảm thời gian.
Bước 2 — Thêm webhook trong Shopify
Trong trang quản trị Shopify, vào Cài đặt → Thông báo → Webhook → Tạo webhook. Chọn topic, đặt định dạng JSON, rồi dán URL kênh của bạn.
Shopify gửi một payload thử khi bạn lưu. Nếu điện thoại rung lên, đường đi đã thông.
Bước 3 — Chỉ đưa vào template những trường bạn thật sự đọc
Payload đơn hàng của Shopify rất dài — hơn một trăm trường cho mỗi đơn. Bạn chỉ cần vài cái:
Tiêu đề
Đơn mới #{{order_number}} · {{total_price}} {{currency}}
Nội dung
{{customer.first_name}} {{customer.last_name}}
{{line_items[0].title}}
line_items là một mảng, nên line_items[0] là món đầu tiên. Template của Echobell hỗ trợ truy cập theo chỉ số nhưng không có vòng lặp: một đơn ba món chỉ hiện món đầu và hết. Nếu điều đó quan trọng, hãy để số lượng ngay bên cạnh:
{{line_items[0].title}} · tổng {{line_items.length}} món
Khác với Stripe, Shopify gửi total_price dưới dạng chuỗi thập phân — "49.00" chứ không phải 4900 — nên nó hiển thị đúng mà không cần tính toán gì.
Bước 4 — Định tuyến theo topic bằng điều kiện
Nếu bạn trỏ nhiều topic vào cùng một kênh, Shopify sẽ cho biết đó là topic nào qua một header:
header["x-shopify-topic"] == "orders/paid"
Đó là cách gọn nhất để tách hành vi mà không phải tạo một webhook cho mỗi kênh trong trang quản trị.
Chỉ đánh thức tôi khi có đơn lớn
Đây là mô hình mà hầu hết chủ cửa hàng thật sự muốn: mọi đơn vào một kênh lặng lẽ, và chỉ những đơn vượt ngưỡng mới vào kênh ồn ào.
Tạo kênh thứ hai, đặt ở mức nhạy cảm thời gian, trỏ thêm một webhook orders/paid sang đó, rồi cho nó một điều kiện:
total_price > 500
Giờ thì một ngày bình thường chỉ là tiếng rì rầm nền, còn một đơn 900 euro là thứ bạn cảm nhận được.
Những gì cách này không làm
Không xác minh HMAC. Shopify ký từng webhook bằng header X-Shopify-Hmac-Sha256. Echobell không xác minh nó, nên URL kênh là thứ duy nhất giữ người lạ ở ngoài. Hãy giữ bí mật, để Chỉ POST luôn bật, và nếu một thông báo đơn hàng giả mạo có thể gây thiệt hại thật, hãy đặt endpoint của riêng bạn ở phía trước để xác minh HMAC rồi mới gọi sang Echobell.
Shopify có thể gửi cùng một webhook hai lần. Nó thử lại khi thất bại, và các lần thử lại không được khử trùng lặp. Hãy coi thông báo như lời nhắc đi xem đơn hàng, đừng coi là số đếm đơn. Trang quản trị Shopify mới là nguồn đúng.
Các topic tồn kho nhanh chóng trở nên ồn ào. inventory_levels/update kích hoạt ở mọi biến động tồn kho, kể cả những lần chính bạn chỉnh tay. Nếu muốn cảnh báo sắp hết hàng, hãy lọc thật chặt, không thì chưa tới trưa bạn đã thấy hối hận.
Câu hỏi thường gặp
Tôi có cần một ứng dụng Shopify để làm việc này không?
Không. Webhook trong Cài đặt → Thông báo đã có sẵn trong trang quản trị, không cần ứng dụng, không cần tài khoản đối tác, không cần viết mã.
Kho của tôi có thể xem đơn hàng mà không xem được trang quản trị Shopify không?
Có. Hãy chia sẻ kênh cho họ. Họ chỉ nhận được thông báo và không gì khác — không có quyền vào trang quản trị, cũng không có dữ liệu khách hàng ngoài những gì template của bạn đưa vào.
Có nên đưa tên khách hàng vào thông báo không?
Đó là lựa chọn của bạn, và đáng để cân nhắc có ý thức. Mọi thứ trong template đều hiện trên màn hình khoá. Thường thì mã đơn và tổng tiền đã đủ để bạn quyết định có xử lý hay không.
Tôi có nhận được cuộc gọi khi bị đòi bồi hoàn không?
Với các cửa hàng dùng Shopify Payments, tranh chấp đến qua topic disputes/create. Hãy trỏ nó vào một kênh gọi — đó là sự kiện đơn hàng duy nhất có kèm hạn chót.
Kết lại
Một webhook, một template, và thêm một điều kiện nếu bạn muốn phiên bản ồn ào. Mất khoảng năm phút, và nó thay thế thói quen bấm làm mới trang đơn hàng.
Tải Echobell cho iPhone hoặc lấy trên Google Play, rồi đặt một đơn thử và xem nó tới trước cả email xác nhận.