# hecigo: full site content > Every public page and blog post on hecigo.com, concatenated. Generated at build time from the same sources the site renders from. The index with a "when to use hecigo" section is at https://hecigo.com/llms.txt. --- # hecigo: middleware & integration lab hecigo builds and runs the middleware layer between any two systems that need to exchange data: business software, marketplaces, data warehouses, cloud infrastructure, email, social channels, and custom automated workflows. That list is not a limit. What matters is whether two systems can exchange data at all, not what category they belong to. Legal entity: HECIGO TECHNOLOGY CO., LTD. Based in Ho Chi Minh City, Vietnam. Working languages: Vietnamese and English. ## What the middle layer does - **Deduplication**: a unique key of the shape `source:type:id:version` admits the first copy of an event and rejects the replay, so a retried webhook does not become a second order. - **No silent loss**: every event is written to an event log before delivery is attempted, retried with exponential backoff and jitter, and parked in a replayable dead-letter queue when the attempts run out. The DLQ raises an alert. - **Reconciliation**: a scheduled pass compares source against target and reports discrepancies, so missing records surface on a schedule rather than at the end of a quarter. - **Audit trail**: every transaction through the layer is queryable, showing what arrived, what was written, which attempt succeeded, and why an attempt failed. Latency targets are agreed per project and measured at the middleware boundary, conditional on both platforms responding within their normal range. We do not publish a single number, because the number depends on the slower of the two systems and on nothing we control. ## How an engagement runs Four steps, each ending in a gate you are free to stop at. 1. **Integration discovery** (1-2 weeks). A written technical assessment: current and target data-flow maps, draft field mapping, API capability on both ends (webhooks, rate limits, pagination, latency), and a POC outline with acceptance criteria. The assessment is yours; take it to another vendor if you want. 2. **POC on real data** (one flow, 20-50 transactions). Measured against the acceptance criteria agreed before a line of code is written: manual reconciliation of every transaction, five replayed events producing no duplicates, P50 and P95 latency read from the logs, and a deliberate outage to prove the backlog drains on recovery. Fail it and we stop; you keep the assessment and the POC source. 3. **Production build** (4-8 weeks per system pair). Full edge cases (edits, voids, partial returns, merges, splits), deduplication, retries, dead-letter queue, scheduled reconciliation, alerting on queue depth, error rate, and latency, and a parallel run alongside the old process before anything is switched off. 4. **Managed operations** (monthly, ongoing). Monitoring, alerting, and incident response within committed hours, plus a scheduled reconciliation report. Handover is an option at any point and is written into the contract. ## What we do not do We do not ask you to replace software that already works, and we do not quote a production build before looking at your real data. Every pair of systems fails in its own way, and most of that lives in what the API docs never mention. Discovery and the POC exist so you do not have to take our word for it. ## Track record Production integrations shipped with Base CRM, Lark Suite, and Odoo: some under contract, some while running those systems from inside the business. Two open-source n8n community nodes published and maintained on npm with outside users. Integration infrastructure we have operated ourselves for months. ## Links - [Blog](https://hecigo.com/blog/): mechanics, failure modes, and what we got wrong - [Developer resources](https://hecigo.com/developers/): open-source n8n nodes, machine-readable endpoints - [About](https://hecigo.com/about/): how the lab works and what it is accountable for - [Contact](https://hecigo.com/contact/): email, phone, address, and the enquiry form - [Privacy](https://hecigo.com/privacy/): what this site collects and why ## Contact - Email: hi@hecigo.com - Phone: (+84) 963 929 241 - Address: CirCO Dien Bien Phu, 222 Dien Bien Phu street, Vo Thi Sau ward, District 3, Ho Chi Minh City, Vietnam - GitHub: https://github.com/hecigo - LinkedIn: https://www.linkedin.com/company/hecigolab --- # About hecigo hecigo is an integration lab operated by **HECIGO TECHNOLOGY CO., LTD**, a company registered in Ho Chi Minh City, Vietnam. We do exactly one thing: the layer in between. A 20-to-200-person company usually has enough software already, and each piece does its own job well. What is missing is whatever makes them talk to each other, and no vendor takes responsibility for that part. That gap is the whole of our business. ## An integration lab, not a contractor A contractor takes a specification and returns a build. A lab starts from the position that nobody, including us, can quote a middleware build accurately before looking at real data, because every pair of systems fails in its own way and most of that lives in what the API docs never mention. So the engagement is gated rather than quoted up front: 1. **Integration discovery**, 1-2 weeks, paid. A written technical assessment complete enough for anyone, including another vendor, to quote from. 2. **POC on real data**, one flow, 20-50 transactions, against acceptance criteria agreed before a line of code is written. 3. **Production build**, 4-8 weeks per system pair, with a parallel run alongside the old process before anything is switched off. 4. **Managed operations**, monthly, or a handover to your own team. You pay a small amount, watch it run, and only then decide whether to continue. Every step has an exit, and the deliverables from a step you stop at are yours to keep. ## What we are accountable for - We never ask you to replace software that already works. - A small POC comes first, with acceptance criteria written up front. If it fails them, we stop. - Handover is complete enough for another team to take over, and that standard is written into the contract rather than promised verbally. The POC acceptance criteria are deliberately unglamorous and measurable: every transaction reconciled by hand, source against target; five events replayed with the target record count unchanged; latency reported at both P50 and P95, read from the logs rather than estimated; and the target deliberately cut off to prove the backlog drains fully on recovery. ## What we have shipped Production integrations with **Base CRM, Lark Suite and Odoo**: some under contract, some while running those systems from inside the business. Two open-source n8n community nodes live on npm with outside users: `n8n-nodes-zalo-platform` and `n8n-nodes-firecrawl-v2`. Integration infrastructure we have operated ourselves for months, which is where most of what we know about failure modes actually came from. We are a small team. We say so on purpose: the alternative is a capability deck that implies otherwise and a first invoice that discovers the truth. ## Research. Prototype. Deploy. Not a slogan, three real steps. Discovery to understand the data, a POC to prove the approach holds, then production. The working stack is Node.js, PostgreSQL, Docker, n8n and Grafana, chosen because they are ordinary enough that another team can pick the system up without us. ## Where to go next - [Developer resources](https://hecigo.com/developers/): the open-source nodes and machine-readable endpoints - [Blog](https://hecigo.com/blog/): mechanics and failure modes, including ours - [Contact](https://hecigo.com/contact/): email, phone, address, enquiry form --- # hecigo Developer Resources Everything hecigo publishes for developers and for automated clients, in one place. This page is the index; each entry below is a stable, predictable URL you can bookmark or hard-code. If you are an AI agent, start with [hecigo.com/llms.txt](https://hecigo.com/llms.txt), which names what this site is for and when to reach for us. ## Open-source n8n nodes by hecigo hecigo maintains two n8n community nodes on npm. Both are MIT licensed, both are used outside our own projects, and both take issues. ### n8n-nodes-zalo-platform An n8n community node for the Zalo Bot Platform: send messages, photos and stickers, and manage webhooks. Zalo is the dominant messaging platform in Vietnam, and this node is what we use to reach it from an n8n workflow. - npm: https://www.npmjs.com/package/n8n-nodes-zalo-platform - Source and README: https://github.com/hecigo/n8n-nodes-zalo-platform - Install in n8n: **Settings → Community Nodes → Install →** `n8n-nodes-zalo-platform` - Install from a shell: `npm install n8n-nodes-zalo-platform` - Licence: MIT - What breaks in production, written up honestly: [Running a Zalo bot on n8n: what breaks between test mode and production](https://hecigo.com/blog/n8n-zalo-bot-node-what-breaks-in-production/) ### n8n-nodes-firecrawl-v2 An n8n community node covering the Firecrawl v2 API (scrape, crawl, map, search, extract, and the batch operations) against both Firecrawl Cloud and a self-hosted instance. Ten operations, six of which return web content and are not interchangeable. - npm: https://www.npmjs.com/package/n8n-nodes-firecrawl-v2 - Source and README: https://github.com/hecigo/n8n-nodes-firecrawl-v2 - Install in n8n: **Settings → Community Nodes → Install →** `n8n-nodes-firecrawl-v2` - Install from a shell: `npm install n8n-nodes-firecrawl-v2` - Licence: MIT - Which operation to reach for: [Firecrawl on n8n: picking the right operation, and what async does to your workflow](https://hecigo.com/blog/n8n-firecrawl-node-choosing-the-right-operation/) All hecigo source lives under the GitHub organisation [github.com/hecigo](https://github.com/hecigo). Issues and pull requests on either node are the fastest route to a case being covered. ## Machine-readable endpoints on hecigo.com | Endpoint | Format | What it is | | --- | --- | --- | | [/llms.txt](https://hecigo.com/llms.txt) | Markdown, llmstxt.org | Site summary, when to use hecigo, and a link index | | [/llms-full.txt](https://hecigo.com/llms-full.txt) | Markdown | Every public page and post concatenated, for a single fetch | | [/agent-instructions.md](https://hecigo.com/agent-instructions.md) | Markdown | How an agent should call, cite, and hand off to hecigo | | [/sitemap.xml](https://hecigo.com/sitemap.xml) | XML | Every indexable URL, with last-modified dates | | [/robots.txt](https://hecigo.com/robots.txt) | Text | Crawl rules; no AI crawler is blocked | | [/blog-index.json](https://hecigo.com/blog-index.json) | JSON | Blog metadata: slug, title, description, date, tags, language | Everything above is public, unauthenticated, CORS-open, and free to fetch. There is no rate limit beyond the CDN's own abuse protection. Please send a user agent that identifies your client. ## Markdown content negotiation Every public page on hecigo.com is available as Markdown at the same URL. Send `Accept: text/markdown` and you get clean prose instead of a page of layout markup, per the convention documented at [acceptmarkdown.com](https://acceptmarkdown.com/): ```bash curl -s -H "Accept: text/markdown" https://hecigo.com/ curl -s -H "Accept: text/markdown" https://hecigo.com/blog/n8n-zalo-bot-node-what-breaks-in-production/ ``` Responses carry `Content-Type: text/markdown; charset=utf-8` and `Vary: Accept, Accept-Encoding`. Q-values are honoured, so a browser's `Accept: text/html,...,*/*;q=0.8` still gets HTML. Every page also ships a `.md` sibling if you would rather address it directly, advertised on the HTML response as `Link: ; rel="alternate"; type="text/markdown"`: ```bash curl -s https://hecigo.com/index.md curl -s https://hecigo.com/developers.md ``` A request for a path that does not exist returns a real **HTTP 404**, with a Markdown body pointing at this page and the sitemap when Markdown was requested. A request whose `Accept` header we genuinely cannot satisfy returns **406 Not Acceptable** with the list of available representations, rather than silently handing back the wrong format. ## What hecigo does not publish Stated plainly so nobody wastes an afternoon looking: - **No public hosted HTTP API.** hecigo builds middleware inside client infrastructure; there is no multi-tenant hecigo API to call, and therefore no OpenAPI document, no API keys, and no OAuth flow. - **No MCP server.** We have not published one. If that changes it will be listed here and in `/llms.txt` first. - **No webhooks you can subscribe to.** The only webhook on this domain is the enquiry-form intake, which is ours, not yours. The public, usable surface is the two n8n nodes and the endpoints above. When there is more, this page is where it appears. ## Getting in touch about the code - Bugs and feature requests on the nodes: open an issue on the relevant GitHub repository, with the payload that broke it. - Everything else: hi@hecigo.com, or the form at [hecigo.com/contact](https://hecigo.com/contact/). --- # Contact hecigo hecigo is operated by **HECIGO TECHNOLOGY CO., LTD**. We reply within one business day, in Vietnamese or English. ## Contact details - **Email:** hi@hecigo.com - **Phone:** (+84) 963 929 241 - **Address:** CirCO Dien Bien Phu, 222 Dien Bien Phu street, Vo Thi Sau ward, District 3, Ho Chi Minh City, Vietnam - **Business hours:** Monday to Friday, 09:00-18:00 Indochina Time (UTC+07:00) ## Channels - GitHub: https://github.com/hecigo - LinkedIn: https://www.linkedin.com/company/hecigolab - Facebook: https://www.facebook.com/hecigolab - Zalo Official Account: https://zalo.me/3108963776852260798 ## What to send Which two systems are out of sync, and where exactly? A specific answer is far more useful to both of us than a request for a capability deck. The details that shorten the first reply by a week: - The two system names, and which direction data is supposed to move. - What breaks today: duplicates, missing records, stale values, or a manual re-entry step somebody is doing by hand. - Roughly how many records a day, and whether either side offers webhooks. - Whether anyone has attempted the integration before, and what happened. We will tell you plainly if the problem is not one we should take. That happens often enough to be worth saying: a job that a native connector already solves is not a job we will quote for. ## Enquiry form The form on this page sends your name, email, stated role, and message to our intake workflow, and nothing else. What happens to that data is described in the [privacy policy](https://hecigo.com/privacy/). If you would rather not use the form, plain email to hi@hecigo.com reaches the same place. --- # Privacy Policy This page describes what the website **hecigo.com** collects, who receives it, and how to have it removed. It covers this website only. Data processed inside a client's own systems during an integration engagement is governed by the contract for that engagement, not by this page. **Data controller:** HECIGO TECHNOLOGY CO., LTD, CirCO Dien Bien Phu, 222 Dien Bien Phu street, Vo Thi Sau ward, District 3, Ho Chi Minh City, Vietnam. Contact for any privacy question or request: **hi@hecigo.com**. **Last updated:** 23 August 2026. ## What we collect ### Information you send us deliberately The enquiry form on this site collects exactly four fields: your **name**, your **email address**, the **role** you select from the dropdown, and your **message**. Nothing else is read from your browser and attached to it. Submitting the form sends those four fields to our intake workflow at `workflow.thenexova.com`, which is operated by THE NEXOVA on our behalf and delivers the enquiry to us. If you email or call us directly, we hold whatever you chose to put in that message for the same purpose and for the same period. We use this information for one thing: replying to you and, if it becomes a project, running that project. We do not sell it, rent it, or add it to a marketing list you did not ask to join. ### Information collected automatically - **Google Analytics 4** (measurement ID `G-DFZBPG12H8`) records page views, approximate location derived from IP address, referrer, device type, and browser. Google processes this as our processor. IP addresses are truncated by Google before storage. - **Meta Pixel** (ID `905017395917127`) records page views and passes them to Meta so we can measure whether our posts bring anyone here. Meta acts as an independent controller for that data under its own terms. - **Hosting and CDN logs.** The site is served by Netlify behind Cloudflare. Both keep short-lived request logs containing IP address, user agent, and requested path, for delivery and abuse prevention. We do not query these logs to identify visitors. Fonts are compiled into the site at build time and served from our own domain, so loading a page does not send a request to Google Fonts. There is no chat widget, no session recorder, and no A/B testing tool on this site. ## Cookies Google Analytics and the Meta Pixel set cookies in your browser. They are the only cookies this site causes. Nothing on hecigo.com requires a cookie to function. Blocking them in your browser, or using any tracker-blocking extension, leaves the entire site working normally, including the enquiry form. ## Automated clients and AI agents This site publishes machine-readable representations of its own public pages: `/llms.txt`, `/sitemap.xml`, Markdown variants of each page, and `/blog-index.json`. Requesting any of those is an ordinary anonymous page request and is logged the same way as a browser visit. No additional data is collected from automated clients, and none of these files contain personal data about visitors. ## How long we keep it **Enquiries have no fixed expiry.** We keep an enquiry, and the correspondence that followed it, until you ask us to delete it. If it became a signed engagement, that contract's retention terms apply instead. There is no timer running in the background. Ask and it goes; see *Your rights* below. **Analytics data is not attached to you, and cannot be deleted on request.** Google Analytics and the Meta Pixel record page views, not identities. Nothing this site sends them carries your name, your email, or any account of yours, so there is no "your data" for us to look up and remove. The honest answer is that we could not comply with such a request even if we wanted to. What that data does instead is expire on the platform's own schedule: 14 months for Google Analytics, and Meta's default for the Pixel. You can stop the collection at any time, without asking us, with a tracker blocker. ## Who else sees it Only the processors named above: Google (analytics), Meta (pixel), Netlify and Cloudflare (hosting and delivery), and THE NEXOVA (enquiry intake workflow). We do not share enquiry contents with anyone else, and we do not publish client names or details without written permission. ## Your rights These rights cover what we hold under your name or email address: your enquiry and everything we exchanged after it. Write to **hi@hecigo.com** and you can ask us to: - tell you what we hold about you, - send you a copy of it, - correct anything that is wrong, - delete it. We act on these requests within 30 days and do not charge for them. You do not need to give a reason, and you do not need to have been a client. They do not extend to the analytics data described above, for the reason given there: it is not linked to an identity, so there is nothing to retrieve or erase. To stop that collection, use a tracker blocker or your browser's "do not track" setting, or opt out through Google's and Meta's own controls, none of which requires contacting us. ## International transfers Google, Meta, Netlify, and Cloudflare process data on infrastructure outside Vietnam. Enquiry contents themselves are held on infrastructure operated in and for Vietnam and Singapore. ## Children This site is aimed at businesses. We do not knowingly collect information from anyone under 16. If you believe we have, write to hi@hecigo.com and we will delete it. ## Changes If this policy changes materially we will update the date at the top and note the change here. The current version is always at [hecigo.com/privacy](https://hecigo.com/privacy/), and a Markdown copy is at [hecigo.com/privacy.md](https://hecigo.com/privacy.md). --- # Kiểm tra độ thân thiện của website với AI Agent: Cơ chế hoạt động của Vercel Is Agentic Is Agentic chấm hecigo.com 73/100. Vá tám mục trong một buổi, quét lại 79/100, và thứ có tác động lớn nhất không nằm trong một dòng code nào. Published: 2026-08-23 · Language: vi · Tags: AI Agent, Content Negotiation, Web Architecture, HTTP, Middleware · Canonical: https://hecigo.com/blog/kiem-tra-do-than-thien-cua-website-voi-ai-agent-co-che-hoat-dong-cua-vercel-is-a/ --- hecigo.com được [Is Agentic](https://is-agentic.com) chấm **73/100**. Tám mục fail hoặc chỉ đạt một nửa. Vá hết trong một buổi, quét lại được **79/100**, và thứ có tác động lớn nhất hoá ra không nằm trong một dòng code nào của chúng tôi. Con số 79 đó nói ít hơn vẻ ngoài của nó. Riêng bề mặt "public website" đi từ 59% lên 92%, tức 8 trên 16 check thành 15 trên 17. Tổng chỉ nhích 6 điểm vì bộ quét **mở thêm hai bề mặt mới để chấm** sau khi đọc trang mới của chúng tôi. Vì sao lại thế là chỗ đáng đọc hơn cả con số. Bài này gồm hai phần: cơ chế chấm điểm hoạt động ra sao, và tám lỗi thật cùng cách vá, kèm số đo trước sau. Phần thứ hai đáng đọc hơn phần thứ nhất. ## Is Agentic: 127 check trên bốn tầng Đây không phải sản phẩm của riêng Vercel. Theo chính bài công bố của [Ora](https://ora.ai/blog/is-agentic-with-vercel), is-agentic.com là bản mở rộng của bộ xếp hạng do Ora xây, làm chung với Vercel. Ora quét hơn 16.000 domain, và mỗi phiên kiểm tra trên is-agentic.com đều do agent của Ora chạy, không phải một crawler tĩnh đọc HTML. Bộ chấm gồm **127 check trên bốn tầng**: discovery, access, usability và payments. Bốn tầng này là trục *phạm vi*, khác với trục *trọng số* ở mục sau. Một site không bán hàng vẫn quét đủ bốn tầng, chỉ là tầng payments không kích hoạt check nào. Quá trình quét đi qua ba việc: 1. **Khám phá.** Agent đọc `robots.txt`, `sitemap.xml`, `llms.txt`, và các endpoint khai báo giao thức như MCP Server Card hay OpenAPI spec. 2. **Truy xuất.** Gửi yêu cầu Markdown qua header HTTP, kiểm khả năng render phía máy chủ, và kiểm tính toàn vẹn của mã trạng thái HTTP. Đây là chỗ phần lớn site rụng điểm. 3. **Thực thi tác vụ.** Agent ghi lại một hành trình thật khi cố tương tác với các thành phần điều khiển trên trang, và chỉ đúng chỗ phát sinh nghẽn. ## Hai nhóm tiêu chí: Essential và Recommended Hệ thống tính điểm tách rõ yêu cầu bắt buộc khỏi tính năng mở rộng, nên site không có nhu cầu thương mại hay API không bị trừ điểm oan: | Nhóm kiểm tra | Mục tiêu kỹ thuật | Tác động khi lỗi | | --- | --- | --- | | **Essential** | HTML render phía máy chủ, mã HTTP chuẩn, cấu trúc thẻ ngữ nghĩa, lỗi phục hồi được, thành phần điều khiển dùng được | Chiếm phần lớn trọng số điểm | | **Recommended** | Endpoint API công khai, luồng OAuth, MCP server, GraphQL, cổng tài liệu, bề mặt thương mại | Chỉ kích hoạt khi bằng chứng quét cho thấy site có thứ đó | | **Emerging formats** | `llms-full.txt`, giao thức A2A, x402 | Cộng điểm thưởng có giới hạn, vắng mặt không bao giờ làm giảm điểm | Điểm đáng chú ý: Recommended **kích hoạt theo bằng chứng**. Site không có API thì không bị hỏi về API. Nhưng nếu agent tìm thấy dấu vết một cổng tài liệu mà không tìm được tài liệu, mục đó fail. > Related: [Kiến Trúc Nền Tảng Open API: Định Hướng Kỹ Thuật, Tuân Thủ và Vai Trò Của Lớp Middleware](https://hecigo.com/blog/kien-truc-nen-tang-open-api-dinh-huong-ky-thuat-tuan-thu-va-vai-tro-cua-lop-midd/): Giao diện lập trình ứng dụng mở (Open API) không đơn thuần là việc mở một cổng HTTP endpoint ra Internet. Khi doanh nghiệp mở rộng kết nối với đối... ## Ba chuẩn kết nối: llms.txt, Markdown negotiation và MCP Theo [phân tích hạ tầng agent của Vercel](https://vercel.com/blog/agentic-infrastructure), lưu lượng từ agent lập trình và agent tương tác tự động đang chiếm tỉ trọng ngày càng lớn. Ba giao thức đang thành mặc định: ### 1. File chỉ dẫn /llms.txt Đặc tả ở [llmstxt.org](https://llmstxt.org/) quy định cấu trúc rất chặt và rất ngắn: một H1 tên site, một blockquote tóm tắt, các mục H2 chứa danh sách link dạng `[tên](url): ghi chú`, và mục `## Optional` cuối cùng dành cho thứ agent bỏ qua được khi cần ngữ cảnh ngắn. Chỉ H1 là bắt buộc. Phần đắt giá nhất không nằm trong đặc tả: mục nói **khi nào nên dùng bạn**. Danh sách dịch vụ thì agent nào cũng suy ra được từ trang chủ. Câu "đừng gọi chúng tôi cho việc X" mới là thứ nó không tự biết. Đi kèm là `/llms-full.txt`, bản nối toàn bộ nội dung site thành một tài liệu. Với hecigo.com nó nặng 158 KB và thay được 18 lần gọi riêng lẻ bằng đúng 1 lần. Với agent trả tiền theo token thì đó là phép đánh đổi rõ ràng: nạp thừa một ít nội dung để bỏ hẳn 17 vòng mạng. ### 2. Markdown content negotiation Khi client gửi `Accept: text/markdown`, server trả bản Markdown sạch trên cùng URL canonical. Số đo thật trên hecigo.com sau khi bật: | URL | HTML | Markdown | Giảm | | --- | --- | --- | --- | | Trang chủ | 215.970 bytes | 4.355 bytes | 98% | | Một bài blog kỹ thuật | 115.241 bytes | 8.439 bytes | 93% | | Một bài dài hơn | 204.351 bytes | 12.790 bytes | 94% | Trang chủ giảm nhiều nhất vì nó chứa Three.js, sơ đồ SVG inline và nhiều lớp bọc layout. Con số 98% đó không phải mức chung, nó là mức của một trang chủ nặng. Bài blog, vốn đã chủ yếu là văn bản, giảm quanh 93%. ### 3. Khai báo Model Context Protocol Để agent **thực thi** được hành động chứ không chỉ đọc, site cung cấp công cụ cần khai báo manifest rõ ràng. Điểm cần cẩn thận không nằm ở việc dựng server mà ở việc nuôi nó: một MCP server chết còn tệ hơn không có, vì agent đã học được rằng endpoint đó tồn tại. hecigo hiện **không** publish MCP server nào, và `/llms.txt` nói thẳng điều đó thay vì để agent tự đi dò. Khai một endpoint không tồn tại tốn nhiều uy tín hơn là thiếu nó. ## Cái bẫy q-value trong content negotiation Đây là chỗ bản đầu của bài này viết sai, nên sửa ngay tại đây. Cách viết trực giác là kiểm chuỗi: ```typescript // SAI. Đừng dùng. const isMarkdown = acceptHeader.includes('text/markdown') ``` Nó hỏng với client gửi `Accept: text/html, text/markdown;q=0.1`, nghĩa là *"cho tôi HTML, Markdown cũng chấp nhận được nhưng tôi không thích"*. Phép kiểm chuỗi trả về `true` và ép Markdown vào một client muốn HTML. Header `Accept` là **danh sách ưu tiên có thứ tự**, không phải một chuỗi. Theo [hướng dẫn parse Accept của acceptmarkdown.com](https://acceptmarkdown.com/guides/accept-parsing), phép chọn đúng cần ba luật: sắp theo q giảm dần, phá hoà bằng độ cụ thể (`text/markdown` thắng `text/*`, `text/*` thắng ký tự đại diện), và tôn trọng `q=0` nghĩa là *đừng gửi thứ này cho tôi*. ```typescript type Entry = { type: string; subtype: string; q: number } function parseAccept(header: string): Entry[] { return header.split(',').flatMap((raw) => { const [range, ...params] = raw.split(';') const [type, subtype] = range.trim().toLowerCase().split('/') if (!type || !subtype) return [] const q = params .map((p) => p.trim().toLowerCase()) .filter((p) => p.startsWith('q=')) .map((p) => Number.parseFloat(p.slice(2))) .find(Number.isFinite) ?? 1 return [{ type, subtype, q }] }) } // Độ cụ thể: khớp đúng 3, text/* 2, ký tự đại diện 1, không khớp 0. function specificity(e: Entry, mime: string): number { const [type, subtype] = mime.split('/') if (e.type === '*' && e.subtype === '*') return 1 if (e.type !== type) return 0 if (e.subtype === '*') return 2 return e.subtype === subtype ? 3 : 0 } // Điểm của một định dạng là q của entry khớp CỤ THỂ NHẤT, không phải q cao nhất // trong các entry khớp. Đúng chỗ này mới làm header thật của Chrome ra HTML. function scoreFor(entries: Entry[], mime: string): number { let bestSpec = 0 let bestQ = 0 for (const e of entries) { const s = specificity(e, mime) if (s === 0) continue if (s > bestSpec || (s === bestSpec && e.q > bestQ)) { bestSpec = s bestQ = e.q } } return bestQ } /** Trả về định dạng nên phục vụ, hoặc null để trả 406. available[0] là mặc định. */ export function negotiate(header: string | null, available: string[]): string | null { if (header === null) return available[0] // không có Accept nghĩa là không ràng buộc const entries = parseAccept(header) if (entries.length === 0) return null // Header chỉ toàn q=0 là danh sách loại trừ, không phải lời từ chối tất cả: // "text/markdown;q=0" nghĩa là "gì cũng được trừ Markdown". if (entries.every((e) => e.q === 0)) { return available.find((m) => !entries.some((e) => specificity(e, m) > 0)) ?? null } let chosen: string | null = null let top = 0 for (const mime of available) { const s = scoreFor(entries, mime) if (s > top) { chosen = mime // so sánh lớn hơn hẳn, để thứ tự available làm phép phá hoà top = s } } return top > 0 ? chosen : null } ``` Bộ test tối thiểu để biết mình chưa hỏng, lấy từ chính bảng test vector của acceptmarkdown.com: | Accept | Server có | Phải trả | | --- | --- | --- | | `text/markdown` | md, html | markdown | | `text/markdown, text/html;q=0.8` | md, html | markdown | | `text/html` | md, html | html | | `text/markdown;q=0, text/html` | md, html | html | | `text/markdown;q=0` | chỉ md | 406 | | không có Accept | md, html | html | | ký tự đại diện | md, html | html | Dòng cuối là dòng hay bị bỏ sót. Header thật của Chrome kết thúc bằng một ký tự đại diện mang `q=0.8`, nên nếu tính điểm bằng q cao nhất thay vì q của entry cụ thể nhất, trình duyệt sẽ nhận Markdown. Phần nối vào Next.js middleware ngắn hơn nhiều so với phần parser, và có một chỗ dễ sai: ```typescript export function middleware(request: NextRequest) { const chosen = negotiate(request.headers.get('accept'), ['text/html', 'text/markdown']) if (chosen === null) { return new NextResponse('406 Not Acceptable\n\ntext/html\ntext/markdown\n', { status: 406, headers: { Vary: 'Accept', 'Cache-Control': 'no-store' }, }) } const response = chosen === 'text/markdown' ? NextResponse.rewrite(new URL(`${request.nextUrl.pathname}.md`, request.url)) : NextResponse.next() // Vary đặt trên MỌI nhánh, kể cả nhánh HTML. Thiếu nó thì bản nào tới CDN // trước sẽ được phục vụ cho tất cả những ai tới sau. response.headers.set('Vary', 'Accept, Accept-Encoding') return response } ``` Đừng `set('Content-Type', ...)` trên một response `rewrite`. Content-Type do đích quyết định, ở đây là chính file `.md` tĩnh. Ép nó ở tầng middleware là cách tạo ra một header đúng trên máy mình và sai trên CDN. ## Tám lỗi của hecigo.com và cách vá Đây là báo cáo thật, không phải ví dụ. Điểm gốc 73/100. | Mục | Trạng thái | Nguyên nhân | Cách vá | | --- | --- | --- | --- | | 404 thân thiện agent | Một nửa | Trả đúng 404 nhưng thân trang rỗng nghĩa | Thêm bản đồ phục hồi dạng Markdown ngay trong thân 404 | | Markdown negotiation | Fail | `Accept: text/markdown` trả về `text/html`, `Vary` thiếu `Accept` | Edge function làm negotiation, đặt `Vary: Accept, Accept-Encoding` | | Tài nguyên cho lập trình viên | Fail | Hai n8n node có thật trên npm nhưng không có trang nào gom lại | Trang `/developers` với URL cố định, có tên thương hiệu trong tiêu đề và H1 | | JSON-LD | Fail | Trang chủ không có khối structured data nào | Đồ thị Organization và WebSite nối bằng `@id` | | Hướng dẫn cho agent | Fail | Không có file nào nói khi nào nên dùng hecigo | Mục "when to use" trong `llms.txt` và một file riêng | | Organization schema | Fail | Hệ quả của mục JSON-LD | `contactPoint` và `address` kiểu `PostalAddress` | | Metadata | Một nửa | Thiếu thẻ canonical | Đặt canonical theo từng trang | | Trang neo niềm tin | Một nửa | Có about và contact, thiếu privacy | Ba trang thật, mỗi trang trên 500 ký tự nội dung | Hai chỗ đáng nói kỹ hơn vì chúng là bẫy chứ không phải việc thiếu. **Canonical không được đặt ở layout gốc.** Trong Next.js App Router, metadata được kế thừa xuống mọi trang con. Khai `alternates.canonical` một lần ở `app/layout.tsx` trông rất gọn, và kết quả là mọi trang trên site đều trỏ canonical về trang chủ. Phải khai theo từng trang. **Ba trang tĩnh giờ có một nguồn chân lý duy nhất.** Trang privacy và trang developers render thẳng từ file Markdown trong `content/pages/`, và chính file đó được xuất thành bản `.md` mà agent đọc. Trước đó chúng tôi định viết hai bản riêng, và đó là cách một site bắt đầu nói hai điều khác nhau với người và với máy. Đo lại sau khi vá: 18 đường dẫn đều trả Markdown đúng định dạng, `Accept: application/pdf` trả 406 kèm danh sách định dạng có sẵn theo khuyến nghị của RFC 9110, và bản `.md` gọi trực tiếp cho ra md5 giống hệt bản negotiation trên URL canonical. ### Quét lại: 79/100, và một bất ngờ Cả tám mục trên biến khỏi danh sách lỗi. Bằng chứng bộ quét tự ghi cho hai mục nặng nhất: - 404: *"Nonexistent paths return HTTP 404 with markdown guidance for agents - the strongest 404 contract"* - Negotiation: *"Canonical URL serves text/markdown and text/html via Accept negotiation with Vary: Accept"* Bề mặt "public website" đi từ **59% lên 92%**. Nhưng tổng chỉ từ 73 lên 79, vì bảng điểm đổi hình: | | Trước | Sau | | --- | --- | --- | | Essential | 5 / 7 check, 62,9 điểm | 6 / 9 check, 59,3 điểm | | Recommended | 3 / 9 check, 8,9 điểm | 12 / 17 check, 14,5 điểm | | Bonus | 7 tín hiệu, +1,6 | 15 tín hiệu, +3,7 | Số check áp dụng nhảy từ 16 lên 26. Bộ quét kích hoạt thêm hai bề mặt: **API** và **MCP**, cả hai đều chấm thấp. Điểm Essential vì thế **giảm** dù số check pass tăng, do `OpenAPI spec` và `JSON error responses` là check Essential và cả hai fail. Nguyên nhân gần như chắc chắn là trang `/developers` chúng tôi vừa dựng. Nó nêu tên API docs, OpenAPI, webhook và MCP server, **dù là để nói rằng hecigo không có thứ nào trong số đó**. Bộ quét đọc thấy các khái niệm ấy, kết luận rằng những bề mặt đó áp dụng cho site này, rồi mở chúng ra để chấm. Nói thật về việc không có API lại tạo ra một bề mặt API để bị trừ điểm. Đó không phải lỗi của bộ quét: nó chấm theo bằng chứng, và bằng chứng là do chúng tôi cung cấp. Bài học dùng được cho bất kỳ ai sắp viết trang tài liệu: **liệt kê thứ mình không có cũng là một tuyên bố**, và máy sẽ xử lý nó như mọi tuyên bố khác. ## Thứ không nằm trong code Sau khi mọi thứ đã xanh, một lần kiểm cuối vào `robots.txt` cho ra 1.925 bytes. File chúng tôi sinh ra chỉ có 89 bytes. CDN đứng trước site đang chèn thêm một khối quản lý sẵn vào đầu file, đặt `Disallow: /` cho ClaudeBot, GPTBot, CCBot, Google-Extended, Bytespider, Amazonbot, Applebot-Extended và meta-externalagent, kèm một tín hiệu nội dung từ chối dùng cho huấn luyện. Khối `User-Agent: *` với `Allow: /` do site sinh ra nằm **phía dưới**. Nó không cứu được gì: theo luật `robots.txt`, crawler dùng group khớp cụ thể nhất với chính nó. ClaudeBot đọc group tên `ClaudeBot` và dừng ở đó. Nghĩa là toàn bộ lớp content negotiation vừa dựng vô hình với đúng nhóm agent nó nhắm tới. Và hai câu đang publish trên `/llms.txt` cùng `/developers` nói rằng không crawler AI nào bị chặn đã thành lời nói sai, đúng vào lúc chúng được viết ra. Ba điều rút ra, và điều thứ ba là điều đắt nhất: - **Bộ quét không bắt được lỗi này.** Điểm số vẫn lên. Mọi check kỹ thuật vẫn xanh. - **Không có test nào trong repo bắt được nó.** Setting nằm ở dashboard của CDN, không có dòng code nào phản ánh nó. Build xanh, test pass, site sai. - **Nó có thể quay lại bất cứ lúc nào** mà không ai được báo, nếu nhà cung cấp đổi mặc định. Phép kiểm rẻ nhất là `curl -s https://domain/robots.txt | wc -c` và so với kích thước file mình biết mình đã sinh ra. Đây đúng là loại lỗi mà lớp middleware sinh ra để xử lý: hai hệ thống đều hoạt động đúng theo cách riêng của chúng, và cái sai chỉ tồn tại ở chỗ tiếp giáp. ## Điểm số sạch không đồng nghĩa agent chạy được việc Đạt điểm cao trên một bộ quét mới giải quyết phần đọc dữ liệu. Trong hệ thống doanh nghiệp, chỗ hỏng nằm ở lúc agent phải **ghi**, qua CRM, ERP hay phần mềm quản lý đơn hàng. Ba điểm nghẽn thường gặp: - **Thiếu khoá chống trùng.** Agent gặp sự cố mạng và gửi lại một thao tác ghi. Không có `idempotency-key`, đơn hàng thành hai. - **Không có trần vòng lặp.** Agent kẹt trong suy luận vô tận vì đầu ra API không nhất quán, đốt tài nguyên và chi phí token cho tới khi ai đó nhìn thấy hoá đơn. - **Dữ liệu lệch ngầm.** Frontend báo thành công, hệ thống kế toán bên dưới nhận sai định dạng, và chỉ lộ ra lúc đối soát cuối kỳ. Chuẩn hoá bề mặt website cho agent là bước đầu tiên và là bước rẻ nhất. Phần còn lại là kiểm soát tầng giữa: ghi log trạng thái, ràng buộc quyền hạn, và một đường đối soát chạy theo lịch. > **Thấy hữu ích? Theo dõi hecigo trên [Zalo OA](https://zalo.me/3108963776852260798)** để nhận bài viết kỹ thuật mới sớm nhất, không spam, chỉ nội dung thực tế. Hoặc liên hệ trực tiếp nếu bạn cần hỗ trợ triển khai. > Related: [Đọc tiếp: Middleware: phần việc n8n, OpenClaw và mọi nền tảng tự động hóa không làm hộ bạn](https://hecigo.com/blog/middleware-chia-khoa-mo-khoa-toan-bo-tiem-nang-cua-n8n-openclaw-va-moi-nen-tang-/): Nối được API là phần dễ. Phần khó lộ ra sau vài tuần chạy thật: sự kiện gửi lại hai lần, webhook rơi mất một giao dịch, hóa đơn bị hủy nhưng hệ... ## Nguồn tham khảo - [Is Agentic by Vercel - AI Agent Readiness Score](https://is-agentic.com) - Is Agentic - [We partnered with Vercel to launch is-agentic.com](https://ora.ai/blog/is-agentic-with-vercel) - Ora - [Parsing Accept and quality values](https://acceptmarkdown.com/guides/accept-parsing) - acceptmarkdown.com - [Returning 406 Not Acceptable](https://acceptmarkdown.com/guides/returning-406) - acceptmarkdown.com - [Set the Vary: Accept header](https://acceptmarkdown.com/guides/vary-accept) - acceptmarkdown.com - [The llms.txt file format](https://llmstxt.org/) - llms.txt - [Agentic Infrastructure](https://vercel.com/blog/agentic-infrastructure) - Vercel --- Published by hecigo, middleware & integration lab. https://hecigo.com · hi@hecigo.com --- # Firecrawl on n8n: picking the right operation, and what async does to your workflow Scrape, crawl, map, search, extract and batch scrape all return web content. Picking wrong costs you an order of magnitude in time or credits. Here is the decision, and the async behaviour that changes how you wire the workflow. Published: 2026-08-22 · Language: en · Tags: n8n, Firecrawl, Web Scraping, Integration · Canonical: https://hecigo.com/blog/n8n-firecrawl-node-choosing-the-right-operation/ --- `n8n-nodes-firecrawl-v2` exposes ten operations. Six of them return web content, and from the parameter list they look interchangeable. They are not: picking the wrong one costs an order of magnitude in either time or credits, and two of them change the shape of your workflow because they run asynchronously. The [README](https://github.com/hecigo/n8n-nodes-firecrawl-v2) documents every parameter. This is the part that comes before that: which one you want, and what to expect once it runs. ## The decision in one table | You know | You want | Operation | |---|---|---| | One exact URL | Its content | **Scrape** | | A list of exact URLs | All their content | **Batch Scrape** | | A site, not which pages | The URL list, cheaply | **Map** | | A site, and you want everything | Content of every page under it | **Crawl** | | Neither the site nor the URL | Pages matching a query | **Search** | | A page and a schema | Structured fields, not prose | **Extract** | The two that get misused are Crawl and Extract. **Crawl** is for when you genuinely want a whole site section. It follows links, respects `includePaths` and `excludePaths`, and it is the expensive one. If you already know which pages you want, Batch Scrape does the same work without the discovery cost. **Extract** is not a scrape with extra steps. It runs an AI pass over the fetched content against a prompt and a schema, and returns fields rather than markdown. When you want "the price, the SKU and the stock status from each of these product pages", Extract is the operation. When you want the page text and you will parse it yourself, Scrape is cheaper and deterministic. ## Map first is almost always right The instinct with a site you do not know is to Crawl it and see what comes back. That is the expensive way to find out you only needed nine pages. Map returns the URL list without fetching content. It is fast and cheap, and it turns an unbounded job into a bounded one: ```text Firecrawl: Map (https://example.com/docs) -> Code: filter the URLs you actually want -> Firecrawl: Batch Scrape (the filtered list) ``` Three benefits over Crawl. You see the size before you commit. You filter with real code rather than path-pattern guessing. And the result is reproducible: the same URL list yields the same batch, which matters when you diff this week against last week. Use Crawl when the site is small enough that enumeration is pointless, or when you genuinely want everything under a path and do not care about the count. ## Async operations change the workflow shape Crawl, Extract and Batch Scrape are asynchronous. By default they return a **job ID**, not results. Your next node receives an ID and nothing else, which looks like the node failed. Two ways to handle it, and they suit different jobs: **Inline.** Set `waitForCompletion` and the node polls every 2 seconds and returns results directly. Simple, and the workflow reads top to bottom. The cost is that the execution occupies a worker slot for the entire duration, which for a large crawl can be minutes. **Deferred.** Take the job ID, and use Get Crawl Status, Get Extract Status or Get Batch Scrape Status later, either on a schedule or after a Wait node. More nodes, but a long job stops holding a worker hostage. For anything short and interactive, take the inline path. For a nightly crawl of a large site, take the deferred path so a slow job cannot stall the rest of your queue. ## Three defaults that surprise people **`waitForCompletion` is not consistent across operations.** Extract defaults to `true`; Crawl and Batch Scrape default to `false`. So the same setting produces inline results in one node and a bare job ID in the next. Set it explicitly on every async operation rather than relying on the default, if only so the workflow reads unambiguously six months later. **Format support differs by operation.** Scrape supports ten formats, including `json`, `summary`, `audio` and `changeTracking`. Crawl, Search and Batch Scrape support five basic ones. If your workflow depends on `changeTracking` for content monitoring, that constrains you to Scrape, and that is worth knowing before you design around Crawl. **`onlyMainContent` defaults to `true`.** It strips headers, navigation and footers, which is what you want for an article and wrong for a page whose value is in the nav. Turn it off deliberately rather than wondering where half the page went. One more that is not a default but bites the same way: `waitFor` is `0` by default. For a server-rendered page that is correct. For a single-page app, the fetch completes before the content exists and you get an empty shell. Raise it and the page appears; the number is per site and you find it by trying. ## Self-hosted versus cloud The node works against both. The credential difference is one field: | | Base URL | |---|---| | Cloud | `https://api.firecrawl.dev/v2` | | Self-hosted | `http://your-host:3002/v2` | **The `/v2` suffix is required in both cases.** Leaving it off is the single most common credential failure, and the error it produces points at authentication rather than at the path, which sends people looking in the wrong place. Self-hosting is worth it when volume is steady enough that per-request pricing stops making sense, when the pages you fetch must not leave your own infrastructure, or when you want latency measured in your own network rather than across the internet. It costs you an instance to run and patch. Cloud is worth it when volume is bursty or when nobody on the team wants to own another service. The node does not care which you pick, and switching later is a credential change rather than a workflow change. ## Error handling The node supports n8n's `continueOnFail`. On failure the item becomes `{ "error": "message" }` and the workflow keeps going. That is the right default for batch work, where one dead URL out of forty should not kill the run. It is also a trap: **an item with an `error` key still flows downstream and still looks like an item.** Filter for it explicitly before anything writes to a database, or you will store rows whose content field contains an error string. > Related: [Thu Thập Dữ Liệu Web cho Doanh Nghiệp Việt với n8n và Firecrawl](https://hecigo.com/blog/toi-uu-hoa-quy-trinh-thu-thap-du-lieu-web-cho-doanh-nghiep-viet-voi-n8n-va-firec/): Node Firecrawl trong n8n có sáu thao tác dễ nhầm nhau: scrape, crawl, map, search, get status và cancel. Bài này đi qua từng cái và khi nào dùng... ## The part after the fetch Getting the content is the first half. The second half is putting it somewhere useful without duplicating it, losing it, or failing silently when a fetch returns nothing. That second half is what we build and run. > **Found this useful?** Follow hecigo on [Zalo OA](https://zalo.me/3108963776852260798) for new technical writing, or [get in touch](https://hecigo.com/#contact) if two of your systems need to talk to each other and something is going wrong in between. > Related: [Read next: Running a Zalo bot on n8n: what breaks between test mode and production](https://hecigo.com/blog/n8n-zalo-bot-node-what-breaks-in-production/): The node works on the first try in test mode. Then you activate the workflow and nothing arrives. Five failure modes we hit running Zalo Bot... ## References - [n8n-nodes-firecrawl-v2](https://github.com/hecigo/n8n-nodes-firecrawl-v2) - hecigo - [Firecrawl](https://firecrawl.dev) - Firecrawl - [Error handling | n8n Docs](https://docs.n8n.io/flow-logic/error-handling/) - n8n --- Published by hecigo, middleware & integration lab. https://hecigo.com · hi@hecigo.com --- # Running a Zalo bot on n8n: what breaks between test mode and production The node works on the first try in test mode. Then you activate the workflow and nothing arrives. Five failure modes we hit running Zalo Bot Platform through n8n, and why each one happens. Published: 2026-08-22 · Language: en · Tags: n8n, Zalo Bot, Webhook, Integration · Canonical: https://hecigo.com/blog/n8n-zalo-bot-node-what-breaks-in-production/ --- You install `n8n-nodes-zalo-platform`, drop a Zalo Bot Trigger on the canvas, hit **Test step**, send yourself a message, and it appears. Ten minutes of work. Then you activate the workflow and messages stop arriving. Nothing is red. No node errors. The execution list is empty. Every failure below is one we hit for real. The [README](https://github.com/hecigo/n8n-nodes-zalo-platform) documents the operations; this covers what happens after they are wired up. ## Cloudflare blocks Zalo before n8n ever sees it This one costs the most hours because there is nothing to debug. n8n logs no request. Zalo reports no error. The webhook is registered correctly on both sides. Zalo sends webhook callbacks with `User-Agent: Java/1.8.0_192`. Cloudflare's managed rules treat that as a bot and drop it, and Browser Integrity Check drops it again. Neither leaves a trace in your n8n logs, because the request never reaches your origin. Two rules fix it, both scoped to the webhook path only: | Rule type | Condition | Action | |---|---|---| | WAF custom rule | URI path contains `/webhook` | Skip all managed rules | | Configuration rule | URI path contains `/webhook` | Disable Browser Integrity Check | Use `/webhook` with no trailing slash. n8n serves production webhooks at `/webhook/...` and test webhooks at `/webhook-test/...`, and the shorter prefix covers both. Scope it to the path rather than disabling protection site wide. If you are not behind Cloudflare, the same class of problem shows up in any WAF, reverse proxy, or bot-filtering layer that inspects User-Agent. Check there first before you touch the node. ## The webhook belongs to the workflow, not to you The trigger node manages the entire webhook lifecycle. On activation it calls `POST /setWebhook` with the n8n webhook URL, and on deactivation it calls `POST /deleteWebhook`. You never register it by hand. It also derives the secret token deterministically: ```text SHA256(botToken).hex().substring(0, 32) ``` Every incoming request is validated against the `X-Bot-Api-Secret-Token` header. Two consequences worth knowing before you debug the wrong thing: **Deriving the token from the bot token means rotating the bot token rotates the secret.** That is the behaviour you want, but it also means a stale registration on Zalo's side, left over from a previous token, will fail validation silently rather than loudly. **Test mode and active mode fight over the same registration.** If the workflow is active and you click Test step, the test listener spins forever while the production webhook keeps the registration. Deactivate the workflow first, then test. The README lists this as a known symptom, and it is the second most common report we get. ## Polling and webhooks are mutually exclusive The node offers **Get Updates**, a long-polling operation, for environments with no public HTTPS endpoint: local development, a machine behind NAT, a network where you cannot open inbound ports. It returns nothing while a webhook is registered. That is Zalo's behaviour, not the node's: a bot delivers through one channel or the other, never both. So the polling workflow starts with a delete: ```text Schedule Trigger (every 30s) -> Zalo Bot: Delete Webhook // run once, or the first poll returns empty -> Zalo Bot: Get Updates (timeout: 25) -> IF (has data) -> process ``` Set the long-poll timeout below the schedule interval. At 25 seconds against a 30 second schedule, each poll closes before the next one opens. Invert those numbers and you get overlapping requests against the same bot. Polling is a development convenience. In production it costs an API round trip every interval whether or not anyone messaged you, and it adds up to half the interval in latency. Use webhooks once you have HTTPS. ## Queue mode needs the node on every container If you run n8n in queue mode, the main process registers webhooks and the workers execute. Community nodes install per container. Install the node only on main and the trigger registers fine, the webhook arrives fine, and then execution fails on a worker that has never heard of `n8n-nodes-zalo-platform`. The failure looks like a node problem. It is a deployment problem. Install on every container that runs workflows, and redeploy them together. The same applies to any community node, but this one is easy to miss because the registration half works. ## The limits that bite later Four constraints that do not matter in a demo and do matter at volume: **Message length is capped at 2000 characters.** Anything assembled from a template, an AI response, or a database field needs a length check before Send Message. Truncate deliberately, or split into several messages, but decide rather than discover. **Webhook delivery is at-least-once.** If your endpoint is slow to answer, Zalo retries, and you process the same message twice. Anything with a side effect (creating a ticket, charging something, sending a reply) needs a deduplication key. `message_id` from the payload is the natural one. **Chat IDs are the only handle you get.** The payload carries `message.chat.id` and `message.from.display_name`, no phone number and no email. If you need to join a Zalo conversation to a customer record, you have to capture that mapping the first time a person messages you and store it. There is no lookup after the fact. **A group chat and a private chat look similar but are not.** `message.chat.chat_type` is `PRIVATE` or a group type, and replies behave differently. Branch on it early rather than discovering it when a bot replies to a group with something meant for one person. ## Where this leaves you The node is thin on purpose: it is a typed wrapper over `POST https://bot-api.zaloplatforms.com/bot{TOKEN}/{method}` with the webhook lifecycle handled for you. Everything above is about the layer around it, which is where integration work actually lives. `n8n-nodes-zalo-platform` is MIT licensed and published on npm at version 1.0.16. If you hit a case it does not handle, open an issue on [GitHub](https://github.com/hecigo/n8n-nodes-zalo-platform) with the payload; that is the fastest route to it being covered. > Related: [Tối Ưu Tự Động Hóa Zalo Bot với n8n: Hướng Dẫn Chi Tiết từ hecigo](https://hecigo.com/blog/toi-uu-tu-dong-hoa-zalo-bot-voi-n8n-huong-dan-chi-tiet-tu-hecigo/): Zalo là ứng dụng nhắn tin phổ biến nhất tại Việt Nam, với hơn 75 triệu người dùng. Nếu doanh nghiệp của bạn hoạt động tại Việt Nam, khách hàng của... ## Where the harder problems are Delivering a message is the easy half. The hard half starts when the conversation has to reach a system of record: a CRM that must not create the same customer twice, an order system whose state changes after the message was sent, a reconciliation job that notices when a message was accepted but never stored. That is the layer we build and run. > **Found this useful?** Follow hecigo on [Zalo OA](https://zalo.me/3108963776852260798) for new technical writing, or [get in touch](https://hecigo.com/#contact) if two of your systems need to talk to each other and something is going wrong in between. > Related: [Read next: Middleware: phần việc n8n, OpenClaw và mọi nền tảng tự động hóa không làm hộ bạn](https://hecigo.com/blog/middleware-chia-khoa-mo-khoa-toan-bo-tiem-nang-cua-n8n-openclaw-va-moi-nen-tang-/): Nối được API là phần dễ. Phần khó lộ ra sau vài tuần chạy thật: sự kiện gửi lại hai lần, webhook rơi mất một giao dịch, hóa đơn bị hủy nhưng hệ... ## References - [n8n-nodes-zalo-platform](https://github.com/hecigo/n8n-nodes-zalo-platform) - hecigo - [Zalo Bot Platform](https://bot.zaloplatforms.com) - Zalo - [Queue mode | n8n Docs](https://docs.n8n.io/hosting/scaling/queue-mode/) - n8n --- Published by hecigo, middleware & integration lab. https://hecigo.com · hi@hecigo.com --- # Kiến Trúc Nền Tảng Open API: Định Hướng Kỹ Thuật, Tuân Thủ và Vai Trò Của Lớp Middleware Giao diện lập trình ứng dụng mở (Open API) không đơn thuần là việc mở một cổng HTTP endpoint ra Internet. Khi doanh nghiệp mở rộng kết nối với đối tác bên Published: 2026-08-22 · Language: vi · Tags: Open API, API Gateway, Middleware, Bảo mật hệ thống, Kiến trúc phần mềm · Canonical: https://hecigo.com/blog/kien-truc-nen-tang-open-api-dinh-huong-ky-thuat-tuan-thu-va-vai-tro-cua-lop-midd/ --- Giao diện lập trình ứng dụng mở (Open API) không đơn thuần là việc mở một cổng HTTP endpoint ra Internet. Khi doanh nghiệp mở rộng kết nối với đối tác bên ngoài hoặc tích hợp giữa các hệ thống nội bộ phân tán, Open API trở thành hợp đồng kỹ thuật ràng buộc về cấu trúc dữ liệu, cơ chế định danh, giới hạn lưu lượng và khả năng mở rộng. ## Khái niệm Open API và sự chuyển dịch kiến trúc Trong các kiến trúc truyền thống, dữ liệu thường bị cô lập trong các cơ sở dữ liệu nội bộ của hệ thống ERP, CRM hoặc POS. Khi phát sinh nhu cầu chia sẻ dữ liệu với đối tác hoặc tích hợp dịch vụ bên thứ ba, các kỹ sư thường đối mặt với việc viết mã nối điểm - điểm (point-to-point) vội vã, dẫn đến rủi ro sai lệch dữ liệu và phân mảnh logic nghiệp vụ. Theo định nghĩa từ [bài phân tích về chiến lược Open API của FMIT](https://fmit.vn/tu-dien-quan-ly/open-api-strategy-la-gi), chiến lược Open API là kế hoạch tổng thể nhằm chuẩn hóa việc công bố, phân phối và kiểm soát các giao diện lập trình để các bên thứ ba có thể kết nối an toàn. Sự chuyển dịch này đã lan từ các tập đoàn công nghệ lớn sang nhiều ngành khác. Tại Việt Nam, các nhà mạng viễn thông cũng đang chuyển từ kinh doanh băng thông thuần túy sang cung cấp hạ tầng như một nền tảng mở, theo [phân tích trên Cafebiz về xu hướng Open API](https://cafebiz.vn/het-thoi-ban-dung-luong-nha-mang-viet-tung-vu-khi-open-api-startup-se-dung-tren-vai-ga-khong-lo-quyet-dat-muc-tieu-30-gdp-176260526181118976.chn). Song song đó, các nền tảng trí tuệ nhân tạo như [hệ thống API của OpenAI](https://openai.com/vi-VN/api/) cũng liên tục chuẩn hóa cấu trúc Responses API và giao thức kết nối công cụ qua MCP (Model Context Protocol) để các hệ thống doanh nghiệp giao tiếp theo một chuẩn thống nhất. > Related: [Middleware: phần việc n8n, OpenClaw và mọi nền tảng tự động hóa không làm hộ bạn](https://hecigo.com/blog/middleware-chia-khoa-mo-khoa-toan-bo-tiem-nang-cua-n8n-openclaw-va-moi-nen-tang-/): Nối được API là phần dễ. Phần khó lộ ra sau vài tuần chạy thật: sự kiện gửi lại hai lần, webhook rơi mất một giao dịch, hóa đơn bị hủy nhưng hệ... ## Chiến lược Open API trong hệ sinh thái doanh nghiệp Một chiến lược Open API đúng đắn đòi hỏi sự phân tách ranh giới rõ ràng giữa ba tầng: 1. **Tầng Hệ thống Gốc (Core Systems):** Chứa dữ liệu nghiệp vụ nhạy cảm (Core Banking, Cơ sở dữ liệu ERP, Kho hàng POS). Tầng này không bao giờ được phơi trực tiếp ra ngoài Internet. 2. **Tầng Middleware / API Gateway:** Đóng vai trò trung gian định tuyến, xác thực, biến đổi payload, kiểm soát rate limit và ghi nhật ký kiểm toán (audit log). 3. **Tầng Người tiêu dùng (Consumers):** Gồm ứng dụng di động, đối tác phân phối, đại lý, webhook hoặc các agent tự động hóa vận hành qua nền tảng như [n8n](https://n8n.partnerlinks.io/thenexova). | Thành phần | Trách nhiệm chính | Giao thức / Chuẩn | Rủi ro nếu thiếu kiểm soát | | :--- | :--- | :--- | :--- | | **Core Database** | Lưu trữ trạng thái gốc | SQL / NoSQL nội bộ | Lộ dữ liệu, nghẽn tài nguyên CPU | | **Middleware** | Chuẩn hóa, mapping payload, khử trùng lặp | REST, gRPC, JSON Schema | Dữ liệu sai lệch, rò rỉ token nội bộ | | **API Gateway** | Rate limit, mTLS, WAF, OAuth2 | HTTPS, OAuth2, OIDC | Tấn công từ chối dịch vụ (DDoS), Brute-force | ## Yêu cầu tuân thủ và chuẩn mực bảo mật Tại các thị trường tài chính và ngân hàng, Open API chịu sự điều chỉnh của các khung pháp lý khắt khe. Điển hình tại Việt Nam, sự ra đời của Thông tư 64/2024/TT-NHNN đã thiết lập các mốc bắt buộc cho ngành ngân hàng khi mở cổng kết nối API với đối tác, như được nhấn mạnh trong [tổng hợp của Gimasys về lộ trình Open API](https://www.facebook.com/pages.gimasys/photos/giải-mã-thông-tư-64-lộ-trình-triển-khai-open-api-toàn-diện-cho-ngân-hàng-việteng/1138355511646690/). Vấn đề chia sẻ dữ liệu có trách nhiệm và bảo mật hệ thống cũng được thảo luận sâu sắc tại các diễn đàn ngành, theo [bài viết trên Tạp chí Thị trường Tài chính Tiền tệ](https://thitruongtaichinhtiente.vn/open-api-va-suc-manh-cua-du-lieu-don-bay-kep-cho-tai-chinh-toan-dien-va-an-toan-he-thong-73859.html). Để đáp ứng các yêu cầu này, kiến trúc Open API cần triển khai ba cơ chế kỹ thuật bắt buộc: ### 1. Khóa định danh và phân quyền theo phạm vi (OAuth2 Scopes) Mỗi consumer khi gửi request phải đính kèm JWT (JSON Web Token) được ký bởi Certificate Authority hợp lệ. Scope chỉ cấp quyền tối thiểu (Least Privilege), ví dụ `read:orders` không được phép gọi endpoint ghi `write:invoices`. ### 2. Tính lũy quyền (Idempotency Key) Mọi thao tác thay đổi trạng thái (POST, PUT, PATCH) qua Open API đều phải có header `Idempotency-Key`. Lớp middleware lưu trữ key này trong Redis kèm mã hash payload trong 24 giờ. Nếu request bị gửi lại do nghẽn mạng, middleware trả về kết quả đã xử lý thay vì thực hiện lại tác vụ, ngăn chặn nguy cơ nhân đôi đơn hàng hoặc giao dịch. ### 3. Masking dữ liệu nhạy cảm (PII Redaction) Dữ liệu căn cước, số thẻ ngân hàng, số điện thoại phải được làm mờ (mask) ngay tại middleware trước khi đẩy vào hệ thống phân tích log hoặc gửi cho đối tác không đủ quyền. ## Thiết kế middleware xử lý dòng dữ liệu Open API hecigo xây dựng và vận hành lớp middleware trung gian giữa các hệ thống cần trao đổi dữ liệu. Trong mô hình này, middleware chịu trách nhiệm biến đổi định dạng, xác thực và xử lý ngoại lệ trước khi đẩy dữ liệu vào hệ thống đích. Đoạn mã TypeScript dưới đây minh họa một pipeline middleware xử lý request Open API với xác thực chữ ký HMAC SHA-256, kiểm tra tính lũy quyền (idempotency) và chuẩn hóa dữ liệu đầu vào: ```typescript import express, { Request, Response, NextFunction } from 'express'; import crypto from 'crypto'; interface CustomRequest extends Request { rawBody?: Buffer; idempotencyKey?: string; } const processedRequests = new Map(); export function verifyHmacSignature(secretKey: string) { return (req: CustomRequest, res: Response, next: NextFunction): void => { const signature = req.headers['x-signature-sha256'] as string; const timestamp = req.headers['x-timestamp'] as string; if (!signature || !timestamp) { res.status(401).json({ error: 'Missing security headers' }); return; } // Chặn request gửi chậm hơn 300 giây để chống replay attack const now = Math.floor(Date.now() / 1000); if (Math.abs(now - parseInt(timestamp, 10)) > 300) { res.status(401).json({ error: 'Request expired' }); return; } const payload = `${timestamp}.${req.rawBody ? req.rawBody.toString('utf8') : JSON.stringify(req.body)}`; const expectedSignature = crypto .createHmac('sha256', secretKey) .update(payload) .digest('hex'); if (!crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(expectedSignature))) { res.status(403).json({ error: 'Invalid HMAC signature' }); return; } next(); }; } export function handleIdempotency(req: CustomRequest, res: Response, next: NextFunction): void => { const idempotencyKey = req.headers['x-idempotency-key'] as string; if (!idempotencyKey) { res.status(400).json({ error: 'Missing X-Idempotency-Key header' }); return; } req.idempotencyKey = idempotencyKey; const cachedResponse = processedRequests.get(idempotencyKey); if (cachedResponse) { res.status(cachedResponse.statusCode).json(cachedResponse.body); return; } // Ghi đè res.json để lưu cache kết quả const originalJson = res.json.bind(res); res.json = (body: any) => { if (res.statusCode >= 200 && res.statusCode < 300) { processedRequests.set(idempotencyKey, { statusCode: res.statusCode, body }); } return originalJson(body); }; next(); } ``` ## Giải pháp quản lý vận hành và giám sát API Một Open API chạy trong môi trường production không thể chỉ dựa vào kiểm thử ban đầu. Ba vấn đề lớn thường xuyên xuất hiện sau khi go-live bao gồm: 1. **Phân kỳ schema (Schema drift):** Bên phát hành thay đổi kiểu dữ liệu trường `order_id` từ số nguyên sang chuỗi ký tự mà không nâng version API (`v1` sang `v2`). 2. **Tắc nghẽn mạng do thiếu timeout:** Một endpoint bên thứ ba phản hồi chậm hơn 30 giây khiến toàn bộ hàng đợi kết nối (connection pool) của hệ thống gọi bị cạn kiệt. 3. **Mất dấu vết giao dịch (Lack of distributed tracing):** Khi xảy ra lỗi sai lệch đối soát cuối tháng, không thể xác định payload đã bị sửa đổi ở bước nào. hecigo triển khai quy trình từ Discovery có phí, xây dựng POC trên dữ liệu thật của khách hàng, đưa vào production và duy trì vận hành có cam kết chất lượng. Bằng cách đặt một lớp middleware độc lập kiểm soát định dạng qua JSON Schema Validator và phân bổ `trace_id` thống nhất từ cổng nhận đến cơ sở dữ liệu đích, các sự cố về dữ liệu luôn được phát hiện và cô lập ngay lập tức. > **Thấy hữu ích? Theo dõi hecigo trên [Zalo OA](https://zalo.me/3108963776852260798)** để nhận bài viết kỹ thuật mới sớm nhất - không spam, chỉ nội dung thực tế. Hoặc [liên hệ trực tiếp](https://hecigo.com/#contact) nếu bạn cần hỗ trợ triển khai. > Related: [Đọc tiếp: Tối Ưu Tự Động Hóa Zalo Bot với n8n: Hướng Dẫn Chi Tiết từ hecigo](https://hecigo.com/blog/toi-uu-tu-dong-hoa-zalo-bot-voi-n8n-huong-dan-chi-tiet-tu-hecigo/): Zalo là ứng dụng nhắn tin phổ biến nhất tại Việt Nam, với hơn 75 triệu người dùng. Nếu doanh nghiệp của bạn hoạt động tại Việt Nam, khách hàng của... ## Nguồn tham khảo - [Nền tảng API | OpenAI](https://openai.com/vi-VN/api/) - OpenAI - [Nhà mạng Việt chuyển mình với Open API, hướng tới kinh tế số 30% GDP ...](https://cafebiz.vn/het-thoi-ban-dung-luong-nha-mang-viet-tung-vu-khi-open-api-startup-se-dung-tren-vai-ga-khong-lo-quyet-dat-muc-tieu-30-gdp-176260526181118976.chn) - Cafebiz.vn - [Open API và sức mạnh của dữ liệu: Đòn bẩy kép cho tài chính toàn diện ...](https://thitruongtaichinhtiente.vn/open-api-va-suc-manh-cua-du-lieu-don-bay-kep-cho-tai-chinh-toan-dien-va-an-toan-he-thong-73859.html) - thitruongtaichinhtiente.vn - [Gimasys - Giải mã Thông tư 64: Lộ trình triển khai Open API toàn diện ...](https://www.facebook.com/pages.gimasys/photos/giải-mã-thông-tư-64-lộ-trình-triển-khai-open-api-toàn-diện-cho-ngân-hàng-việteng/1138355511646690/) - Facebook - [Open API Strategy là gì - Chiến Lược API Mở là gì - fmit.vn](https://fmit.vn/tu-dien-quan-ly/open-api-strategy-la-gi) - FMIT --- Published by hecigo, middleware & integration lab. https://hecigo.com · hi@hecigo.com --- # Watermark Văn Bản của Claude: Cơ Chế, Ứng Dụng và Khía Cạnh Đạo Đức Sự phát triển nhanh chóng của Trí tuệ Nhân tạo (AI), đặc biệt là các mô hình ngôn ngữ lớn (LLM) như Claude của Anthropic, đã mở ra kỷ nguyên mới về khả năn Published: 2026-08-16 · Language: vi · Tags: AI, Anthropic Claude, Watermark, Đạo đức AI, Minh bạch AI · Canonical: https://hecigo.com/blog/watermark-van-ban-cua-claude-ung-dung-thuc-tien-va-khia-canh-dao-duc-trong-ky-ng/ --- Từ tháng 8/2026, mọi văn bản Claude sinh ra đều mang watermark. Không phải ký tự ẩn, không phải metadata - nó là một mẫu thống kê nằm trong chính lựa chọn từ ngữ, và không thể xóa bằng cách copy sang trình soạn thảo khác. Với người vận hành hệ thống có nội dung do AI sinh ra, điều này đổi một vài giả định. Bài này nói về cơ chế, về những gì nó làm được và không làm được, và về chỗ nó chạm tới quy trình thật. Bài viết đi sâu vào cơ chế hoạt động của watermark trên Claude, phân tích các ứng dụng thực tiễn và đồng thời xem xét những khía cạnh đạo đức quan trọng mà công nghệ này mang lại, đặc biệt với doanh nghiệp Việt Nam đang đưa AI vào quy trình hoạt động. ## Cơ chế hoạt động của Watermark văn bản trên Claude Watermark văn bản của Claude không phải là một dấu hiệu hay ký tự ẩn mà người đọc có thể nhìn thấy. Thay vào đó, nó hoạt động dựa trên một phương pháp tinh vi, lợi dụng cách thức các mô hình ngôn ngữ lớn tạo ra văn bản từng từ một. Theo [công bố chính thức của Anthropic](https://www.anthropic.com/news/claude-text-watermark), mỗi khi mô hình chọn từ tiếp theo trong một danh sách các ứng viên tiềm năng, nó sẽ thực hiện những "lựa chọn có rủi ro thấp" (low-stakes choices). Ví dụ, khi mô hình cần chọn giữa các từ đồng nghĩa như "âm u" hoặc "xám xịt" để mô tả thời tiết, thay vì chọn ngẫu nhiên hoàn toàn, watermark sẽ sử dụng một khóa bí mật và một vài từ đứng trước để tạo ra một mẫu thống kê trong chuỗi từ. Mẫu này không làm thay đổi ý nghĩa hay chất lượng của văn bản đối với người đọc, nhưng có thể được phát hiện bởi bất kỳ ai có khóa giải mã. [TechCrunch đã giải thích](https://techcrunch.com/2026/08/15/anthropic-shares-more-details-about-how-claudes-new-watermarks-will-work/) rằng phương pháp này đảm bảo watermark không ảnh hưởng đến nội dung, mức độ sáng tạo hay khả năng đọc của văn bản. Anthropic sử dụng phiên bản của phương pháp SynthID-Text do Google DeepMind phát triển, được công bố trong một bài báo trên tạp chí Nature. Điều quan trọng là watermark này không thêm bất kỳ ký tự ẩn nào vào văn bản, không yêu cầu thêm token và không làm tăng chi phí. Nó cũng không mang thông tin nhận dạng cá nhân và không thể truy ngược lại một người, tổ chức hoặc cuộc trò chuyện cụ thể nào. ## Ứng dụng thực tiễn của Watermark AI Việc áp dụng watermark cho nội dung do AI tạo ra mang lại nhiều lợi ích thiết thực, đặc biệt khi các quy định về AI ngày càng chặt chẽ, chẳng hạn như [Đạo luật AI của EU](https://www.forbes.com/sites/anishasircar/2026/08/13/claude-will-now-leave-a-watermark-on-everything-it-writes-what-does-that-mean/) yêu cầu các nhà cung cấp AI phải minh bạch về nguồn gốc nội dung. ### Minh bạch và Xác thực nội dung Đây là ứng dụng rõ ràng và quan trọng nhất. Watermark giúp người dùng, nhà quản lý và các nền tảng xác định được nội dung nào có khả năng được tạo ra bởi AI. Điều này đặc biệt hữu ích trong việc phân biệt giữa tin tức thật và tin tức giả, hoặc giữa nội dung do con người viết và nội dung do máy tạo ra. Trong một thế giới tràn ngập thông tin, khả năng xác định nguồn gốc là chìa khóa để xây dựng lòng tin. ### Chống gian lận và đạo văn Trong lĩnh vực giáo dục và xuất bản, watermark là một tín hiệu hữu ích để phát hiện gian lận và đạo văn. Các tổ chức có thể sử dụng công cụ phát hiện watermark để kiểm tra xem bài luận, báo cáo hoặc các tác phẩm khác có phải do AI tạo ra hay không. Điều này giúp duy trì tính công bằng và khuyến khích sự sáng tạo của con người. ### Hạn chế thông tin sai lệch (Misinformation) và Deepfake Khi các mô hình AI có khả năng tạo ra nội dung ngày càng chân thực, nguy cơ về thông tin sai lệch và deepfake ngày càng gia tăng. Watermark, cùng với các công nghệ xác thực khác như siêu dữ liệu provenance theo chuẩn C2PA cho các tệp tin (như .png, .jpg), có thể giúp người dùng nhận biết được nội dung đã bị can thiệp bởi AI, từ đó giảm thiểu tác động tiêu cực của chúng. ### Bảo vệ quyền sở hữu trí tuệ Mặc dù watermark không trực tiếp gán quyền sở hữu, nhưng nó cung cấp một bằng chứng về sự tham gia của AI trong quá trình tạo nội dung. Điều này có thể hữu ích trong các tranh chấp về quyền sở hữu trí tuệ, giúp làm rõ vai trò của AI so với tác giả con người. > Related: [Nối text-to-speech vào workflow: phần khó không nằm ở API](https://hecigo.com/blog/hecigo-cap-nhat-giai-phap-ai-moi-gemini-31-flash-tts-va-co-hoi-cho-cac-nha-phat-/): Gọi API text-to-speech mất mười phút. Phần tốn thời gian là chuẩn hóa tiếng Việt trước khi đọc, lưu file audio ở đâu, và xử lý khi một lần gọi... ## Khía cạnh đạo đức và những thách thức Bên cạnh những lợi ích, việc áp dụng watermark AI cũng đặt ra nhiều câu hỏi và thách thức về đạo đức cần được xem xét kỹ lưỡng. ### Quyền riêng tư và ẩn danh Anthropic khẳng định watermark không chứa thông tin nhận dạng cá nhân và không thể truy ngược về người dùng cụ thể. Tuy nhiên, trong tương lai, khi công nghệ phát triển, cần có các biện pháp bảo vệ chặt chẽ để đảm bảo rằng watermark không bị lạm dụng để theo dõi hoặc định danh người dùng mà không có sự đồng ý của họ. ### Nguy cơ thành kiến và phân biệt đối xử Nếu các công cụ phát hiện watermark bị sử dụng không đúng cách, chúng có thể dẫn đến thành kiến hoặc phân biệt đối xử. Ví dụ, một số người có thể bị đánh giá thấp hoặc bị nghi ngờ chỉ vì nội dung của họ có dấu hiệu AI, ngay cả khi họ đã sử dụng AI một cách hợp pháp để hỗ trợ công việc. [Forbes đã ghi nhận](https://www.forbes.com/sites/anishasircar/2026/08/13/claude-will-now-leave-a-watermark-on-everything-it-writes-what-does-that-mean/) rằng một số người dùng đã phản đối gay gắt, lo ngại về việc tác phẩm của họ bị đánh dấu là do AI tạo ra, gây ra những cáo buộc sai lệch. ### Ảnh hưởng đến sự sáng tạo của con người Một mối lo ngại khác là việc watermark có thể làm giảm giá trị của nội dung do con người tạo ra. Nếu ranh giới giữa nội dung AI và nội dung con người trở nên mờ nhạt hoặc bị đánh dấu không rõ ràng, nó có thể ảnh hưởng đến cách chúng ta nhìn nhận và đánh giá sự sáng tạo của con người. [TechCrunch cũng đề cập](https://techcrunch.com/2026/08/15/anthropic-shares-more-details-about-how-claudes-new-watermarks-will-work/) đến những tranh luận sôi nổi trong cộng đồng người dùng Claude về động thái này. ### Giới hạn của Watermark [Unite.AI đã chỉ ra](https://www.unite.ai/anthropic-explains-the-mechanics-of-claudes-text-watermark/) rằng công nghệ watermark có những giới hạn nhất định. Khả năng phát hiện kém hiệu quả trên các đoạn văn bản ngắn vì có ít lựa chọn từ để kiểm tra. Nó cũng khó áp dụng trên văn bản mang tính chất thực tế, nơi mô hình bị ràng buộc phải đưa ra một câu trả lời chính xác, hoặc trên mã code, vốn đòi hỏi sự chính xác tuyệt đối. Một chỉnh sửa nhỏ có thể không loại bỏ được watermark, nhưng một bản viết lại hoàn toàn sẽ làm mất dấu vết này. Watermark chỉ cho biết khả năng văn bản được tạo bởi Claude, chứ không thể xác nhận văn bản là do con người viết hay từ một hệ thống AI khác. ## Điều này đổi gì với quy trình có nội dung AI Bài học dùng được không phải "hãy đi mua công cụ phát hiện watermark", mà ngược lại: **đừng dựa vào phát hiện, hãy tự ghi nhãn từ đầu.** Nếu hệ thống của bạn sinh ra nội dung bằng AI - bài viết, email trả lời khách, mô tả sản phẩm, tóm tắt cuộc gọi - thì bạn là bên biết chắc chắn nội dung đó do AI sinh ra. Ghi điều đó vào metadata ngay lúc sinh, kèm model nào, prompt version nào, người nào bấm nút. Phát hiện watermark là công cụ cho bên *không* biết; bên biết mà vẫn phải đi dò lại là đã mất thông tin ở đâu đó trong pipeline. Ba việc cụ thể: - **Ghi nguồn gốc ở tầng dữ liệu, không ở tầng hiển thị.** Một trường `generated_by` trong bảng, chứ không phải một dòng chữ dưới chân bài. Dòng chữ mất khi nội dung được sao chép sang hệ thống khác; trường dữ liệu thì đi theo. - **Ghi cả phiên bản prompt.** Khi phát hiện một loạt nội dung sai giọng hoặc sai thông tin, thứ bạn cần biết là chúng được sinh bởi phiên bản prompt nào, để biết phạm vi ảnh hưởng. - **Đừng coi watermark là bằng chứng pháp lý.** Nó cho biết văn bản *có khả năng cao* do một model cụ thể sinh ra. Văn bản bị viết lại nhiều, dịch qua ngôn ngữ khác, hoặc quá ngắn thì tín hiệu yếu đi hoặc mất hẳn. Blog này là một ví dụ: phần lớn bài được sinh bằng một quy trình tự động, và mỗi bài đều có trường `author` cùng lịch sử commit ghi lại chính xác thời điểm và phiên bản quy trình đã tạo ra nó. Đó là ghi nhãn tại nguồn, không phải dò ngược. ## Kết luận Watermark văn bản của Claude thu hẹp khoảng cách giữa "nội dung này do ai viết" và "có cách nào kiểm chứng không". Nó cung cấp một công cụ hữu ích để xác định nguồn gốc nội dung, chống lại thông tin sai lệch và gian lận. Tuy nhiên, việc triển khai và sử dụng công nghệ này đòi hỏi sự cân nhắc kỹ lưỡng về các khía cạnh đạo đức, đảm bảo rằng nó phục vụ lợi ích chung của xã hội mà không xâm phạm quyền riêng tư hay kìm hãm sự sáng tạo của con người. hecigo theo dõi sát những thay đổi dạng này cùng các doanh nghiệp Việt Nam trong việc khai thác tối đa tiềm năng của AI, đồng thời tuân thủ các tiêu chuẩn đạo đức và pháp lý cao nhất. > **Thấy hữu ích? Theo dõi hecigo trên [Zalo OA](https://zalo.me/3108963776852260798)** để nhận bài viết kỹ thuật mới sớm nhất - không spam, chỉ nội dung thực tế. Hoặc [liên hệ trực tiếp](https://hecigo.com/#contact) nếu bạn cần hỗ trợ triển khai. > Related: [Đọc tiếp: Tối Ưu Tự Động Hóa Zalo Bot với n8n: Hướng Dẫn Chi Tiết từ hecigo](https://hecigo.com/blog/toi-uu-tu-dong-hoa-zalo-bot-voi-n8n-huong-dan-chi-tiet-tu-hecigo/): Zalo là ứng dụng nhắn tin phổ biến nhất tại Việt Nam, với hơn 75 triệu người dùng. Nếu doanh nghiệp của bạn hoạt động tại Việt Nam, khách hàng của... ## Nguồn tham khảo - [Claude's text watermark](https://www.anthropic.com/news/claude-text-watermark) - Anthropic - [Anthropic shares more details about how Claude's new watermark works](https://techcrunch.com/2026/08/15/anthropic-shares-more-details-about-how-claudes-new-watermark-works/) - TechCrunch - [Anthropic explains the mechanics of Claude's text watermark](https://www.unite.ai/anthropic-explains-the-mechanics-of-claudes-text-watermark/) - Unite.AI - [Claude will now leave a watermark on every response](https://www.forbes.com/sites/anishasircar/2026/08/13/claude-will-now-leave-a-watermark-on-every-response/) - Forbes --- Published by hecigo, middleware & integration lab. https://hecigo.com · hi@hecigo.com --- # Claude Science: gom công cụ nghiên cứu về một chỗ, và cái giá của việc đó Anthropic gom các bước rời rạc của quy trình nghiên cứu vào một nền tảng. Nó gom những gì, bỏ lại gì, và vì sao gom công cụ luôn kèm một cái giá. Published: 2026-07-04 · Language: vi · Tags: AI, Khoa học, Nghiên cứu, Anthropic, Tự động hóa · Canonical: https://hecigo.com/blog/claude-science-nen-tang-ai-toan-dien-cua-anthropic-tang-toc-nghien-cuu-khoa-hoc/ --- Anthropic phát hành Claude Science, một nền tảng gom các bước của quy trình nghiên cứu vào cùng một chỗ: đọc tài liệu, phân tích dữ liệu, chạy mô phỏng, viết báo cáo ([công bố của Anthropic](https://www.anthropic.com/news/claude-science-ai-workbench)). Lập luận đằng sau là quen thuộc với bất kỳ ai từng làm tích hợp: chi phí lớn nhất không nằm ở từng công cụ mà nằm ở chỗ chuyển dữ liệu giữa chúng. Claude Science không chỉ là một trợ lý AI thông thường; nó là một môi trường làm việc khoa học hoàn chỉnh, mang lại sự liền mạch cho toàn bộ quy trình nghiên cứu, từ tìm kiếm tài liệu đến phân tích dữ liệu chuyên sâu và tạo ra các ấn phẩm khoa học. Nền tảng này hứa hẹn sẽ định hình lại cách các nhà khoa học tương tác với dữ liệu, công cụ và đồng nghiệp của họ. ## Claude Science là gì? **Claude Science** là một môi trường làm việc (workbench) dựa trên AI, được phát triển bởi Anthropic, nhằm mục đích hợp nhất các công cụ và quy trình mà các nhà nghiên cứu thường sử dụng. Nó tích hợp các nền tảng như PubMed, Jupyter, R, thiết bị đầu cuối cụm (cluster terminal) và khả năng tính toán GPU theo yêu cầu vào một môi trường duy nhất [theo ExplainX.ai](https://www.explainx.ai/blog/claude-science-ai-workbench-scientists-2026). ### Bối cảnh khoa học truyền thống Nghiên cứu khoa học thường bao gồm các tác vụ lặp đi lặp lại và tốn thời gian, như tìm kiếm trên hàng chục cơ sở dữ liệu với các lược đồ khác nhau, xử lý các định dạng tệp cần đường ống dữ liệu tùy chỉnh, và chuyển đổi giữa nhiều công cụ rời rạc. Việc chuyển đổi ngữ cảnh liên tục giữa một terminal, một sổ tay Jupyter, một trình quản lý tài liệu tham khảo và một cửa sổ trò chuyện tạo ra ma sát, làm chậm mọi bước trong quy trình [như mô tả trên blog của Anthropic](https://www.anthropic.com/news/claude-science-ai-workbench). ### Claude Science gom những gì về một chỗ Claude Science giải quyết vấn đề này bằng cách kết nối Claude trực tiếp với các công cụ mà các nhà khoa học đã phụ thuộc và giữ mọi quyết định - mã tạo ra một hình ảnh, toàn bộ cuộc trò chuyện dẫn đến nó - trong một bản ghi có thể kiểm toán được. Đây là một ứng dụng máy tính để bàn, có sẵn trên macOS và Linux, kết nối Claude với một bộ công cụ nghiên cứu có thể cấu hình thông qua một không gian làm việc dự án liên tục [theo tài liệu của Claude.ai](https://claude.com/docs/claude-science/overview). Khi mở một dự án Claude Science, bạn không chỉ bắt đầu một cuộc trò chuyện. Bạn đang mở một không gian làm việc ghi nhớ các nguồn dữ liệu, lịch sử phân tích, các kỹ năng đã cài đặt và mọi tạo phẩm mà phiên làm việc đã tạo ra. Mỗi dự án đều mang đầy đủ lịch sử tin nhắn cùng với các hình ảnh và mã có thể tái tạo đã tạo ra chúng, để bất kỳ ai trong nhóm của bạn - hoặc một người kiểm duyệt trong tương lai - đều có thể truy tìm chính xác cách một kết quả được tạo ra. ## Các tính năng nổi bật của Claude Science Claude Science được xây dựng với một loạt tính năng gom những bước vốn nằm rải rác ở nhiều công cụ, giúp nhà nghiên cứu rút ngắn quy trình và tăng cường độ chính xác của nghiên cứu: ### Môi trường nghiên cứu hợp nhất Claude Science tích hợp tất cả các công cụ nghiên cứu phân mảnh vào một môi trường duy nhất. Điều này cho phép các nhà khoa học thực hiện tất cả các giai đoạn công việc của họ mà không cần phải chuyển đổi qua lại giữa các ứng dụng. Nó giúp phân tích tài liệu, thực hiện nghiên cứu đa bước, tạo ra các tạo phẩm chi tiết và tinh chỉnh các hình ảnh, bản thảo một cách lặp đi lặp lại cho đến khi sẵn sàng xuất bản. Mỗi đầu ra đều mang theo một lịch sử kiểm toán về cách nó được tạo ra, giúp bạn xác thực và tái tạo kết quả [theo Anthropic](https://www.anthropic.com/news/claude-science-ai-workbench). ### Tự động hóa quản lý tính toán và mở rộng quy mô Các phân tích lớn - ví dụ như gấp một protein hoặc chạy một đường ống gen trên một bộ dữ liệu khổng lồ - thường yêu cầu các nhà nghiên cứu phải chuyển trọng tâm sang việc thiết lập một công việc tính toán, chờ đợi trong khi nó được gửi đến một cụm, kiểm tra xem nó thành công hay thất bại và kéo kết quả trở lại. Claude Science xử lý quy trình này cho bạn. Nó soạn thảo một kế hoạch, hỏi trước khi tiếp cận các tài nguyên mới và cho phép bạn xem xét hoặc thu hồi bất kỳ quyết định nào trước khi viết và gửi công việc đến các tài nguyên tính toán mà phòng thí nghiệm của bạn đã sử dụng (cụm HPC của riêng bạn qua SSH hoặc tài khoản Modal của bạn để tính toán theo yêu cầu), mở rộng phân tích từ một GPU duy nhất lên hàng trăm GPU khi cần [thông tin từ Anthropic](https://www.anthropic.com/news/claude-science-ai-workbench). ### Kho công cụ và kỹ năng chuyên biệt Môi trường làm việc này đi kèm với hơn 60 kỹ năng và trình kết nối được tuyển chọn, tổ chức theo các chuyên ngành: genomics, single-cell, proteomics, structural biology và cheminformatics. Đây không phải là các trình bao bọc API chung chung - chúng là các tích hợp được xây dựng có mục đích, hiểu các định dạng dữ liệu, quy trình làm việc phổ biến và các quy ước miền cho từng lĩnh vực. Ví dụ, Bộ công cụ NVIDIA BioNeMo Agent mang Evo 2 (mô hình nền tảng DNA), Boltz-2 (dự đoán tương tác sinh học phân tử) và OpenFold3 (dự đoán cấu trúc protein) trực tiếp vào môi trường làm việc [chi tiết trên ExplainX.ai](https://www.explainx.ai/blog/claude-science-ai-workbench-scientists-2026). ### Cơ chế kiểm duyệt thông minh (Reviewer Agent) Sau khi bạn đã tạo ra kết quả, **Reviewer Agent** sẽ chạy một lần kiểm tra độc lập công việc của bạn. Nó kiểm tra xem các trích dẫn có thực sự hỗ trợ các tuyên bố đã đưa ra hay không, xác thực các tính toán số học và gắn cờ các lỗi tiềm ẩn trước khi bạn chia sẻ hoặc gửi. Đối với các phòng thí nghiệm sản xuất các tài liệu dài - bản thảo, các phần tài trợ, đánh giá hệ thống - Reviewer Agent hoạt động như một kiểm tra đồng tác giả lần đầu, bắt những lỗi dễ bỏ sót dưới áp lực thời hạn. ## Claude Science hoạt động như thế nào? Claude Science là một ứng dụng máy tính để bàn ghép nối Claude với một môi trường phân tích trên máy tính của bạn. Bạn mô tả một nhiệm vụ nghiên cứu hoặc phân tích bằng ngôn ngữ tự nhiên; Claude sẽ viết và chạy mã Python, R hoặc shell trong một sandbox, đọc các thư mục mà bạn cấp quyền, kéo dữ liệu từ các cơ sở dữ liệu khoa học thông qua các trình kết nối và lưu kết quả dưới dạng các tạo phẩm có phiên bản với bản ghi nguồn gốc đầy đủ [theo tài liệu Claude.ai](https://claude.com/docs/claude-science/overview). ### Quy trình làm việc 1. **Mô tả nhiệm vụ**: Người dùng nhập yêu cầu nghiên cứu bằng ngôn ngữ tự nhiên. 2. **Lập kế hoạch và thực thi**: Claude phân tích yêu cầu, lập kế hoạch thực hiện, viết mã và chạy nó trong môi trường sandbox. Ví dụ, nó có thể chạy mã trên máy tính xách tay của bạn, trên một máy Linux, trên nút đăng nhập HPC qua SSH, hoặc trên Modal cho các công việc đòi hỏi nhiều GPU như dự đoán cấu trúc protein hoặc tạo chuỗi quy mô lớn [như mô tả của ExplainX.ai](https://www.explainx.ai/blog/claude-science-ai-workbench-scientists-2026). 3. **Tạo tạo phẩm**: Hệ thống tạo ra các hình ảnh, bảng biểu hoặc kết quả thống kê, đi kèm với mã đã tạo ra chúng và cuộc trò chuyện dẫn đến mã đó. Điều này giúp kết quả có thể tái tạo theo thiết kế. 4. **Kiểm duyệt và tinh chỉnh**: Reviewer Agent kiểm tra các tuyên bố, xác thực tính toán và gắn cờ lỗi. Người dùng có thể tương tác để tinh chỉnh kết quả, ví dụ, yêu cầu Claude Science chỉnh sửa hình ảnh bằng ngôn ngữ tự nhiên - loại bỏ đường lưới hoặc thay đổi trục thành thang logarit - và AI sẽ tự chỉnh sửa mã của nó. ### Bảo mật và khả năng kiểm soát Một điểm quan trọng là dữ liệu của bạn không bao giờ rời khỏi cơ sở hạ tầng của riêng bạn. Chỉ ngữ cảnh cần thiết cho mỗi bước phân tích mới được gửi đến Claude. Bạn chấp thuận mỗi thư mục mới, máy chủ mạng và công việc từ xa trước khi Claude có thể sử dụng chúng. Điều này đảm bảo rằng các bộ dữ liệu lớn hoặc nhạy cảm vẫn an toàn trong hệ thống hiện có của bạn. ## Ứng dụng thực tế và tiềm năng Claude Science đã được thử nghiệm và mang lại những kết quả ấn tượng trong nhiều lĩnh vực nghiên cứu: ### Tăng tốc khám phá thuốc Manifold Bio đã sử dụng Claude Science để đề cử các mục tiêu cho các thí nghiệm thuốc nhắm mục tiêu vào mô. Môi trường làm việc này đã đánh giá biểu hiện bề mặt, hành vi vận chuyển và hồ sơ an toàn cho một nhóm các protein ứng cử viên, sau đó xếp hạng chúng để theo dõi thí nghiệm. Công việc mà trước đây cần một nhà phân tích tài liệu, một nhà tin sinh học và một người đánh giá an toàn hoạt động tuần tự đã được nén lại trong một phiên Claude Science duy nhất [theo ExplainX.ai](https://www.explainx.ai/blog/claude-science-ai-workbench-scientists-2026). ### Đánh giá học thuật quy mô lớn Viện Allen đã sử dụng Claude Science để thực hiện đánh giá tính toán ở quy mô lớn. Đối với các phòng thí nghiệm sản xuất các tài liệu dài - bản thảo, các phần tài trợ, đánh giá hệ thống - Reviewer Agent hoạt động như một kiểm tra đồng tác giả lần đầu, bắt những lỗi dễ bỏ sót dưới áp lực thời hạn. Điều này giúp các nhà khoa học tại Viện Allen có thể đẩy nhanh quy trình xem xét và đảm bảo chất lượng công việc của họ. ### Tầm nhìn cho tương lai Claude Science đang trong giai đoạn beta và có sẵn cho người dùng Claude Pro, Max, Team và Enterprise [theo Anthropic](https://claude.com/product/claude-science). Phản hồi từ người dùng sẽ tiếp tục định hình và tinh chỉnh nền tảng này, có thể rút ngắn vòng lặp giữa giả thuyết và kết quả. Với khả năng tự động hóa các tác vụ tẻ nhạt, quản lý tính toán phức tạp và đảm bảo tính tái tạo, Claude Science thực sự là một công cụ thay đổi cuộc chơi cho cộng đồng khoa học toàn cầu. > **Thấy hữu ích? Theo dõi hecigo trên [Zalo OA](https://zalo.me/3108963776852260798)** để nhận bài viết kỹ thuật mới sớm nhất - không spam, chỉ nội dung thực tế. Hoặc [liên hệ trực tiếp](https://hecigo.com/#contact) nếu bạn cần hỗ trợ triển khai. ## Nguồn tham khảo - [Claude Science](https://www.anthropic.com/news/claude-science-ai-workbench) - Anthropic - [Claude Science overview](https://claude.com/docs/claude-science/overview) - Anthropic Docs - [Claude Science](https://claude.com/product/claude-science) - Anthropic --- Published by hecigo, middleware & integration lab. https://hecigo.com · hi@hecigo.com --- # Microsoft Vận Hành Fairwater - Siêu Trung Tâm Dữ Liệu AI Mạnh Nhất Thế Giới Cuộc đua công nghệ trí tuệ nhân tạo (AI) đang nóng hơn bao giờ hết, với các tập đoàn lớn liên tục đầu tư vào hạ tầng tính toán quy mô khổng lồ. Microsoft v Published: 2026-04-22 · Language: vi · Tags: AI, Microsoft, Trung tâm dữ liệu, NVIDIA, Năng lượng tái tạo · Canonical: https://hecigo.com/blog/microsoft-van-hanh-fairwater-sieu-trung-tam-du-lieu-ai-manh-nhat-the-gioi/ --- Cuộc đua công nghệ trí tuệ nhân tạo (AI) đang nóng hơn bao giờ hết, với các tập đoàn lớn liên tục đầu tư vào hạ tầng tính toán quy mô khổng lồ. Microsoft vừa đánh dấu một cột mốc quan trọng khi chính thức đưa vào vận hành siêu trung tâm dữ liệu AI Fairwater tại bang Wisconsin, Hoa Kỳ. Đây là cơ sở tính toán, không phải trung tâm lưu trữ dữ liệu thông thường, và Microsoft xếp nó vào kế hoạch hạ tầng AI dài hạn của mình. ## Giới thiệu về Fairwater và tầm quan trọng Ngày 16/4, Giám đốc điều hành Microsoft, Satya Nadella, đã xác nhận trên mạng xã hội X rằng trung tâm dữ liệu AI Fairwater tại bang Wisconsin, Hoa Kỳ, đã chính thức đi vào hoạt động sớm hơn dự kiến [theo thông tin từ Báo Dân trí](https://dantri.com.vn/cong-nghe/microsoft-chinh-thuc-van-hanh-trung-tam-ai-manh-nhat-the-gioi-20260420135803112.htm). Sự kiện này đánh dấu một bước tiến lớn trong chiến lược phát triển hạ tầng trí tuệ nhân tạo của Microsoft, khẳng định vị thế dẫn đầu của hãng trong cuộc đua công nghệ toàn cầu. Fairwater được xem là cơ sở tính toán AI lớn và mạnh nhất thế giới hiện nay [như VTV8 đã đưa tin](https://vtv8.vtv.vn/microsoft-van-hanh-sieu-trung-tam-du-lieu-ai-lon-nhat-the-gioi-dung-100-nang-luong-tai-tao-107260421181352873.htm). Dự án này lần đầu được công bố vào tháng 9/2025 và nhanh chóng thu hút sự chú ý nhờ quy mô chưa từng có, hứa hẹn sẽ cung cấp năng lực xử lý cần thiết cho các dịch vụ AI thế hệ mới, từ mô hình ngôn ngữ lớn đến các ứng dụng AI phức tạp khác. ## Kiến trúc phần cứng và con số Điểm nổi bật của Fairwater nằm ở kiến trúc phần cứng ấn tượng. Trung tâm này được trang bị hàng trăm nghìn chip NVIDIA GB200, thuộc kiến trúc Blackwell của NVIDIA. Toàn bộ số GPU này được kết nối thành một cụm vận hành thống nhất, tạo nên một hệ thống hoạt động như một siêu máy tính duy nhất chứ không phải một cụm máy chủ rời rạc. Theo các đánh giá ban đầu, hiệu suất của Fairwater có thể cao gấp 10 lần so với những siêu máy tính nhanh nhất trước đó [theo Báo Mới](https://baomoi.com/microsoft-chinh-thuc-van-hanh-sieu-trung-tam-du-lieu-ai-manh-nhat-the-gioi-c54985333.epi). Để đảm bảo tốc độ truyền dữ liệu tối ưu giữa các thành phần, trung tâm còn được trang bị hệ thống cáp quang với tổng chiều dài kỷ lục, tương đương việc quấn quanh Trái Đất 4,5 vòng [như Thương hiệu Công luận đã phân tích](https://thuonghieucongluan.com.vn/microsoft-van-hanh-fairwater-sieu-trung-tam-du-lieu-ai-manh-nhat-the-gioi-a314867.html). Sự kết hợp giữa mật độ GPU và mạng kết nối phẳng này là chìa khóa để Fairwater có thể xử lý khối lượng dữ liệu khổng lồ và thực hiện các tác vụ AI phức tạp với tốc độ chưa từng có. > Related: [Nối text-to-speech vào workflow: phần khó không nằm ở API](https://hecigo.com/blog/hecigo-cap-nhat-giai-phap-ai-moi-gemini-31-flash-tts-va-co-hoi-cho-cac-nha-phat-/): Gọi API text-to-speech mất mười phút. Phần tốn thời gian là chuẩn hóa tiếng Việt trước khi đọc, lưu file audio ở đâu, và xử lý khi một lần gọi... ## Giải pháp làm mát và quản lý năng lượng bền vững Việc vận hành một siêu trung tâm dữ liệu với hàng trăm nghìn chip đòi hỏi các giải pháp làm mát và quản lý năng lượng đặc biệt. Thay vì sử dụng không khí như các trung tâm dữ liệu truyền thống, Fairwater áp dụng công nghệ làm mát bằng chất lỏng theo vòng khép kín. Giải pháp này giúp kiểm soát nhiệt độ hiệu quả cho các chip hoạt động liên tục, đồng thời loại bỏ nhu cầu bổ sung nước sau khi hoàn tất xây dựng, một yếu tố quan trọng khi các trung tâm dữ liệu ngày càng tiêu tốn nhiều tài nguyên. Bên cạnh đó, bài toán năng lượng cũng được Microsoft giải quyết một cách bền vững. Tổng công suất điện bổ sung cho các cơ sở AI của hãng đạt khoảng 2 Gigawatt, tương đương mức tiêu thụ của hai nhà máy điện hạt nhân cỡ trung bình. Riêng Fairwater được cam kết vận hành hoàn toàn bằng năng lượng tái tạo, với một nhà máy điện mặt trời công suất 250 MW được xây dựng tại hạt Portage [theo Dân trí và nhiều nguồn khác](https://dantri.com.vn/cong-nghe/microsoft-chinh-thuc-van-hanh-trung-tam-ai-manh-nhat-the-gioi-20260420135803112.htm). Microsoft cũng chủ động chi trả trước chi phí hạ tầng điện và năng lượng cho phần sử dụng riêng, nhằm tránh gây áp lực lên lưới điện địa phương và không làm tăng giá điện đối với người dân, đồng thời cam kết bảo vệ hệ sinh thái xung quanh khu vực trung tâm dữ liệu. ## Tầm nhìn mở rộng và tác động đến ngành AI Fairwater chỉ là bước khởi đầu trong chiến lược dài hạn của Microsoft. Tập đoàn này đang lên kế hoạch mở rộng mô hình siêu trung tâm dữ liệu này tới hơn 70 khu vực trên khắp nước Mỹ, bổ sung vào mạng lưới khoảng 100 trung tâm dữ liệu hiện có. Động thái này cho thấy cuộc cạnh tranh trong lĩnh vực AI đang chuyển mạnh sang hạ tầng tính toán quy mô lớn, nơi năng lực xử lý và khả năng vận hành bền vững trở thành lợi thế chiến lược. Sự ra đời của Fairwater không chỉ củng cố vị thế dẫn đầu của Microsoft trong cuộc đua AI mà còn thiết lập một tiêu chuẩn mới về việc kết hợp giữa công nghệ đỉnh cao và trách nhiệm với môi trường. Đối với các doanh nghiệp và nhà phát triển AI trên toàn thế giới, những siêu trung tâm dữ liệu như Fairwater sẽ là nền tảng cốt lõi, mở ra kỷ nguyên mới cho các ứng dụng và dịch vụ AI phức tạp, đòi hỏi khối lượng tính toán mà một trung tâm dữ liệu thông thường không đáp ứng được. > **Thấy hữu ích? Theo dõi hecigo trên [Zalo OA](https://zalo.me/3108963776852260798)** để nhận bài viết kỹ thuật mới sớm nhất - không spam, chỉ nội dung thực tế. Hoặc [liên hệ trực tiếp](https://hecigo.com/#contact) nếu bạn cần hỗ trợ triển khai. > Related: [Đọc tiếp: Thu Thập Dữ Liệu Web cho Doanh Nghiệp Việt với n8n và Firecrawl](https://hecigo.com/blog/toi-uu-hoa-quy-trinh-thu-thap-du-lieu-web-cho-doanh-nghiep-viet-voi-n8n-va-firec/): Node Firecrawl trong n8n có sáu thao tác dễ nhầm nhau: scrape, crawl, map, search, get status và cancel. Bài này đi qua từng cái và khi nào dùng... ## Nguồn tham khảo - [Inside the world's most powerful AI datacenter](https://blogs.microsoft.com/blog/2025/09/18/inside-the-worlds-most-powerful-ai-datacenter/) - The Official Microsoft Blog - [Infinite scale: the architecture behind the Azure AI superfactory](https://blogs.microsoft.com/blog/2025/11/12/infinite-scale-the-architecture-behind-the-azure-ai-superfactory/) - The Official Microsoft Blog - [Microsoft chính thức vận hành trung tâm AI mạnh nhất thế giới](https://dantri.com.vn/cong-nghe/microsoft-chinh-thuc-van-hanh-trung-tam-ai-manh-nhat-the-gioi-20260420135803112.htm) - Dân trí --- Published by hecigo, middleware & integration lab. https://hecigo.com · hi@hecigo.com --- # Middleware: phần việc n8n, OpenClaw và mọi nền tảng tự động hóa không làm hộ bạn Nối được API là phần dễ. Phần khó lộ ra sau vài tuần chạy thật: sự kiện gửi lại hai lần, webhook rơi mất một giao dịch, hóa đơn bị hủy nhưng hệ thống đích vẫn giữ trạng thái cũ. Published: 2026-04-18 · Language: vi · Tags: Middleware, Tự động hóa, n8n, OpenClaw, Tích hợp hệ thống · Canonical: https://hecigo.com/blog/middleware-chia-khoa-mo-khoa-toan-bo-tiem-nang-cua-n8n-openclaw-va-moi-nen-tang-/ --- Một chuỗi bán lẻ khoảng 20 người dùng phần mềm bán hàng và một CRM nội địa. Hai phần mềm đều tốt, đều có API, và đã nối với nhau bằng n8n trong một buổi chiều. Ba tuần sau, kế toán phát hiện doanh thu trên CRM thiếu 14 đơn so với sổ bán hàng, và có 6 khách bị tạo trùng hồ sơ. Không có node nào lỗi. Không có workflow nào đỏ. Luồng vẫn chạy mỗi ngày. Đó là hình dạng phổ biến nhất của bài toán tích hợp, và nó không nằm ở chỗ nền tảng tự động hóa mạnh hay yếu. Nó nằm ở lớp giữa mà không nền tảng nào làm hộ bạn. ## n8n và OpenClaw giải hai bài toán khác nhau So sánh trực tiếp hai thứ này là so nhầm trục. **n8n** là nền tảng điều phối luồng: bạn định nghĩa trước sự kiện nào kích hoạt, đi qua những bước nào, rẽ nhánh ở đâu. Đổi lại, nó chạy **có thể dự đoán được** - cùng đầu vào cho cùng đường đi. Nó cũng tự host được, và ở chế độ queue thì tách main process khỏi worker để chịu tải cao hơn ([tài liệu queue mode của n8n](https://docs.n8n.io/hosting/scaling/queue-mode/)). **OpenClaw** là tác nhân AI tự trị: bạn mô tả ý định bằng ngôn ngữ tự nhiên, nó tự suy luận ra các bước và gọi công cụ. Không có luồng định nghĩa trước, nên nó linh hoạt hơn hẳn với những việc không lặp lại - và cũng khó dự đoán hơn hẳn. Chọn cái nào là chuyện dễ. Việc lặp lại, có quy tắc rõ, cần đúng từng lần thì dùng n8n. Việc mỗi lần một khác, cần đọc hiểu ngữ cảnh thì dùng tác nhân. Nhưng cả hai đều dừng lại ở cùng một chỗ. ## Bốn thứ lộ ra sau vài tuần chạy thật Nối được API là phần dễ, và nó cho cảm giác đã xong việc. Bốn thứ dưới đây không xuất hiện trong buổi demo, chỉ xuất hiện sau vài tuần dữ liệu thật: **Cùng một sự kiện gửi tới hai lần.** Hầu hết hệ thống gửi webhook đều cam kết *at-least-once*, không phải *exactly-once*. Bên gửi không nhận được HTTP 200 trong thời gian chờ thì nó gửi lại - kể cả khi bạn đã xử lý xong. Không có khóa chống trùng thì mỗi lần gửi lại là một bản ghi mới. **Webhook rơi mất một sự kiện.** Bên gửi thử lại vài lần rồi bỏ cuộc. Hệ thống đích sập 10 phút đúng lúc đó là dữ liệu trong khoảng ấy mất vĩnh viễn, và **không ai biết** cho tới lúc đối soát cuối tháng. **Sửa và hủy.** Đơn hàng bị hủy, hóa đơn bị điều chỉnh, khách trả lại một phần. Luồng một chiều "tạo mới khi có sự kiện" xử lý đúng lần tạo và sai mọi lần sau đó. Hệ thống đích giữ nguyên trạng thái cũ trong khi hệ thống nguồn đã đổi. **Bão thử lại.** Hệ thống đích chậm đi, workflow timeout, cơ chế retry bắn lại - làm nó chậm thêm. Không có backoff và hàng đợi thất bại thì một sự cố nhỏ tự khuếch đại thành sự cố lớn. Không thứ nào trong bốn thứ này là lỗi của n8n hay OpenClaw. Chúng nằm ngoài phạm vi của một nền tảng điều phối, theo đúng thiết kế. ## Khóa chống trùng: chọn sai là hỏng cả hệ thống Đây là quyết định kỹ thuật quan trọng nhất của một dự án tích hợp, và cũng là chỗ hay chọn sai nhất. Cám dỗ đầu tiên là dùng `updated_at`. Nó hỏng vì hai lý do: nhiều API trả về thời gian **chính xác tới giây**, mà trong một giây có thể có nhiều thay đổi; và đồng hồ giữa hai hệ thống không bao giờ khớp tuyệt đối. Cám dỗ thứ hai là dùng id của bản ghi nguồn. Nó chống được trùng lúc tạo, nhưng không phân biệt được **phiên bản** - một đơn hàng bị sửa ba lần vẫn chỉ có một id. Khóa dùng được cần đủ bốn thành phần: ```sql -- Khóa chống trùng: hệ thống nguồn + loại sự kiện + id bản ghi + phiên bản. -- Thiếu version thì mọi lần sửa đơn hàng đều bị coi là trùng và bị bỏ qua. CREATE TABLE sync_ledger ( source text NOT NULL, -- 'pos', 'marketplace', 'accounting' event_type text NOT NULL, -- 'order.created', 'order.updated' external_id text NOT NULL, -- id bên hệ thống nguồn version text NOT NULL, -- revision/etag/hash payload nếu API không có target_id text, -- id sau khi ghi sang hệ thống đích processed_at timestamptz NOT NULL DEFAULT now(), CONSTRAINT sync_ledger_pkey PRIMARY KEY (source, event_type, external_id, version) ); ``` Ghi vào bảng này **trước** khi gọi hệ thống đích. Nếu insert đụng khóa chính, sự kiện đã xử lý rồi, dừng lại. Nếu API nguồn không có trường revision, hash payload đã chuẩn hóa để thay thế - chuẩn hóa trước khi hash, nếu không thì một khoảng trắng thừa cũng tạo ra phiên bản mới. Bảng này cũng chính là thứ trả lời được câu hỏi *"đơn hàng X đã sang CRM chưa, lúc nào, và thành bản ghi nào"* - câu hỏi mà bất kỳ ai vận hành hệ thống tích hợp cũng sẽ hỏi trong tuần đầu tiên. ## Webhook một mình không đủ Webhook nhanh và rẻ, nhưng nó là kênh *đẩy* nên bạn không bao giờ biết được thứ mình **không** nhận được. Cách làm dùng được là hai kênh song song: 1. **Webhook** xử lý phần lớn sự kiện, độ trễ thấp. 2. **Bộ đối soát chạy định kỳ** hỏi hệ thống nguồn "trong khoảng thời gian này có những bản ghi nào", so với `sync_ledger`, và xử lý phần thiếu. Bộ đối soát không phải phương án dự phòng. Nó là thứ duy nhất phát hiện được sự kiện bị rơi. Chạy mỗi 15 phút cho cửa sổ gần, và mỗi đêm cho cửa sổ rộng hơn để bắt những trường hợp hệ thống nguồn sửa dữ liệu quá khứ. Trong n8n, phần thất bại nên đi vào một hàng đợi riêng thay vì biến mất trong log - n8n có sẵn error workflow để hứng những nhánh này ([tài liệu error handling](https://docs.n8n.io/flow-logic/error-handling/)). Điều quan trọng không phải là công cụ, mà là **một sự kiện thất bại phải nằm ở đâu đó tra lại được**, chứ không chỉ là một dòng đỏ trong lịch sử chạy. ## Lớp giữa cần những gì Gộp lại, lớp giữa của một tích hợp chạy được trong production gồm sáu phần: | Phần | Nhiệm vụ | |---|---| | Nhận sự kiện | Webhook + bộ đối soát định kỳ chạy song song | | Sổ chống trùng | Khóa `(nguồn, loại, id, phiên bản)`, ghi trước khi gọi đích | | Bảng ánh xạ trường | Nguồn → chuyển đổi → đích, tách khỏi mã nguồn để sửa được mà không deploy | | Adapter hệ thống đích | Thử lại có backoff, hàng đợi thất bại, giới hạn tốc độ gọi | | Nhật ký tra vết | Mỗi sự kiện lưu payload vào, payload ra, kết quả | | Bảng theo dõi | Số sự kiện chờ, số thất bại, độ trễ, kết quả đối soát gần nhất | n8n làm rất tốt phần điều phối và phần adapter. Bốn phần còn lại là thứ bạn phải tự dựng, và là phần chiếm phần lớn thời gian của một dự án tích hợp thật. > Related: [Thu Thập Dữ Liệu Web cho Doanh Nghiệp Việt với n8n và Firecrawl](https://hecigo.com/blog/toi-uu-hoa-quy-trinh-thu-thap-du-lieu-web-cho-doanh-nghiep-viet-voi-n8n-va-firec/): Node Firecrawl trong n8n có sáu thao tác dễ nhầm nhau: scrape, crawl, map, search, get status và cancel. Bài này đi qua từng cái và khi nào dùng... ## hecigo làm gì ở đây hecigo xây và vận hành lớp giữa đó, và nhận trách nhiệm về nó. Phần công khai dùng được ngay là hai node n8n cộng đồng, phát hành trên npm và đang được duy trì: `n8n-nodes-zalo-platform` cho Zalo Bot Platform, và `n8n-nodes-firecrawl-v2` cho Firecrawl. Nếu bạn tự dựng lớp giữa cho mình, hai node này tiết kiệm được vài buổi. Cách viết node riêng cũng nằm sẵn trong [tài liệu của n8n](https://docs.n8n.io/integrations/creating-nodes/overview/). Phần còn lại là công việc dự án: khảo sát hai hệ thống, chứng minh trên dữ liệu thật trước, rồi mới triển khai chính thức và vận hành. Chúng tôi không báo giá trước khi nhìn dữ liệu thật, vì con số đưa ra lúc đó chắc chắn sai - phần lớn chi phí của một tích hợp nằm ở những trường hợp ngoại lệ mà chỉ dữ liệu thật mới lộ ra. Ranh giới không phải là loại phần mềm. Không quan trọng đó là phần mềm bán hàng, CRM, kế toán, sàn thương mại điện tử, email doanh nghiệp, kho dữ liệu hay một kênh mạng xã hội. Câu hỏi duy nhất là hai hệ thống đó có cần trao đổi dữ liệu với nhau hay không. > **Thấy hữu ích? Theo dõi hecigo trên [Zalo OA](https://zalo.me/3108963776852260798)** để nhận bài viết kỹ thuật mới sớm nhất - không spam, chỉ nội dung thực tế. Hoặc [liên hệ trực tiếp](https://hecigo.com/#contact) nếu bạn cần hỗ trợ triển khai. > Related: [Đọc tiếp: Tối Ưu Tự Động Hóa Zalo Bot với n8n: Hướng Dẫn Chi Tiết từ hecigo](https://hecigo.com/blog/toi-uu-tu-dong-hoa-zalo-bot-voi-n8n-huong-dan-chi-tiet-tu-hecigo/): Zalo là ứng dụng nhắn tin phổ biến nhất tại Việt Nam, với hơn 75 triệu người dùng. Nếu doanh nghiệp của bạn hoạt động tại Việt Nam, khách hàng của... ## Nguồn tham khảo - [Queue mode | n8n Docs](https://docs.n8n.io/hosting/scaling/queue-mode/) - n8n - [Error handling | n8n Docs](https://docs.n8n.io/flow-logic/error-handling/) - n8n - [Creating nodes | n8n Docs](https://docs.n8n.io/integrations/creating-nodes/overview/) - n8n - [n8n vs OpenClaw: what are the differences and where should you use either of them](https://www.techradar.com/pro/n8n-vs-openclaw-what-are-the-differences-and-where-should-you-use-either-of-them) - TechRadar --- Published by hecigo, middleware & integration lab. https://hecigo.com · hi@hecigo.com --- # Claude Design: biến hội thoại thành bản thiết kế, và chỗ nó chạm tới quy trình thật Anthropic phát hành Claude Design, biến hội thoại thành nguyên mẫu giao diện, bản trình chiếu và tài sản tiếp thị. Cơ chế, giới hạn, và chỗ nó chạm tới quy trình sản xuất nội dung thật. Published: 2026-04-18 · Language: vi · Tags: AI, Thiết kế AI, Claude Design, Anthropic, Tự động hóa · Canonical: https://hecigo.com/blog/anthropic-claude-design-cuoc-cach-mang-thiet-ke-ai-dang-den-voi-doanh-nghiep-vie/ --- Anthropic phát hành Claude Design: mô tả bằng lời, nhận về nguyên mẫu giao diện, bản trình chiếu hoặc bộ tài sản tiếp thị ([công bố của Anthropic](https://www.anthropic.com/news/claude-design-anthropic-labs)). Phần đáng nói không phải là "AI biết thiết kế rồi". Phần đáng nói là nó đổi chỗ nào trong quy trình đang chạy, và chỗ nào thì không. Claude Design không chỉ là một công cụ thiết kế thông thường; nó là một nền tảng cộng tác dựa trên AI, cho phép cả nhà thiết kế chuyên nghiệp lẫn người không chuyên biến ý tưởng thành sản phẩm trực quan một cách nhanh chóng và hiệu quả. Với khả năng tận dụng sức mạnh của mô hình ngôn ngữ lớn và thị giác máy tính, Claude Design mở ra một kỷ nguyên mới cho sự sáng tạo, giúp các doanh nghiệp Việt Nam có thể tiếp cận và ứng dụng công nghệ này vào quy trình đang có trên thị trường toàn cầu. ## Claude Design là gì? Claude Design là một sản phẩm mới của [Anthropic Labs](https://www.anthropic.com/news/claude-design-anthropic-labs), được thiết kế để cộng tác với người dùng trong việc tạo ra các sản phẩm hình ảnh chất lượng cao như thiết kế, nguyên mẫu (prototypes), slide trình bày và tài liệu một trang (one-pagers). Điểm đặc biệt của công cụ này là khả năng biến các cuộc trò chuyện với chatbot thành các sản phẩm thiết kế trực quan chỉ bằng cách mô tả ý tưởng bằng ngôn ngữ tự nhiên. Công cụ này được xây dựng trên nền tảng [mô hình thị giác mạnh nhất của Anthropic là Claude Opus 4.7](https://vnai.vn/claude-design-cua-anthropic-bien-cac-cuoc-tro-chuyen-voi-chatbot-thanh-nguyen-mau-ban-trinh-chieu-va-tai-san-tiep-thi/), cho phép nó hiểu và tạo ra nội dung hình ảnh phức tạp. Đây là một bước tiến đáng kể trong lĩnh vực AI sáng tạo, giảm bớt rào cản cho những người không có nền tảng thiết kế chuyên sâu. ## Những Tính Năng Nổi Bật của Claude Design Claude Design được trang bị một loạt tính năng biến nó thành công cụ dựng nháp nhanh cho quy trình sáng tạo: ### Thiết kế và Tạo Nguyên Mẫu bằng Văn bản Người dùng có thể bắt đầu bằng cách mô tả ý tưởng của mình qua các `prompt` văn bản. Claude Design sẽ tạo ra một phiên bản thiết kế ban đầu, và từ đó, người dùng có thể tinh chỉnh thông qua các cuộc hội thoại tiếp theo, chú thích nội tuyến (inline comments) hoặc chỉnh sửa trực tiếp. Công cụ này cũng hỗ trợ tải lên hình ảnh và tài liệu (DOCX, PPTX, XLSX) để cung cấp ngữ cảnh trực tiếp cho thiết kế. ### Thanh Trượt Điều Chỉnh Tùy Chỉnh (Custom Sliders) Một trong những tính năng độc đáo là khả năng Claude tự động tạo ra các `slider tùy chỉnh` để người dùng kiểm soát các thuộc tính như khoảng cách, màu sắc và bố cục. Điều này cho phép điều chỉnh nhanh chóng và dễ dàng khi cần thử nghiệm nhiều biến thể thiết kế khác nhau. ### Xây dựng Hệ Thống Thiết kế từ Mã Nguồn và Tệp Claude Design có thể đọc `codebase` và các tệp thiết kế hiện có của một nhóm để tự động xây dựng một `design system` bao gồm màu sắc, kiểu chữ và các thành phần giao diện. Hệ thống này sau đó có thể được áp dụng tự động cho mọi dự án mới, đảm bảo tính nhất quán với thương hiệu và cho phép quản lý nhiều hệ thống thiết kế song song. ### Trích xuất từ Website và Tài liệu Công cụ `web capture` cho phép lấy trực tiếp các yếu tố từ một trang web thực tế, giúp tạo ra các nguyên mẫu sát với sản phẩm thật. Khả năng tham chiếu đến codebase cũng giúp tạo ra các nguyên mẫu có nền tảng code vững chắc. ### Xuất tệp và Handoff Claude Design hỗ trợ xuất thiết kế ra nhiều định dạng phổ biến như PPTX, PDF, HTML, hoặc tích hợp trực tiếp với Canva để tinh chỉnh thêm. Khi thiết kế hoàn tất, Claude có thể tạo một `handoff bundle` để chuyển giao cho Claude Code, giúp các nhà phát triển dễ dàng triển khai chỉ với một lệnh duy nhất. Anthropic cũng cho biết họ sẽ tiếp tục [triển khai các tích hợp với các công cụ khác](https://congdongai.vn/threads/anthropic-ra-mat-claude-design-ho-tro-tao-hinh-anh-bang-ai.4382/) trong thời gian tới. > Related: [Nối text-to-speech vào workflow: phần khó không nằm ở API](https://hecigo.com/blog/hecigo-cap-nhat-giai-phap-ai-moi-gemini-31-flash-tts-va-co-hoi-cho-cac-nha-phat-/): Gọi API text-to-speech mất mười phút. Phần tốn thời gian là chuẩn hóa tiếng Việt trước khi đọc, lưu file audio ở đâu, và xử lý khi một lần gọi... ## Quy Trình Làm Việc và Khả Năng Cộng Tác Claude Design được xây dựng để hỗ trợ một quy trình làm việc tự nhiên và cộng tác hiệu quả: ### Chat-first Workflow Quy trình bắt đầu bằng việc mô tả yêu cầu qua chat. Claude sẽ trả về bản nháp, sau đó người dùng có thể tinh chỉnh thông qua các cuộc hội thoại, comment nội tuyến hoặc chỉnh sửa trực tiếp trên thiết kế. Nó hỗ trợ kết hợp văn bản, hình ảnh, tệp và trích xuất từ web để tạo ra các thiết kế phong phú. ### Hợp tác Nhóm và Chia sẻ Để tạo điều kiện cho làm việc nhóm, Claude Design hỗ trợ chia sẻ có hạn chế trong tổ chức: người dùng có thể giữ tài liệu riêng tư, chia sẻ liên kết chỉ đọc, hoặc cấp quyền chỉnh sửa. Các thành viên có quyền chỉnh sửa có thể làm việc đồng thời trong một cuộc hội thoại nhóm với Claude, giúp tăng cường sự phối hợp và phản hồi nhanh chóng. ## Ứng Dụng Thực Tế và Lợi Ích cho Doanh Nghiệp Việt Nam Claude Design mang lại lợi ích to lớn cho nhiều đối tượng và có thể ứng dụng trong nhiều lĩnh vực: * **Nhà thiết kế chuyên nghiệp**: Tiết kiệm thời gian thử nghiệm nhiều hướng thiết kế, nhanh chóng tạo prototype tương tác từ mockup tĩnh. * **Founders, Product Managers, Marketers**: Dễ dàng tạo pitch deck, landing page, đồ họa mạng xã hội ngay cả khi thiếu kỹ năng thiết kế chuyên nghiệp. * **Đội ngũ phát triển**: Sử dụng `handoff bundle` và tham chiếu code để rút ngắn quá trình từ thiết kế đến triển khai sản phẩm. Đối với các doanh nghiệp Việt Nam, Claude Design mở ra cơ hội lớn để: * **Tăng tốc chu trình sản phẩm**: Từ ý tưởng đến nguyên mẫu làm việc chỉ trong một buổi làm việc, rút ngắn chu kỳ phản hồi và triển khai. * **Giảm rào cản sáng tạo**: Giúp các đội ngũ không chuyên về thiết kế vẫn có thể tạo ra nội dung hình ảnh chất lượng cao, chuyên nghiệp. * **Nâng cao khả năng cạnh tranh**: Bằng cách tận dụng AI để tự động hóa các tác vụ thiết kế, doanh nghiệp có thể tập trung nguồn lực vào các hoạt vụ cốt lõi và đổi mới. ## Triển Khai và Khả Năng Tiếp Cận Hiện tại, Claude Design đang ở dạng `research preview` và được cung cấp cho các gói đăng ký Claude Pro, Max, Team và Enterprise (gói Enterprise sẽ có triển khai muộn hơn). Tính năng này mặc định bị tắt trong môi trường tổ chức và cần được quản trị viên kích hoạt trong cài đặt. Người dùng có thể bắt đầu trải nghiệm tại [claude.ai/design](https://www.anthropic.com/news/claude-design-anthropic-labs). Sự kiện ra mắt Claude Design diễn ra chỉ vài ngày sau các hội nghị nhà phát triển lớn của Google và Microsoft, cho thấy cuộc đua AI thế hệ mới đang ngày càng nóng bỏng. Anthropic, được thành lập bởi các cựu kỹ sư OpenAI, đã công bố các mô hình Claude AI cải tiến nhằm [thiết lập các tiêu chuẩn mới cho khả năng suy luận, mã hóa và tác nhân kỹ thuật số](https://baomoi.com/anthropic-trinh-lang-cac-mo-hinh-claude-ai-cai-tien-c52310693.epi). Điều này nhấn mạnh cam kết của công ty trong việc phát triển AI một cách có trách nhiệm và đổi mới liên tục. ## Chỗ nó thật sự chạm tới quy trình Công cụ dạng này rút ngắn được đúng một khâu: **từ ý tưởng tới bản nháp đầu tiên**. Khâu đó vốn tốn vài giờ và giờ tốn vài phút. Đó là thật và đáng kể. Ba khâu còn lại thì không đổi, và chúng mới là phần dài: - **Bản nháp thành bản chốt.** Vẫn cần người quyết định, vẫn cần vài vòng sửa với người có thẩm quyền. Sinh ra mười phương án nhanh hơn không làm việc chọn một phương án nhanh hơn. - **Bản chốt vào hệ thống.** Ảnh, bản trình chiếu, tài sản tiếp thị phải đi vào CMS, vào thư viện tài sản, vào chiến dịch quảng cáo, kèm đúng metadata và đúng quyền truy cập. Đây là công việc tích hợp bình thường, và nó không tự làm. - **Sửa về sau.** Đổi logo, đổi bảng màu, đổi thông điệp thì phải biết những tài sản nào đã sinh ra từ phiên bản cũ và đang nằm ở đâu. Không ghi nguồn gốc từ đầu thì sáu tháng sau không ai trả lời được câu đó. Nói cách khác: công cụ sinh nội dung làm khâu đầu rẻ đi, và vì thế làm **số lượng tài sản cần quản lý tăng lên**. Chi phí dịch chuyển chứ không biến mất, và nó dịch về đúng chỗ lớp giữa. Nếu quy trình của bạn đang ở giai đoạn đó - sinh nội dung nhanh nhưng không biết cái nào đã đi đâu - thì [mô tả cho chúng tôi](https://hecigo.com/#contact) hệ thống nào đang giữ tài sản và chỗ nào đang thất lạc. > **Thấy hữu ích? Theo dõi hecigo trên [Zalo OA](https://zalo.me/3108963776852260798)** để nhận bài viết kỹ thuật mới sớm nhất - không spam, chỉ nội dung thực tế. Hoặc [liên hệ trực tiếp](https://hecigo.com/#contact) nếu bạn cần hỗ trợ triển khai. > Related: [Đọc tiếp: Tối Ưu Tự Động Hóa Zalo Bot với n8n: Hướng Dẫn Chi Tiết từ hecigo](https://hecigo.com/blog/toi-uu-tu-dong-hoa-zalo-bot-voi-n8n-huong-dan-chi-tiet-tu-hecigo/): Zalo là ứng dụng nhắn tin phổ biến nhất tại Việt Nam, với hơn 75 triệu người dùng. Nếu doanh nghiệp của bạn hoạt động tại Việt Nam, khách hàng của... ## Nguồn tham khảo - [Claude Design](https://www.anthropic.com/news/claude-design-anthropic-labs) - Anthropic - [Claude Design của Anthropic biến các cuộc trò chuyện với chatbot thành nguyên mẫu, bản trình chiếu và tài sản tiếp thị](https://vnai.vn/claude-design-cua-anthropic-bien-cac-cuoc-tro-chuyen-voi-chatbot-thanh-nguyen-mau-ban-trinh-chieu-va-tai-san-tiep-thi/) - VNAI --- Published by hecigo, middleware & integration lab. https://hecigo.com · hi@hecigo.com --- # Nối text-to-speech vào workflow: phần khó không nằm ở API Gọi API text-to-speech mất mười phút. Phần tốn thời gian là chuẩn hóa tiếng Việt trước khi đọc, lưu file audio ở đâu, và xử lý khi một lần gọi thất bại giữa chừng. Published: 2026-04-16 · Language: vi · Tags: Text-to-Speech, Tích hợp hệ thống, n8n, Tiếng Việt, Tự động hóa · Canonical: https://hecigo.com/blog/hecigo-cap-nhat-giai-phap-ai-moi-gemini-31-flash-tts-va-co-hoi-cho-cac-nha-phat-/ --- Google phát hành model text-to-speech mới trong dòng Gemini Flash, đọc được tiếng Việt và điều khiển được ngữ điệu bằng chỉ dẫn văn bản ([thông báo của Google](https://blog.google/innovation-and-ai/models-and-research/gemini-models/gemini-3-1-flash-tts/), [tài liệu API](https://ai.google.dev/gemini-api/docs/speech-generation)). Gọi được API đó mất khoảng mười phút. Bài này nói về phần còn lại: những gì phải làm trước và sau lời gọi đó để nó chạy được trong một quy trình thật. ## Chuẩn hóa tiếng Việt trước khi đọc Đây là phần chiếm nhiều thời gian nhất và cũng là phần hay bị bỏ qua nhất. Văn bản trong hệ thống doanh nghiệp không phải văn xuôi. Nó đầy số tiền, ngày tháng, mã đơn, viết tắt, và tên riêng. Model TTS đọc chúng theo cách nó đoán, và đoán sai thì người nghe nhận ra ngay. Vài trường hợp gặp trong hầu hết dự án: | Trong dữ liệu | Đọc sai thành | Phải chuẩn hóa thành | |---|---|---| | `1.500.000đ` | "một chấm năm trăm nghìn" | "một triệu năm trăm nghìn đồng" | | `TP.HCM` | "tê pê chấm hát xê mờ" | "Thành phố Hồ Chí Minh" | | `30/4` | "ba mươi trên bốn" | "ngày ba mươi tháng tư" | | `0912345678` | đọc liền như một số | "không chín một hai, ba bốn năm, sáu bảy tám" | | `SP-A12` | "ét pê a mười hai" | "sản phẩm A mười hai" | | `12,5%` | "mười hai phẩy năm phần trăm" (đúng) | giữ nguyên | Hai điều đáng lưu ý về bảng này. Thứ nhất, **nó phụ thuộc miền dữ liệu**: bảng cho hệ thống bán lẻ khác bảng cho hệ thống y tế. Thứ hai, nó phải sống **ngoài mã nguồn**, vì người sửa nó thường là người vận hành chứ không phải lập trình viên, và mỗi lần sửa mà phải deploy là một lần không ai sửa. Cách làm dùng được là một bảng quy tắc có thứ tự, áp dụng từ cụ thể tới tổng quát: ```javascript // Quy tắc chuẩn hóa chạy TRƯỚC khi gửi cho TTS. // Thứ tự quan trọng: khớp cụ thể trước, tổng quát sau. Đảo lại thì quy tắc // tiền tệ sẽ nuốt mất số điện thoại, vì cả hai đều là chuỗi chữ số dài. const RULES = [ { name: 'tien-te', re: /(\d[\d.]*)\s*(đ|VND|vnđ)\b/gi, fn: (_, n) => `${docSoTien(n)} đồng` }, { name: 'sdt', re: /\b(0\d{9,10})\b/g, fn: (_, n) => docTungCum(n) }, { name: 'ngay-thang', re: /\b(\d{1,2})\/(\d{1,2})\b/g, fn: (_, d, m) => `ngày ${d} tháng ${m}` }, { name: 'viet-tat', re: /\bTP\.?\s?HCM\b/gi, fn: () => 'Thành phố Hồ Chí Minh' }, ]; function chuanHoa(text) { const applied = []; let out = text; for (const r of RULES) { const before = out; out = out.replace(r.re, r.fn); if (out !== before) applied.push(r.name); } // Ghi lại quy tắc nào đã chạy: khi người nghe báo "đọc sai chỗ này", // đây là thứ duy nhất cho biết nên sửa quy tắc nào. return { text: out, applied }; } ``` Trả về cả `applied` chứ không chỉ chuỗi kết quả. Khi có người báo một câu bị đọc sai, thứ bạn cần là biết quy tắc nào đã can thiệp vào câu đó, chứ không phải đọc lại toàn bộ danh sách quy tắc để đoán. ## Audio đi đâu sau khi sinh ra API trả về dữ liệu âm thanh dạng nhị phân. Ba câu hỏi phải trả lời trước khi viết dòng code đầu tiên: **Lưu ở đâu.** Nhét base64 vào một trường trong cơ sở dữ liệu là cách nhanh nhất và cũng là cách hối hận nhanh nhất: một đoạn audio ba mươi giây đã vài trăm KB, và mọi truy vấn chạm vào bảng đó đều chậm đi. Lưu ra object storage, giữ lại đường dẫn. **Sinh lại hay dùng lại.** Cùng một câu, cùng một giọng, cùng một tham số thì kết quả không đổi. Băm chuỗi **sau khi chuẩn hóa** cộng với id giọng đọc làm khóa cache. Với thông báo theo mẫu, tỉ lệ trùng rất cao và mỗi lần trùng là một lần không phải trả tiền. **Bao giờ xóa.** Audio thông báo đơn hàng không cần sống mãi. Không đặt hạn xóa từ đầu thì sáu tháng sau sẽ có người phải đi dọn thủ công. ## Thất bại giữa chừng và chi phí TTS tính tiền theo lượng đầu vào, nên mỗi lần gọi lại là một lần trả tiền lần nữa ([bảng giá Gemini API](https://ai.google.dev/gemini-api/docs/pricing)). Điều đó đổi cách thiết kế phần thử lại. Với một lời gọi API thông thường, thử lại là chuyện rẻ. Với TTS, một vòng lặp retry chạy sai có thể sinh hóa đơn thật. Ba việc tối thiểu: 1. **Ghi nhận trước khi gọi.** Cùng cơ chế sổ chống trùng như mọi tích hợp khác: khóa là băm của văn bản đã chuẩn hóa cộng id giọng. Nếu khóa đã tồn tại và có đường dẫn audio, dừng lại và trả về đường dẫn cũ. 2. **Giới hạn số lần thử.** Ba lần với backoff tăng dần, rồi đẩy sang hàng đợi thất bại. Đừng thử vô hạn. 3. **Kiểm tra audio trước khi coi là thành công.** Một phản hồi HTTP 200 kèm 40 byte không phải audio. Kiểm độ dài tối thiểu và header định dạng trước khi ghi vào sổ, nếu không thì lần sau cache sẽ trả về một file rỗng và không ai hiểu vì sao. ## Khi nào thì đáng làm Text-to-speech đáng làm khi người nhận **không rảnh tay hoặc không rảnh mắt**: tài xế nghe thông báo đơn mới, công nhân kho nghe lệnh lấy hàng, người khiếm thị dùng hệ thống nội bộ. Nó không đáng làm khi chỉ để thay một dòng chữ mà người ta vẫn đang đọc bình thường. Chuyển thông báo Zalo thành audio không làm nó được đọc nhiều hơn, chỉ làm nó khó lướt qua hơn. Về phần hecigo: chúng tôi chưa phát hành node TTS nào. Hai node công khai hiện có trên npm là `n8n-nodes-zalo-platform` và `n8n-nodes-firecrawl-v2`. Phần trên là cách chúng tôi tiếp cận một tích hợp dạng này, không phải mô tả một sản phẩm đã có. Nếu bạn đang nối một dịch vụ bên ngoài vào quy trình nội bộ và vướng đúng ở phần "sau khi API trả về thì làm gì", [mô tả cho chúng tôi](https://hecigo.com/#contact) hai hệ thống đó và chỗ nào đang sai. > **Thấy hữu ích? Theo dõi hecigo trên [Zalo OA](https://zalo.me/3108963776852260798)** để nhận bài viết kỹ thuật mới sớm nhất - không spam, chỉ nội dung thực tế. Hoặc [liên hệ trực tiếp](https://hecigo.com/#contact) nếu bạn cần hỗ trợ triển khai. > Related: [Đọc tiếp: Middleware: phần việc n8n, OpenClaw và mọi nền tảng tự động hóa không làm hộ bạn](https://hecigo.com/blog/middleware-chia-khoa-mo-khoa-toan-bo-tiem-nang-cua-n8n-openclaw-va-moi-nen-tang-/): Nối được API là phần dễ. Phần khó lộ ra sau vài tuần chạy thật: sự kiện gửi lại hai lần, webhook rơi mất một giao dịch, hóa đơn bị hủy nhưng hệ... ## Nguồn tham khảo - [Gemini 3.1 Flash TTS: New text-to-speech AI model](https://blog.google/innovation-and-ai/models-and-research/gemini-models/gemini-3-1-flash-tts/) - Google - [Speech generation | Gemini API](https://ai.google.dev/gemini-api/docs/speech-generation) - Google AI for Developers - [Gemini API pricing](https://ai.google.dev/gemini-api/docs/pricing) - Google AI for Developers --- Published by hecigo, middleware & integration lab. https://hecigo.com · hi@hecigo.com --- # Thu Thập Dữ Liệu Web cho Doanh Nghiệp Việt với n8n và Firecrawl Node Firecrawl trong n8n có sáu thao tác dễ nhầm nhau: scrape, crawl, map, search, get status và cancel. Bài này đi qua từng cái, khi nào dùng, và cách cấu hình credentials cho cả bản cloud lẫn bản tự dựng. Published: 2026-04-11 · Language: vi · Tags: n8n, Firecrawl, Web Scraping, Tự động hóa, Doanh nghiệp Việt · Canonical: https://hecigo.com/blog/toi-uu-hoa-quy-trinh-thu-thap-du-lieu-web-cho-doanh-nghiep-viet-voi-n8n-va-firec/ --- Trang cần cào render bằng JavaScript, nên `HTTP Request` của n8n trả về khung HTML rỗng. Đổi sang một dịch vụ scraping thì lại vướng chuyện khác: node Firecrawl có sáu thao tác, tên nghe gần giống nhau, và chọn sai thì hoặc thiếu dữ liệu hoặc đốt credit vào việc mình không cần. Bài này đi qua sáu thao tác đó theo thứ tự, kèm chỗ mỗi cái hỏng: cài node vào n8n, cấu hình credentials cho bản cloud và bản tự dựng, rồi scrape, crawl, map, search và hai thao tác quản lý job. ## Firecrawl là gì? [Firecrawl](https://firecrawl.dev/) là một công cụ web scraping thế hệ mới, được thiết kế để giải quyết các thách thức trong việc thu thập dữ liệu từ các trang web hiện đại. Nó có khả năng xử lý JavaScript, vượt qua các biện pháp chống bot và trích xuất dữ liệu có cấu trúc một cách dễ dàng. **n8n Firecrawl node** (`n8n-nodes-firecrawl-v2`) tích hợp tất cả 10 thao tác API Firecrawl v2 vào n8n, cho phép bạn làm việc với cả Firecrawl Cloud và các phiên bản tự lưu trữ. Theo [THE NEXOVA](https://thenexova.com/n8n-firecrawl-node-web-scraping-crawling-and-ai-extraction-guide/), node này đặc biệt hữu ích cho các kỹ sư tự động hóa và tích hợp, những người muốn xây dựng các workflow thu thập dữ liệu sản xuất trên n8n. ### Cloud vs Self-Hosted Firecrawl cung cấp hai tùy chọn triển khai: Cloud và Self-Hosted. Dưới đây là so sánh giữa hai tùy chọn này: | | Firecrawl Cloud | Self-Hosted | | --- | --- | --- | | **Thiết lập** | Đăng ký tại firecrawl.dev, nhận API key | Triển khai qua Docker trên máy chủ của bạn | | **Base URL** | `https://api.firecrawl.dev/v2` | `http://your-server:3002/v2` | | **Phù hợp nhất cho** | Kiểm tra nhanh, khối lượng thấp | Sản xuất, dữ liệu nhạy cảm, số lượng yêu cầu không giới hạn | | **Chi phí** | Giá dựa trên mức sử dụng | Chỉ chi phí cơ sở hạ tầng | Chúng tôi chạy Firecrawl bản self-hosted thay vì gọi dịch vụ đám mây: độ trễ thấp hơn và dữ liệu cào về không rời khỏi hạ tầng của mình. Các workflow theo dõi đối thủ chạy trên thiết lập này xử lý hàng trăm trang mỗi ngày. ## Cài đặt ### Cài đặt Node Bạn có thể cài đặt node Firecrawl trong n8n thông qua giao diện người dùng: Settings > Community Nodes > Install > n8n-nodes-firecrawl-v2 Hoặc thông qua dòng lệnh: ```shell cd ~/.n8n npm install n8n-nodes-firecrawl-v2 ``` Khởi động lại n8n sau khi cài đặt. ### Cấu hình Credentials Tạo một credential mới có kiểu **Firecrawl API**: | Trường | Mặc định | Mô tả | | --- | --- | --- | | Base URL | `https://api.firecrawl.dev/v2` | Thay đổi cho các phiên bản tự lưu trữ. **Phải bao gồm `/v2`**. | | API Key | | API key Firecrawl của bạn | Authentication sử dụng `Authorization: Bearer apiKey`. Khi lưu, n8n sẽ kiểm tra kết nối bằng cách cào `https://example.com`. ## Các thao tác Node Firecrawl cung cấp nhiều thao tác khác nhau để thu thập và trích xuất dữ liệu web. Dưới đây là một số thao tác quan trọng nhất: ### 1. Scrape Thao tác được sử dụng phổ biến nhất. **Scrape** trích xuất nội dung từ một URL duy nhất với hỗ trợ đầy đủ cho JavaScript rendering. **Endpoint:** `POST /scrape` | Tham số | Loại | Mặc định | Mô tả | | --- | --- | --- | --- | | `url` | String | | URL mục tiêu (bắt buộc) | **Các tùy chọn Scrape (tất cả đều tùy chọn):** | Tham số | Mặc định | Mô tả | | --- | --- | --- | | `formats` | `markdown` | Các định dạng đầu ra: `markdown`, `html`, `rawHtml`, `links`, `screenshot`, `json`, `summary`, `images`, `audio`, `changeTracking` | | `onlyMainContent` | `true` | Loại bỏ headers, navigation và footers | | `includeTags` | | Các CSS selector để giữ lại (ví dụ: `article, .content`) | | `excludeTags` | | Các CSS selector để loại bỏ (ví dụ: `nav, .sidebar`) | | `waitFor` | `0` | Chờ JS rendering (ms). Tăng lên cho các trang SPA/React. | | `timeout` | `30000` | Thời gian chờ yêu cầu (ms), tối đa 300,000 | | `mobile` | `false` | Giả lập viewport của thiết bị di động | | `blockAds` | `true` | Chặn quảng cáo và cookie consent popups | | `proxy` | `auto` | Chế độ proxy: `auto`, `basic`, `enhanced` | | `locationCountry` | | Mã quốc gia ISO (ví dụ: `VN`, `US`) | | `locationLanguages` | | Mã ngôn ngữ (ví dụ: `vi-VN, en-US`) | **Ví dụ đầu ra:** ```json { "markdown": "# Page Title\n\nMain content extracted...", "metadata": { "title": "Page Title", "description": "Meta description", "sourceURL": "https://example.com", "statusCode": 200 } } ``` ### 2. Crawl **Crawl** xử lý toàn bộ trang web bằng cách theo dõi các liên kết từ một URL bắt đầu. Đây là một công việc không đồng bộ có thể mất từ vài phút đến vài giờ tùy thuộc vào kích thước trang web. **Endpoint:** `POST /crawl` | Tham số | Mặc định | Mô tả | | --- | --- | --- | | `crawlUrl` | | URL bắt đầu (bắt buộc) | | `waitForCompletion` | `false` | Giữ thực thi cho đến khi crawl hoàn tất | | `maxPollTime` | `300` | Thời gian chờ tối đa tính bằng giây | **Các tùy chọn Crawl:** | Tham số | Mặc định | Mô tả | | --- | --- | --- | | `limit` | `100` | Số lượng trang tối đa để crawl | | `maxDiscoveryDepth` | `2` | Độ sâu liên kết tối đa | | `includePaths` | | Các mẫu regex để bao gồm (ví dụ: `/blog/*, /docs/*`) | | `excludePaths` | | Các mẫu regex để loại trừ (ví dụ: `/admin/*, /login`) | | `sitemap` | `include` | Xử lý sitemap: `include`, `skip` hoặc `only` | | `crawlEntireDomain` | `false` | Theo dõi các liên kết cùng cấp và cha trên toàn miền | | `allowExternalLinks` | `false` | Theo dõi các liên kết đến các miền bên ngoài | | `allowSubdomains` | `false` | Crawl các subdomain | | `delay` | `0` | Số giây giữa các yêu cầu (buộc concurrency về 1) | | `formats` | `markdown` | Định dạng đầu ra cho mỗi trang | | `onlyMainContent` | `true` | Loại bỏ boilerplate khỏi mỗi trang | **Khi `waitForCompletion` tắt:** đầu ra chỉ chứa `id` của công việc. Sử dụng thao tác **Get Crawl Status** để truy xuất kết quả sau. Khoảng thời gian polling nội bộ là 2 giây. ### 3. Get Crawl Status / 4. Cancel Crawl | Thao tác | Endpoint | Tham số | | --- | --- | --- | | Get Crawl Status | `GET /crawl/:id` | `crawlId` (job ID từ Crawl) | | Cancel Crawl | `DELETE /crawl/:id` | `cancelCrawlId` (job ID) | ### 5. Map **Map** khám phá tất cả các URL trên một trang web mà không cần cào nội dung của chúng. Nó nhanh hơn đáng kể so với Crawl và hoạt động tốt như một bước đầu tiên trước khi cào có mục tiêu. **Endpoint:** `POST /map` | Tham số | Mặc định | Mô tả | | --- | --- | --- | | `mapUrl` | | URL bắt đầu (bắt buộc) | | `search` | | Truy vấn tìm kiếm để xếp hạng kết quả theo mức độ liên quan | | `includeSubdomains` | `true` | Bao gồm các URL subdomain | | `limit` | `5000` | Số lượng URL tối đa để trả về (tối đa: 100,000) | | `ignoreQueryParameters` | `true` | Loại bỏ các URL trùng lặp bằng cách loại bỏ query string | | `ignoreCache` | `false` | Bỏ qua bộ nhớ cache sitemap | ### 6. Search **Search** thực hiện tìm kiếm trên web và tùy chọn cào từng trang kết quả. Điều này kết hợp khám phá tìm kiếm và trích xuất nội dung. **Endpoint:** `POST /search` | Tham số | Mặc định | Mô tả | | --- | --- | --- | | `query` | | Truy vấn tìm kiếm (bắt buộc) | | `limit` | `5` | Số lượng kết quả tối đa | | `lang` | | Mã ngôn ngữ (ví dụ: `vi`, `en`) | | `country` | | Mã quốc gia (ví dụ: `VN`, `US`) | | `scrapeOptions` | | Áp dụng các tùy chọn scrape cho mỗi kết quả | ## Ứng dụng thực tế cho doanh nghiệp Việt Sự kết hợp giữa [n8n](https://n8n.partnerlinks.io/thenexova) và Firecrawl mở ra nhiều khả năng cho doanh nghiệp Việt Nam: - **Theo dõi đối thủ cạnh tranh:** Tự động crawl và so sánh giá cả, sản phẩm từ các website đối thủ - **Thu thập dữ liệu thị trường:** Scrape thông tin từ các sàn thương mại điện tử như Shopee, Tiki, Lazada - **Tổng hợp tin tức ngành:** Map và crawl các trang tin tức công nghệ, tài chính để cập nhật xu hướng - **Lead generation:** Search và scrape thông tin doanh nghiệp từ các danh bạ trực tuyến ## hecigo và node này `n8n-nodes-firecrawl-v2` là node cộng đồng do hecigo phát triển và duy trì trên npm. Gặp trang mà node chưa cào được thì mở issue trên GitHub kèm URL, đó là cách nhanh nhất để nó được xử lý. Cào được dữ liệu mới là nửa đầu. Nửa sau là đưa dữ liệu đó vào đúng chỗ trong hệ thống của bạn mà không trùng, không mất, và biết được khi nào một lần cào thất bại. Nếu bạn đang vướng ở nửa sau, [mô tả cho chúng tôi](https://hecigo.com/#contact) hai hệ thống đang cần nối và chỗ nào đang sai. ## Nguồn tham khảo * [n8n Firecrawl Node: Web Scraping, Crawling & AI Extraction Guide | THE NEXOVA](https://thenexova.com/n8n-firecrawl-node-web-scraping-crawling-and-ai-extraction-guide/) * [Digital Transformation: Vietnam's Business-First Approach | THE NEXOVA](https://thenexova.com/digital-transformation-vietnams-business-first-approach/) --- Published by hecigo, middleware & integration lab. https://hecigo.com · hi@hecigo.com --- # Tối Ưu Tự Động Hóa Zalo Bot với n8n: Hướng Dẫn Chi Tiết từ hecigo Zalo là ứng dụng nhắn tin phổ biến nhất tại Việt Nam, với hơn 75 triệu người dùng. Nếu doanh nghiệp của bạn hoạt động tại Việt Nam, khách hàng của bạn chắc Published: 2026-04-11 · Language: vi · Tags: n8n, Zalo Bot, Tự động hóa, Vietnam · Canonical: https://hecigo.com/blog/toi-uu-tu-dong-hoa-zalo-bot-voi-n8n-huong-dan-chi-tiet-tu-hecigo/ --- Zalo là ứng dụng nhắn tin phổ biến nhất tại Việt Nam, với hơn 75 triệu người dùng. Nếu doanh nghiệp của bạn hoạt động tại Việt Nam, khách hàng của bạn chắc chắn có mặt trên Zalo. Việc tự động hóa các tương tác trên Zalo có thể giúp doanh nghiệp tiết kiệm thời gian, tăng hiệu quả và cải thiện trải nghiệm khách hàng. **n8n Zalo Bot node** nối thẳng Zalo Bot Platform vào workflow n8n: nhận tin nhắn qua webhook, gửi tin, ảnh, sticker, và quản lý cấu hình webhook. Node do hecigo phát triển và duy trì trên npm. Bài viết này sẽ cung cấp hướng dẫn chi tiết về cách triển khai và cấu hình **n8n Zalo Bot node** trong môi trường thực tế. Chúng tôi hướng đến các kỹ sư tự động hóa, nhà tích hợp hệ thống và những người sáng lập có kiến thức kỹ thuật, những người muốn triển khai nhanh chóng các giải pháp tự động hóa Zalo. Bài viết này được kế thừa và phát triển từ bài viết gốc của THE NEXOVA: [n8n Zalo Bot Node: Setup, Operations & Workflow Guide](https://thenexova.com/n8n-zalo-bot-node-complete-setup-and-operations-guide/). ## Tại sao nên tự động hóa Zalo Bot? **n8n Zalo Bot node** cho phép bạn tự động hóa các phản hồi, thu thập thông tin khách hàng tiềm năng, đồng bộ hóa dữ liệu CRM và định tuyến thông báo mà không cần viết code tùy chỉnh. Điều này đặc biệt hữu ích cho các doanh nghiệp muốn: * **Cải thiện thời gian phản hồi:** Tự động trả lời các câu hỏi thường gặp của khách hàng ngay lập tức. * **Tăng hiệu quả làm việc:** Giảm tải công việc thủ công cho nhân viên, giúp họ tập trung vào các nhiệm vụ quan trọng hơn. * **Cá nhân hóa trải nghiệm khách hàng:** Gửi các tin nhắn được cá nhân hóa dựa trên hành vi và thông tin của khách hàng. * **Tích hợp Zalo với các hệ thống khác:** Kết nối Zalo với CRM, hệ thống quản lý kho, và các ứng dụng khác. ## Những gì bạn nhận được Package `n8n-nodes-zalo-platform` bao gồm hai node chính: * **Zalo Bot Trigger:** Nhận tin nhắn và sự kiện đến từ Zalo bot của bạn thông qua webhook, với khả năng tự động đăng ký webhook và quản lý secret token. * **Zalo Bot (Action):** Gửi tin nhắn, ảnh, sticker, hành động chat và quản lý cấu hình webhook thông qua 9 operations. Zalo Bot Platform API tuân theo các quy ước tương tự như Telegram Bot API. Tất cả các yêu cầu đều là `POST` và bot token được nhúng trong đường dẫn URL: ``` https://bot-api.zaloplatforms.com/bot{TOKEN}/{method} ``` ## Cài đặt ### Bước 1: Tạo Zalo Bot 1. Mở ứng dụng **Zalo** trên điện thoại của bạn. 2. Tìm kiếm Official Account **"Zalo Bot Manager"**. 3. Nhấn **"Tao bot"** (Tạo bot) trong menu chat. 4. Nhập tên bot (phải bắt đầu bằng "Bot", ví dụ: `Bot MyShop`). 5. Zalo sẽ gửi **Bot Token** của bạn qua tin nhắn theo định dạng: `bot_id:secret_key`. ### Bước 2: Cài đặt Node **Thông qua n8n Community Nodes (khuyến nghị):** Settings > Community Nodes > Install > n8n-nodes-zalo-platform **Cài đặt thủ công (self-hosted):** ```bash cd ~/.n8n npm install n8n-nodes-zalo-platform ``` **Chế độ Queue/Worker:** Nếu bạn chạy n8n với các container worker riêng biệt, hãy cài đặt node trên **cả instance chính và tất cả các worker**. Các node tùy chỉnh phải tồn tại trong `~/.n8n/` trên mọi container. Bỏ qua bước này là lỗi triển khai phổ biến nhất. ### Bước 3: Cấu hình Credentials Tạo một credential mới thuộc loại **Zalo Bot API**: | Field | Value | | --------- | --------------------------------------------- | | Bot Token | Chuỗi `bot_id:secret_key` nhận được từ Zalo | Khi bạn lưu, n8n sẽ tự động gọi `POST /getMe` để xác minh token có hợp lệ hay không. > **Triển khai trên VPS và cần cấu hình Cloudflare?** Webhook Zalo Bot yêu cầu địa chỉ HTTPS công khai. Nếu bạn cần hướng dẫn thiết lập Cloudflare Tunnel hoặc reverse proxy cho n8n self-hosted, xem hướng dẫn đầy đủ tại THE NEXOVA (tiếng Anh, có hình ảnh từng bước): [Cloudflare Configuration for n8n Zalo Bot →](https://thenexova.com/n8n-zalo-bot-node-complete-setup-and-operations-guide/) > Related: [Thu Thập Dữ Liệu Web cho Doanh Nghiệp Việt với n8n và Firecrawl](https://hecigo.com/blog/toi-uu-hoa-quy-trinh-thu-thap-du-lieu-web-cho-doanh-nghiep-viet-voi-n8n-va-firec/): Node Firecrawl trong n8n có sáu thao tác dễ nhầm nhau: scrape, crawl, map, search, get status và cancel. Bài này đi qua từng cái và khi nào dùng... ## Zalo Bot Trigger: Nhận tin nhắn Node **n8n Zalo Bot** Trigger tự động xử lý lifecycle webhook. Khi bạn kích hoạt một workflow, node sẽ: 1. Đăng ký một URL webhook với Zalo API (`POST /setWebhook`). 2. Tạo một **secret token** một cách xác định: `SHA256(botToken).hex().substring(0, 32)`. 3. Xác thực mọi yêu cầu đến dựa trên header `X-Bot-Api-Secret-Token`. 4. Dọn dẹp webhook khi workflow bị tắt (`POST /deleteWebhook`). Bạn không cần sao chép URL webhook hoặc quản lý secret token thủ công. ### Bộ lọc sự kiện | Option | Value | What Passes Through | | -------------- | ------------------ | ----------------------------- | | Any Message | `anyMessage` | Tất cả các loại tin nhắn đến | | Text Message | `message.text.received` | Chỉ tin nhắn văn bản | | Image Message | `message.image.received` | Chỉ tin nhắn hình ảnh | | Sticker Message| `message.sticker.received`| Chỉ tin nhắn sticker | ### Sample Output Payload Khi người dùng gửi tin nhắn văn bản đến bot của bạn, trigger sẽ xuất ra: ```json { "event_name": "message.text.received", "message": { "date": 1775362520302, "chat": { "chat_type": "PRIVATE", "id": "818e7bf147beaee0f7af" }, "message_id": "261de7b845d153890ac6", "from": { "id": "818e7bf147beaee0f7af", "is_bot": false, "display_name": "Nguyen Van A" }, "text": "Xin chao" } } ``` **Các expression chính cho các node downstream:** | Expression | Returns | | ------------------------------ | ----------------------------- | | `$json.message.chat.id` | Chat ID (sử dụng để trả lời) | | `$json.message.text` | Nội dung tin nhắn | | `$json.message.from.display_name` | Tên hiển thị của người gửi | | `$json.event_name` | Chuỗi loại sự kiện | ## Zalo Bot Action Node: 9 Operations ### Get Bot Info **Endpoint:** `POST /getMe` | **Parameters:** None Trả về tên và ID của bot. Sử dụng để xác minh kết nối của bạn. ### Send Message **Endpoint:** `POST /sendMessage` | Parameter | Type | Required | Description | | --------- | ------ | -------- | -------------------------------------------- | | `chatId` | String | Yes | User ID hoặc Group ID | | `text` | String | Yes | Nội dung tin nhắn, tối đa 2000 ký tự | **Request body được gửi đến Zalo:** ```json { "chat_id": "818e7bf147beaee0f7af", "text": "Thanks for reaching out!" } ``` ### Send Photo **Endpoint:** `POST /sendPhoto` | Parameter | Type | Required | Description | | --------- | ------ | -------- | --------------------- | | `chatId` | String | Yes | User ID hoặc Group ID | | `photo` | String | Yes | HTTPS image URL | | `caption` | String | No | Caption text, max 2000 characters | ### Send Sticker **Endpoint:** `POST /sendSticker` | Parameter | Type | Required | Description | | --------- | ------ | -------- | --------------------- | | `chatId` | String | Yes | User ID hoặc Group ID | | `stickerId`| String | Yes | Sticker ID (ví dụ: `bfe458bf64fa8da4d4eb`) | **Lưu ý:** UI gắn nhãn trường này là `stickerId`, nhưng request body API sử dụng key `"sticker"`. Node tự động xử lý mapping này. ### Send Chat Action **Endpoint:** `POST /sendChatAction` | Parameter | Type | Required | Description | | --------- | ------- | -------- | ----------------------------------------------------------------------------------- | | `chatId` | String | Yes | User ID hoặc Group ID | | `action` | Options | Yes | `typing` (bot đang nhập tin nhắn) hoặc `upload_photo` (bot đang tải ảnh lên) | **Request body được gửi đến Zalo:** ```json { "chat_id": "818e7bf147beaee0f7af", "action": "typing" } ``` Sử dụng **Send Chat Action** trước khi gửi tin nhắn hoặc ảnh để cho người dùng biết rằng bot của bạn đang xử lý yêu cầu của họ. Điều này cải thiện trải nghiệm trò chuyện bằng cách hiển thị trạng thái xử lý. ### Set Webhook **Endpoint:** `POST /setWebhook` | Parameter | Type | Required | Description | | ------------- | ------ | -------- | ------------------------------------------------------- | | `url` | String | Yes | HTTPS URL công khai để Zalo gửi event đến | | `secretToken` | String | No | Secret token để xác thực request đến từ Zalo | > **Lưu ý:** Node `ZaloBotTrigger` tự động gọi operation này khi workflow được kích hoạt - bạn không cần gọi thủ công trong hầu hết trường hợp. Dùng operation này khi cần đăng ký webhook từ một workflow riêng hoặc tích hợp với hệ thống bên ngoài n8n. ### Delete Webhook **Endpoint:** `POST /deleteWebhook` | **Parameters:** None Xóa webhook đang đăng ký của bot. Node `ZaloBotTrigger` tự động gọi operation này khi workflow bị tắt để dọn dẹp. Gọi thủ công khi cần reset hoàn toàn cấu hình webhook. ### Get Webhook Info **Endpoint:** `POST /getWebhookInfo` | **Parameters:** None Trả về thông tin webhook hiện tại của bot: ```json { "url": "https://your-n8n.example.com/webhook/zalo-bot", "has_custom_certificate": false, "pending_update_count": 0 } ``` Dùng để kiểm tra xem webhook đã được đăng ký đúng chưa, hoặc debug khi bot không nhận được event. ## Workflow Mẫu Chính Thức: Chăm Sóc Khách Hàng SME Việt trên Zalo Bot Workflow của chúng tôi đã được **n8n duyệt và publish chính thức** trên thư viện cộng đồng n8n.io: **[Handle Vietnamese SME customer care on Zalo Bot with Gemini and Google Sheets](https://n8n.io/workflows/14816-handle-vietnamese-sme-customer-care-on-zalo-bot-with-gemini-and-google-sheets/)** Đây là workflow sẵn sàng production cho doanh nghiệp nhỏ Việt Nam, được xếp vào danh mục **Support Chatbot** và **AI Chatbot** trên n8n.io. Workflow quản lý toàn bộ hành trình khách hàng bao gồm: * **Chào mừng và định tuyến tin nhắn** - Tự động phân loại tin nhắn đến theo intent. * **Phản hồi AI bằng tiếng Việt** - Tích hợp Google Gemini để trả lời tự nhiên, hỗ trợ đầy đủ dấu tiếng Việt. * **Chuyển tiếp lên nhân viên** - Tự động escalate khi bot không xử lý được. * **Ghi nhật ký cuộc trò chuyện** - Lưu toàn bộ lịch sử chat vào Google Sheets như một CRM đơn giản. Workflow này sử dụng tất cả operations từ `n8n-nodes-zalo-platform` và là tài liệu tham khảo tốt nhất để xem node hoạt động trong thực tế. **Yêu cầu:** n8n self-hosted (community nodes không khả dụng trên n8n Cloud), tài khoản Google (Sheets + Gemini API), và Zalo Bot đã tạo qua Zalo Bot Manager. > **Gặp sự cố hoặc cần giải pháp nâng cao?** Bài viết gốc tiếng Anh tại THE NEXOVA có thêm các phần chưa được dịch trong bài này, bao gồm: Troubleshooting checklist cho các lỗi phổ biến (webhook không nhận event, token invalid, SSL errors) và Premium & Custom Solutions cho nhu cầu enterprise. Xem tại: [n8n Zalo Bot Node: Complete Setup Guide - THE NEXOVA →](https://thenexova.com/n8n-zalo-bot-node-complete-setup-and-operations-guide/) ## hecigo và node này `n8n-nodes-zalo-platform` là node cộng đồng do hecigo phát triển và duy trì, phát hành công khai trên npm. Nếu bạn chạy nó trong production và gặp trường hợp node chưa xử lý được, mở issue trên GitHub là cách nhanh nhất để nó được bổ sung. hecigo xây và vận hành lớp middleware giữa những hệ thống cần trao đổi dữ liệu với nhau. Node này là một mảnh nhỏ tách ra dùng chung; phần lớn công việc còn lại nằm ở chỗ dữ liệu chảy đúng giữa hai đầu: chống trùng, đối soát, và biết được khi nào một bản ghi bị rơi. Nếu bạn đang có hai hệ thống không nói chuyện được với nhau, [mô tả cho chúng tôi](https://hecigo.com/#contact) hai hệ thống đó là gì và chỗ nào đang sai. > **Triển khai xong rồi, cần gì thêm?** Theo dõi hecigo trên [Zalo OA](https://zalo.me/3108963776852260798) để nhận bài viết kỹ thuật mới sớm nhất - không spam, chỉ nội dung thực tế. Hoặc [liên hệ trực tiếp](https://hecigo.com/#contact) nếu bạn cần hỗ trợ setup workflow cho doanh nghiệp. > Related: [Đọc tiếp: Thu Thập Dữ Liệu Web cho Doanh Nghiệp Việt với n8n và Firecrawl](https://hecigo.com/blog/toi-uu-hoa-quy-trinh-thu-thap-du-lieu-web-cho-doanh-nghiep-viet-voi-n8n-va-firec/): Node Firecrawl trong n8n có sáu thao tác dễ nhầm nhau: scrape, crawl, map, search, get status và cancel. Bài này đi qua từng cái và khi nào dùng... ## Nguồn tham khảo * [Handle Vietnamese SME customer care on Zalo Bot with Gemini and Google Sheets | n8n.io](https://n8n.io/workflows/14816-handle-vietnamese-sme-customer-care-on-zalo-bot-with-gemini-and-google-sheets/) * [n8n Zalo Bot Node: Setup, Operations & Workflow Guide | THE NEXOVA](https://thenexova.com/n8n-zalo-bot-node-complete-setup-and-operations-guide/) --- Published by hecigo, middleware & integration lab. https://hecigo.com · hi@hecigo.com