Bot Telegram báo cáo và nhận lệnh duyệt bằng n8n
Bài thực hành cho người đã có n8n chạy HTTPS: tạo bot, lấy Chat ID, gửi báo cáo mỗi sáng vào nhóm, gắn nút bấm để nhân viên nhận việc và cho quản lý duyệt ngay trong Telegram. Tên node và giới hạn đối chiếu tài liệu chính thức của n8n (bản 2.44.4) và Telegram ngày 20–21/10/2026.
Sáng nào cũng gom số liệu tay, duyệt việc qua tin nhắn lẫn lộn
Tám giờ sáng, trưởng nhóm kinh doanh đếm khách mới trong bảng tính, chụp màn hình gửi vào nhóm. Nhân viên trả lời "em nhận" lẫn giữa hàng chục tin khác; việc cần sếp duyệt nằm trong tin nhắn riêng, dễ trôi. (Tình huống minh hoạ.)
Bài này dựng bot Telegram bằng n8n làm ba việc: gửi báo cáo theo lịch, cho nhân viên bấm nút nhận khách, và dừng workflow chờ quản lý duyệt việc nhạy cảm.
Bot Telegram báo cáo bằng n8n gồm những gì?
Bot Telegram báo cáo bằng n8n là một bot do bạn tạo ở @BotFather, được n8n dùng để gửi tin vào nhóm nội bộ theo lịch hoặc theo sự kiện, gắn nút bấm để người nhận ra lệnh, và tạm dừng workflow cho tới khi người có quyền bấm duyệt.
- Schedule TriggerChạy lúc 7:30 sáng các ngày làm việc
- Google SheetsGet Row(s): lấy các dòng khách có trạng thái "mới"
- SummarizeĐếm thành một con số, gộp thành 1 item
- TelegramSend Message vào nhóm, kèm nút "Tôi nhận khách"
- Telegram TriggerNhận cú bấm nút (Callback Query) và lệnh /baocao
- Answer Query + cập nhật bảngTắt vòng chờ trên nút, ghi người nhận vào bảng
Node Telegram gửi tin, trả lời nút bấm; Telegram Trigger nhận tin và cú bấm; cả hai dùng chung credential.
Nguồn: Telegram node · Telegram Trigger · Telegram credentials
Chuẩn bị
- n8n đã chạy qua tên miền HTTPS (bản Cloud, hoặc tự cài theo hướng dẫn cài n8n trên VPS). Telegram Trigger và tính năng duyệt ngay trong chat cần n8n truy cập được qua HTTPS ở cổng 443, 80, 88 hoặc 8443.
- Một Google Sheet khách có các cột
ma_khach,ho_ten,trang_thai,nguoi_nhan(cách dựng bảng: Google Sheets làm CRM với n8n). - Một nhóm Telegram nội bộ của đội Sales, ít người, đúng người cần biết.
- Bản tự cài: đặt
GENERIC_TIMEZONE=Asia/Ho_Chi_Minhđể lịch chạy đúng giờ Việt Nam.
Mới dùng n8n thì làm trước workflow đầu tiên.
Nguồn: Telegram Trigger – HTTPS · Approve Within Chat – cổng · Schedule Trigger – múi giờ
Bước 1. Tạo bot và credential
- Mở Telegram, nhắn cho @BotFather lệnh
/newbot. - Đặt tên hiển thị, rồi đặt username: dài 5–32 ký tự, chỉ chữ Latin, số, dấu gạch dưới, phải kết thúc bằng "bot", và không đổi được về sau. Ví dụ
congty_baocao_bot. - BotFather trả về token. Cất ngay vào trình quản lý mật khẩu.
- Trong n8n, vào Credentials → tạo credential Telegram → dán token vào ô Access Token → lưu. Đây là nơi duy nhất trong n8n bạn dán token.
- Tạo thêm một bot chỉ để thử, với credential riêng (lý do ở mục giới hạn).
Nguồn: Telegram credentials – BotFather · Bot features – token
Bước 2. Đưa bot vào nhóm và lấy Chat ID
Theo Telegram, bot không thể tự mở cuộc trò chuyện: phải có người nhắn bot trước, hoặc thêm bot vào nhóm. Thêm bot vào nhóm Sales như một thành viên. Gửi vào kênh (channel) thì bot phải là quản trị viên của kênh.
- Tạo workflow tạm, thêm Telegram Trigger, Updates chọn Message, chọn credential vừa tạo.
- Bấm chạy thử, rồi nhắn một câu vào nhóm. Trong bảng OUTPUT, tìm số
idtrong phầnchat: đó là Chat ID của nhóm (nhóm thường là số âm). Ở phầnfromlà User ID của người vừa nhắn; ghi lại ID của quản lý để dùng ở Bước 4. - Cách khác theo tài liệu n8n: đọc số trên địa chỉ Telegram bản web, hoặc mời @RawDataBot vào nhóm rồi xoá ngay.
Lưu ý privacy mode: mặc định bot trong nhóm chỉ thấy tin liên quan tới nó, như lệnh gọi đích danh /baocao@congty_baocao_bot. Cách này đủ cho bot báo cáo và giúp bot không đọc chuyện riêng của nhóm.
Nguồn: Telegram Bots – bot không tự mở chat · Telegram – Chat ID, thêm bot vào kênh · Privacy mode
Bước 3. Workflow gửi báo cáo theo lịch
- Thêm Schedule Trigger, Trigger Interval chọn Custom (Cron), nhập
30 7 * * 1-6(7:30 sáng thứ Hai tới thứ Bảy). Trong Workflow Settings, đặt Timezone là Asia/Ho_Chi_Minh. - Thêm Google Sheets, thao tác Get Row(s), chọn bảng khách, Filters: cột
trang_thaibằngmoi. Mặc định node chỉ trả dòng khớp đầu tiên, nên vào Options → When Filter Has Multiple Matches → Return All Matches. - Thêm Summarize, Aggregation chọn Count, Field là
ma_khach. Bước này quan trọng: Get Row(s) trả về mỗi dòng một item, và node Telegram chạy một lần cho mỗi item. Không gộp lại thì 15 khách sẽ thành 15 tin nhắn. - Thêm Telegram, Resource Message, Operation Send Message, điền Chat ID nhóm, dán nội dung mẫu dưới đây vào ô Text.
- Ở Reply Markup chọn Inline Keyboard, Add Button: chữ trên nút "Tôi nhận khách", callback data
nhan_khach. - Trong Additional Fields, tắt Append n8n attribution để bỏ dòng "This message was sent automatically with n8n".
- Chạy thử, kiểm tra tin trong nhóm, rồi bấm Publish để lịch bắt đầu chạy.
<b>Báo cáo khách mới – {{ $now.toFormat('dd/MM/yyyy') }}</b>
Khách chưa liên hệ: {{ <trường đếm, kéo từ bảng INPUT của Summarize> }}
Mở bảng khách: <link Google Sheet nội bộ>
Bấm nút bên dưới khi đã nhận khách.Tin chỉ báo con số và đường dẫn bảng nội bộ, không liệt kê số điện thoại khách: tin nhóm dễ bị chuyển tiếp, chụp màn hình. Một tin dài tối đa 4.096 ký tự; Parse Mode mặc định là HTML, nên dữ liệu có ký tự < có thể làm tin bị từ chối.
Ngày không có khách mới, workflow dừng ở Get Row(s); muốn vẫn nhận tin "0 khách", bật Always Output Data cho node đó.
Nguồn: Schedule Trigger – cron · Google Sheets – Get Row(s) · Summarize · Send Message, Reply Markup · Node settings
Bước 4. Bắt workflow chờ người duyệt
Việc đụng tới khách hoặc đăng nội dung công khai cần một bước duyệt ngay trước node thực hiện. Thao tác Send and Wait for Response của node Telegram gửi tin rồi tạm dừng workflow tới khi có người trả lời.
- Thêm Telegram, Operation Send and Wait for Response, Chat ID là nhóm hoặc chat riêng với quản lý.
- Response Type chọn Approval. Type of Approval chọn loại có cả nút duyệt và nút từ chối; nhãn mặc định là Approve, Decline, đổi được thành "Duyệt", "Từ chối".
- Bật Limit Wait Time, ví dụ 4 giờ.
- Bật Approve Within Chat để bấm ngay trong tin nhắn. Restrict Who Can Approve = User ID của quản lý (Bước 2); người khác bấm sẽ thấy báo không có quyền. After Decision chọn Show Outcome and Remove Buttons.
- Sau node duyệt, thêm If: chỉ "đã duyệt" mới đi tiếp tới node gửi; mọi trường hợp khác, kể cả hết giờ, đi nhánh dừng. Tài liệu n8n không ghi tên trường kết quả: chạy thử, bấm duyệt, mở panel OUTPUT của node, tìm trường đúng/sai (thường là
approved, có thể nằm trongdata) rồi kéo vào ô điều kiện, không gõ tay.
Duyệt gửi tin chăm sóc cho {{ <số khách, kéo từ INPUT> }} khách?
Nội dung: {{ <trường nội dung tin, kéo từ INPUT> }}
Không duyệt trong 4 giờ thì workflow tự dừng, không gửi.Với Approve Within Chat, OUTPUT có User ID, username, tên người bấm để lưu dấu vết. Không có HTTPS công khai thì node dùng nút liên kết mở trình duyệt.
Nguồn: Send and Wait for Response – Approval, Approve Within Chat
Bước 5. Nhận lệnh từ nút bấm: Telegram Trigger và Answer Query
Nút "Tôi nhận khách" là nút inline: bấm vào không gửi tin vào nhóm mà gửi callback query về bot; Telegram hiện vòng chờ trên nút tới khi bot gọi answerCallbackQuery. Tạo workflow thứ hai:
- Telegram Trigger, Updates chọn Callback Query và Message. Options: Restrict to Chat IDs = Chat ID nhóm Sales, để người ngoài nhóm không ra lệnh được.
- Switch chia hai nhánh: cú bấm nút (
callback_query.databằngnhan_khach) và tin nhắn là lệnh/baocao@congty_baocao_bot. - Nhánh nút bấm, việc đầu tiên: Telegram → Resource Callback → Answer Query. Query ID là
{{ $json.callback_query.id }}; Additional Fields → Text "Đã ghi bạn nhận khách" (tối đa 200 ký tự). - Tiếp theo: Google Sheets → Get Row(s) lấy các dòng
trang_thai=moi(bật Return All Matches), rồi Google Sheets → Update Row với Column to Match On =ma_khach: ghi tên người bấm (trongcallback_query.from) vào cộtnguoi_nhan, đổitrang_thaisangda_nhan. Người bấm sau sẽ không còn dòng nào để nhận. - Tuỳ chọn: Edit Message Text sửa tin báo cáo thành "Đã có người nhận".
- Nhánh lệnh
/baocao: dùng Execute Sub-workflow gọi lại workflow báo cáo (thêm node Execute Sub-workflow Trigger vào workflow đó).
Tên trường callback_query.id, .data, .from theo cấu trúc Update của Telegram Bot API; tài liệu n8n không in sẵn dữ liệu ra của Telegram Trigger, nên bấm nút thử một lần, mở panel OUTPUT và kéo đúng trường vào các ô thay vì gõ tay. Callback data dài 1–64 byte: chỉ đặt mã ngắn, không chứa dữ liệu khách.
Nguồn: Callback – Answer Query · Telegram Trigger – events, restrict · Bot API – CallbackQuery, callback_data · Inline keyboards
Giới hạn cần biết: tốc độ gửi và một webhook mỗi bot
| Giới hạn | Con số / quy tắc | Cách xử lý trong n8n |
|---|---|---|
| Trong một cuộc trò chuyện | Tránh quá khoảng 1 tin mỗi giây; vượt lâu sẽ bị lỗi 429 | Gộp nội dung thành một tin (Summarize) |
| Trong nhóm | Không quá 20 tin mỗi phút | Gửi một tin tổng hợp thay vì từng dòng |
| Gửi cho nhiều người | Khoảng 30 tin mỗi giây; muốn hơn thì dùng Paid Broadcasts qua @BotFather (tính phí bằng Star) | Loop Over Items, mỗi lô không quá 30 chat, thêm Wait vài giây giữa các lô |
| Webhook | Mỗi bot chỉ một webhook; chỉ cổng 443, 80, 88, 8443 | Bot thử riêng; hoặc Unpublish khi thử |
| Callback data | 1–64 byte mỗi nút | Chỉ đặt mã ngắn |
URL thử và URL chạy thật của Telegram Trigger đè nhau, nên dùng bot thử riêng. Riêng Approve Within Chat, n8n tự dùng chung webhook với Telegram Trigger của cùng bot.
Nguồn: Bots FAQ – giới hạn gửi · Gửi hơn 30 tin mỗi giây · Một webhook mỗi bot · setWebhook – cổng · Approve Within Chat – chia sẻ webhook
Ở Aduca, Telegram dùng để báo Sale
Aduca đang vận hành chatbot tư vấn trên n8n ở Zalo OA, Messenger và website. Khi bot nhận ra khách nóng, n8n báo Sale qua Telegram để người thật vào tiếp. Nguyên tắc: Telegram là kênh nội bộ, tin báo vừa đủ để hành động, gửi gì cho khách vẫn do người quyết định. Xem thêm Chatbot n8n đọc kịch bản từ Second Brain.
Kiểm tra đã chạy đúng
- Chạy thử báo cáo: nhóm nhận đúng một tin, có nút, không có dòng chữ ký n8n.
- Bấm nút: vòng chờ trên nút tắt ngay, hiện thông báo ngắn; bảng khách ghi đúng tên người bấm.
- Một người ngoài danh sách bấm nút duyệt: thấy thông báo không có quyền, workflow vẫn chờ.
- Để hết thời gian chờ duyệt: workflow đi nhánh dừng, không gửi gì cho khách.
- Gõ
/baocao@tên_bottrong nhóm: nhận lại báo cáo. - Sáng hôm sau, tab Executions có một lượt chạy lúc 7:30 giờ Việt Nam.
Lỗi thường gặp
| Hiện tượng | Nguyên nhân thường gặp | Cách xử lý |
|---|---|---|
Forbidden: bot is not a participant of the channel | Bot chưa là quản trị viên của kênh | Thêm bot làm admin kênh |
| "An HTTPS URL must be provided for webhook" | n8n chưa chạy HTTPS hoặc địa chỉ webhook vẫn là http | Cấu hình TLS ở reverse proxy, đặt N8N_WEBHOOK_URL dạng https |
| Trigger cứ "đang nghe" mà không nhận gì | Reverse proxy chưa bật websocket | Bật hỗ trợ websocket ở proxy |
| Bản chạy thật ngừng nhận sau khi thử | Một webhook mỗi bot, bản thử đè lên | Publish lại; lần sau dùng bot thử riêng |
| Nút bấm quay vòng mãi | Thiếu bước Answer Query | Thêm Answer Query ngay đầu nhánh nút bấm |
| Nhóm nhận hàng chục tin cùng lúc | Mỗi item một tin | Gộp bằng Summarize, hoặc bật Execute Once |
| Bot không phản hồi lệnh trong nhóm | Privacy mode, lệnh không gọi đích danh bot | Gõ /lenh@tên_bot |
Khi workflow đã chạy thật, gắn một error workflow để được báo khi có lỗi: xem giám sát lỗi, sao lưu và quản lý phiên bản.
Nguồn: Telegram – common issues · Telegram Trigger – common issues · Execute Once
An toàn và chính sách
- Token chỉ nằm trong Credentials của n8n và trình quản lý mật khẩu. Lỡ lộ thì vào @BotFather cấp lại token mới và cập nhật credential.
- Giới hạn người ra lệnh: Restrict to Chat IDs hoặc Restrict to User IDs ở Telegram Trigger; Restrict Who Can Approve ở bước duyệt.
- Dữ liệu khách tối thiểu trong tin nhắn nhóm, đúng mục đích tư vấn, theo Luật Bảo vệ dữ liệu cá nhân 91/2025/QH15. Không đưa dữ liệu khách vào callback data hay tên nút.
- Người duyệt trước việc đụng tới khách: bot nội bộ có thể soạn và đề xuất, nhưng gửi tin cho khách, đăng bài công khai phải qua bước duyệt ở Bước 4. Quy định từng kênh khi nhắn khách: bám đuổi khách đúng chính sách.
- Đối chiếu n8n 2.44.4 (10/2026); trước khi lên n8n 3.0, đọc trang thay đổi lớn.
- Phần quy định trong bài là tóm tắt để vận hành, không phải tư vấn pháp lý.
Nguồn: Bot token · Restrict to Chat/User IDs · n8n 3.0 breaking changes
Muốn được tư vấn cách áp dụng n8n cho quy trình của doanh nghiệp, bạn có thể đăng ký Tư vấn 1-1 hoặc Coaching 1-1; chi phí báo sau buổi tư vấn.
Đọc tiếp: Form website về bảng khách →
Câu hỏi thường gặp
Bot Telegram có tự nhắn cho khách mới được không?
Không. Theo Telegram, bot không thể tự mở cuộc trò chuyện: người dùng phải nhắn cho bot trước hoặc thêm bot vào nhóm. Vì vậy bot Telegram hợp nhất cho việc nội bộ như báo cáo, báo khách mới, duyệt việc, chứ không dùng để chào khách lạ.
Nên dùng Send and Wait for Response hay tự làm nút bấm?
Cần duyệt hoặc từ chối một việc cụ thể thì dùng Send and Wait for Response với kiểu Approval: workflow tự dừng chờ, bấm xong tự chạy tiếp. Tự làm nút bằng Inline Keyboard và Telegram Trigger hợp với lệnh không gắn với một lượt chạy đang chờ, ví dụ nhân viên bấm nhận một khách.
Vì sao đang thử thì bot không nhận tin nữa?
Telegram chỉ cho mỗi bot một webhook, nên địa chỉ thử và địa chỉ chạy thật của Telegram Trigger đè lên nhau. Tài liệu n8n gợi ý tạm Unpublish workflow khi thử, hoặc tạo một bot riêng chỉ để thử.
Gửi nhiều tin cùng lúc có bị chặn không?
Có thể. Telegram khuyên trong một cuộc trò chuyện không gửi quá khoảng 1 tin mỗi giây, trong nhóm không quá 20 tin mỗi phút; vượt lâu sẽ nhận lỗi 429. Hãy gộp nội dung thành một tin hoặc chia lô bằng Loop Over Items kèm Wait.
Token bot nên cất ở đâu?
Chỉ dán token vào ô Access Token trong mục Credentials của n8n và lưu bản dự phòng trong trình quản lý mật khẩu. Telegram nói rõ ai có token là điều khiển được bot, nên không gửi token qua chat, không dán vào ghi chú workflow.
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 – Telegram credentials
- n8n Docs – Telegram: Message operations (Send Message, Send and Wait for Response)
- n8n Docs – Telegram: Callback operations (Answer Query)
- n8n Docs – Telegram Trigger
- n8n Docs – Telegram Trigger: lỗi thường gặp
- n8n Docs – Telegram node: lỗi thường gặp
- n8n Docs – Schedule Trigger
- Telegram – Bot API
- Telegram – Bots FAQ (giới hạn gửi tin)
- Telegram – Bot features (nút inline, privacy mode)
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.