Nhắc lịch và chăm sóc khách theo mốc bằng n8n
Khách đăng ký rồi im lặng, lịch hẹn sắp tới mà không ai nhắc: những việc này hợp với workflow chạy theo lịch. Bài viết dựng từng bước một chuỗi chăm sóc theo mốc ngày và một luồng nhắc lịch hẹn, có bảng lưu trạng thái, chốt chặn gửi trùng và điểm dừng khi khách không muốn nhận. Đối chiếu tài liệu n8n bản 2.44.4 và ghi chú bản 2.45, kiểm tra tháng 10/2026.
Khách đăng ký rồi im lặng, lịch hẹn tới mà không ai nhắc
Một trung tâm đào tạo ghi lịch gọi lại khách vào sổ tay: tuần bận thì quên, tuần rảnh lại nhắn cùng một câu ba lần. Có khách đến khai giảng muộn vì không ai nhắc, có khách chặn trang vì bị nhắn quá nhiều. (Tình huống minh hoạ.)
Bài này dựng hai workflow: chăm sóc theo mốc (ngày 1, ngày 3, ngày 7 sau khi khách để lại thông tin) và nhắc lịch hẹn (trước một ngày và trước giờ hẹn). Phân loại khách nóng, ấm, lạnh đã có ở n8n cho Sales & CSKH; ở đây tập trung vào lịch, trạng thái và điểm dừng.
Chăm sóc khách theo mốc bằng n8n là gì?
Chăm sóc khách theo mốc bằng n8n là dùng workflow chạy theo lịch để đọc bảng trạng thái khách, chọn đúng mốc cần chạm hôm nay, gửi tin hoặc báo nhân viên, rồi ghi lại mốc kế tiếp; khách từ chối, đã mua hay hết khung được nhắn thì chuỗi dừng.
| Wait trong một execution | Schedule Trigger quét bảng | |
|---|---|---|
| Cách chạy | Dừng ở node Wait, chạy tiếp sau một khoảng, tới giờ đặt sẵn hoặc khi có webhook, form | Mỗi ngày một lượt, lấy các dòng đến hạn |
| Trạng thái nằm ở đâu | Trong execution đang chờ (lưu vào cơ sở dữ liệu nếu chờ từ 65 giây trở lên) | Trong bảng: nhìn là biết khách ở mốc nào |
| Giờ | Luôn dùng giờ máy chủ n8n, bỏ qua múi giờ của workflow | Theo múi giờ workflow, không có thì múi giờ instance |
| Hợp với | Chờ ngắn trong một luồng: nhắc trước giờ hẹn, chờ nhân viên xử lý | Chuỗi nhiều ngày, nhiều khách |
Nguồn: Wait node · Schedule Trigger · Workflow settings – Timezone
Bước 1. Chọn nơi lưu trạng thái và tạo bảng
| Nơi lưu | Hợp không? | Theo tài liệu |
|---|---|---|
| Data tables của n8n | Hợp: có sẵn, không cần cơ sở dữ liệu ngoài | Node Data Table có Get, Insert, Update, Upsert, If Row Exists…; tổng dung lượng mặc định 200 MiB mỗi instance; mặc định mọi thành viên project xem được |
| Google Sheets | Hợp khi đội sale cần xem, sửa trên bảng tính | Google giới hạn 60 lượt đọc và 60 lượt ghi mỗi phút cho mỗi người dùng; xem Google Sheets làm CRM |
Custom variables ($vars) | Không | Chỉ đọc trong workflow; chỉ có ở Cloud Pro, Enterprise, tự cài Business, Enterprise |
Tạo một data table tên cham_soc_khach với các cột dưới. Mỗi khách một dòng; workflow nhận khách mới (từ form, chatbot, quảng cáo) dùng Data Table → Upsert theo ma_khach để không tạo dòng trùng, đặt moc_tiep = D1 và ngay_moc_tiep = ngày mai.
ma_khach # mã ngẫu nhiên, không dùng số điện thoại làm mã
kenh # messenger / zalo_oa / email
tuong_tac_cuoi # lần cuối khách nhắn, bấm nút, trả lời (dùng để tính khung được nhắn)
trang_thai # dang-cham / da-mua / tam-dung / tu-choi
moc_tiep # D1 / D3 / D7 / xong
ngay_moc_tiep # dạng 2026-10-25
ngay_cham_cuoi # ngày đã chạm gần nhất, chống gửi trùng
lan_cham # số lần đã chạm
ngay_hen # ngày lịch hẹn hoặc khai giảng (nếu có)
gio_hen # giờ hẹn, dạng 09:00Nguồn: Data Table – Rows · Data tables · Custom variables
Bước 2. Đặt đúng múi giờ
Bản tự cài mặc định dùng giờ New York, nên lịch "8 giờ sáng" sẽ chạy lệch giờ Việt Nam. Trên n8n Cloud hoặc khi không sửa được máy chủ, mở Workflow Settings → Timezone chọn Asia/Ho_Chi_Minh. Bản tự cài thêm hai dòng sau vào tệp .env rồi khởi động lại (cách sửa tệp: Hướng dẫn cài n8n trên VPS):
# Tệp .env của n8n tự cài (xem bài cài n8n trên VPS)
GENERIC_TIMEZONE=Asia/Ho_Chi_Minh # múi giờ cho Schedule Trigger và biểu thức ngày
TZ=Asia/Ho_Chi_Minh # giờ hệ thống của container; node Wait dùng giờ máy chủ
# Chỉ khi chạy bản 2.36.0–2.44.x và muốn dùng bộ lập lịch bền (từ 2.45.0 đã bật mặc định):
# N8N_SCHEDULER_ENABLED=true$now, $today dùng múi giờ workflow, nếu không có thì GENERIC_TIMEZONE. Riêng node Wait luôn dùng giờ máy chủ, nên cần cả dòng TZ.
Nguồn: Workflow settings · Dates and times · Wait – giờ máy chủ
Bước 3. Workflow chăm sóc theo mốc
- Schedule Trigger: Trigger Interval = Days, giờ 8; hoặc Custom (Cron)
0 8 * * *(8:00 mỗi ngày). Workflow chỉ chạy theo lịch sau khi bấm Publish. - Data Table (Row → Get), Must Match = All Conditions:
trang_thaiEquals dang-cham vàngay_cham_cuoiNot Equals ngày hôm nay; bật Return All. Điều kiện thứ hai là chốt chặn gửi trùng nếu workflow lỡ chạy hai lần trong ngày. - If, kiểu Date & Time:
ngay_moc_tiep"is before or equal to" ngày hôm nay. Chỉ khách đến hạn đi tiếp; khách bị lỡ hôm trước vẫn được chạm hôm nay. - If thứ hai kiểm tra khung được nhắn của kênh dựa trên
tuong_tac_cuoi(phép so "is after"). Ngoài khung thì rẽ sang nhánh báo nhân viên, không để bot gửi. - Switch theo
moc_tiep: mỗi nhánh D1, D3, D7 một mẫu tin đã duyệt, mỗi mẫu một góc tiếp cận khác nhau. - Gửi qua kênh của khách: HTTP Request tới Messenger hoặc Zalo OA (Messenger, Zalo OA), hoặc Gmail, Send Email (Email tự động).
- Data Table (Row → Update) theo
ma_khach: ghingay_cham_cuoi, tănglan_cham, chuyểnmoc_tiepsang mốc sau; sau D7 thìxongvàtrang_thai= tam-dung.
Ngày hôm nay: {{ $today.toISODate() }}
Mốc kế tiếp sau 2 ngày: {{ $today.plus({days: 2}).toISODate() }}
Ngày mai (để nhắc hẹn): {{ $today.plus({days: 1}).toISODate() }}
Tăng số lần chạm: {{ Number($json.lan_cham || 0) + 1 }}Lưu ngày dạng 2026-10-25 để so sánh nhất quán; toISODate(), plus() là hàm Luxon mà n8n dùng.
| Mốc | Góc tiếp cận (ví dụ minh hoạ) | Ai gửi |
|---|---|---|
| D1 | Giải đáp ba băn khoăn khách hay hỏi nhất | Bot, nếu còn trong khung của kênh |
| D3 | Gửi một tài liệu, bài hướng dẫn hữu ích liên quan nhu cầu khách đã nêu | Bot hoặc nhân viên |
| D7 | Hỏi khách có muốn tư vấn viên gọi không; nói rõ sẽ không nhắn thêm nếu khách không cần | Nhân viên duyệt trước |
Nguồn: Schedule Trigger – cron · Data Table – điều kiện · If – Date & Time · n8n – ngày giờ · Luxon – DateTime
Bước 4. Workflow nhắc lịch hẹn và khai giảng
- Schedule Trigger mỗi ngày lúc 9:00.
- Data Table (Row → Get):
ngay_henEquals ngày mai,trang_thaiNot Equals tu-choi. - Gửi lời nhắc thứ nhất: ngày giờ, địa điểm hoặc đường dẫn phòng học trực tuyến, cách báo đổi lịch.
- If, kiểu Date & Time: thời điểm nhắc (hai giờ trước giờ hẹn, ghép từ
ngay_henvàgio_hen) phải "is after" thời điểm hiện tại; sai hoặc trống thì rẽ sang nhánh báo người phụ trách sửa dữ liệu, không để execution chờ một mốc vô lý. - Wait, Resume = At Specified Time, ô Date and Time điền biểu thức thời điểm nhắc ở trên.
- Data Table (Row → Get) đọc lại dòng của khách, If: khách chưa huỷ, chưa từ chối thì gửi lời nhắc thứ hai.
Execution đang chờ ở node Wait được lưu vào cơ sở dữ liệu và không bị tự dọn khi n8n xoá dữ liệu execution cũ. Đọc lại bảng sau khi chờ là bước quan trọng: trong lúc chờ, khách có thể đã đổi lịch hoặc báo không đến.
Nguồn: Wait – At Specified Time · Execution data – pruning
Bước 5. Dừng ngay khi khách từ chối, báo Sale khi khách quan tâm
Workflow nhận tin nhắn đến (chatbot Messenger, Zalo OA, email trả lời) thêm ba việc:
- Mọi tin khách gửi: Data Table → Update
tuong_tac_cuoi= thời điểm hiện tại. - Khách nói không muốn nhận tin ("dừng", "đừng nhắn nữa"…): ghi
trang_thai= tu-choi, gửi một câu xác nhận ngắn, không kèm chào bán. Từ lúc này mọi workflow gửi đều lọc bỏ khách này. - Khách hỏi giá, hỏi lịch, muốn đăng ký: Telegram (Send Message) báo nhân viên trực kèm mã khách và tin gần nhất; ghi
trang_thai= tam-dung để bot không chen vào lúc người thật đang tư vấn.
Nếu dùng AI Agent để nhận ra câu từ chối, khi AI không chắc hãy coi là từ chối.
Nguồn: Data Table – Update · Telegram node
Khi máy chủ khởi động lại: lượt chạy có mất không?
- Bản stable 2.44.x (bản đối chiếu): mặc định dùng bộ lập lịch trong bộ nhớ, máy chủ tắt đúng giờ chạy thì lượt đó bị bỏ, không chạy bù.
- Bản 2.45.0 (beta tại ngày 20/10/2026): bộ lập lịch bền (durable scheduler) bật mặc định, lưu lượt chạy vào cơ sở dữ liệu nên khởi động lại không mất lượt; lượt lỡ trong thời gian ân hạn (mặc định 1 phút) vẫn chạy, quá hạn thì theo tuỳ chọn If Execution Is Missed ở tab Settings của node (mặc định Don't Run Missed Executions).
ngay_moc_tiep "is before or equal to" hôm nay đưa khách bị lỡ vào lượt hôm sau. Muốn không mất lượt ngay trên bản stable, có thể bật N8N_SCHEDULER_ENABLED=true (có từ 2.36.0), thử trên máy thử trước; lên 2.45 thì xoá dòng này vì đã là mặc định.Khi dùng bộ lập lịch bền, chọn Run the Most Recent Missed Execution là hợp lý; điều kiện ngay_cham_cuoi giúp khách không bị nhắn hai lần. Gắn thêm error workflow: Giám sát lỗi, sao lưu và phiên bản workflow.
Nguồn: Durable scheduler · Schedule Trigger – If Execution Is Missed · Changelog n8n
Cách Aduca đang làm (mức nguyên tắc)
Aduca vận hành chatbot tư vấn trên n8n ở Zalo OA, Messenger và website, đọc kịch bản trong Second Brain. Cùng hệ thống có luồng tự chăm sóc khách theo mốc, nhắc khai giảng và báo Sale khách nóng qua Telegram. Kịch bản sửa ở một nơi, có bộ câu hỏi thử để chạy lại sau mỗi lần sửa (xem Chatbot n8n đọc kịch bản từ Second Brain).
Workflow trong bài là ví dụ minh hoạ cho mọi doanh nghiệp, không phải cấu hình của Aduca.
An toàn và chính sách
| Kênh | Được nhắn chủ động khi nào | Ngoài khung |
|---|---|---|
| Messenger | Trong 24 giờ sau hành động của khách (tới 7 ngày nếu khách đến từ quảng cáo Click-to-Messenger) | Thẻ HUMAN_AGENT chỉ cho người thật trả lời; không dùng thẻ để chào bán |
| Zalo OA | Tin Tư vấn miễn phí trong 48 giờ từ tương tác cuối; qua API chỉ gửi được khi khách tương tác trong 7 ngày | Từ 48 giờ đến 7 ngày tính phí theo bảng giá Zalo (55 đ/tin tại 10/2026, giá có thể thay đổi) hoặc trừ hạn mức của gói OA; quá 7 ngày API không gửi được |
| Thư quảng cáo cần đồng ý trước, tối đa 3 thư/24 giờ theo Nghị định 91/2020 | Xem Email tự động |
- Khách đã nói không là dừng ở mọi kênh, không chuyển sang kênh khác để nhắn tiếp.
- Theo Luật 91/2025/QH15, im lặng không được coi là đồng ý; khách có quyền rút lại đồng ý bất cứ lúc nào.
- Bảng trạng thái chỉ giữ cột cần cho chăm sóc; khóa, token để trong mục Credentials, không ghi vào bảng.
- Zalo cá nhân: không tự động hoá bằng công cụ không chính thức, có rủi ro khóa tài khoản.
Tổng hợp đầy đủ theo kênh, gồm SMS: Bám đuổi khách đúng chính sách. Bài viết không phải tư vấn pháp lý.
Nguồn: Meta – Messenger policy · Zalo – điều kiện gửi tin Tư vấn · Zalo OA – các loại tin nhắn · Zalo OA – bảng giá · Luật 91/2025/QH15
Kiểm tra đã chạy đúng
- Tạo ba khách thử với
ngay_moc_tieplà hôm nay, bấm chạy thử: chỉ ba khách đó được chọn. - Chạy lại lần hai trong ngày: không khách nào nhận thêm tin.
- Đổi một khách sang tu-choi: lượt sau khách đó không xuất hiện.
- Workflow chạy đúng 8:00 giờ Việt Nam trong tab Executions sau khi publish.
- Tạo khách thử có lịch hẹn vào ngày mai, chạy thử workflow nhắc hẹn: nhận ngay lời nhắc thứ nhất, lời nhắc thứ hai đến đúng hai giờ trước giờ hẹn.
- Khách thử nhắn "muốn đăng ký": nhân viên nhận tin Telegram, trạng thái chuyển tam-dung.
Lỗi thường gặp
| Hiện tượng | Nguyên nhân thường gặp | Cách xử lý |
|---|---|---|
| Lịch chạy lệch nhiều giờ | Chưa đặt múi giờ, đang dùng giờ New York | Đặt Timezone trong Workflow Settings hoặc GENERIC_TIMEZONE |
| Lời nhắc của Wait lệch giờ | Wait dùng giờ máy chủ | Đặt TZ cho container |
| Schedule Trigger không chạy | Workflow chưa publish | Bấm Publish; xem tab Executions |
| Sửa biến trong biểu thức cron không có tác dụng | Biến chỉ được tính lúc publish | Unpublish rồi publish lại |
| Khách nhận cùng một tin hai lần | Thiếu điều kiện ngay_cham_cuoi | Thêm điều kiện, cập nhật bảng ngay sau khi gửi |
| Lỗi khi ghi bảng | Data tables vượt 200 MiB, hoặc Google Sheets báo 429 | Dọn dòng cũ; với Sheets đọc một lần mỗi lượt, giãn nhịp ghi |
Nguồn: Schedule Trigger · Wait · Data tables – giới hạn
Bắt đầu từ đâu?
- Hôm nay: đặt múi giờ, tạo bảng trạng thái và nhập vài khách thử.
- Tuần này: dựng workflow chăm sóc theo mốc với một kênh, chạy với khách thử đến khi đủ mục kiểm tra; ba mẫu tin ba góc khác nhau, có người duyệt.
- Sau đó: thêm nhắc lịch hẹn, nối điểm dừng vào chatbot, rồi đọc Bám đuổi khách đúng chính sách trước khi mở rộng sang kênh khác.
Muốn được tư vấn hoặc cùng thiết kế chuỗi chăm sóc phù hợp quy trình bán hàng của bạn, bạn có thể đăng ký Tư vấn 1-1 hoặc Coaching 1-1 cho doanh nghiệp; chi phí báo sau buổi tư vấn.
Đọc tiếp: Bám đuổi khách đúng chính sách →
Câu hỏi thường gặp
Nên dùng node Wait chờ 3 ngày hay Schedule Trigger quét bảng mỗi ngày?
Cả hai đều chạy được. Chờ vài phút đến vài giờ trong một luồng thì Wait gọn hơn. Chuỗi chăm sóc nhiều ngày, nhiều khách thì quét bảng mỗi ngày dễ theo dõi hơn: nhìn bảng là biết khách đang ở mốc nào, sửa nội dung một mốc thì lượt quét sau dùng nội dung mới. Tài liệu n8n không so sánh hai cách, đây là lựa chọn thiết kế.
Máy chủ n8n khởi động lại thì lịch có bị mất lượt không?
Phụ thuộc phiên bản. Trước 2.45, bộ lập lịch chạy trong bộ nhớ bỏ qua lượt lỡ khi máy chủ tắt. Từ 2.45.0, bộ lập lịch bền (durable scheduler) bật mặc định, lưu lượt chạy vào cơ sở dữ liệu nên khởi động lại không mất lượt; lượt lỡ có chạy bù hay không tuỳ thời gian ân hạn và chính sách bạn chọn. Tại ngày kiểm tra, 2.45.0 vẫn là bản beta.
Có lưu trạng thái khách trong biến $vars được không?
Không. Theo tài liệu n8n, custom variables chỉ đọc trong workflow, chỉ có ở Cloud Pro, Enterprise và bản tự cài Business, Enterprise. Trạng thái thay đổi theo từng khách nên lưu ở Data tables, Google Sheets hoặc cơ sở dữ liệu.
Khách không trả lời tin nào thì chăm sóc đến bao giờ?
Hãy đặt sẵn điểm kết thúc, ví dụ sau mốc cuối mà khách vẫn im lặng thì chuyển trạng thái tạm dừng. Theo Luật Bảo vệ dữ liệu cá nhân 91/2025/QH15, im lặng không được coi là đồng ý; mỗi kênh còn có khung thời gian được nhắn riêng.
Tin chăm sóc nên do bot gửi hay nhân viên gửi?
Tin mẫu đã duyệt, còn trong khung thời gian của kênh và khách đã đồng ý thì bot gửi được. Ngoài khung, tin cần cá nhân hoá hoặc khách đang hỏi mua thì workflow nên báo nhân viên qua Telegram để người thật quyết định.
Tài liệu liên quan
- n8n · AI Agentn8n là gì? Tự động hoá quy trình kết hợp AI cho doanh nghiệpn8n là gì: công cụ tự động hoá quy trình nối Facebook, Google Sheets, Telegram, CRM thành workflow, chèn được bước AI. Cloud hay tự cài, giấy phép, giới hạn.
- n8n · AI AgentLàm chatbot Facebook Messenger bằng n8n: webhook, chữ ký, Send API, cửa sổ 24 giờLàm chatbot Facebook Messenger bằng n8n: xác minh webhook, kiểm chữ ký X-Hub-Signature-256, trả 200 trong 5 giây, gửi qua Send API, cửa sổ 24 giờ, App Review.
- n8n · AI Agentn8n Cloud hay tự cài: chi phí, gói và giấy phép cần biếtn8n Cloud hay tự cài: bảng gói Cloud bằng EUR theo lượt chạy, bản Community miễn phí và chi phí thật khi tự cài, giấy phép fair-code, chọn theo 5 tình huống.
- n8n · AI AgentKết nối Zalo OA với n8n: webhook 2 giây, token 25 giờ, tin Tư vấn miễn phí 48 giờKết nối Zalo OA với n8n từng bước: webhook trả 200 trong 2 giây, làm mới access token 25 giờ, gửi tin Tư vấn qua API, khung 48 giờ miễn phí và giới hạn 7 ngày.
Xem tất cả tài liệu hướng dẫn →
Đăng ký tư vấn 1:1
Chuyên gia Aduca cùng bạn xem quy trình hiện tại, chọn việc nên giao cho AI Agent trước và cách kiểm soát rủi ro.
Nguồn tham khảo
- n8n Docs – Schedule Trigger
- n8n Docs – Durable scheduler
- n8n Docs – Wait node
- n8n Docs – Data Table node, thao tác Row
- n8n Docs – Data tables
- n8n Docs – Custom variables
- n8n Docs – Làm việc với ngày giờ
- n8n Docs – Workflow settings (Timezone)
- Meta – Chính sách Messenger Platform
- Zalo for Developers – Điều kiện gửi tin Tư vấn
- Bộ Công an – Luật Bảo vệ dữ liệu cá nhân có hiệu lực từ 01/01/2026
Lịch sử cập nhật
- 21/10/2026 — Bản đầu.
Miễn trừ trách nhiệm
Bài viết thuộc chuỗi kiến thức của Công ty Cổ phần Giáo dục Aduca, chia sẻ miễn phí cho mục đích học tập. Thông tin kỹ thuật đối chiếu với tài liệu chính thức của các dự án và nền tảng tại ngày cập nhật (có ghi nguồn); phần nhận định là quan điểm của Aduca. OpenClaw, Hermes Agent, Claude (thương hiệu của Anthropic), ChatGPT (thương hiệu của OpenAI), n8n (thương hiệu của n8n GmbH), các phần mềm chạy model và các model AI mở (Ollama, LM Studio, Qwen, Gemma, gpt-oss…), Obsidian, Notion, phương pháp Building a Second Brain (Tiago Forte) cùng các phần mềm, dịch vụ nêu trong bài thuộc về chủ sở hữu tương ứng, không thuộc Aduca; Aduca không phải đối tác chính thức của các công ty này. Tính năng, gói và giá có thể thay đổi bất cứ lúc nào – hãy kiểm tra trang chính thức trước khi mua. Kết quả áp dụng phụ thuộc quy trình, dữ liệu và con người của từng doanh nghiệp; bài viết không cam kết doanh thu hay hiệu quả cụ thể. © 2026 Aduca — được trích dẫn khi ghi rõ nguồn aduca.vn.