---
title: "Thông báo đơn hàng Shopify đến điện thoại chỉ trong vài giây"
description: "Đưa webhook của Shopify thẳng về điện thoại: thông báo lặng lẽ cho mọi đơn, to hơn cho giỏ hàng lớn, và một cuộc gọi khi có hoàn tiền hay huỷ đơn cần đến bạn."
date: 2026-09-09
author: Nooc
authorAvatarLink: /images/avatars/nooc.webp
authorLink: https://nooc.me
tags:
  - Shopify
  - thông báo đơn hàng
  - cảnh báo thương mại điện tử
  - thông báo webhook
  - kinh doanh nhỏ
---

# Thông báo đơn hàng Shopify đến điện thoại chỉ trong vài giây

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](https://apps.apple.com/app/apple-store/id6743597198?pt=128151925&ct=blog-shopify-order-notifications-vi&mt=8) hoặc [lấy trên Google Play](https://play.google.com/store/apps/details?id=one.echobell.echobellandroid), rồi đặt một đơn thử và xem nó tới trước cả email xác nhận.

---

## Nội dung liên quan

- [Cảnh báo thanh toán Stripe](/vi/blog/stripe-payment-alerts)
- [Tài liệu về trigger webhook](/vi/docs/webhook)
- [Tham khảo hệ thống template](/vi/docs/template)
- [Tham khảo điều kiện kênh](/vi/docs/conditions)
- [Hướng dẫn cho lập trình viên về chống mệt mỏi vì cảnh báo](/vi/blog/fix-alert-fatigue-developer-guide)
