{"id":"page:home:vi:intro","url":"https://hecigo.com/","locale":"vi","type":"page","title":"hecigo: AI-native software lab","headingPath":[],"text":"hecigo là AI-native software lab: chúng tôi làm sản phẩm và lớp kết nối để hệ thống, dữ liệu và AI agent làm việc được với nhau. Pháp nhân là HECIGO TECHNOLOGY CO., LTD (CÔNG TY TNHH CÔNG NGHỆ HECIGO), mã số thuế 0317653537, TP Hồ Chí Minh.\n\n\"AI-native\" ở đây nghĩa là hai việc kiểm được: sản phẩm dùng được bởi AI agent ngay từ đầu (MCP, Markdown, OpenAPI, llms.txt), và chính hecigo dùng LLM và agent trong quy trình làm việc.","entities":["org:hecigo"],"updated":null}
{"id":"page:home:vi:products","url":"https://hecigo.com/","locale":"vi","type":"page","title":"hecigo: AI-native software lab","headingPath":["Products"],"text":"- **Ads Insights**: MCP server chỉ đọc cho Meta Ads, Google Ads, TikTok Ads, GA4 và Search Console. Hỏi trong Claude, ChatGPT, Cursor, VS Code hay bất kỳ Trợ lý AI nào hỗ trợ MCP, nhận về một bảng. Kết nối tại `https://ads.hecigo.com/mcp`. Chi tiết: https://hecigo.com/products/ads-insights/","entities":["org:hecigo","product:ads-insights"],"updated":null}
{"id":"page:home:vi:developers","url":"https://hecigo.com/","locale":"vi","type":"page","title":"hecigo: AI-native software lab","headingPath":["Developers"],"text":"Mã nguồn mở, MIT, trên npm:\n\n- `n8n-nodes-zalo-platform`: gửi tin, ảnh, sticker qua Zalo Bot trong n8n, 9 thao tác.\n- `n8n-nodes-firecrawl-v2`: scrape, crawl, map, search, extract bằng Firecrawl v2 trong n8n, 10 thao tác.","entities":["product:n8n-nodes-firecrawl-v2","product:n8n-nodes-zalo-platform"],"updated":null}
{"id":"page:home:vi:solutions","url":"https://hecigo.com/","locale":"vi","type":"page","title":"hecigo: AI-native software lab","headingPath":["Solutions"],"text":"Tích hợp và tự động hoá cho doanh nghiệp, làm theo từng bước có cổng nghiệm thu: Discovery, POC trên dữ liệu thật, Production, vận hành. Mỗi bước có lối ra; bàn giao ghi trong hợp đồng. Cơ chế đi kèm: khoá chống trùng có ràng buộc ở database, thử lại có backoff, DLQ replay được, đối soát định kỳ, nhật ký tra từng giao dịch. Chi tiết: https://hecigo.com/solutions/","entities":["org:hecigo"],"updated":null}
{"id":"page:home:vi:liên-hệ","url":"https://hecigo.com/","locale":"vi","type":"page","title":"hecigo: AI-native software lab","headingPath":["Liên hệ"],"text":"- Email: hi@hecigo.com\n- Form: https://hecigo.com/contact/\n- Địa chỉ: 222 Điện Biên Phủ, Phường Xuân Hòa, TP Hồ Chí Minh, Việt Nam","entities":["org:hecigo"],"updated":null}
{"id":"page:about:vi:intro","url":"https://hecigo.com/about/","locale":"vi","type":"page","title":"Về hecigo","headingPath":[],"text":"hecigo là AI-native software lab ở TP Hồ Chí Minh: chúng tôi làm sản phẩm và lớp kết nối để hệ thống, dữ liệu và AI agent làm việc được với nhau.\n\n\"AI-native\" ở đây nghĩa là hai việc kiểm được. Sản phẩm của chúng tôi được thiết kế để AI agent dùng được từ ngày đầu, qua MCP, Markdown, OpenAPI, `llms.txt` và lỗi trả JSON có mã. Và chính chúng tôi dùng LLM và agent trong cách làm ra và vận hành những sản phẩm đó.","entities":["org:hecigo"],"updated":"2026-10-11"}
{"id":"page:about:vi:ba-trụ","url":"https://hecigo.com/about/#ba-trụ","locale":"vi","type":"page","title":"Về hecigo","headingPath":["Ba trụ"],"text":"**Products** là phần mềm dùng ngay. Hiện có [Ads Insights](https://hecigo.com/products/ads-insights/), MCP server chỉ đọc cho Meta Ads, Google Ads, TikTok Ads, GA4 và Search Console, chạy production tại `ads.hecigo.com`, cả ba nền tảng quảng cáo đã duyệt app.\n\n**Developers** là mã nguồn mở. Hai n8n community node trên npm, giấy phép MIT, là `n8n-nodes-zalo-platform` và `n8n-nodes-firecrawl-v2`, và cả hai có người dùng ngoài dự án của chúng tôi.\n\n**Solutions** là tích hợp và tự động hoá cho doanh nghiệp 20 tới 200 người, kể cả luồng chạy bằng LLM và agent. Việc đi theo từng bước có cổng nghiệm thu: khảo sát có trả phí, POC trên 20 tới 50 giao dịch thật với tiêu chí viết trước, triển khai chính thức, rồi vận hành hoặc bàn giao. Bước nào cũng có lối ra. Chúng tôi đã có tích hợp chạy production với Base CRM, Lark Suite và Odoo.\n\nThứ nối ba trụ lại là chính lớp kết nối: OAuth, chống trùng, thử lại, nhật ký tra được từng giao dịch, và chỉ đọc cho tới khi thật sự cần ghi.","entities":["org:hecigo","product:ads-insights","product:n8n-nodes-firecrawl-v2","product:n8n-nodes-zalo-platform"],"updated":"2026-10-11"}
{"id":"page:about:vi:cách-làm-việc","url":"https://hecigo.com/about/#cách-làm-việc","locale":"vi","type":"page","title":"Về hecigo","headingPath":["Cách làm việc"],"text":"Research. Prototype. Deploy. Ba chữ đó ứng đúng với khảo sát, POC và triển khai chính thức. Không ai báo giá chính xác được một dự án tích hợp trước khi đọc dữ liệu thật, nên POC đi trước và cam kết lớn đi sau bằng chứng.","entities":[],"updated":"2026-10-11"}
{"id":"page:about:vi:tầm-nhìn","url":"https://hecigo.com/about/#tầm-nhìn","locale":"vi","type":"page","title":"Về hecigo","headingPath":["Tầm nhìn"],"text":"Bring Vietnam to the World. Doanh nghiệp Việt chạy trên Zalo, phần mềm bán hàng nội địa và hoá đơn điện tử. Chúng tôi dựng lớp để những hệ thống đó làm việc được với hệ thống quốc tế và với AI agent.","entities":[],"updated":"2026-10-11"}
{"id":"page:about:vi:một-đội-nhỏ-nói-thẳng","url":"https://hecigo.com/about/#một-đội-nhỏ-nói-thẳng","locale":"vi","type":"page","title":"Về hecigo","headingPath":["Một đội nhỏ, nói thẳng"],"text":"Chúng tôi là một đội nhỏ. Nói ra là có chủ ý: cách ngược lại là một bộ hồ sơ năng lực ngụ ý điều khác, rồi tới hoá đơn đầu tiên mới lộ sự thật.\n\nBộ công cụ cố ý nhàm chán: Node.js, PostgreSQL, Docker, n8n và Grafana. Đội khác tiếp quản được mọi thứ chúng tôi dựng mà không cần tới chúng tôi, và đó là điều kiện của cam kết bàn giao chứ không phải sở thích.","entities":[],"updated":"2026-10-11"}
{"id":"page:about:vi:pháp-nhân","url":"https://hecigo.com/about/#pháp-nhân","locale":"vi","type":"page","title":"Về hecigo","headingPath":["Pháp nhân"],"text":"- **Tên đăng ký:** CÔNG TY TNHH CÔNG NGHỆ HECIGO (tên quốc tế: HECIGO TECHNOLOGY CO., LTD)\n- **Mã số thuế:** 0317653537, hoạt động từ 17/01/2023\n- **Địa chỉ:** 222 Điện Biên Phủ, Phường Xuân Hòa, TP Hồ Chí Minh, Việt Nam\n- **Email:** hi@hecigo.com","entities":["org:hecigo"],"updated":"2026-10-11"}
{"id":"page:about:vi:đi-tiếp","url":"https://hecigo.com/about/#đi-tiếp","locale":"vi","type":"page","title":"Về hecigo","headingPath":["Đi tiếp"],"text":"- [Tài nguyên cho developer](https://hecigo.com/developers/): n8n node mã nguồn mở và endpoint máy đọc được\n- [Solutions](https://hecigo.com/solutions/): từng bước có cổng nghiệm thu, chi tiết\n- [Liên hệ](https://hecigo.com/contact/)","entities":["org:hecigo"],"updated":"2026-10-11"}
{"id":"page:brand:en:intro","url":"https://hecigo.com/brand/","locale":"en","type":"page","title":"hecigo brand and trademark","headingPath":[],"text":"The hecigo name and logo are registered with the Intellectual Property Office of\nViet Nam. This page is the registry record, written out so anyone can check it\nwithout asking us first, followed by the rules for using the name and the mark.","entities":["org:hecigo"],"updated":"2026-08-24"}
{"id":"page:brand:en:the-registry-record","url":"https://hecigo.com/brand/#the-registry-record","locale":"en","type":"page","title":"hecigo brand and trademark","headingPath":["The registry record"],"text":"| Field | As filed |\n| --- | --- |\n| Mark | hecigo, wordmark and hexagon logo |\n| Certificate number | **521781**, barcode `VN 4-0521781` |\n| Application number | `4-2023-07143` |\n| Filed | 6 March 2023 |\n| Published | 25 July 2023 |\n| Granted | Decision `157403/QĐ-SHTT`, 30 December 2024 |\n| In force until | 6 March 2033, renewable |\n| Registrar | Intellectual Property Office of Viet Nam |\n| Proprietor | CÔNG TY TNHH CÔNG NGHỆ HECIGO, the Vietnamese legal name of HECIGO TECHNOLOGY CO., LTD |\n| Address on the certificate | CirCO Dien Bien Phu, 222 Dien Bien Phu street, Vo Thi Sau ward, District 3, Ho Chi Minh City |\n| Mark type | Ordinary |\n| Registered colours | Black, white, blue, purple |\n| Class | **Nice class 09** |\n| Goods covered | Computer software (recorded); recorded computer programs; computer programs, being downloadable software |\n\n### Checking it yourself\n\nSearch the mark name `hecigo` in the public database published by the registrar\nat\n[wipopublish.ipvietnam.gov.vn](https://wipopublish.ipvietnam.gov.vn/wopublish-search/public/trademarks).\nIt returns one record.\n\nThe registry writes the two numbers in its own format, which is worth knowing\nbefore you decide they do not match the certificate: the certificate number\nappears as `4-0521781-000`, and the application number as `VN-4-2023-07143`.\n\nThat link goes to the office that granted the mark rather than to the agent who\nfiled it. A record you can only reach by filling in someone's contact form is\nnot a record you can check.","entities":["org:hecigo"],"updated":"2026-08-24"}
{"id":"page:brand:en:what-the-registration-covers-and-what-it-does-not","url":"https://hecigo.com/brand/#what-the-registration-covers-and-what-it-does-not","locale":"en","type":"page","title":"hecigo brand and trademark","headingPath":["What the registration covers, and what it does not"],"text":"Class 09 is the software class. It covers the packaged, downloadable things\nhecigo publishes, which today are the two open-source n8n community nodes on npm\nlisted under [developer resources](https://hecigo.com/developers/).\n\nIt is not a registration in class 42, so it carries no claim over integration\nservices. We name the class rather than write \"registered trademark\" on its own\nand leave you to assume the wider reading.","entities":["org:hecigo"],"updated":"2026-08-24"}
{"id":"page:brand:en:writing-the-name","url":"https://hecigo.com/brand/#writing-the-name","locale":"en","type":"page","title":"hecigo brand and trademark","headingPath":["Writing the name"],"text":"- Always lowercase: **hecigo**. Including at the start of a sentence, and in\n  headings and titles.\n- Never set it in capitals, and never give it a capital first letter. The one\n  exception is the legal entity name, HECIGO TECHNOLOGY CO., LTD, where the\n  company register requires capitals.\n- The registered-mark symbol goes on the first or most prominent mention in a\n  document, once: hecigo®. Repeating it in every paragraph is the opposite of\n  what it is for.\n- Do not translate it, abbreviate it, hyphenate it, or bend it into a verb.","entities":["org:hecigo"],"updated":"2026-08-24"}
{"id":"page:brand:en:using-the-logo","url":"https://hecigo.com/brand/#using-the-logo","locale":"en","type":"page","title":"hecigo brand and trademark","headingPath":["Using the logo"],"text":"The lockup is the hexagon plus the wordmark. Files sit under `/logo/` on this\nsite, in SVG for anything that renders SVG and PNG for the mail clients that do\nnot.\n\n| Use | Light background | Dark background |\n| --- | --- | --- |\n| Full lockup | `/logo/Logo_light.svg` | `/logo/Logo_dark.svg` |\n| Icon only | `/logo/Logo_icon_light.svg` | `/logo/Logo_icon_dark.svg` |\n| Stacked | `/logo/Logo_stacked_light.svg` | `/logo/Logo_stacked_dark.svg` |\n| Single colour | `/logo/Logo_mono_light.svg` | `/logo/Logo_mono_dark.svg` |\n\nThe brand gradient runs `#5F96FF` to `#4E37C5`, and the wordmark ink is\n`#181818`. Those three values are mirrored from the hecigo design system, which\nis where they are decided.\n\nFour things to avoid. The second is not hypothetical: an earlier version of this\nsite flipped the logo with a CSS filter instead of shipping the two variants, and\nthe result was a wordmark in a colour that is nowhere in the registration.\n\n- Recolouring the gradient, or flattening it to one of its two ends.\n- Putting the light lockup on a light background, or the dark one on a dark\n  background. Pick the variant, do not invert the image with a CSS filter.\n- Stretching the lockup to fill a box, or rotating it.\n- Crowding it. Leave clear space on all four sides at least equal to the height\n  of the hexagon, and do not set the full lockup narrower than 96 pixels, where\n  the wordmark stops being legible.","entities":["org:hecigo"],"updated":"2026-08-24"}
{"id":"page:brand:en:permission","url":"https://hecigo.com/brand/#permission","locale":"en","type":"page","title":"hecigo brand and trademark","headingPath":["Permission"],"text":"Press, partners, and customers may use the hecigo name and logo to refer to\nhecigo factually: unmodified, from the files above, and without implying that we\nendorse or sponsor anything. Anything beyond that, ask at\n[hi@hecigo.com](mailto:hi@hecigo.com) and you will get an answer within one\nbusiness day.\n\nIf you believe someone is using the mark in a way this page does not allow, the\nsame address reaches us.","entities":["org:hecigo"],"updated":"2026-08-24"}
{"id":"page:contact:vi:intro","url":"https://hecigo.com/contact/","locale":"vi","type":"page","title":"Liên hệ hecigo","headingPath":[],"text":"Viết tới hi@hecigo.com hoặc dùng form tại https://hecigo.com/contact/, chúng tôi trả lời trong một ngày làm việc, bằng tiếng Việt hoặc tiếng Anh.\n\nhecigo do **CÔNG TY TNHH CÔNG NGHỆ HECIGO** vận hành. Chúng tôi không công bố số điện thoại: email, form, GitHub và Zalo đưa bạn tới thẳng những người sẽ làm việc.","entities":["org:hecigo"],"updated":"2026-10-11"}
{"id":"page:contact:vi:thông-tin-liên-hệ","url":"https://hecigo.com/contact/","locale":"vi","type":"page","title":"Liên hệ hecigo","headingPath":["Thông tin liên hệ"],"text":"- **Email:** hi@hecigo.com\n- **Form liên hệ:** https://hecigo.com/contact/\n- **Địa chỉ:** 222 Điện Biên Phủ, Phường Xuân Hòa, TP Hồ Chí Minh, Việt Nam\n- **Mã số thuế:** 0317653537, do cơ quan thuế TP Hồ Chí Minh cấp, hoạt động từ\n  17/01/2023. Tên quốc tế: HECIGO TECHNOLOGY CO., LTD.\n- **Giờ làm việc:** Thứ Hai tới Thứ Sáu, 09:00-18:00 giờ Việt Nam (ICT, UTC+07:00)","entities":["org:hecigo"],"updated":"2026-10-11"}
{"id":"page:contact:vi:kênh","url":"https://hecigo.com/contact/","locale":"vi","type":"page","title":"Liên hệ hecigo","headingPath":["Kênh"],"text":"- GitHub: https://github.com/hecigo\n- LinkedIn: https://www.linkedin.com/company/hecigolab\n- Facebook: https://www.facebook.com/hecigolab\n- TikTok: https://www.tiktok.com/@hecigolab\n- Zalo Official Account: https://zalo.me/3108963776852260798","entities":["org:hecigo"],"updated":"2026-10-11"}
{"id":"page:contact:vi:nên-gửi-gì","url":"https://hecigo.com/contact/","locale":"vi","type":"page","title":"Liên hệ hecigo","headingPath":["Nên gửi gì"],"text":"Hai hệ thống nào đang lệch nhau, và lệch chính xác ở đâu? Một câu trả lời cụ thể có\ních cho cả hai bên hơn nhiều so với lời xin hồ sơ năng lực. Những chi tiết giúp câu\ntrả lời đầu tiên đi nhanh hơn cả tuần:\n\n- **Hai hệ thống**, và dữ liệu cần chảy theo chiều nào.\n- **Lệch ở đâu:** bản ghi trùng, bản ghi thiếu, giá trị cũ, hay một bước có người\n  đang nhập lại bằng tay.\n- **Khối lượng:** khoảng bao nhiêu bản ghi mỗi ngày, và bên nào có webhook.\n- Đã có ai thử nối hai hệ thống này chưa, và chuyện gì đã xảy ra.\n\nNếu bài toán không phải việc chúng tôi nên nhận, chúng tôi nói thẳng. Chuyện này\nxảy ra đủ thường để đáng nói trước: việc mà một connector có sẵn đã giải được thì\nchúng tôi không báo giá.\n\nVới sản phẩm thì đường ngắn hơn. Lỗi của `n8n-nodes-zalo-platform` hay\n`n8n-nodes-firecrawl-v2` mở issue trên repo GitHub tương ứng, kèm payload làm nó\nhỏng. Câu hỏi về Ads Insights gửi tới hi@hecigo.com.","entities":["org:hecigo","product:ads-insights","product:n8n-nodes-firecrawl-v2","product:n8n-nodes-zalo-platform"],"updated":"2026-10-11"}
{"id":"page:contact:vi:form-liên-hệ","url":"https://hecigo.com/contact/","locale":"vi","type":"page","title":"Liên hệ hecigo","headingPath":["Form liên hệ"],"text":"Form gửi tên, email, vai trò bạn chọn và nội dung tin nhắn tới workflow tiếp nhận\ncủa chúng tôi, ngoài ra không gì khác. Form không gửi được nếu chưa đánh dấu ô đồng\ný, và câu chữ bạn đồng ý được lưu cùng yêu cầu, kèm phiên bản chính sách đang có\nhiệu lực lúc đó. Từ workflow tiếp nhận, yêu cầu tới hộp thư của chúng tôi trên Lark\nvà một kênh thông báo riêng, cả hai nằm ngoài Việt Nam. Dữ liệu đó được xử lý thế\nnào, cách rút lại đồng ý hay yêu cầu xoá, xem trong\n[chính sách bảo mật](https://hecigo.com/vi/privacy/).\n\nNếu không muốn dùng form, email thường tới hi@hecigo.com cũng tới đúng chỗ đó.","entities":["org:hecigo"],"updated":"2026-10-11"}
{"id":"page:developers:vi:intro","url":"https://hecigo.com/developers/","locale":"vi","type":"page","title":"hecigo Developer Resources","headingPath":[],"text":"Mọi thứ hecigo công bố cho developer và cho client tự động, gom về một chỗ.\n\nTrang này là mục lục; mỗi mục bên dưới là một URL ổn định, đoán trước được, bạn có\nthể bookmark hoặc ghi cứng vào code.\n\nhecigo là AI-native software lab: chúng tôi làm sản phẩm và lớp kết nối để hệ thống,\ndữ liệu và AI agent làm việc được với nhau. Developers là một trong ba trụ, cạnh\nProducts và Solutions, và là trụ mã nguồn mở.\n\nNếu bạn là AI agent, bắt đầu từ\n[hecigo.com/llms.txt](https://hecigo.com/llms.txt): file đó nói site này để làm gì\nvà khi nào nên tìm tới chúng tôi.","entities":["org:hecigo"],"updated":"2026-10-11"}
{"id":"page:developers:vi:n8n-node-mã-nguồn-mở-của-hecigo","url":"https://hecigo.com/developers/#n8n-node-mã-nguồn-mở-của-hecigo","locale":"vi","type":"page","title":"hecigo Developer Resources","headingPath":["n8n node mã nguồn mở của hecigo"],"text":"hecigo duy trì hai n8n community node trên npm. Cả hai dùng giấy phép MIT, cả hai có\nngười dùng ngoài dự án của chúng tôi, và cả hai nhận issue.\n\n### n8n-nodes-zalo-platform\n\nn8n community node cho Zalo Bot Platform: gửi tin nhắn, ảnh và sticker, quản lý\nwebhook. Chín thao tác. Zalo là nền tảng nhắn tin phổ biến nhất ở Việt Nam, và node\nnày là cách chúng tôi gọi tới nó từ một workflow n8n.\n\n- npm: https://www.npmjs.com/package/n8n-nodes-zalo-platform\n- Mã nguồn và README: https://github.com/hecigo/n8n-nodes-zalo-platform\n- Cài trong n8n: **Settings → Community Nodes → Install →** `n8n-nodes-zalo-platform`\n- Cài từ shell: `npm install n8n-nodes-zalo-platform`\n- Giấy phép: MIT\n- Thứ gì hỏng khi lên production, viết lại thật:\n  [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/)\n\n### n8n-nodes-firecrawl-v2\n\nn8n community node cho Firecrawl v2 API (scrape, crawl, map, search, extract và\ncác thao tác batch), chạy được với cả Firecrawl Cloud lẫn bản self-hosted. Mười\nthao tác, trong đó sáu thao tác trả về nội dung web và không thay thế cho nhau được.\n\n- npm: https://www.npmjs.com/package/n8n-nodes-firecrawl-v2\n- Mã nguồn và README: https://github.com/hecigo/n8n-nodes-firecrawl-v2\n- Cài trong n8n: **Settings → Community Nodes → Install →** `n8n-nodes-firecrawl-v2`\n- Cài từ shell: `npm install n8n-nodes-firecrawl-v2`\n- Giấy phép: MIT\n- Nên dùng thao tác nào:\n  [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/)","entities":["org:hecigo","product:n8n-nodes-firecrawl-v2","product:n8n-nodes-zalo-platform"],"updated":"2026-10-11"}
{"id":"page:developers:vi:n8n-node-mã-nguồn-mở-của-hecigo~2","url":"https://hecigo.com/developers/#n8n-node-mã-nguồn-mở-của-hecigo","locale":"vi","type":"page","title":"hecigo Developer Resources","headingPath":["n8n node mã nguồn mở của hecigo"],"text":"Toàn bộ mã nguồn của hecigo nằm dưới tổ chức GitHub\n[github.com/hecigo](https://github.com/hecigo). Mở issue hoặc pull request trên một\ntrong hai node là đường nhanh nhất để một trường hợp được xử lý.","entities":["org:hecigo"],"updated":"2026-10-11"}
{"id":"page:developers:vi:ads-insights-qua-mcp","url":"https://hecigo.com/developers/#ads-insights-qua-mcp","locale":"vi","type":"page","title":"hecigo Developer Resources","headingPath":["Ads Insights qua MCP"],"text":"Ads Insights là MCP server chỉ đọc (read-only), do hecigo vận hành, cho Meta Ads,\nGoogle Ads, TikTok Ads, Google Analytics 4 và Google Search Console. Trợ lý gọi một công\ncụ của Ads Insights, công cụ đọc thẳng API của từng nguồn, và số liệu trả về theo một khuôn duy nhất.\n\n- MCP endpoint: `https://ads.hecigo.com/mcp` (streamable HTTP)\n- Server card: https://ads.hecigo.com/.well-known/mcp/server-card.json\n- Đăng nhập: OAuth. Nhà quảng cáo cấp quyền trên màn hình đồng ý của chính Meta,\n  Google hay TikTok, và thu hồi được ở đó bất cứ lúc nào.\n- Công cụ: mười hai, cái nào cũng khai `readOnlyHint`. Không công cụ nào tạo, tạm dừng,\n  sửa hay nạp tiền cho quảng cáo.\n\nDán endpoint vào phần cài đặt connector của Claude, ChatGPT, Cursor, VS Code hay bất\nkỳ MCP client nào. Cách cấp quyền, thu hồi và xử lý dữ liệu khách hàng nằm ở\n[trang sản phẩm](https://hecigo.com/products/ads-insights/); đăng nhập và câu hỏi\nmẫu ở [ads.hecigo.com](https://ads.hecigo.com/).","entities":["org:hecigo","product:ads-insights"],"updated":"2026-10-11"}
{"id":"page:developers:vi:endpoint-máy-đọc-được-trên-hecigocom","url":"https://hecigo.com/developers/#endpoint-máy-đọc-được-trên-hecigocom","locale":"vi","type":"page","title":"hecigo Developer Resources","headingPath":["Endpoint máy đọc được trên hecigo.com"],"text":"| Endpoint | Định dạng | Là gì |\n| --- | --- | --- |\n| [/llms.txt](https://hecigo.com/llms.txt) | Markdown, llmstxt.org | Tóm tắt site, khi nào nên dùng hecigo, và mục lục link |\n| [/llms-full.txt](https://hecigo.com/llms-full.txt) | Markdown | Mọi trang và bài công khai ghép lại, lấy một lần là đủ |\n| [/agent-instructions.md](https://hecigo.com/agent-instructions.md) | Markdown | Agent nên gọi, trích dẫn và chuyển việc cho hecigo thế nào |\n| [/openapi.json](https://hecigo.com/openapi.json) | OpenAPI 3.1 | Mọi endpoint trên trang này, mô tả hình thức |\n| [/sitemap.xml](https://hecigo.com/sitemap.xml) | XML | Mọi URL được index, kèm ngày sửa cuối |\n| [/robots.txt](https://hecigo.com/robots.txt) | Text | Luật crawl; không chặn AI crawler nào |\n| [/blog-index.json](https://hecigo.com/blog-index.json) | JSON | Metadata của blog: slug, tiêu đề, mô tả, ngày, tag, ngôn ngữ |\n\nMọi thứ trong bảng đều công khai, không cần xác thực, mở CORS, và lấy miễn phí.\nKhông có giới hạn tần suất nào ngoài lớp chống lạm dụng của CDN. Xin gửi kèm user\nagent nêu rõ client của bạn.\n\n### Tài liệu OpenAPI\n\n[/openapi.json](https://hecigo.com/openapi.json) mô tả bề mặt này theo OpenAPI 3.1:\nmọi đường dẫn ở trên, phần Accept negotiation trên URL chuẩn của từng trang, schema\ncủa `blog-index.json`, và hình dạng thân lỗi. Nó được sinh từ cùng manifest mà phần\nnegotiation dùng, nên một bài đã gỡ không thể còn sót trong đó.\n\nĐọc kỹ nó là gì, vì chữ \"API\" dễ gợi sai: nó mô tả một **bề mặt website read-only**\ntrên hecigo.com, không phải một sản phẩm hecigo được host. Mọi thao tác là GET.\nKhông có API key, không có luồng OAuth, không có đường ghi nào phía sau. Sản phẩm\nhost duy nhất, Ads Insights, nằm trên domain riêng, nói MCP chứ không phải REST, và\nđược mô tả bằng server card của chính nó.","entities":["org:hecigo","product:ads-insights"],"updated":"2026-10-11"}
{"id":"page:developers:vi:kho-tri-thức","url":"https://hecigo.com/developers/#kho-tri-thức","locale":"vi","type":"page","title":"hecigo Developer Resources","headingPath":["Kho tri thức"],"text":"Site còn được công bố dưới dạng dữ liệu, chia sẵn thành từng đoạn để agent hay một\nchỉ mục truy hồi nạp thẳng mà không phải cào HTML:\n\n- [/knowledge/index.jsonl](https://hecigo.com/knowledge/index.jsonl): mỗi dòng một\n  JSON object, mỗi object là một mục H2 của một trang, bài viết hay sản phẩm, ở cả\n  hai ngôn ngữ. Mỗi object có `id`, `url`, `locale`, `type`, `title`, `headingPath`,\n  `text`, `entities` và `updated`.\n- [/knowledge/entities.json](https://hecigo.com/knowledge/entities.json): những thứ\n  các đoạn đó nói tới, gồm tổ chức và từng sản phẩm, với đúng id mà trường\n  `entities` trỏ tới, ví dụ `org:hecigo` và `product:ads-insights`.\n\nId ổn định. Nó ghép từ loại, slug, locale và anchor của mục, không bao giờ từ nội\ndung, nên sửa một câu chỉ cập nhật đoạn đó tại chỗ chứ không sinh bản trùng. Mục\ndài hơn trần một đoạn thì tách theo đoạn văn và thêm hậu tố `~2`, `~3`. Trang nào\nrender heading thành anchor thì `url` trỏ thẳng tới mục đó.","entities":["org:hecigo"],"updated":"2026-10-11"}
{"id":"page:developers:vi:content-negotiation-ra-markdown","url":"https://hecigo.com/developers/#content-negotiation-ra-markdown","locale":"vi","type":"page","title":"hecigo Developer Resources","headingPath":["Content negotiation ra Markdown"],"text":"Mọi trang công khai trên hecigo.com đều có bản Markdown ở cùng URL. Gửi\n`Accept: text/markdown` và bạn nhận văn bản sạch thay vì một trang đầy markup bố\ncục, theo quy ước mô tả ở [acceptmarkdown.com](https://acceptmarkdown.com/):\n\n```bash\ncurl -s -H \"Accept: text/markdown\" https://hecigo.com/\ncurl -s -H \"Accept: text/markdown\" https://hecigo.com/blog/n8n-zalo-bot-node-what-breaks-in-production/\n```\n\nPhản hồi mang `Content-Type: text/markdown; charset=utf-8` và\n`Vary: Accept, Accept-Encoding`. Q-value được tôn trọng, nên header\n`Accept: text/html,...,*/*;q=0.8` của trình duyệt vẫn nhận HTML.\n\nMỗi trang còn có một file `.md` đi kèm nếu bạn muốn gọi thẳng, được khai trên phản\nhồi HTML bằng `Link: </index.md>; rel=\"alternate\"; type=\"text/markdown\"`. Tiếng\nViệt là ngôn ngữ mặc định: trang tiếng Việt là `/<name>.md`, trang chủ là\n`/index.md`. Trang tiếng Anh nằm dưới `/en/`: `/en/<name>.md`, trang chủ tiếng Anh\nlà `/en.md`.\n\n```bash\ncurl -s https://hecigo.com/index.md\ncurl -s https://hecigo.com/developers.md\ncurl -s https://hecigo.com/en/developers.md\n```\n\nĐường dẫn không tồn tại trả **HTTP 404** thật, và request có header `Accept` mà\nchúng tôi thật sự không đáp ứng được trả **406 Not Acceptable** thay vì lặng lẽ trả\nsai định dạng. Cả hai trả lời bằng định dạng bạn parse được; xem [Errors](#errors)\nbên dưới.","entities":["org:hecigo"],"updated":"2026-10-11"}
{"id":"page:developers:vi:errors","url":"https://hecigo.com/developers/#errors","locale":"vi","type":"page","title":"hecigo Developer Resources","headingPath":["Errors"],"text":"Lỗi trên site này mặc định là JSON, theo khuôn RFC 9457. Bạn không phải xin:\n\n```bash\ncurl -s https://hecigo.com/no-such-page/\ncurl -s https://hecigo.com/blog/no-such-post.md\n```\n\n```json\n{\n  \"type\": \"https://hecigo.com/developers/#http-404\",\n  \"title\": \"Not Found\",\n  \"status\": 404,\n  \"detail\": \"There is no page at /no-such-page/ on hecigo.com.\",\n  \"instance\": \"/no-such-page/\",\n  \"code\": \"not_found\",\n  \"resolution\": \"Fetch https://hecigo.com/llms.txt for the link index or https://hecigo.com/sitemap.xml for every URL. ...\",\n  \"documentation_url\": \"https://hecigo.com/developers/#errors\",\n  \"links\": { \"agentIndex\": \"https://hecigo.com/llms.txt\", \"...\": \"...\" }\n}\n```\n\nRẽ nhánh theo `code`, đừng theo câu chữ trong `title` hay `detail`. Có hai giá trị:\n`not_found` và `representation_not_available`.\n\n### Vì sao JSON là mặc định\n\nVì đó là thứ dây thật sự nói. Trình duyệt khai thẳng `text/html` trong header\n`Accept`, nên người gõ nhầm URL vẫn nhận trang 404 dựng sẵn. `curl`, `fetch` và mọi\nthư viện HTTP gửi `*/*` hoặc không gửi `Accept` nào, mà ký tự đại diện không phải\nlời khai đọc được HTML. Toàn bộ khác biệt nằm ở đó:\n\n| Bạn gửi gì | 404 trả về gì |\n| --- | --- |\n| Không gì, hoặc `*/*` | JSON problem document |\n| `Accept: application/json` | JSON problem document |\n| `Accept: text/markdown` | Bản đồ khôi phục dạng Markdown |\n| `Accept: text/html`, đúng thứ trình duyệt gửi | Trang 404 dựng sẵn |\n\nTrước đây thì ngược lại: JSON chỉ ra khi bạn nêu tên nó, mọi thứ khác nhận văn xuôi.\nMột agent dùng header mặc định không có cách nào đoán ra header nào mới đúng.\n\n### Mã trạng thái được chọn theo bằng chứng\n\n#### HTTP 404","entities":["org:hecigo"],"updated":"2026-10-11"}
{"id":"page:developers:vi:errors~2","url":"https://hecigo.com/developers/#errors","locale":"vi","type":"page","title":"hecigo Developer Resources","headingPath":["Errors"],"text":"Không có đường dẫn đó. Thân lỗi nêu đường dẫn nó đang trả lời, nên agent gọi nhiều\nURL chết vẫn phân biệt được các phản hồi, và `resolution` trỏ tới `/llms.txt` và\n`/sitemap.xml`.\n\n#### HTTP 406\n\nĐường dẫn có tồn tại, nhưng không bản nào khớp header `Accept` của bạn. Trường\n`available` nêu hai định dạng đang có. Gọi trường hợp này là 404 tức là nói trang\nkhông có; gọi một 404 thật là 406 tức là nói một đường dẫn chết là có thật và đáng\nthử lại bằng định dạng khác. Thân của 406 luôn là JSON, kể cả khi bạn xin một định\ndạng chúng tôi chưa từng nghe tới.\n\n### Mọi lỗi đều mang link trong header\n\nKể cả trang 404 HTML, và đó là cách một client không parse được trang vẫn tìm về\ntới tài liệu này:\n\n```\nLink: <https://hecigo.com/openapi.json>; rel=\"service-desc\"; type=\"application/vnd.oai.openapi+json\",\n      <https://hecigo.com/llms.txt>; rel=\"service-doc\"; type=\"text/plain\",\n      <https://hecigo.com/developers/#errors>; rel=\"help\"; type=\"text/html\"\n```\n\nPhản hồi lỗi mang `Vary: Accept, Accept-Encoding` và `Cache-Control: no-store`, vì\nđịnh dạng của thân được chọn theo một header của request.\n\nMột giới hạn nên biết: đường dẫn có đuôi không phải tài liệu, như `/og-image.png`,\nhoàn toàn không đi qua negotiation, nên lỗi của chúng là lỗi của CDN. Các đuôi tài\nliệu `.md`, `.txt`, `.json` và `.xml` thì có đi qua.","entities":["org:hecigo"],"updated":"2026-10-11"}
{"id":"page:developers:vi:những-gì-hecigo-không-công-bố","url":"https://hecigo.com/developers/#những-gì-hecigo-không-công-bố","locale":"vi","type":"page","title":"hecigo Developer Resources","headingPath":["Những gì hecigo không công bố"],"text":"Nói thẳng để không ai mất một buổi chiều đi tìm:\n\n- **Không có product API trên domain này.** `/openapi.json` mô tả bề mặt read-only\n  của website này, không hơn. Dự án tích hợp của trụ Solutions chạy trong hạ tầng\n  của khách, nên ở đó cũng không có gì multi-tenant để gọi. Sản phẩm host duy nhất,\n  Ads Insights, nằm ở `ads.hecigo.com` và nói MCP, không phải REST.\n- **Không có endpoint ghi trên domain này.** Mọi thao tác mô tả ở đây là GET.\n- **Không có webhook nào để bạn đăng ký.** Webhook duy nhất trên domain này là phần\n  tiếp nhận của form liên hệ, nó là của chúng tôi, không phải của bạn.\n\nBề mặt công khai dùng được là hai n8n node, các endpoint và kho tri thức ở trên, và\nMCP endpoint của Ads Insights. Khi có thêm, trang này là nơi nó xuất hiện.","entities":["org:hecigo","product:ads-insights"],"updated":"2026-10-11"}
{"id":"page:developers:vi:liên-hệ-về-code","url":"https://hecigo.com/developers/#liên-hệ-về-code","locale":"vi","type":"page","title":"hecigo Developer Resources","headingPath":["Liên hệ về code"],"text":"- Lỗi và yêu cầu tính năng cho các node: mở issue trên repo GitHub tương ứng, kèm\n  payload làm nó hỏng.\n- Mọi việc khác: hi@hecigo.com, hoặc form tại\n  [hecigo.com/contact](https://hecigo.com/contact/).","entities":["org:hecigo"],"updated":"2026-10-11"}
{"id":"page:home:en:intro","url":"https://hecigo.com/en/","locale":"en","type":"page","title":"hecigo: AI-native software lab","headingPath":[],"text":"hecigo is an AI-native software lab: we build products and the connective layer that lets systems, data and AI agents work together. The legal entity is HECIGO TECHNOLOGY CO., LTD, Viet Nam enterprise and tax code 0317653537, Ho Chi Minh City.\n\n\"AI-native\" means two checkable things here: the products are usable by AI agents from day one (MCP, Markdown, OpenAPI, llms.txt), and hecigo itself uses LLMs and agents in how it works.","entities":["org:hecigo"],"updated":null}
{"id":"page:home:en:products","url":"https://hecigo.com/en/","locale":"en","type":"page","title":"hecigo: AI-native software lab","headingPath":["Products"],"text":"- **Ads Insights**: a read-only MCP server for Meta Ads, Google Ads, TikTok Ads, GA4 and Search Console. Ask in Claude, ChatGPT, Cursor, VS Code or any assistant that supports MCP and get one table back. Connect at `https://ads.hecigo.com/mcp`. Details: https://hecigo.com/en/products/ads-insights/","entities":["org:hecigo","product:ads-insights"],"updated":null}
{"id":"page:home:en:developers","url":"https://hecigo.com/en/","locale":"en","type":"page","title":"hecigo: AI-native software lab","headingPath":["Developers"],"text":"Open source, MIT, on npm:\n\n- `n8n-nodes-zalo-platform`: send Zalo Bot messages, photos and stickers from n8n, 9 operations.\n- `n8n-nodes-firecrawl-v2`: scrape, crawl, map, search and extract with Firecrawl v2 in n8n, 10 operations.","entities":["product:n8n-nodes-firecrawl-v2","product:n8n-nodes-zalo-platform"],"updated":null}
{"id":"page:home:en:solutions","url":"https://hecigo.com/en/","locale":"en","type":"page","title":"hecigo: AI-native software lab","headingPath":["Solutions"],"text":"Integration and automation for businesses, delivered in gated steps: discovery, a POC on real data, production, operations. Every step has an exit; handover is written into the contract. The mechanisms that come with it: a deduplication key backed by a database constraint, retries with backoff, a replayable dead-letter queue, scheduled reconciliation, and a per-transaction audit trail. Details: https://hecigo.com/en/solutions/","entities":["org:hecigo"],"updated":null}
{"id":"page:home:en:contact","url":"https://hecigo.com/en/","locale":"en","type":"page","title":"hecigo: AI-native software lab","headingPath":["Contact"],"text":"- Email: hi@hecigo.com\n- Form: https://hecigo.com/en/contact/\n- Address: CirCO Dien Bien Phu, 222 Dien Bien Phu street, Xuan Hoa ward, Ho Chi Minh City","entities":["org:hecigo"],"updated":null}
{"id":"page:about:en:intro","url":"https://hecigo.com/en/about/","locale":"en","type":"page","title":"About hecigo","headingPath":[],"text":"hecigo is an AI-native software lab in Ho Chi Minh City: we build products and the connective layer that lets systems, data and AI agents work together.\n\n\"AI-native\" means two things you can check. Our products are built for AI agents to use from day one, through MCP, Markdown, OpenAPI, `llms.txt` and JSON errors with a code. And we use LLMs and agents ourselves, in how we build and run those products.","entities":["org:hecigo"],"updated":"2026-10-11"}
{"id":"page:about:en:three-pillars","url":"https://hecigo.com/en/about/#three-pillars","locale":"en","type":"page","title":"About hecigo","headingPath":["Three pillars"],"text":"**Products** is software you use directly. Today that is [Ads Insights](https://hecigo.com/en/products/ads-insights/), a read-only MCP server for Meta Ads, Google Ads, TikTok Ads, GA4 and Search Console, in production at `ads.hecigo.com` with app approval from all three ad platforms.\n\n**Developers** is open source. Two n8n community nodes are on npm under the MIT licence, `n8n-nodes-zalo-platform` and `n8n-nodes-firecrawl-v2`, and both have users outside our own projects.\n\n**Solutions** is integration and automation work for companies of 20 to 200 people, including flows that run on LLMs and agents. It moves in gated steps: a paid discovery, a POC on 20 to 50 real transactions against acceptance criteria written beforehand, production, then operations or a handover. Every step has an exit. We have production integrations with Base CRM, Lark Suite and Odoo behind us.\n\nWhat ties the three together is the connective layer itself: OAuth, deduplication, retries, a log you can search per transaction, and read-only access until writing is actually needed.","entities":["org:hecigo","product:ads-insights","product:n8n-nodes-firecrawl-v2","product:n8n-nodes-zalo-platform"],"updated":"2026-10-11"}
{"id":"page:about:en:how-we-work","url":"https://hecigo.com/en/about/#how-we-work","locale":"en","type":"page","title":"About hecigo","headingPath":["How we work"],"text":"Research. Prototype. Deploy. The three words map one to one onto discovery, POC and production. Nobody can quote an integration accurately before reading real data, so the POC comes first and the larger commitment follows the evidence.","entities":[],"updated":"2026-10-11"}
{"id":"page:about:en:vision","url":"https://hecigo.com/en/about/#vision","locale":"en","type":"page","title":"About hecigo","headingPath":["Vision"],"text":"Bring Vietnam to the World. Vietnamese companies run on Zalo, local POS software and e-invoicing. We build the layer that lets those systems work with international ones and with AI agents.","entities":[],"updated":"2026-10-11"}
{"id":"page:about:en:a-small-team-said-plainly","url":"https://hecigo.com/en/about/#a-small-team-said-plainly","locale":"en","type":"page","title":"About hecigo","headingPath":["A small team, said plainly"],"text":"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.\n\nThe stack is deliberately boring: Node.js, PostgreSQL, Docker, n8n and Grafana. Another team can pick up anything we build without us, and that is a condition of our handover promise rather than a preference.","entities":[],"updated":"2026-10-11"}
{"id":"page:about:en:legal-entity","url":"https://hecigo.com/en/about/#legal-entity","locale":"en","type":"page","title":"About hecigo","headingPath":["Legal entity"],"text":"- **Legal name:** HECIGO TECHNOLOGY CO., LTD (registered Vietnamese name: CÔNG TY TNHH CÔNG NGHỆ HECIGO)\n- **Enterprise and tax code:** 0317653537, active since 17 January 2023\n- **Address:** CirCO Dien Bien Phu, 222 Dien Bien Phu street, Xuan Hoa ward, Ho Chi Minh City, Vietnam\n- **Email:** hi@hecigo.com","entities":["org:hecigo"],"updated":"2026-10-11"}
{"id":"page:about:en:where-to-go-next","url":"https://hecigo.com/en/about/#where-to-go-next","locale":"en","type":"page","title":"About hecigo","headingPath":["Where to go next"],"text":"- [Developer resources](https://hecigo.com/en/developers/): open-source nodes and machine-readable endpoints\n- [Solutions](https://hecigo.com/en/solutions/): the gated steps in detail\n- [Contact](https://hecigo.com/en/contact/)","entities":["org:hecigo"],"updated":"2026-10-11"}
{"id":"page:contact:en:intro","url":"https://hecigo.com/en/contact/","locale":"en","type":"page","title":"Contact hecigo","headingPath":[],"text":"Write to hi@hecigo.com or use the form at https://hecigo.com/en/contact/, and we reply within one business day, in Vietnamese or English.\n\nhecigo is operated by **HECIGO TECHNOLOGY CO., LTD**. We do not publish a phone number: email, the form, GitHub and Zalo reach the people who will actually do the work.","entities":["org:hecigo"],"updated":"2026-10-11"}
{"id":"page:contact:en:contact-details","url":"https://hecigo.com/en/contact/","locale":"en","type":"page","title":"Contact hecigo","headingPath":["Contact details"],"text":"- **Email:** hi@hecigo.com\n- **Enquiry form:** https://hecigo.com/en/contact/\n- **Address:** CirCO Dien Bien Phu, 222 Dien Bien Phu street, Xuan Hoa ward,\n  Ho Chi Minh City, Vietnam\n- **Enterprise and tax code:** 0317653537, issued by the Ho Chi Minh City tax\n  authority, active since 17 January 2023.\n  Registered Vietnamese name: CÔNG TY TNHH CÔNG NGHỆ HECIGO.\n- **Business hours:** Monday to Friday, 09:00-18:00 Indochina Time (ICT, UTC+07:00)","entities":["org:hecigo"],"updated":"2026-10-11"}
{"id":"page:contact:en:channels","url":"https://hecigo.com/en/contact/","locale":"en","type":"page","title":"Contact hecigo","headingPath":["Channels"],"text":"- GitHub: https://github.com/hecigo\n- LinkedIn: https://www.linkedin.com/company/hecigolab\n- Facebook: https://www.facebook.com/hecigolab\n- TikTok: https://www.tiktok.com/@hecigolab\n- Zalo Official Account: https://zalo.me/3108963776852260798","entities":["org:hecigo"],"updated":"2026-10-11"}
{"id":"page:contact:en:what-to-send","url":"https://hecigo.com/en/contact/","locale":"en","type":"page","title":"Contact hecigo","headingPath":["What to send"],"text":"Which two systems are out of sync, and where exactly? A specific answer is far\nmore useful to both of us than a request for a capability deck. The details that\nshorten the first reply by a week:\n\n- **The two systems**, and which direction data is supposed to move.\n- **Where they diverge:** duplicates, missing records, stale values, or a manual\n  re-entry step somebody is doing by hand.\n- **Volume:** roughly how many records a day, and whether either side offers\n  webhooks.\n- Whether anyone has attempted the integration before, and what happened.\n\nWe will tell you plainly if the problem is not one we should take. That happens\noften enough to be worth saying: a job that a native connector already solves is\nnot a job we will quote for.\n\nFor the products, the route is shorter. A bug in `n8n-nodes-zalo-platform` or\n`n8n-nodes-firecrawl-v2` belongs in an issue on its GitHub repository, with the\npayload that broke it. Questions about Ads Insights go to hi@hecigo.com.","entities":["org:hecigo","product:ads-insights","product:n8n-nodes-firecrawl-v2","product:n8n-nodes-zalo-platform"],"updated":"2026-10-11"}
{"id":"page:contact:en:enquiry-form","url":"https://hecigo.com/en/contact/","locale":"en","type":"page","title":"Contact hecigo","headingPath":["Enquiry form"],"text":"The form sends your name, email, stated role, and message to our intake workflow,\nand nothing else. It cannot be sent without ticking the consent box, and the\nwording you agree to is recorded with the enquiry together with the version of\nthe policy that was live at that moment. From the intake workflow the enquiry\nreaches our mailbox on Lark and a private notification channel, both outside\nVietnam. What happens to that data, and how to withdraw consent or ask for\ndeletion, is described in the [privacy policy](https://hecigo.com/privacy/).\n\nIf you would rather not use the form, plain email to hi@hecigo.com reaches the\nsame place.","entities":["org:hecigo"],"updated":"2026-10-11"}
{"id":"page:developers:en:intro","url":"https://hecigo.com/en/developers/","locale":"en","type":"page","title":"hecigo Developer Resources","headingPath":[],"text":"Everything hecigo publishes for developers and for automated clients, in one\nplace.\n\nThis page is the index; each entry below is a stable, predictable URL you can\nbookmark or hard-code.\n\nhecigo is an AI-native software lab: we build products and the connective layer\nthat lets systems, data and AI agents work together. Developers is one of three\npillars, next to Products and Solutions, and it is the one that is open source.\n\nIf you are an AI agent, start with\n[hecigo.com/llms.txt](https://hecigo.com/llms.txt), which names what this site is\nfor and when to reach for us.","entities":["org:hecigo"],"updated":"2026-10-11"}
{"id":"page:developers:en:open-source-n8n-nodes-by-hecigo","url":"https://hecigo.com/en/developers/#open-source-n8n-nodes-by-hecigo","locale":"en","type":"page","title":"hecigo Developer Resources","headingPath":["Open-source n8n nodes by hecigo"],"text":"hecigo maintains two n8n community nodes on npm. Both are MIT licensed, both are\nused outside our own projects, and both take issues.\n\n### n8n-nodes-zalo-platform\n\nAn n8n community node for the Zalo Bot Platform: send messages, photos and\nstickers, and manage webhooks. Nine operations. Zalo is the dominant messaging\nplatform in Vietnam, and this node is what we use to reach it from an n8n\nworkflow.\n\n- npm: https://www.npmjs.com/package/n8n-nodes-zalo-platform\n- Source and README: https://github.com/hecigo/n8n-nodes-zalo-platform\n- Install in n8n: **Settings → Community Nodes → Install →** `n8n-nodes-zalo-platform`\n- Install from a shell: `npm install n8n-nodes-zalo-platform`\n- Licence: MIT\n- What breaks in production, written up honestly:\n  [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/)\n\n### n8n-nodes-firecrawl-v2\n\nAn n8n community node covering the Firecrawl v2 API (scrape, crawl, map,\nsearch, extract, and the batch operations) against both Firecrawl Cloud and a\nself-hosted instance. Ten operations, six of which return web content and are\nnot interchangeable.\n\n- npm: https://www.npmjs.com/package/n8n-nodes-firecrawl-v2\n- Source and README: https://github.com/hecigo/n8n-nodes-firecrawl-v2\n- Install in n8n: **Settings → Community Nodes → Install →** `n8n-nodes-firecrawl-v2`\n- Install from a shell: `npm install n8n-nodes-firecrawl-v2`\n- Licence: MIT\n- Which operation to reach for:\n  [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/)","entities":["org:hecigo","product:n8n-nodes-firecrawl-v2","product:n8n-nodes-zalo-platform"],"updated":"2026-10-11"}
{"id":"page:developers:en:open-source-n8n-nodes-by-hecigo~2","url":"https://hecigo.com/en/developers/#open-source-n8n-nodes-by-hecigo","locale":"en","type":"page","title":"hecigo Developer Resources","headingPath":["Open-source n8n nodes by hecigo"],"text":"All hecigo source lives under the GitHub organisation\n[github.com/hecigo](https://github.com/hecigo). Issues and pull requests on either\nnode are the fastest route to a case being covered.","entities":["org:hecigo"],"updated":"2026-10-11"}
{"id":"page:developers:en:ads-insights-over-mcp","url":"https://hecigo.com/en/developers/#ads-insights-over-mcp","locale":"en","type":"page","title":"hecigo Developer Resources","headingPath":["Ads Insights over MCP"],"text":"Ads Insights is a hosted, read-only MCP server for Meta Ads, Google Ads,\nTikTok Ads, Google Analytics 4 and Google Search Console. The assistant calls an\nAds Insights tool, the tool reads each source's API directly, and the numbers come back in one shape.\n\n- MCP endpoint: `https://ads.hecigo.com/mcp` (streamable HTTP)\n- Server card: https://ads.hecigo.com/.well-known/mcp/server-card.json\n- Sign-in: OAuth. The advertiser grants access on Meta's, Google's or TikTok's\n  own consent screen and can revoke it there at any time.\n- Tools: twelve, and every one declares `readOnlyHint`. Nothing in it creates,\n  pauses, edits or funds an ad.\n\nPaste the endpoint into the connector settings of Claude, ChatGPT, Cursor, VS\nCode or any other MCP client. How authorization, revocation and customer data\nwork is on the [product page](https://hecigo.com/en/products/ads-insights/); the\nsign-in and example prompts are at [ads.hecigo.com](https://ads.hecigo.com/).","entities":["org:hecigo","product:ads-insights"],"updated":"2026-10-11"}
{"id":"page:developers:en:machine-readable-endpoints-on-hecigocom","url":"https://hecigo.com/en/developers/#machine-readable-endpoints-on-hecigocom","locale":"en","type":"page","title":"hecigo Developer Resources","headingPath":["Machine-readable endpoints on hecigo.com"],"text":"| Endpoint | Format | What it is |\n| --- | --- | --- |\n| [/llms.txt](https://hecigo.com/llms.txt) | Markdown, llmstxt.org | Site summary, when to use hecigo, and a link index |\n| [/llms-full.txt](https://hecigo.com/llms-full.txt) | Markdown | Every public page and post concatenated, for a single fetch |\n| [/agent-instructions.md](https://hecigo.com/agent-instructions.md) | Markdown | How an agent should call, cite, and hand off to hecigo |\n| [/openapi.json](https://hecigo.com/openapi.json) | OpenAPI 3.1 | Every endpoint on this page, described formally |\n| [/sitemap.xml](https://hecigo.com/sitemap.xml) | XML | Every indexable URL, with last-modified dates |\n| [/robots.txt](https://hecigo.com/robots.txt) | Text | Crawl rules; no AI crawler is blocked |\n| [/blog-index.json](https://hecigo.com/blog-index.json) | JSON | Blog metadata: slug, title, description, date, tags, language |\n\nEverything in the table is public, unauthenticated, CORS-open, and free to fetch.\nThere is no rate limit beyond the CDN's own abuse protection. Please send a user\nagent that identifies your client.\n\n### The OpenAPI document\n\n[/openapi.json](https://hecigo.com/openapi.json) describes this surface in\nOpenAPI 3.1: every path above, the Accept negotiation on canonical page URLs,\nthe schema of `blog-index.json`, and the shape of the error bodies. It is\ngenerated from the same manifest the negotiation runs on, so a retired post\ncannot linger in it.","entities":["org:hecigo"],"updated":"2026-10-11"}
{"id":"page:developers:en:machine-readable-endpoints-on-hecigocom~2","url":"https://hecigo.com/en/developers/#machine-readable-endpoints-on-hecigocom","locale":"en","type":"page","title":"hecigo Developer Resources","headingPath":["Machine-readable endpoints on hecigo.com"],"text":"Read what it is carefully, because the word \"API\" invites the wrong assumption:\nit documents a **read-only website surface** on hecigo.com, not a hosted hecigo\nproduct. Every operation is a GET. There is no API key, no OAuth flow and no\nwrite path behind it. The one hosted product, Ads Insights, lives on its own\ndomain, speaks MCP rather than REST, and is described by its own server card.","entities":["org:hecigo","product:ads-insights"],"updated":"2026-10-11"}
{"id":"page:developers:en:the-knowledge-base","url":"https://hecigo.com/en/developers/#the-knowledge-base","locale":"en","type":"page","title":"hecigo Developer Resources","headingPath":["The knowledge base"],"text":"The site is also published as data, split into chunks an agent or a retrieval\nindex can load without scraping HTML:\n\n- [/knowledge/index.jsonl](https://hecigo.com/knowledge/index.jsonl): one JSON\n  object per line, one line per H2 section of every page, post and product, in\n  both languages. Each object carries `id`, `url`, `locale`, `type`, `title`,\n  `headingPath`, `text`, `entities` and `updated`.\n- [/knowledge/entities.json](https://hecigo.com/knowledge/entities.json): the\n  things those chunks talk about, the organisation and each product, with the\n  ids the `entities` field points at, such as `org:hecigo` and\n  `product:ads-insights`.\n\nIds are stable. They are built from the type, slug, locale and section anchor,\nnever from the text, so a corrected sentence updates a chunk in place instead of\ncreating a duplicate. A section longer than the chunk limit is split by\nparagraph and gets a suffix: `~2`, `~3`. Where a page renders its headings as\nanchors, `url` points at that section.","entities":["org:hecigo"],"updated":"2026-10-11"}
{"id":"page:developers:en:markdown-content-negotiation","url":"https://hecigo.com/en/developers/#markdown-content-negotiation","locale":"en","type":"page","title":"hecigo Developer Resources","headingPath":["Markdown content negotiation"],"text":"Every public page on hecigo.com is available as Markdown at the same URL. Send\n`Accept: text/markdown` and you get clean prose instead of a page of layout\nmarkup, per the convention documented at\n[acceptmarkdown.com](https://acceptmarkdown.com/):\n\n```bash\ncurl -s -H \"Accept: text/markdown\" https://hecigo.com/\ncurl -s -H \"Accept: text/markdown\" https://hecigo.com/blog/n8n-zalo-bot-node-what-breaks-in-production/\n```\n\nResponses carry `Content-Type: text/markdown; charset=utf-8` and\n`Vary: Accept, Accept-Encoding`. Q-values are honoured, so a browser's\n`Accept: text/html,...,*/*;q=0.8` still gets HTML.\n\nEvery page also ships a `.md` sibling if you would rather address it directly,\nadvertised on the HTML response as\n`Link: </index.md>; rel=\"alternate\"; type=\"text/markdown\"`. Vietnamese is the\ndefault language: Vietnamese pages are `/<name>.md` and the homepage is\n`/index.md`. English pages live under `/en/`: `/en/<name>.md`, with the English\nhomepage at `/en.md`.\n\n```bash\ncurl -s https://hecigo.com/index.md\ncurl -s https://hecigo.com/developers.md\ncurl -s https://hecigo.com/en/developers.md\n```\n\nA request for a path that does not exist returns a real **HTTP 404**, and a\nrequest whose `Accept` header we genuinely cannot satisfy returns **406 Not\nAcceptable** rather than silently handing back the wrong format. Both answer in\na format you can parse; see [Errors](#errors) below.","entities":["org:hecigo"],"updated":"2026-10-11"}
{"id":"page:developers:en:errors","url":"https://hecigo.com/en/developers/#errors","locale":"en","type":"page","title":"hecigo Developer Resources","headingPath":["Errors"],"text":"Errors on this site default to JSON, shaped per RFC 9457. You do not have to ask\nfor it:\n\n```bash\ncurl -s https://hecigo.com/no-such-page/\ncurl -s https://hecigo.com/blog/no-such-post.md\n```\n\n```json\n{\n  \"type\": \"https://hecigo.com/developers/#http-404\",\n  \"title\": \"Not Found\",\n  \"status\": 404,\n  \"detail\": \"There is no page at /no-such-page/ on hecigo.com.\",\n  \"instance\": \"/no-such-page/\",\n  \"code\": \"not_found\",\n  \"resolution\": \"Fetch https://hecigo.com/llms.txt for the link index or https://hecigo.com/sitemap.xml for every URL. ...\",\n  \"documentation_url\": \"https://hecigo.com/developers/#errors\",\n  \"links\": { \"agentIndex\": \"https://hecigo.com/llms.txt\", \"...\": \"...\" }\n}\n```\n\nBranch on `code`, not on the prose in `title` or `detail`. There are two values:\n`not_found` and `representation_not_available`.\n\n### Why JSON is the default\n\nBecause of what the wire actually tells us. A browser names `text/html` outright\nin its `Accept` header, so a person who mistypes a URL still gets the rendered\n404 page. `curl`, `fetch`, and every HTTP client library send `*/*` or no\n`Accept` header at all, and the catch-all wildcard is not a claim to read HTML.\nThat is the whole distinction:\n\n| What you send | What a 404 gives you |\n| --- | --- |\n| Nothing, or `*/*` | JSON problem document |\n| `Accept: application/json` | JSON problem document |\n| `Accept: text/markdown` | The Markdown recovery map |\n| `Accept: text/html`, which is what a browser sends | The rendered 404 page |\n\nThis used to be the other way round: JSON arrived only if you named it, and\neverything else got prose. An agent with a default header had no way to guess\nwhich header would have worked.\n\n### The status code is chosen on evidence\n\n#### HTTP 404","entities":["org:hecigo"],"updated":"2026-10-11"}
{"id":"page:developers:en:errors~2","url":"https://hecigo.com/en/developers/#errors","locale":"en","type":"page","title":"hecigo Developer Resources","headingPath":["Errors"],"text":"There is no such path. The body names the path it is answering about, so an\nagent fetching several dead URLs can tell the responses apart, and `resolution`\npoints at `/llms.txt` and `/sitemap.xml`.\n\n#### HTTP 406\n\nThe path exists, but no representation matches your `Accept` header. The\n`available` member names the two formats it does have. Calling this a 404 would\nsay the page is not there; calling a genuine 404 a 406 would say a dead path is\nreal and worth retrying in another format. The 406 body is JSON in every case,\nincluding when you asked for something we have never heard of.\n\n### Every error carries links in its headers\n\nIncluding the HTML 404 page, which is how a client that cannot parse the page\nstill finds its way to this document:\n\n```\nLink: <https://hecigo.com/openapi.json>; rel=\"service-desc\"; type=\"application/vnd.oai.openapi+json\",\n      <https://hecigo.com/llms.txt>; rel=\"service-doc\"; type=\"text/plain\",\n      <https://hecigo.com/developers/#errors>; rel=\"help\"; type=\"text/html\"\n```\n\nError responses carry `Vary: Accept, Accept-Encoding` and `Cache-Control: no-store`,\nsince the format of the body is chosen from a request header.\n\nOne limit worth knowing: paths that carry a non-document extension, such as\n`/og-image.png`, are not routed through negotiation at all, so their errors are\nthe CDN's own. The document extensions `.md`, `.txt`, `.json` and `.xml` are.","entities":["org:hecigo"],"updated":"2026-10-11"}
{"id":"page:developers:en:what-hecigo-does-not-publish","url":"https://hecigo.com/en/developers/#what-hecigo-does-not-publish","locale":"en","type":"page","title":"hecigo Developer Resources","headingPath":["What hecigo does not publish"],"text":"Stated plainly so nobody wastes an afternoon looking:\n\n- **No product API on this domain.** `/openapi.json` describes this website's\n  read-only surface, and nothing more. Integration engagements in the Solutions\n  pillar run inside client infrastructure, so there is nothing multi-tenant to\n  call there either. The one hosted product, Ads Insights, lives on\n  `ads.hecigo.com` and speaks MCP, not REST.\n- **No write endpoints on this domain.** Every operation documented here is a GET.\n- **No webhooks you can subscribe to.** The only webhook on this domain is the\n  enquiry-form intake, which is ours, not yours.\n\nThe public, usable surface is the two n8n nodes, the endpoints and knowledge base\nabove, and the Ads Insights MCP endpoint. When there is more, this page is where\nit appears.","entities":["org:hecigo","product:ads-insights"],"updated":"2026-10-11"}
{"id":"page:developers:en:getting-in-touch-about-the-code","url":"https://hecigo.com/en/developers/#getting-in-touch-about-the-code","locale":"en","type":"page","title":"hecigo Developer Resources","headingPath":["Getting in touch about the code"],"text":"- Bugs and feature requests on the nodes: open an issue on the relevant GitHub\n  repository, with the payload that broke it.\n- Everything else: hi@hecigo.com, or the form at\n  [hecigo.com/en/contact](https://hecigo.com/en/contact/).","entities":["org:hecigo"],"updated":"2026-10-11"}
{"id":"page:privacy:en:intro","url":"https://hecigo.com/privacy/","locale":"en","type":"page","title":"Privacy Policy","headingPath":[],"text":"This page describes what the website **hecigo.com** collects, who receives it,\nand how to have it removed. It also covers the hosted **Ads Insights** service,\nin its own section below. Data processed inside a client's own systems during an\nintegration engagement is governed by the contract for that engagement, not by\nthis page.\n\n**Data controller:** HECIGO TECHNOLOGY CO., LTD, registered in Vietnam as\nCÔNG TY TNHH CÔNG NGHỆ HECIGO, tax code 0317653537, CirCO Dien Bien Phu, 222 Dien\nBien Phu street, Xuan Hoa ward, Ho Chi Minh City, Vietnam.\nContact for any privacy question or request: **hi@hecigo.com**.\n\n**Legal basis.** This policy is written to Vietnam's Personal Data Protection Law\nNo. 91/2025/QH15 and Decree No. 356/2025/ND-CP, both in force since 1 January 2026.\nThe decree replaced Decree 13/2023. Where you send us an enquiry, the basis for\nprocessing is your consent, given by ticking the box on the form.\n\n**Last updated:** 11 October 2026. **Version:** `pdp-2026-10-11d`.","entities":["org:hecigo","product:ads-insights"],"updated":"2026-10-11"}
{"id":"page:privacy:en:what-we-collect","url":"https://hecigo.com/privacy/#what-we-collect","locale":"en","type":"page","title":"Privacy Policy","headingPath":["What we collect"],"text":"### Information you send us deliberately\n\nThe enquiry form on this site collects exactly four fields: your **name**, your\n**email address**, the **role** you select from the dropdown, and your **message**.\nNothing else is read from your browser and attached to it. The form cannot be sent\nwithout ticking the consent box, and we record the moment you ticked it together\nwith the wording you agreed to and the version of this policy that was live then.\n\nSubmitting the form sends those four fields to our intake workflow at\n`workflow.thenexova.com`, operated by THE NEXOVA on our behalf. That workflow then\ndoes three things: it emails the enquiry to our own mailbox, it sends you an\nautomatic acknowledgement, and it posts a notification to a private Telegram chat\nthat only we can read. Our mailboxes run on Lark, so a copy of your enquiry rests\nthere. All four recipients are listed under *Who else sees it*.\n\nIf you email or call us directly, we hold whatever you chose to put in that\nmessage for the same purpose and for the same period.\n\nWe use this information for one thing: replying to you and, if it becomes a\nproject, running that project. We do not sell it, rent it, or add it to a\nmarketing list you did not ask to join.\n\n### Information collected automatically","entities":[],"updated":"2026-10-11"}
{"id":"page:privacy:en:what-we-collect~2","url":"https://hecigo.com/privacy/#what-we-collect","locale":"en","type":"page","title":"Privacy Policy","headingPath":["What we collect"],"text":"- **Google Analytics 4** (measurement ID `G-DFZBPG12H8`) records page views,\n  approximate location derived from IP address, referrer, device type, and\n  browser. Google processes this as our processor. IP addresses are truncated by\n  Google before storage.\n- **Meta Pixel** (ID `1642547450913779`) records page views and passes them to\n  Meta so we can measure whether our posts bring anyone here. Meta acts as an\n  independent controller for that data under its own terms.\n- **Hosting and CDN logs.** The site runs on Cloudflare Workers, which keeps\n  short-lived request logs containing IP address, user agent, and requested path,\n  for delivery and abuse prevention. We do not query these logs to identify\n  visitors.\n- **Short-link clicks.** Some links we publish elsewhere, such as in a package\n  README, in a repository, or in a channel profile, point at addresses on this\n  site beginning `/go/`, which forward you to the real page. Each forward is counted. What is\n  written down is the short code itself, the page it led to, and the country\n  Cloudflare derived at its own edge. **Your IP address is not stored, and\n  neither is your user agent or the page you came from.** The counter exists to\n  tell us which of our links anyone follows, and it cannot tell us who you are.\n  It is kept by Cloudflare for three months and then disappears.\n\nFonts are compiled into the site at build time and served from our own domain, so\nloading a page does not send a request to Google Fonts. There is no chat widget,\nno session recorder, and no A/B testing tool on this site.","entities":[],"updated":"2026-10-11"}
{"id":"page:privacy:en:cookies","url":"https://hecigo.com/privacy/#cookies","locale":"en","type":"page","title":"Privacy Policy","headingPath":["Cookies"],"text":"Google Analytics and the Meta Pixel set cookies in your browser. They are the\nonly cookies this site causes. Nothing on hecigo.com requires a cookie to\nfunction. Blocking them in your browser, or using any tracker-blocking\nextension, leaves the entire site working normally, including the enquiry form.\nThe Ads Insights pages at ads.hecigo.com set further cookies, described under\n*Measuring hecigo's own advertising*.\n\n**We would rather state the current position than describe it vaguely.** Both\nscripts load when the page opens, before the site asks your opinion. There is no\nbanner offering you the choice yet. We are working on one, and this page will be\nupdated when it is live. Until then the ways to refuse are the ones listed under\n*Your rights*, none of which needs you to contact us.","entities":["org:hecigo","product:ads-insights"],"updated":"2026-10-11"}
{"id":"page:privacy:en:automated-clients-and-ai-agents","url":"https://hecigo.com/privacy/#automated-clients-and-ai-agents","locale":"en","type":"page","title":"Privacy Policy","headingPath":["Automated clients and AI agents"],"text":"This site publishes machine-readable representations of its own public pages:\n`/llms.txt`, `/sitemap.xml`, Markdown variants of each page, and\n`/blog-index.json`. Requesting any of those is an ordinary anonymous page request\nand is logged the same way as a browser visit. No additional data is collected\nfrom automated clients, and none of these files contain personal data about\nvisitors.","entities":[],"updated":"2026-10-11"}
{"id":"page:privacy:en:the-ads-insights-service","url":"https://hecigo.com/privacy/#the-ads-insights-service","locale":"en","type":"page","title":"Privacy Policy","headingPath":["The Ads Insights service"],"text":"Ads Insights is hosted software that reads a customer's own advertising data from\nMeta Ads, Google Ads and TikTok Ads, and, where the customer connects them, the\nGoogle Analytics and Google Search Console data of the customer's own websites, and\nshows it back to that same customer. It is\na different processing context from this website, so it is set out separately.\n\n**Which role we hold.** For the workspace itself, the name and the email address\nof the person who runs it, hecigo is the **controller**. For the advertising and\nwebsite data reached through it, hecigo is a **processor**: we read what a customer's own\nauthorization allows, on that customer's instruction, and for no purpose of our\nown. The Terms of Service are the agreement required of a processor under Law\n91/2025.","entities":["org:hecigo","product:ads-insights"],"updated":"2026-10-11"}
{"id":"page:privacy:en:the-ads-insights-service~2","url":"https://hecigo.com/privacy/#the-ads-insights-service","locale":"en","type":"page","title":"Privacy Policy","headingPath":["The Ads Insights service"],"text":"**What is stored.** An encrypted platform credential, the identifiers of the ad\naccounts the customer authorized, the workspace name, a contact email, and the\nidentifier of the Google account used to sign in to it. For each connected\nplatform the service also keeps a list of the ad accounts that credential can\nreach: each account's identifier, name, status, currency and time zone, whether it\nis a test account, and the manager account it is reached through where there is\none. The list is encrypted like the credential. It exists so the service knows\nwhich accounts a connection can read and can show the customer which ones are\nbeing read. Where Google Analytics or Search Console is connected, it also keeps,\nencrypted, the identifiers of the Google Analytics properties or the addresses of\nthe Search Console sites that are read by default. If someone turns on the weekly report schedule described under\n*Weekly report schedule*, the service also keeps, encrypted, that the schedule is\non, the language it is written in, and the Google-verified email address it goes to.\nCredentials are encrypted before they are written down, and no interface returns\ntheir values, to anyone, including the customer.\n\n**What is not stored.** No copy of the customer's advertising history, website\nanalytics or search data is kept for our own use: figures are fetched from the platform when a question is asked, or\nwhen a scheduled weekly report runs, and they are not warehoused afterwards. No data about the people who saw or clicked\na customer's ads ever reaches us. One customer's data is never pooled with another's.","entities":[],"updated":"2026-10-11"}
{"id":"page:privacy:en:the-ads-insights-service~3","url":"https://hecigo.com/privacy/#the-ads-insights-service","locale":"en","type":"page","title":"Privacy Policy","headingPath":["The Ads Insights service"],"text":"**How the data is protected.** Platform credentials, and above all the Google\ntokens described under *Google user data*, are the most sensitive thing the\nservice holds. These are the safeguards in place, each one a mechanism rather\nthan an intention.","entities":[],"updated":"2026-10-11"}
{"id":"page:privacy:en:the-ads-insights-service~4","url":"https://hecigo.com/privacy/#the-ads-insights-service","locale":"en","type":"page","title":"Privacy Policy","headingPath":["The Ads Insights service"],"text":"- **Encrypted in transit.** Every connection to ads.hecigo.com, and every call\n  from it to Google, Meta and TikTok, uses TLS. A plain HTTP request is redirected\n  to HTTPS, and browsers are instructed to use HTTPS only for this host (HSTS).\n- **Encrypted at rest.** Refresh tokens, access tokens and every other platform\n  credential are encrypted with AES-256-GCM before they are stored. The key is held\n  only in Cloudflare's secret store for the service, apart from the data it\n  protects, and never appears in source code or logs. A copy of the database\n  without that key cannot be read.\n- **Nothing reusable is stored in the clear.** Workspace keys, and the access and\n  refresh tokens issued to AI assistants, are stored only as SHA-256 hashes.\n  Assistants sign in through OAuth 2.1 with PKCE, their access tokens expire after\n  one hour, and the portal's session cookie is encrypted and marked HttpOnly,\n  Secure and SameSite.\n- **Least access.** No screen, API or response returns a stored credential, to\n  anyone, including the customer and hecigo's own administrators. Each request\n  opens only the credentials of the one workspace it belongs to, so no workspace\n  can reach another's data. The service has no operation that changes anything on\n  an advertising platform. Access to the systems that run it is limited to\n  hecigo's administrators, through accounts protected by two-step verification.\n- **Logs without secrets.** Service logs record which tool ran, for which\n  workspace, how long it took and whether it failed. They never contain\n  credentials, tokens or report figures, and query strings are removed from the\n  addresses they record.\n- **Deleted when no longer needed.** Disconnecting a platform deletes its","entities":["org:hecigo"],"updated":"2026-10-11"}
{"id":"page:privacy:en:the-ads-insights-service~5","url":"https://hecigo.com/privacy/#the-ads-insights-service","locale":"en","type":"page","title":"Privacy Policy","headingPath":["The Ads Insights service"],"text":"  encrypted credentials, any cached access token and its list of ad accounts; deleting a workspace deletes\n  everything in it, as set out under *How long*.\n- **Incidents.** If we learn that this data has been exposed, we notify the\n  affected customers without undue delay, and the competent authority within 72\n  hours as Law 91/2025 requires.\n\n**Monitoring.** To find a broken connection before the customer does, the service\nchecks each connected platform about once a day by listing the ad accounts its\ncredential can open, and keeps whether that worked and the platform's error\nmessage if it did not. About once a day it also lists every ad account each\nconnection can reach and replaces the stored list of ad accounts described under\n*What is stored* with the new one; if the listing fails, the previous list stays\nuntil a listing succeeds. For each question an assistant asks, it records the tool\nused, the name of the assistant, how long the answer took and whether it failed,\nwith the workspace identifier and no report figures. These usage records are kept\nfor three months. For each AI assistant connected to a workspace it also keeps when\nthat connection was made and when it was last used, so the portal can list every\nconnection and flag the ones nobody uses; those two dates go when the connection\nends.","entities":[],"updated":"2026-10-11"}
{"id":"page:privacy:en:the-ads-insights-service~6","url":"https://hecigo.com/privacy/#the-ads-insights-service","locale":"en","type":"page","title":"Privacy Policy","headingPath":["The Ads Insights service"],"text":"**Weekly report schedule.** A person signed in to a workspace can turn on a\nschedule that emails them that workspace's advertising figures once a week. It is\noff until they turn it on, and it only ever goes to the Google-verified email\naddress they are signed in with, never to an address typed in. Each Monday\nmorning, while the schedule is on, the service reads the previous week's figures\nstraight from the connected platforms, the same way an assistant's question reads\nthem, for the ad accounts the workspace has chosen: spend, impressions, clicks,\nmessages, conversions and their value, per platform and for the campaigns that\nspent most, against the week before. It adds them up and sends one email through\nour Lark mailbox. The figures are not kept once the email is sent; the next week\nis read afresh. A \"run it now\" button does the same once a day. The service\nrecords only when the schedule last ran and whether the email went out, with no\nfigures. The schedule stops sending while no platform connection works.\n\n**Emails we send you.** Each person who signs in to a workspace with Google has\nthat Google-verified address kept on the workspace, sealed like the credentials,\nwith their name and the language they use. It is used for three kinds of email,\nsent from **hi@hecigo.com** through our Lark mailbox:","entities":["org:hecigo"],"updated":"2026-10-11"}
{"id":"page:privacy:en:the-ads-insights-service~7","url":"https://hecigo.com/privacy/#the-ads-insights-service","locale":"en","type":"page","title":"Privacy Policy","headingPath":["The Ads Insights service"],"text":"- *Service emails*: changes to the Terms of Service or this policy, a security\n  incident, a connection that stopped working, and anything else needed to run\n  the workspace. They come while the workspace exists and cannot be turned off on\n  their own; deleting the workspace ends them.\n- *Product updates and feedback requests*: new features, changes worth knowing,\n  and now and then a short question asking how the service works for you. At most\n  four a month. They start with the first sign-in, as the Terms of Service say,\n  and every one of them carries a link that turns them off.\n- *Offers*: hecigo's own offers and new products, with [QC] or [AD] in the\n  subject. At most two a month and never more than one a day. Like product\n  updates, they start with the first sign-in, which the sign-in card states, and\n  every one of them carries a link that turns them off.\n\nThe link at the foot of every email opens a page where you turn either optional\nkind on or off without signing in, in Vietnamese and English; mail clients that\noffer one-click unsubscribe use the same page, and it turns both off. Writing to\n**hi@hecigo.com** works too. For each address we record whether each optional\nkind is on, when that last changed, how (sign-in, the link, the portal, or a\nrequest to us) and which version of this policy was in force, so that we can show\nwhat was chosen and when. We never send to an address typed in by someone else,\nnever buy or rent addresses, and never give the address to anyone to send their\nown email.","entities":["org:hecigo"],"updated":"2026-10-11"}
{"id":"page:privacy:en:the-ads-insights-service~8","url":"https://hecigo.com/privacy/#the-ads-insights-service","locale":"en","type":"page","title":"Privacy Policy","headingPath":["The Ads Insights service"],"text":"**Signing up.** Sign-up to ads.hecigo.com works in one of two modes, and we\nswitch between them. While sign-up is open, the first Google sign-in creates a\nworkspace straight away. We keep the name and email address Google shares with\nus, the Google account identifier, and the language the page was shown in, as\nthat workspace's contact details. Our Lark mailbox sends the person one welcome\nemail with a sign-in link that works once and expires after 72 hours, and sends\nhecigo one notice that a workspace was created. While sign-up is under review, or\nonce the day's quota of open sign-ups is used up, signing in sends a request\ninstead. For a request we keep the same details and when it was made, and use\nthem for one thing: deciding the request and telling the person the outcome.\nLark sends one email to hecigo to review it, one to the person to confirm it\narrived, and, if it is approved, one with a sign-in link that works once and\nexpires after 72 hours. A request nobody has decided is deleted after 90 days, and\na decided one 30 days after the decision. An approved request continues as the\nworkspace and its contact email, kept as set out under *How long*. The emails\nthemselves rest in our Lark mailbox like any other correspondence.\n\n**Measuring hecigo's own advertising.** hecigo advertises Ads Insights on Meta,\nTikTok and Google, and measures which of those ads bring people who sign up. This\nconcerns our own ads and the people who respond to them. It never involves a\ncustomer's advertising data.","entities":["org:hecigo","product:ads-insights"],"updated":"2026-10-11"}
{"id":"page:privacy:en:the-ads-insights-service~9","url":"https://hecigo.com/privacy/#the-ads-insights-service","locale":"en","type":"page","title":"Privacy Policy","headingPath":["The Ads Insights service"],"text":"- *Tags on two pages.* The home page of ads.hecigo.com and its guide at\n  ads.hecigo.com/guide load the tags of Google Analytics (measurement ID\n  `G-DFZBPG12H8`), Google Ads, the Meta Pixel (ID `1642547450913779`) and the\n  TikTok Pixel. They record the page view, a click on the sign-in button and the\n  submission of the sign-in code form, and they set their own cookies (`_ga`,\n  Google Ads' `_gcl_` cookies, `_fbp` and `_fbc`, `_ttp`). No page behind sign-in\n  carries a tag: not the portal, the consent pages, the pages that connect an ad\n  platform, or any other.\n- *One cookie of our own.* When you arrive from an ad, or for the first time from\n  another site, ads.hecigo.com sets a cookie named `hg_attr`. It records when you\n  arrived, the page you landed on, the click identifier the ad platform added to the\n  link (`gclid`, `gbraid`, `wbraid`, `fbclid` or `ttclid`), any campaign tags in the\n  link, and the name of the site that sent you. It is encrypted, no script can read\n  it, and it expires after 90 days.\n- *Three moments reported.* When a workspace is created, when it connects its first\n  ad platform, and when an AI assistant first uses it, the service reports that\n  moment to Meta (Conversions API), TikTok (Events API), Google Analytics\n  (Measurement Protocol) and Google Ads (conversion upload). Each report carries\n  which moment it was and when; the workspace's random identifier, hashed for Meta\n  and TikTok; the email address of the person who signed in, as a SHA-256 hash only\n  (for Google Ads, Gmail addresses are hashed after removing dots and anything after\n  a \"+\", the way Google compares them); the click identifier and campaign details\n  from `hg_attr`; the cookies the tags set; the channel the person came from; and,","entities":["org:hecigo"],"updated":"2026-10-11"}
{"id":"page:privacy:en:the-ads-insights-service~10","url":"https://hecigo.com/privacy/#the-ads-insights-service","locale":"en","type":"page","title":"Privacy Policy","headingPath":["The Ads Insights service"],"text":"  for a connection, which platform was connected. The report of a new workspace\n  also carries the IP address and the browser of the request that created it. The\n  IP address is used for that report and is not stored.\n- *What we keep.* The workspace keeps a record of the above: the channel, the\n  arrival details, the tag cookies, the browser, the hashed email address and the\n  dates of the three moments, so that the later two can be reported. The customer\n  does not see it, and it is deleted with the workspace.\n- *What is never reported.* The workspaces of hecigo's own people and of our test\n  account, and every workspace created before 25 September 2026.\n- *Who receives it.* Meta, TikTok and Google, each under its own terms with hecigo,\n  on infrastructure outside Vietnam.\n- *Your choice.* There is not yet a step on ads.hecigo.com that asks before the\n  tags load or before a sign-up is reported. We intend to add one, and this page will\n  say so when it is live. Until then you can refuse in any of these ways, and none of\n  them costs you any part of the service: block the tags with a tracker blocker or\n  your browser's settings, which also stops their cookies; delete the `hg_attr`\n  cookie; or write to **hi@hecigo.com**, and we remove every identifier from your\n  workspace's record and report nothing more about it. A report already sent cannot\n  be taken back from the platforms, but each lets you limit how it is used for ads:\n  Meta at [facebook.com/adpreferences](https://www.facebook.com/adpreferences),\n  Google at [myadcenter.google.com](https://myadcenter.google.com), and TikTok under\n  Settings and privacy, Ads, in the TikTok app.","entities":["org:hecigo"],"updated":"2026-10-11"}
{"id":"page:privacy:en:the-ads-insights-service~11","url":"https://hecigo.com/privacy/#the-ads-insights-service","locale":"en","type":"page","title":"Privacy Policy","headingPath":["The Ads Insights service"],"text":"**Basis.** Performing the agreement the customer entered into, plus the\nauthorization the customer granted on the platform's own consent screen. For\nservice emails, product updates and feedback requests, the same agreement, which\nthe Terms of Service describe; the optional ones stop the moment you turn them off,\nyour right to object under Law 91/2025. For offers, the agreement to receive email\nfrom hecigo that signing in states, which you withdraw by turning them off, at any\ntime, from any of them or the portal; we then stop within one working day. For sign-up,\nwhether it opens a workspace or sends a request, the person's own request to use\nthe service, made by signing in. For the weekly report schedule, the person's own\nrequest, made by turning it on. Measuring our own advertising is not yet based on a\nchoice we ask for; see *Your choice* under *Measuring hecigo's own advertising*.\n\n**Who else sees it.** Cloudflare, which runs the service and stores the encrypted\nrecord. Lark, whose mail servers carry the sign-up and access-request emails and keep copies\nin our mailbox, and carry each weekly report email to the address it was turned on\nfor, and the emails described under *Emails we send you*. The figures a customer asks for go to the AI assistant that\ncustomer connected, such as Claude or ChatGPT, whose provider handles them under\nits own terms with the customer. The advertising platforms are the source of the\ndata rather than recipients of it, with one exception: the measurement of hecigo's\nown advertising reports sign-ups to Meta, TikTok and Google, as set out above.\nNobody else.","entities":["org:hecigo"],"updated":"2026-10-11"}
{"id":"page:privacy:en:the-ads-insights-service~12","url":"https://hecigo.com/privacy/#the-ads-insights-service","locale":"en","type":"page","title":"Privacy Policy","headingPath":["The Ads Insights service"],"text":"**How long.** Until the customer removes it. Revoking the authorization on the\nplatform stops all reading immediately; writing to **hi@hecigo.com** deletes the\nworkspace and everything in it, within 30 days, with written confirmation. A\ncustomer can also rotate or revoke their own access key at any time, and disconnect\nany AI assistant connection in the portal. An assistant connection that has not\nbeen used for 90 days is disconnected automatically. The weekly report schedule and\nits email address last until the person turns the schedule off, in the portal or\nthrough the link in any of its emails, which needs no sign-in; turning it off\ndeletes both straight away, as does deleting the workspace. The record kept for\nmeasuring our own advertising goes with the workspace, and loses every identifier\nsooner if you ask; the `hg_attr` cookie expires after 90 days. The addresses kept\nfor *Emails we send you*, and the record of the choices made for them, last as long\nas the workspace and go with it; turning both optional kinds off keeps the address\nonly for service emails.\n\n**Rights.** The rights listed under *Your rights* below apply to the workspace and\ncontact details we hold as controller. For the advertising data we hold as\nprocessor, the platform and the customer's own contract with it govern access and\nerasure, and we act on the customer's instruction.\n\n**Google user data.** Ads Insights receives data from Google in four ways, and\nuses it only as described here.","entities":["org:hecigo","product:ads-insights"],"updated":"2026-10-11"}
{"id":"page:privacy:en:the-ads-insights-service~13","url":"https://hecigo.com/privacy/#the-ads-insights-service","locale":"en","type":"page","title":"Privacy Policy","headingPath":["The Ads Insights service"],"text":"- **Sign in with Google** (scopes `openid`, `email`, `profile`). Google shares the\n  account identifier, name, email address and profile picture. We keep the\n  identifier, the name and the email address as the workspace's contact details,\n  as set out under *Signing up*. A one-way hash of the email address also takes part\n  in the measurement set out under *Measuring hecigo's own advertising*. The profile\n  picture is not stored.\n- **Connecting Google Ads** (scopes `https://www.googleapis.com/auth/adwords` and\n  `openid`). The customer grants access on Google's own consent screen. We store the\n  refresh token Google issues, encrypted with AES-GCM, and the identifiers of the\n  Google Ads accounts it can open, with the manager account used to reach them where\n  there is one. We also keep, encrypted, the name, status, currency, time zone and\n  test-account flag of each Google Ads account the token can reach, as the list of\n  ad accounts described under *What is stored*. From `openid` we read only the Google account identifier, and keep\n  only a one-way hash of it, sealed with the token. It has one use: when a workspace\n  disconnects, telling whether the same Google account still connects another\n  hecigo Ads Insights workspace, so that revoking the grant does not cut that\n  workspace off. With it we list the accounts the customer can access and run reporting\n  queries on them: performance, configuration, ad content and delivery\n  diagnostics.\n- **Connecting Google Analytics** (scopes\n  `https://www.googleapis.com/auth/analytics.readonly` and `openid`) and\n  **connecting Search Console** (scopes\n  `https://www.googleapis.com/auth/webmasters.readonly` and `openid`). Each is its\n  own grant, made on Google's own consent screen, separate from Google Ads and from","entities":["org:hecigo","product:ads-insights"],"updated":"2026-10-11"}
{"id":"page:privacy:en:the-ads-insights-service~14","url":"https://hecigo.com/privacy/#the-ads-insights-service","locale":"en","type":"page","title":"Privacy Policy","headingPath":["The Ads Insights service"],"text":"  each other; both scopes are read-only. For each we store the refresh token Google\n  issues, encrypted with AES-GCM, the identifiers of the Google Analytics\n  properties or the addresses of the verified Search Console sites read by default,\n  and, from `openid`, a one-way hash of the Google account identifier, used as it is\n  for Google Ads. With them we list the Google Analytics properties (Admin API\n  account summaries) or the Search Console sites the customer can access, and, when\n  the customer asks, run reports on them: Google Analytics reports of sessions,\n  users, events, key events and revenue by channel, source, campaign, page, device,\n  place or date (Data API), and Search Console reports of clicks, impressions,\n  click-through rate and position by search query, page, country, device or date\n  (Search Analytics). Google Analytics reports reach us already aggregated; Search\n  Console withholds rare queries before they reach us.\n\n*How it is used.* Only to answer the questions the customer asks through their own\nAI assistant, to send the weekly report email a customer turned on to that\ncustomer's own Google address, as set out under *Weekly report schedule*, to show\nthe customer the state of the connection in the portal, and to check about once a\nday that the connection still works and which accounts it reaches, as set out under\n*Monitoring*.\nGoogle offers a single scope for the Google Ads API and it also permits editing,\nbut Ads Insights has no operation that creates, changes or deletes anything in\nGoogle Ads. The Google Analytics and Search Console scopes permit reading only.","entities":["product:ads-insights"],"updated":"2026-10-11"}
{"id":"page:privacy:en:the-ads-insights-service~15","url":"https://hecigo.com/privacy/#the-ads-insights-service","locale":"en","type":"page","title":"Privacy Policy","headingPath":["The Ads Insights service"],"text":"*What is never done with it.* Nothing received through the Google Ads, Google\nAnalytics or Search Console connections is\nsold, used for advertising, retargeting or profiling, or used to decide\ncredit-worthiness or lending. The only Google user data that takes part in\nadvertising at all is the sign-in email address, as a one-way hash, in measuring\nhecigo's own ads as described above, and it is never sold. The sign-in address is\nalso the one hecigo writes to, as set out under *Emails we send you*: service\nemails, product updates and feedback requests, and offers, each of the optional\nones until the person turns it off. It is not\nused to develop, improve or train any artificial intelligence or machine learning\nmodel, ours or anyone else's. Nobody at hecigo reads it, except with the\ncustomer's permission to resolve a support request, where it is needed to\ninvestigate security or abuse, or where the law requires it.\n\n*Who receives it.* The figures go to the AI assistant the customer connected,\nbecause that is where the customer asked for them, or, when the customer turned on\nthe weekly report schedule, to that customer's own email address through Lark's mail\nservers. Cloudflare stores the encrypted token and runs the service. The hash of\nthe sign-in email address goes to Meta, TikTok and Google as set out under\n*Measuring hecigo's own advertising*. Nothing else is transferred to anyone.\n\n*How it is protected.* As set out under *How the data is protected*: encrypted with\nAES-256-GCM at rest and TLS in transit, never returned by any interface, never\nwritten to logs, and opened only to answer the customer's own requests.","entities":["org:hecigo"],"updated":"2026-10-11"}
{"id":"page:privacy:en:the-ads-insights-service~16","url":"https://hecigo.com/privacy/#the-ads-insights-service","locale":"en","type":"page","title":"Privacy Policy","headingPath":["The Ads Insights service"],"text":"*How long it is kept.* The token, the account identifiers and the list of ad\naccounts stay until the customer disconnects Google Ads in the portal or deletes\nthe workspace. The Google Analytics token and property identifiers, and the Search\nConsole token and site addresses, each stay until the customer disconnects that\nconnection in the portal or deletes the workspace.\nDisconnecting deletes them and revokes the grant at Google straight away, except\nwhen the same Google account still holds another hecigo Ads Insights connection,\nin another workspace or as another of the same workspace's Google connections, or\nhecigo cannot confirm that it does not. Google withdraws a grant\nfrom every workspace that account connected at once, so in that case the grant\nstays until the account's last workspace disconnects, and the portal says so. A\ncustomer can also remove access at any time at\n[myaccount.google.com/permissions](https://myaccount.google.com/permissions).\nReport figures are not kept after the answer is returned or the weekly report\nemail is sent.\n\n*Limited Use.* hecigo Ads Insights' use and transfer to any other app of\ninformation received from Google APIs will adhere to the\n[Google API Services User Data Policy](https://developers.google.com/terms/api-services-user-data-policy),\nincluding the Limited Use requirements.","entities":["org:hecigo","product:ads-insights"],"updated":"2026-10-11"}
{"id":"page:privacy:en:how-long-we-keep-it","url":"https://hecigo.com/privacy/#how-long-we-keep-it","locale":"en","type":"page","title":"Privacy Policy","headingPath":["How long we keep it"],"text":"**Enquiries have no fixed expiry.** We keep an enquiry, and the correspondence\nthat followed it, until you ask us to delete it. If it became a signed\nengagement, that contract's retention terms apply instead. There is no\ntimer running in the background. Ask and it goes; see *Your rights* below.\n\n**Ads Insights access requests last 90 days, or 30 days once decided.** A\nrequest nobody has decided is deleted 90 days after it was made; one that was\napproved or turned down, 30 days after that decision. The storage expires them\non its own, so nothing depends on someone remembering to clean up. An approved\nrequest carries on as a workspace, described in *The Ads Insights service*.\n\n**Short-link click counts last three months.** That is Cloudflare's own\nschedule for the store we keep them in, and we do not copy them anywhere else\nbefore they go.\n\n**Analytics data is not attached to you, and cannot be deleted on request.**\nGoogle Analytics and the Meta Pixel record page views, not identities. Nothing\nthis site sends them carries your name, your email, or any account of yours, so\nthere is no \"your data\" for us to look up and remove. The honest answer is that\nwe could not comply with such a request even if we wanted to. What that data does\ninstead is expire on the platform's own schedule: 14 months for Google Analytics,\nand Meta's default for the Pixel. You can stop the collection at any time, without\nasking us, with a tracker blocker. On ads.hecigo.com a hashed email address is part\nof what is reported when a workspace is created; that is set out under *Measuring\nhecigo's own advertising*, and stops on request.","entities":["org:hecigo","product:ads-insights"],"updated":"2026-10-11"}
{"id":"page:privacy:en:who-else-sees-it","url":"https://hecigo.com/privacy/#who-else-sees-it","locale":"en","type":"page","title":"Privacy Policy","headingPath":["Who else sees it"],"text":"Only these, and nobody else:\n\n- **THE NEXOVA** runs the intake workflow that receives the form.\n- **Lark** hosts our mailboxes, so the enquiry email and our reply rest there,\n  as do the emails Ads Insights sends about sign-up and access requests, and\n  they carry the weekly report emails a customer turns on.\n- **Telegram** carries the notification that an enquiry arrived, to a private chat.\n- **Google** (analytics) and **Meta** (pixel) receive page-view data, not enquiries.\n- **Meta, TikTok and Google** also receive the measurement of hecigo's own\n  advertising on ads.hecigo.com, set out under *Measuring hecigo's own advertising*.\n- **Cloudflare** serves and protects the site, keeps short-lived request logs,\n  and holds the short-link click counts described above.\n\nWe do not share enquiry contents with anyone else, and we do not publish client\nnames or details without written permission. Netlify served this site until 30\nAugust 2026 and was removed on 1 September 2026; it no longer receives anything.","entities":["org:hecigo","product:ads-insights"],"updated":"2026-10-11"}
{"id":"page:privacy:en:your-rights","url":"https://hecigo.com/privacy/#your-rights","locale":"en","type":"page","title":"Privacy Policy","headingPath":["Your rights"],"text":"Article 4 of Law 91/2025 gives you a set of rights over your personal data. These\nare the ones that bite here, covering what we hold under your name or email\naddress: your enquiry and everything we exchanged after it. Write to\n**hi@hecigo.com** and you can:\n\n- ask what we hold about you and how we are using it,\n- ask for a copy of it,\n- have anything wrong corrected,\n- have it deleted,\n- withdraw the consent you gave on the form, at any time, which stops any further\n  use and leads to deletion unless a contract or the law requires us to keep it,\n- ask us to pause processing while a dispute about it is open,\n- object to a particular use,\n- complain to the competent authority, or take the matter to court, if you think\n  we have handled your data wrongly.\n\nWe act on these requests within 30 days and do not charge for them. You do not\nneed to give a reason, and you do not need to have been a client.\n\nThey do not extend to the analytics data or the short-link click counts\ndescribed above, for the reason given there: neither is linked to an identity, so\nthere is nothing to retrieve or erase.\nTo stop that collection, use a tracker blocker or your browser's \"do not track\"\nsetting, or opt out through Google's and Meta's own controls, none of which\nrequires contacting us.","entities":["org:hecigo"],"updated":"2026-10-11"}
{"id":"page:privacy:en:international-transfers","url":"https://hecigo.com/privacy/#international-transfers","locale":"en","type":"page","title":"Privacy Policy","headingPath":["International transfers"],"text":"Google, Meta, TikTok, Cloudflare, Lark, and Telegram process data on\ninfrastructure outside Vietnam. The measurement of hecigo's own advertising on\nads.hecigo.com reaches Meta, TikTok and Google this way. That includes the enquiry itself, because our mailboxes run on\nLark and the arrival notification goes through Telegram. The intake workflow runs\non a server operated for Vietnam and Singapore. Submitting the form means\naccepting that the data travels this way, for the purposes named above and no\nothers.","entities":["org:hecigo"],"updated":"2026-10-11"}
{"id":"page:privacy:en:children","url":"https://hecigo.com/privacy/#children","locale":"en","type":"page","title":"Privacy Policy","headingPath":["Children"],"text":"This site is aimed at businesses. We do not knowingly collect information from\nanyone under 16. If you believe we have, write to hi@hecigo.com and we will\ndelete it.","entities":["org:hecigo"],"updated":"2026-10-11"}
{"id":"page:privacy:en:changes","url":"https://hecigo.com/privacy/#changes","locale":"en","type":"page","title":"Privacy Policy","headingPath":["Changes"],"text":"If this policy changes materially we will update the date and the version code at\nthe top, and keep a copy of the superseded wording so that a consent record from\nan earlier date can still be matched to the text that was live then. The current\nversion is always at\n[hecigo.com/privacy](https://hecigo.com/privacy/), and a Markdown copy is at\n[hecigo.com/privacy.md](https://hecigo.com/privacy.md).","entities":["org:hecigo"],"updated":"2026-10-11"}
{"id":"page:terms:en:intro","url":"https://hecigo.com/terms/","locale":"en","type":"page","title":"Terms of Service","headingPath":[],"text":"These terms govern the website **hecigo.com**, the packages hecigo publishes, and\nthe hosted software hecigo operates. They do not govern a paid integration\nengagement: that work is governed by the contract signed for it, and where that\ncontract and this page disagree, the contract wins.\n\n**Provider:** HECIGO TECHNOLOGY CO., LTD, registered in Vietnam as\nCÔNG TY TNHH CÔNG NGHỆ HECIGO, tax code 0317653537, CirCO Dien Bien Phu, 222 Dien\nBien Phu street, Xuan Hoa ward, Ho Chi Minh City, Vietnam.\nContact: **hi@hecigo.com**.\n\n**Last updated:** 11 October 2026. **Version:** `tos-2026-10-11c`.","entities":["org:hecigo"],"updated":"2026-10-11"}
{"id":"page:terms:en:what-these-terms-cover","url":"https://hecigo.com/terms/#what-these-terms-cover","locale":"en","type":"page","title":"Terms of Service","headingPath":["What these terms cover"],"text":"hecigo provides three different things, and they are governed differently.\n\n| What | Governed by |\n|---|---|\n| This website, and the Markdown representation of it served to agents | This page |\n| Open-source packages published under the `@hecigo` scope and the `n8n-nodes-*` names | The licence in each package, normally MIT, plus this page |\n| Hosted software, including the advertising and analytics reporting service | This page |\n| A paid integration engagement | The contract signed for that engagement |\n\nUsing the website, installing a package, or connecting an account to a hosted\nservice means you accept these terms. If you are accepting on behalf of a\ncompany, you confirm you are allowed to bind it.\n\nThese services are for business use. Do not use them if you are under 16.","entities":["org:hecigo"],"updated":"2026-10-11"}
{"id":"page:terms:en:accounts-and-access-keys","url":"https://hecigo.com/terms/#accounts-and-access-keys","locale":"en","type":"page","title":"Terms of Service","headingPath":["Accounts and access keys"],"text":"A hosted service identifies your workspace by an access key that hecigo issues to\nyou once. Treat it as a password.\n\n- Keep it secret. Anyone holding it can read the data your workspace is connected to.\n- Tell us at **hi@hecigo.com** if it leaks, and we will rotate it. A rotated key\n  replaces the old one immediately.\n- You are responsible for what is done with your key until you report it as\n  compromised.\n\nhecigo may suspend a workspace without notice where a key is being used to abuse a\nthird-party platform, to breach these terms, or where a platform requires it.","entities":["org:hecigo"],"updated":"2026-10-11"}
{"id":"page:terms:en:connecting-a-third-party-advertising-or-analytics-account","url":"https://hecigo.com/terms/#connecting-a-third-party-advertising-or-analytics-account","locale":"en","type":"page","title":"Terms of Service","headingPath":["Connecting a third-party advertising or analytics account"],"text":"The reporting service reads, and where you have enabled it, changes data in\nadvertising accounts on Meta, Google Ads and TikTok. It also reads, and never\nchanges, the Google Analytics 4 properties and Google Search Console sites you\nconnect. Three things follow from that.\n\n**You grant the access, and you can withdraw it.** Authorization happens on the\nplatform's own consent screen, under your own platform login. You can revoke it at\nany time from the platform, without asking us. Revoking stops the service from\nreading or changing anything in that account, immediately.\n\n**The platform's own terms still apply to you.** Your advertising remains subject\nto Meta, Google and TikTok policies, including their advertising policies and\ntheir rules on prohibited content, and your use of Google Analytics and Google\nSearch Console remains subject to Google's terms for those products. hecigo does not review your advertising for\ncompliance with those policies and is not responsible for enforcement action a\nplatform takes against your account.\n\n**We act on instruction, not on judgment.** Where the service can change a\ncampaign, it does so only from a change you have reviewed and approved. hecigo is\nnot an advertising agency, does not decide your budget, targeting, or creative,\nand does not guarantee any advertising result. Money spent on advertising is spent\nby you, on your own platform account, under your own payment method.","entities":["org:hecigo"],"updated":"2026-10-11"}
{"id":"page:terms:en:what-we-do-with-your-data","url":"https://hecigo.com/terms/#what-we-do-with-your-data","locale":"en","type":"page","title":"Terms of Service","headingPath":["What we do with your data"],"text":"Personal data is covered by the [Privacy Policy](/privacy/), written to Vietnam's\nPersonal Data Protection Law No. 91/2025/QH15 and Decree No. 356/2025/ND-CP.\n\nFor the reporting service specifically:\n\n- Platform credentials are encrypted before they are stored, and no interface\n  returns their values, including to you.\n- Performance figures are fetched from the platform when you ask a question. We do\n  not build a separate copy of your advertising, analytics, or search history for\n  our own use.\n- We do not sell, rent, or redistribute your advertising, analytics, or search\n  data, and we do not pool it with another customer's data.\n- Ask at **hi@hecigo.com** to have a workspace and everything in it deleted. We\n  do it within 30 days and confirm in writing, the same period the\n  [Privacy Policy](/privacy/) commits to for any other request.","entities":["org:hecigo"],"updated":"2026-10-11"}
{"id":"page:terms:en:emails-we-send","url":"https://hecigo.com/terms/#emails-we-send","locale":"en","type":"page","title":"Terms of Service","headingPath":["Emails we send"],"text":"Signing in to a hosted service with Google keeps that Google-verified address on\nthe workspace. We write to it about three things:\n\n- **Service emails**: changes to these terms or the [Privacy Policy](/privacy/),\n  a security incident, a connection that stopped working, and anything else needed\n  to run your workspace. They come while the workspace exists; deleting the\n  workspace ends them.\n- **Product updates and feedback requests**: new features, changes worth knowing,\n  and now and then a short question about how the service works for you. At most\n  four a month. They are part of this agreement from your first sign-in, and every\n  one carries a link that turns them off.\n- **Offers**: hecigo's own offers and new products, with [QC] or [AD] in the\n  subject. At most two a month and never more than one a day. Like product\n  updates, they are part of this agreement from your first sign-in, and every one\n  carries a link that turns them off.\n\nThe link at the foot of every email changes these choices without signing in, and\nso does writing to **hi@hecigo.com**. Turning off product updates, feedback\nrequests or offers never affects your use of the service. What we keep for this,\nand for how long, is in the [Privacy Policy](/privacy/), under *Emails we send you*.","entities":["org:hecigo"],"updated":"2026-10-11"}
{"id":"page:terms:en:acceptable-use","url":"https://hecigo.com/terms/#acceptable-use","locale":"en","type":"page","title":"Terms of Service","headingPath":["Acceptable use"],"text":"Do not use hecigo software to:\n\n- reach data belonging to a business that has not authorized you to reach it;\n- work around a platform's rate limits, access tiers, or review process;\n- run advertising that is illegal in Vietnam or in the market you are advertising in;\n- resell raw platform data to a third party; or\n- probe, overload, or interfere with the service or the infrastructure it runs on.\n\nSecurity research is welcome. Report what you find to **hi@hecigo.com** before\ndisclosing it, and do not use another customer's data to demonstrate a finding.","entities":["org:hecigo"],"updated":"2026-10-11"}
{"id":"page:terms:en:fees","url":"https://hecigo.com/terms/#fees","locale":"en","type":"page","title":"Terms of Service","headingPath":["Fees"],"text":"Ads Insights is free today, with no hidden fees and no card required. If paid\nplans are introduced, we email the address on the workspace before they take\neffect, and the free plan a workspace is on stays free.\n\nWhere a service is paid, the price, the billing period, and what happens at\nrenewal are stated at the point of purchase, and that statement is part of these\nterms. Trials of other services may change or end, with notice to the address on\nthe workspace. Vietnamese value-added tax applies where it applies; invoices are\nissued electronically.","entities":["product:ads-insights"],"updated":"2026-10-11"}
{"id":"page:terms:en:intellectual-property","url":"https://hecigo.com/terms/#intellectual-property","locale":"en","type":"page","title":"Terms of Service","headingPath":["Intellectual property"],"text":"hecigo keeps ownership of its software, documentation, and brand. Published\npackages carry their own licence, normally MIT, and that licence is what grants\nyou rights to the code in them. Nothing here transfers ownership of hecigo\nsoftware to you.\n\nYour data stays yours. Connecting an account gives hecigo permission to process\nthat data to provide the service to you, and nothing more.\n\nThe hecigo name, logo, and wordmark may not be used to suggest endorsement or\npartnership that does not exist.","entities":["org:hecigo"],"updated":"2026-10-11"}
{"id":"page:terms:en:what-we-do-not-promise","url":"https://hecigo.com/terms/#what-we-do-not-promise","locale":"en","type":"page","title":"Terms of Service","headingPath":["What we do not promise"],"text":"The service is provided as it is.\n\nPlatform APIs change, deprecate versions, rate-limit, and occasionally return\nnumbers they later restate. Figures the service shows come from the platform and\ncarry the platform's own caveats; where a figure matters commercially, check it\nagainst the platform's own interface. hecigo does not warrant that the service\nwill be uninterrupted, that every figure will match a platform's interface at\nevery moment, or that the service fits a particular purpose of yours.","entities":["org:hecigo"],"updated":"2026-10-11"}
{"id":"page:terms:en:liability","url":"https://hecigo.com/terms/#liability","locale":"en","type":"page","title":"Terms of Service","headingPath":["Liability"],"text":"To the extent Vietnamese law allows, hecigo is not liable for indirect or\nconsequential loss, for lost profit, or for advertising spend, however it arose.\n\nFor everything else, hecigo's total liability arising from a hosted service is\nlimited to the fees you paid for that service in the three months before the event\nthat caused the claim. Where no fee was paid, hecigo's liability is limited to\nremedying the fault.\n\nNothing here limits liability that cannot be limited under Vietnamese law,\nincluding liability for damage caused intentionally or by gross negligence.","entities":["org:hecigo"],"updated":"2026-10-11"}
{"id":"page:terms:en:suspension-and-ending-the-agreement","url":"https://hecigo.com/terms/#suspension-and-ending-the-agreement","locale":"en","type":"page","title":"Terms of Service","headingPath":["Suspension and ending the agreement"],"text":"You can stop using a hosted service at any time by revoking platform access and\nasking us to delete the workspace.\n\nhecigo may suspend or end access where these terms are breached, where a platform\nwithdraws the access the service depends on, or where continuing would put other\ncustomers at risk. Where we end a paid service without cause, we refund the unused\npart of the period you paid for.","entities":["org:hecigo"],"updated":"2026-10-11"}
{"id":"page:terms:en:changes-to-these-terms","url":"https://hecigo.com/terms/#changes-to-these-terms","locale":"en","type":"page","title":"Terms of Service","headingPath":["Changes to these terms"],"text":"We change this page when the service changes, and record the change with a new\nversion identifier and date at the top. Where a change materially reduces your\nrights, we notify the address on the workspace before it takes effect. Continuing\nto use the service after that date is acceptance of the new version.","entities":[],"updated":"2026-10-11"}
{"id":"page:terms:en:law-and-disputes","url":"https://hecigo.com/terms/#law-and-disputes","locale":"en","type":"page","title":"Terms of Service","headingPath":["Law and disputes"],"text":"These terms are governed by the law of Vietnam.\n\nTalk to us first: most disputes end at **hi@hecigo.com**. If a dispute cannot be\nsettled within 30 days of being raised in writing, it is resolved by the competent\ncourt in Ho Chi Minh City, Vietnam.","entities":["org:hecigo"],"updated":"2026-10-11"}
{"id":"page:brand:vi:intro","url":"https://hecigo.com/vi/brand/","locale":"vi","type":"page","title":"Thương hiệu và nhãn hiệu hecigo","headingPath":[],"text":"Tên và logo hecigo đã đăng ký tại Cục Sở hữu trí tuệ Việt Nam. Trang này chép lại bản ghi\nđăng bạ để ai cũng kiểm được mà không cần hỏi chúng tôi trước, sau đó là quy tắc dùng tên\nvà nhãn hiệu.\n\n**Bản dịch.** Đây là bản tiếng Việt của [hecigo brand and trademark](/brand/). Nếu hai bản\nhiểu khác nhau, bản tiếng Anh được áp dụng.","entities":["org:hecigo"],"updated":"2026-08-24"}
{"id":"page:brand:vi:bản-ghi-đăng-bạ","url":"https://hecigo.com/vi/brand/#bản-ghi-đăng-bạ","locale":"vi","type":"page","title":"Thương hiệu và nhãn hiệu hecigo","headingPath":["Bản ghi đăng bạ"],"text":"| Trường | Như đã nộp |\n| --- | --- |\n| Nhãn hiệu | hecigo, wordmark và logo lục giác |\n| Số văn bằng | **521781**, mã vạch `VN 4-0521781` |\n| Số đơn | `4-2023-07143` |\n| Ngày nộp đơn | 06/03/2023 |\n| Ngày công bố | 25/07/2023 |\n| Cấp bằng | Quyết định `157403/QĐ-SHTT`, ngày 30/12/2024 |\n| Hiệu lực đến | 06/03/2033, được gia hạn |\n| Cơ quan cấp | Cục Sở hữu trí tuệ Việt Nam |\n| Chủ văn bằng | CÔNG TY TNHH CÔNG NGHỆ HECIGO, tên tiếng Anh HECIGO TECHNOLOGY CO., LTD |\n| Địa chỉ trên văn bằng | CirCO Điện Biên Phủ, 222 Điện Biên Phủ, phường Võ Thị Sáu, Quận 3, Thành phố Hồ Chí Minh |\n| Loại nhãn hiệu | Thông thường |\n| Màu sắc bảo hộ | Đen, trắng, xanh dương, tím |\n| Nhóm | **Nhóm 09 theo Bảng phân loại Nice** |\n| Hàng hoá | Phần mềm máy tính (đã ghi); chương trình máy tính đã ghi; chương trình máy tính, là phần mềm tải xuống được |\n\n### Tự kiểm tra\n\nTra tên nhãn hiệu `hecigo` trên cơ sở dữ liệu công khai của cơ quan cấp bằng tại\n[wipopublish.ipvietnam.gov.vn](https://wipopublish.ipvietnam.gov.vn/wopublish-search/public/trademarks).\nKết quả là một bản ghi.\n\nCơ sở dữ liệu viết hai con số theo định dạng riêng, nên biết trước khi kết luận chúng\nkhông khớp văn bằng: số văn bằng hiện thành `4-0521781-000`, số đơn thành\n`VN-4-2023-07143`.\n\nĐường dẫn đó trỏ tới cơ quan đã cấp bằng chứ không tới đơn vị đại diện đã nộp đơn. Một bản\nghi chỉ xem được sau khi điền form liên hệ của ai đó thì không phải bản ghi bạn kiểm được.","entities":["org:hecigo"],"updated":"2026-08-24"}
{"id":"page:brand:vi:phạm-vi-bảo-hộ-và-những-gì-không-thuộc-phạm-vi-đó","url":"https://hecigo.com/vi/brand/#phạm-vi-bảo-hộ-và-những-gì-không-thuộc-phạm-vi-đó","locale":"vi","type":"page","title":"Thương hiệu và nhãn hiệu hecigo","headingPath":["Phạm vi bảo hộ, và những gì không thuộc phạm vi đó"],"text":"Nhóm 09 là nhóm phần mềm. Nó bao gồm những thứ đóng gói, tải xuống được mà hecigo phát\nhành, hiện là hai community node mã nguồn mở cho n8n trên npm, liệt kê ở\n[tài nguyên cho developer](/developers/).\n\nĐây không phải đăng ký ở nhóm 42, nên nó không có quyền gì với dịch vụ tích hợp. Chúng tôi\nnêu rõ nhóm thay vì chỉ ghi \"nhãn hiệu đã đăng ký\" rồi để bạn tự hiểu theo nghĩa rộng hơn.","entities":["org:hecigo"],"updated":"2026-08-24"}
{"id":"page:brand:vi:viết-tên","url":"https://hecigo.com/vi/brand/#viết-tên","locale":"vi","type":"page","title":"Thương hiệu và nhãn hiệu hecigo","headingPath":["Viết tên"],"text":"- Luôn viết thường: **hecigo**. Kể cả ở đầu câu, trong heading và tiêu đề.\n- Không viết hoa toàn bộ, không viết hoa chữ cái đầu. Ngoại lệ duy nhất là tên pháp lý,\n  HECIGO TECHNOLOGY CO., LTD và CÔNG TY TNHH CÔNG NGHỆ HECIGO, nơi đăng ký doanh nghiệp\n  yêu cầu chữ in hoa.\n- Ký hiệu nhãn hiệu đã đăng ký đặt ở lần nhắc đầu tiên hoặc nổi bật nhất trong một tài\n  liệu, một lần: hecigo®. Lặp lại nó ở mọi đoạn là làm ngược với mục đích của nó.\n- Không dịch, viết tắt, thêm gạch nối hay biến nó thành động từ.","entities":["org:hecigo"],"updated":"2026-08-24"}
{"id":"page:brand:vi:dùng-logo","url":"https://hecigo.com/vi/brand/#dùng-logo","locale":"vi","type":"page","title":"Thương hiệu và nhãn hiệu hecigo","headingPath":["Dùng logo"],"text":"Bộ logo gồm lục giác cộng wordmark. File nằm trong `/logo/` trên site này, SVG cho mọi chỗ\nhiển thị được SVG và PNG cho các trình đọc email không hiển thị được.\n\n| Dùng cho | Nền sáng | Nền tối |\n| --- | --- | --- |\n| Bộ đầy đủ | `/logo/Logo_light.svg` | `/logo/Logo_dark.svg` |\n| Chỉ biểu tượng | `/logo/Logo_icon_light.svg` | `/logo/Logo_icon_dark.svg` |\n| Xếp dọc | `/logo/Logo_stacked_light.svg` | `/logo/Logo_stacked_dark.svg` |\n| Một màu | `/logo/Logo_mono_light.svg` | `/logo/Logo_mono_dark.svg` |\n\nGradient thương hiệu chạy từ `#5F96FF` tới `#4E37C5`, màu mực của wordmark là `#181818`.\nBa giá trị đó lấy từ design system của hecigo, nơi chúng được quyết định.\n\nBốn điều cần tránh. Điều thứ hai không phải giả định: một phiên bản trước của site này đảo\nmàu logo bằng CSS filter thay vì dùng hai biến thể, và kết quả là một wordmark mang màu\nkhông có trong đăng ký.\n\n- Đổi màu gradient, hoặc làm phẳng nó thành một trong hai đầu màu.\n- Đặt bộ logo sáng lên nền sáng, hoặc bộ tối lên nền tối. Hãy chọn đúng biến thể, đừng đảo\n  màu ảnh bằng CSS filter.\n- Kéo giãn bộ logo cho vừa một khung, hoặc xoay nó.\n- Đặt quá sát. Chừa khoảng trống bốn phía ít nhất bằng chiều cao của lục giác, và đừng đặt\n  bộ đầy đủ hẹp hơn 96 pixel, mức mà wordmark không còn đọc được.","entities":["org:hecigo"],"updated":"2026-08-24"}
{"id":"page:brand:vi:cấp-phép","url":"https://hecigo.com/vi/brand/#cấp-phép","locale":"vi","type":"page","title":"Thương hiệu và nhãn hiệu hecigo","headingPath":["Cấp phép"],"text":"Báo chí, đối tác và khách hàng có thể dùng tên và logo hecigo để nhắc tới hecigo một cách\nđúng sự thật: không chỉnh sửa, lấy từ các file ở trên, và không ngụ ý chúng tôi bảo trợ hay\ntài trợ cho bất cứ điều gì. Ngoài phạm vi đó, hãy hỏi qua\n[hi@hecigo.com](mailto:hi@hecigo.com), bạn sẽ nhận được trả lời trong một ngày làm việc.\n\nNếu bạn thấy ai đó dùng nhãn hiệu theo cách trang này không cho phép, cùng địa chỉ đó sẽ tới\nđược chúng tôi.","entities":["org:hecigo"],"updated":"2026-08-24"}
{"id":"page:privacy:vi:intro","url":"https://hecigo.com/vi/privacy/","locale":"vi","type":"page","title":"Chính sách bảo mật","headingPath":[],"text":"Trang này mô tả website **hecigo.com** thu thập gì, ai nhận được, và cách đề nghị xoá. Nó\ncũng áp dụng cho dịch vụ **Ads Insights** do hecigo vận hành, trong một mục riêng bên dưới.\nDữ liệu xử lý bên trong hệ thống của khách hàng trong một dự án tích hợp theo hợp đồng của\ndự án đó, không theo trang này.\n\n**Bản dịch.** Đây là bản tiếng Việt của [Privacy Policy](/privacy/), cùng phiên bản\n`pdp-2026-10-11d`. Nếu hai bản hiểu khác nhau, bản tiếng Anh được áp dụng.\n\n**Bên kiểm soát dữ liệu:** CÔNG TY TNHH CÔNG NGHỆ HECIGO (HECIGO TECHNOLOGY CO., LTD), mã\nsố thuế 0317653537, CirCO Điện Biên Phủ, 222 Điện Biên Phủ, phường Xuân Hòa, Thành phố Hồ\nChí Minh, Việt Nam. Liên hệ cho mọi câu hỏi hay yêu cầu về dữ liệu cá nhân:\n**hi@hecigo.com**.\n\n**Cơ sở pháp lý.** Chính sách này viết theo Luật Bảo vệ dữ liệu cá nhân số 91/2025/QH15 và\nNghị định số 356/2025/NĐ-CP, cùng có hiệu lực từ 01/01/2026. Nghị định này thay Nghị định\n13/2023. Khi bạn gửi yêu cầu liên hệ, cơ sở để xử lý là sự đồng ý của bạn, thể hiện bằng\nviệc đánh dấu ô đồng ý trên form.\n\n**Cập nhật lần cuối:** 11/10/2026. **Phiên bản:** `pdp-2026-10-11d`.","entities":["org:hecigo","product:ads-insights"],"updated":"2026-10-11"}
{"id":"page:privacy:vi:chúng-tôi-thu-thập-gì","url":"https://hecigo.com/vi/privacy/#chúng-tôi-thu-thập-gì","locale":"vi","type":"page","title":"Chính sách bảo mật","headingPath":["Chúng tôi thu thập gì"],"text":"### Thông tin bạn chủ động gửi\n\nForm liên hệ trên site này thu đúng bốn trường: **tên**, **địa chỉ email**, **vai trò** bạn\nchọn trong danh sách, và **nội dung** của bạn. Không gì khác được đọc từ trình duyệt và\nđính kèm. Form không gửi được nếu chưa đánh dấu ô đồng ý, và chúng tôi ghi lại thời điểm\nbạn đánh dấu, cùng câu chữ bạn đã đồng ý và phiên bản chính sách đang có hiệu lực lúc đó.\n\nGửi form là gửi bốn trường đó tới workflow tiếp nhận của chúng tôi tại\n`workflow.thenexova.com`, do THE NEXOVA vận hành thay mặt chúng tôi. Workflow đó làm ba\nviệc: gửi email yêu cầu vào hộp thư của chúng tôi, gửi cho bạn một email xác nhận tự động,\nvà đăng một thông báo vào một nhóm Telegram riêng chỉ chúng tôi đọc được. Hộp thư của chúng\ntôi chạy trên Lark, nên một bản sao yêu cầu của bạn nằm ở đó. Cả bốn bên nhận được liệt kê\nở mục *Ai khác nhìn thấy*.\n\nNếu bạn email hay gọi trực tiếp cho chúng tôi, chúng tôi giữ những gì bạn đưa vào tin nhắn\nđó cho cùng mục đích và trong cùng thời hạn.\n\nChúng tôi dùng thông tin này cho một việc: trả lời bạn, và nếu nó thành dự án thì chạy dự\nán đó. Chúng tôi không bán, không cho thuê, và không đưa nó vào danh sách marketing mà bạn\nkhông đăng ký.\n\n### Thông tin thu tự động","entities":[],"updated":"2026-10-11"}
{"id":"page:privacy:vi:chúng-tôi-thu-thập-gì~2","url":"https://hecigo.com/vi/privacy/#chúng-tôi-thu-thập-gì","locale":"vi","type":"page","title":"Chính sách bảo mật","headingPath":["Chúng tôi thu thập gì"],"text":"- **Google Analytics 4** (measurement ID `G-DFZBPG12H8`) ghi lượt xem trang, vị trí gần\n  đúng suy ra từ địa chỉ IP, trang giới thiệu, loại thiết bị và trình duyệt. Google xử lý\n  dữ liệu này với vai trò bên xử lý cho chúng tôi. Địa chỉ IP được Google rút gọn trước khi\n  lưu.\n- **Meta Pixel** (ID `1642547450913779`) ghi lượt xem trang và chuyển cho Meta để chúng tôi\n  đo xem bài đăng của mình có đưa ai tới đây không. Meta là bên kiểm soát độc lập với dữ\n  liệu đó theo điều khoản của chính họ.\n- **Log của hosting và CDN.** Site chạy trên Cloudflare Workers, nơi giữ log request ngắn\n  hạn gồm địa chỉ IP, user agent và đường dẫn được yêu cầu, để phân phối nội dung và chống\n  lạm dụng. Chúng tôi không truy vấn các log này để nhận diện người truy cập.\n- **Lượt bấm link rút gọn.** Một số link chúng tôi đăng ở nơi khác, như trong README của\n  một gói phần mềm, trong một repository hay trong hồ sơ một kênh, trỏ tới địa chỉ trên site\n  này bắt đầu bằng `/go/`, rồi chuyển bạn tới trang thật. Mỗi lần chuyển được đếm. Thứ được\n  ghi lại là chính mã rút gọn, trang nó dẫn tới, và quốc gia mà Cloudflare suy ra tại edge\n  của họ. **Địa chỉ IP của bạn không được lưu, user agent và trang bạn đến từ đó cũng\n  vậy.** Bộ đếm này tồn tại để cho chúng tôi biết link nào của mình có người bấm, và nó\n  không thể cho biết bạn là ai. Cloudflare giữ nó ba tháng rồi tự xoá.\n\nFont được biên dịch vào site lúc build và phục vụ từ chính domain của chúng tôi, nên tải\nmột trang không gửi request nào tới Google Fonts. Site này không có widget chat, không có\ncông cụ ghi lại phiên truy cập, và không có công cụ A/B testing.","entities":[],"updated":"2026-10-11"}
{"id":"page:privacy:vi:cookie","url":"https://hecigo.com/vi/privacy/#cookie","locale":"vi","type":"page","title":"Chính sách bảo mật","headingPath":["Cookie"],"text":"Google Analytics và Meta Pixel đặt cookie trong trình duyệt của bạn. Đó là những cookie\nduy nhất site này gây ra. Không gì trên hecigo.com cần cookie để hoạt động. Chặn chúng\ntrong trình duyệt, hay dùng bất kỳ tiện ích chặn theo dõi nào, thì toàn bộ site vẫn chạy\nbình thường, kể cả form liên hệ. Các trang Ads Insights tại ads.hecigo.com đặt thêm cookie,\nmô tả ở *Đo quảng cáo của chính hecigo*.\n\n**Chúng tôi muốn nói rõ hiện trạng hơn là mô tả mơ hồ.** Cả hai script tải ngay khi trang\nmở, trước khi site hỏi ý kiến bạn. Hiện chưa có banner cho bạn lựa chọn. Chúng tôi đang làm\nmột banner như vậy, và trang này sẽ được cập nhật khi nó chạy. Cho tới lúc đó, các cách từ\nchối là những cách liệt kê ở *Quyền của bạn*, không cách nào cần bạn liên hệ chúng tôi.","entities":["org:hecigo","product:ads-insights"],"updated":"2026-10-11"}
{"id":"page:privacy:vi:client-tự-động-và-ai-agent","url":"https://hecigo.com/vi/privacy/#client-tự-động-và-ai-agent","locale":"vi","type":"page","title":"Chính sách bảo mật","headingPath":["Client tự động và AI agent"],"text":"Site này xuất bản các bản máy đọc được của chính các trang công khai của nó: `/llms.txt`,\n`/sitemap.xml`, bản Markdown của từng trang, và `/blog-index.json`. Yêu cầu bất kỳ file nào\ntrong số đó là một request ẩn danh bình thường và được ghi log như một lượt truy cập bằng\ntrình duyệt. Không có dữ liệu nào khác được thu từ client tự động, và không file nào chứa\ndữ liệu cá nhân về người truy cập.","entities":[],"updated":"2026-10-11"}
{"id":"page:privacy:vi:dịch-vụ-ads-insights","url":"https://hecigo.com/vi/privacy/#dịch-vụ-ads-insights","locale":"vi","type":"page","title":"Chính sách bảo mật","headingPath":["Dịch vụ Ads Insights"],"text":"Ads Insights là phần mềm do hecigo vận hành, đọc dữ liệu quảng cáo của chính khách hàng từ\nMeta Ads, Google Ads và TikTok Ads, và ở chỗ khách hàng kết nối, dữ liệu Google Analytics\nvà Google Search Console của các website của chính khách hàng, rồi trả lại cho chính khách\nhàng đó. Đây là một bối cảnh xử lý khác với website này, nên được trình bày riêng.\n\n**Vai trò của chúng tôi.** Với bản thân workspace, tên và địa chỉ email của người quản lý\nnó, hecigo là **bên kiểm soát**. Với dữ liệu quảng cáo và website truy cập qua nó, hecigo\nlà **bên xử lý**: chúng tôi đọc những gì quyền cấp của khách hàng cho phép, theo chỉ dẫn\ncủa khách hàng đó, và không vì mục đích riêng nào của mình. Điều khoản sử dụng là thoả\nthuận mà Luật 91/2025 yêu cầu với bên xử lý.","entities":["org:hecigo","product:ads-insights"],"updated":"2026-10-11"}
{"id":"page:privacy:vi:dịch-vụ-ads-insights~2","url":"https://hecigo.com/vi/privacy/#dịch-vụ-ads-insights","locale":"vi","type":"page","title":"Chính sách bảo mật","headingPath":["Dịch vụ Ads Insights"],"text":"**Những gì được lưu.** Một thông tin xác thực nền tảng đã mã hoá, định danh của các tài\nkhoản quảng cáo khách hàng đã cấp quyền, tên workspace, một email liên hệ, và định danh của\ntài khoản Google dùng để đăng nhập vào nó. Với mỗi nền tảng đã kết nối, dịch vụ cũng giữ\ndanh sách các tài khoản quảng cáo mà thông tin xác thực đó truy cập được: định danh, tên,\ntrạng thái, tiền tệ và múi giờ của từng tài khoản, có phải tài khoản thử nghiệm không, và\ntài khoản quản lý dùng để truy cập nó nếu có. Danh sách này được mã hoá như thông tin xác\nthực. Nó tồn tại để dịch vụ biết một kết nối đọc được những tài khoản nào và cho khách hàng\nthấy tài khoản nào đang được đọc. Khi Google Analytics hay Search Console được kết nối, dịch\nvụ cũng giữ, ở dạng mã hoá, định danh của các property Google Analytics hoặc địa chỉ của các\nsite Search Console được đọc mặc định. Nếu ai đó bật lịch báo cáo hằng tuần mô tả ở *Lịch\nbáo cáo hằng tuần*, dịch vụ cũng giữ, ở dạng mã hoá, việc lịch đang bật, ngôn ngữ của báo\ncáo, và địa chỉ email đã được Google xác minh mà báo cáo gửi tới. Thông tin xác thực được\nmã hoá trước khi ghi xuống, và không giao diện nào trả lại giá trị của chúng, cho bất kỳ\nai, kể cả khách hàng.\n\n**Những gì không được lưu.** Không có bản sao lịch sử quảng cáo, số liệu phân tích website\nhay dữ liệu tìm kiếm của khách hàng nào được giữ để chúng tôi tự dùng: số liệu được lấy từ\nnền tảng khi có câu hỏi, hoặc khi một báo cáo hằng tuần đã lên lịch chạy, và không được lưu\nkho sau đó. Không dữ liệu nào về những người đã xem hay bấm quảng cáo của khách hàng tới\nđược chúng tôi. Dữ liệu của khách hàng này không bao giờ bị gộp với dữ liệu của khách hàng\nkhác.","entities":[],"updated":"2026-10-11"}
{"id":"page:privacy:vi:dịch-vụ-ads-insights~3","url":"https://hecigo.com/vi/privacy/#dịch-vụ-ads-insights","locale":"vi","type":"page","title":"Chính sách bảo mật","headingPath":["Dịch vụ Ads Insights"],"text":"**Dữ liệu được bảo vệ thế nào.** Thông tin xác thực nền tảng, và trên hết là token Google mô\ntả ở *Dữ liệu người dùng Google*, là thứ nhạy cảm nhất dịch vụ nắm giữ. Đây là các biện pháp\nđang áp dụng, mỗi biện pháp là một cơ chế chứ không phải một ý định.","entities":[],"updated":"2026-10-11"}
{"id":"page:privacy:vi:dịch-vụ-ads-insights~4","url":"https://hecigo.com/vi/privacy/#dịch-vụ-ads-insights","locale":"vi","type":"page","title":"Chính sách bảo mật","headingPath":["Dịch vụ Ads Insights"],"text":"- **Mã hoá khi truyền.** Mọi kết nối tới ads.hecigo.com, và mọi lệnh gọi từ đó tới Google,\n  Meta và TikTok, đều dùng TLS. Request HTTP thường được chuyển hướng sang HTTPS, và trình\n  duyệt được yêu cầu chỉ dùng HTTPS cho host này (HSTS).\n- **Mã hoá khi lưu.** Refresh token, access token và mọi thông tin xác thực nền tảng khác\n  được mã hoá bằng AES-256-GCM trước khi lưu. Khoá chỉ nằm trong kho bí mật của Cloudflare\n  dành cho dịch vụ, tách khỏi dữ liệu nó bảo vệ, và không bao giờ xuất hiện trong mã nguồn\n  hay log. Một bản sao cơ sở dữ liệu không có khoá đó thì không đọc được.\n- **Không lưu dạng rõ thứ gì dùng lại được.** Khoá workspace, cùng access token và refresh\n  token cấp cho trợ lý AI, chỉ được lưu dưới dạng băm SHA-256. Trợ lý đăng nhập qua OAuth\n  2.1 với PKCE, access token của chúng hết hạn sau một giờ, và cookie phiên của portal được\n  mã hoá và gắn cờ HttpOnly, Secure và SameSite.\n- **Quyền tối thiểu.** Không màn hình, API hay phản hồi nào trả lại một thông tin xác thực\n  đã lưu, cho bất kỳ ai, kể cả khách hàng và quản trị viên của hecigo. Mỗi request chỉ mở\n  thông tin xác thực của đúng một workspace nó thuộc về, nên không workspace nào truy cập\n  được dữ liệu của workspace khác. Dịch vụ không có thao tác nào thay đổi bất cứ thứ gì trên\n  nền tảng quảng cáo. Quyền truy cập vào các hệ thống chạy dịch vụ giới hạn ở quản trị viên\n  của hecigo, qua tài khoản có xác minh hai bước.\n- **Log không chứa bí mật.** Log của dịch vụ ghi công cụ nào đã chạy, cho workspace nào, mất\n  bao lâu và có lỗi không. Chúng không bao giờ chứa thông tin xác thực, token hay số liệu\n  báo cáo, và query string bị bỏ khỏi các địa chỉ được ghi.\n- **Xoá khi không còn cần.** Ngắt kết nối một nền tảng là xoá thông tin xác thực đã mã hoá,","entities":["org:hecigo"],"updated":"2026-10-11"}
{"id":"page:privacy:vi:dịch-vụ-ads-insights~5","url":"https://hecigo.com/vi/privacy/#dịch-vụ-ads-insights","locale":"vi","type":"page","title":"Chính sách bảo mật","headingPath":["Dịch vụ Ads Insights"],"text":"  mọi access token đang lưu tạm và danh sách tài khoản quảng cáo của nó; xoá workspace là\n  xoá mọi thứ bên trong, như nêu ở *Giữ bao lâu*.\n- **Sự cố.** Nếu biết dữ liệu này bị lộ, chúng tôi báo cho khách hàng bị ảnh hưởng không\n  chậm trễ quá mức cần thiết, và báo cơ quan có thẩm quyền trong 72 giờ theo yêu cầu của\n  Luật 91/2025.\n\n**Giám sát.** Để phát hiện kết nối hỏng trước khách hàng, khoảng mỗi ngày một lần dịch vụ\nkiểm tra từng nền tảng đã kết nối bằng cách liệt kê các tài khoản quảng cáo mà thông tin\nxác thực mở được, và giữ kết quả có thành công không cùng thông báo lỗi của nền tảng nếu\nkhông. Cũng khoảng mỗi ngày một lần, nó liệt kê mọi tài khoản quảng cáo mà từng kết nối\ntruy cập được và thay danh sách tài khoản quảng cáo đã lưu (mô tả ở *Những gì được lưu*)\nbằng danh sách mới; nếu việc liệt kê thất bại, danh sách cũ được giữ cho tới khi liệt kê\nthành công. Với mỗi câu hỏi trợ lý đặt ra, dịch vụ ghi công cụ đã dùng, tên trợ lý, thời\ngian trả lời và có lỗi không, kèm định danh workspace và không có số liệu báo cáo. Các bản\nghi sử dụng này được giữ ba tháng. Với mỗi trợ lý AI kết nối vào một workspace, dịch vụ\ncũng giữ thời điểm kết nối được tạo và lần dùng gần nhất, để portal liệt kê được mọi kết\nnối và đánh dấu những kết nối không ai dùng; hai mốc thời gian đó bị xoá khi kết nối kết\nthúc.","entities":[],"updated":"2026-10-11"}
{"id":"page:privacy:vi:dịch-vụ-ads-insights~6","url":"https://hecigo.com/vi/privacy/#dịch-vụ-ads-insights","locale":"vi","type":"page","title":"Chính sách bảo mật","headingPath":["Dịch vụ Ads Insights"],"text":"**Lịch báo cáo hằng tuần.** Người đã đăng nhập vào một workspace có thể bật lịch gửi email\nsố liệu quảng cáo của workspace đó cho họ mỗi tuần một lần. Lịch tắt cho tới khi họ bật,\nvà chỉ gửi tới địa chỉ email đã được Google xác minh mà họ dùng để đăng nhập, không bao giờ\ntới một địa chỉ gõ tay. Mỗi sáng thứ Hai, khi lịch đang bật, dịch vụ đọc số liệu tuần trước\nthẳng từ các nền tảng đã kết nối, cùng cách một câu hỏi của trợ lý đọc chúng, cho các tài\nkhoản quảng cáo workspace đã chọn: chi tiêu, lượt hiển thị, lượt nhấp, tin nhắn, chuyển đổi\nvà giá trị của chúng, theo từng nền tảng và cho các chiến dịch chi nhiều nhất, so với tuần\ntrước đó. Dịch vụ cộng tổng và gửi một email qua hộp thư Lark của chúng tôi. Số liệu không\nđược giữ sau khi email đã gửi; tuần sau đọc lại từ đầu. Nút \"chạy ngay\" làm việc tương tự,\nmỗi ngày một lần. Dịch vụ chỉ ghi lần chạy gần nhất của lịch và email có gửi đi không,\nkhông kèm số liệu. Lịch ngừng gửi khi không còn kết nối nền tảng nào hoạt động.\n\n**Email chúng tôi gửi bạn.** Mỗi người đăng nhập vào một workspace bằng Google có địa chỉ đã\nđược Google xác minh đó giữ trên workspace, niêm phong như thông tin xác thực, cùng tên và\nngôn ngữ họ dùng. Địa chỉ đó được dùng cho ba loại email, gửi từ **hi@hecigo.com** qua hộp\nthư Lark của chúng tôi:","entities":["org:hecigo"],"updated":"2026-10-11"}
{"id":"page:privacy:vi:dịch-vụ-ads-insights~7","url":"https://hecigo.com/vi/privacy/#dịch-vụ-ads-insights","locale":"vi","type":"page","title":"Chính sách bảo mật","headingPath":["Dịch vụ Ads Insights"],"text":"- *Email dịch vụ*: thay đổi của Điều khoản sử dụng hoặc chính sách này, sự cố bảo mật, một\n  kết nối ngừng chạy, và mọi việc khác cần cho việc vận hành workspace. Chúng được gửi khi\n  workspace còn tồn tại và không tắt riêng được; xoá workspace là chúng dừng.\n- *Cập nhật sản phẩm và xin góp ý*: tính năng mới, thay đổi đáng biết, và thỉnh thoảng một\n  câu hỏi ngắn xem dịch vụ chạy với bạn thế nào. Tối đa bốn email mỗi tháng. Chúng bắt đầu từ\n  lần đăng nhập đầu tiên, như Điều khoản sử dụng nêu, và email nào cũng có link để tắt.\n- *Ưu đãi*: ưu đãi và sản phẩm mới của chính hecigo, có [QC] hoặc [AD] trong tiêu đề. Tối đa\n  hai email mỗi tháng và không quá một email mỗi ngày. Giống cập nhật sản phẩm, chúng bắt đầu\n  từ lần đăng nhập đầu tiên, điều mà thẻ đăng nhập có nêu, và email nào cũng có link để tắt.\n\nLink ở cuối mỗi email mở một trang để bạn bật hoặc tắt từng loại không bắt buộc mà không\ncần đăng nhập, bằng tiếng Việt và tiếng Anh; các trình đọc email có nút hủy đăng ký một chạm\ndùng cùng trang đó, và nút đó tắt cả hai loại. Viết tới **hi@hecigo.com** cũng được. Với mỗi\nđịa chỉ, chúng tôi ghi từng loại không bắt buộc đang bật hay tắt, lần đổi gần nhất lúc nào,\nđổi bằng cách nào (đăng nhập, link, portal, hay yêu cầu gửi chúng tôi) và phiên bản chính\nsách này đang có hiệu lực khi đó, để chứng minh được ai đã chọn gì và lúc nào. Chúng tôi\nkhông bao giờ gửi tới địa chỉ do người khác gõ vào, không bao giờ mua hay thuê địa chỉ, và\nkhông bao giờ đưa địa chỉ cho ai để họ gửi email của họ.","entities":["org:hecigo"],"updated":"2026-10-11"}
{"id":"page:privacy:vi:dịch-vụ-ads-insights~8","url":"https://hecigo.com/vi/privacy/#dịch-vụ-ads-insights","locale":"vi","type":"page","title":"Chính sách bảo mật","headingPath":["Dịch vụ Ads Insights"],"text":"**Đăng ký.** Việc đăng ký ads.hecigo.com chạy theo một trong hai chế độ, và chúng tôi chuyển\nqua lại giữa chúng. Khi đăng ký đang mở, lần đăng nhập Google đầu tiên tạo workspace ngay.\nChúng tôi giữ tên và địa chỉ email Google chia sẻ, định danh tài khoản Google, và ngôn ngữ\ntrang đang hiển thị, làm thông tin liên hệ của workspace đó. Hộp thư Lark của chúng tôi gửi\ncho người đó một email chào mừng kèm link đăng nhập dùng một lần, hết hạn sau 72 giờ, và gửi\ncho hecigo một thông báo rằng một workspace vừa được tạo. Khi đăng ký đang ở chế độ xét\nduyệt, hoặc khi hạn mức đăng ký mở trong ngày đã dùng hết, đăng nhập sẽ gửi một yêu cầu\nthay vì tạo workspace. Với một yêu cầu, chúng tôi giữ cùng các thông tin đó và thời điểm\ngửi, và dùng chúng cho một việc: quyết định yêu cầu và báo kết quả cho người gửi. Lark gửi\nmột email cho hecigo để xét, một email cho người gửi để xác nhận đã nhận, và nếu được duyệt,\nmột email kèm link đăng nhập dùng một lần, hết hạn sau 72 giờ. Yêu cầu chưa ai quyết định\nbị xoá sau 90 ngày, yêu cầu đã quyết định bị xoá 30 ngày sau quyết định. Yêu cầu được duyệt\ntiếp tục thành workspace và email liên hệ của nó, được giữ như nêu ở *Giữ bao lâu*. Bản\nthân các email nằm trong hộp thư Lark của chúng tôi như mọi thư từ khác.\n\n**Đo quảng cáo của chính hecigo.** hecigo quảng cáo Ads Insights trên Meta, TikTok và\nGoogle, và đo xem quảng cáo nào đưa tới người đăng ký. Việc này liên quan tới quảng cáo của\nchính chúng tôi và những người phản hồi chúng. Nó không bao giờ đụng tới dữ liệu quảng cáo\ncủa khách hàng.","entities":["org:hecigo","product:ads-insights"],"updated":"2026-10-11"}
{"id":"page:privacy:vi:dịch-vụ-ads-insights~9","url":"https://hecigo.com/vi/privacy/#dịch-vụ-ads-insights","locale":"vi","type":"page","title":"Chính sách bảo mật","headingPath":["Dịch vụ Ads Insights"],"text":"- *Thẻ đo trên hai trang.* Trang chủ ads.hecigo.com và trang hướng dẫn tại\n  ads.hecigo.com/guide tải thẻ của Google Analytics (measurement ID `G-DFZBPG12H8`), Google\n  Ads, Meta Pixel (ID `1642547450913779`) và TikTok Pixel. Chúng ghi lượt xem trang, lượt\n  bấm nút đăng nhập và lần gửi form mã đăng nhập, và đặt cookie riêng của chúng (`_ga`, các\n  cookie `_gcl_` của Google Ads, `_fbp` và `_fbc`, `_ttp`). Không trang nào sau bước đăng\n  nhập mang thẻ đo: không portal, không trang đồng ý, không trang kết nối nền tảng quảng\n  cáo, không trang nào khác.\n- *Một cookie của chính chúng tôi.* Khi bạn đến từ một quảng cáo, hoặc lần đầu đến từ một\n  site khác, ads.hecigo.com đặt một cookie tên `hg_attr`. Nó ghi thời điểm bạn đến, trang\n  bạn vào, định danh lượt nhấp mà nền tảng quảng cáo thêm vào link (`gclid`, `gbraid`,\n  `wbraid`, `fbclid` hoặc `ttclid`), các tham số chiến dịch trong link, và tên site đã đưa\n  bạn tới. Nó được mã hoá, không script nào đọc được, và hết hạn sau 90 ngày.\n- *Ba thời điểm được báo.* Khi một workspace được tạo, khi nó kết nối nền tảng quảng cáo\n  đầu tiên, và khi một trợ lý AI dùng nó lần đầu, dịch vụ báo thời điểm đó cho Meta\n  (Conversions API), TikTok (Events API), Google Analytics (Measurement Protocol) và Google\n  Ads (tải lên chuyển đổi). Mỗi báo cáo mang theo: đó là thời điểm nào và lúc nào; định danh\n  ngẫu nhiên của workspace, băm khi gửi cho Meta và TikTok; địa chỉ email của người đăng\n  nhập, chỉ ở dạng băm SHA-256 (với Google Ads, địa chỉ Gmail được băm sau khi bỏ dấu chấm và\n  mọi thứ sau dấu \"+\", theo cách Google so khớp); định danh lượt nhấp và thông tin chiến\n  dịch từ `hg_attr`; các cookie mà thẻ đo đã đặt; kênh người đó đến từ; và, với một kết nối,","entities":["org:hecigo"],"updated":"2026-10-11"}
{"id":"page:privacy:vi:dịch-vụ-ads-insights~10","url":"https://hecigo.com/vi/privacy/#dịch-vụ-ads-insights","locale":"vi","type":"page","title":"Chính sách bảo mật","headingPath":["Dịch vụ Ads Insights"],"text":"  nền tảng nào được kết nối. Báo cáo workspace mới còn mang địa chỉ IP và trình duyệt của\n  request đã tạo nó. Địa chỉ IP được dùng cho báo cáo đó và không được lưu.\n- *Những gì chúng tôi giữ.* Workspace giữ một bản ghi những thứ trên: kênh, thông tin lúc\n  đến, cookie của thẻ đo, trình duyệt, email đã băm và ngày của ba thời điểm, để báo được\n  hai thời điểm sau. Khách hàng không nhìn thấy nó, và nó bị xoá cùng workspace.\n- *Những gì không bao giờ được báo.* Workspace của người trong hecigo và tài khoản thử\n  nghiệm của chúng tôi, và mọi workspace tạo trước ngày 25/09/2026.\n- *Ai nhận.* Meta, TikTok và Google, mỗi bên theo điều khoản riêng của họ với hecigo, trên\n  hạ tầng ngoài Việt Nam.\n- *Lựa chọn của bạn.* Hiện ads.hecigo.com chưa có bước hỏi ý kiến trước khi thẻ đo tải hay\n  trước khi một lượt đăng ký được báo. Chúng tôi dự định thêm, và trang này sẽ nói khi nó\n  chạy. Cho tới lúc đó, bạn có thể từ chối bằng bất kỳ cách nào dưới đây, và không cách nào\n  làm bạn mất phần nào của dịch vụ: chặn thẻ đo bằng tiện ích chặn theo dõi hoặc cài đặt\n  trình duyệt, cách này cũng chặn cookie của chúng; xoá cookie `hg_attr`; hoặc viết tới\n  **hi@hecigo.com**, chúng tôi sẽ xoá mọi định danh khỏi bản ghi của workspace và không báo\n  gì thêm về nó. Báo cáo đã gửi thì không lấy lại được từ các nền tảng, nhưng mỗi nền tảng\n  cho bạn giới hạn cách nó được dùng cho quảng cáo: Meta tại\n  [facebook.com/adpreferences](https://www.facebook.com/adpreferences), Google tại\n  [myadcenter.google.com](https://myadcenter.google.com), và TikTok trong ứng dụng TikTok,\n  mục Cài đặt và quyền riêng tư, Quảng cáo.","entities":["org:hecigo"],"updated":"2026-10-11"}
{"id":"page:privacy:vi:dịch-vụ-ads-insights~11","url":"https://hecigo.com/vi/privacy/#dịch-vụ-ads-insights","locale":"vi","type":"page","title":"Chính sách bảo mật","headingPath":["Dịch vụ Ads Insights"],"text":"**Cơ sở.** Thực hiện thoả thuận mà khách hàng đã tham gia, cộng với quyền khách hàng đã cấp\ntrên màn hình đồng ý của chính nền tảng. Với email dịch vụ, cập nhật sản phẩm và xin góp ý,\nlà chính thoả thuận đó, như Điều khoản sử dụng mô tả; các loại không bắt buộc dừng ngay khi\nbạn tắt, đó là quyền phản đối của bạn theo Luật 91/2025. Với ưu đãi, là sự đồng ý nhận email\ntừ hecigo mà việc đăng nhập có nêu, bạn rút lại bằng cách tắt chúng, bất cứ lúc nào, từ bất kỳ\nemail ưu đãi nào hoặc từ portal; khi đó chúng tôi dừng trong vòng một ngày làm việc. Với việc\nđăng ký, dù nó mở workspace hay gửi yêu\ncầu, là yêu cầu dùng dịch vụ của chính người đó, thể hiện bằng việc đăng nhập. Với lịch báo\ncáo hằng tuần, là yêu cầu của chính người đó, thể hiện bằng việc bật lịch. Việc đo quảng\ncáo của chính chúng tôi hiện chưa dựa trên một lựa chọn chúng tôi hỏi; xem *Lựa chọn của\nbạn* ở *Đo quảng cáo của chính hecigo*.\n\n**Ai khác nhìn thấy.** Cloudflare, nơi chạy dịch vụ và lưu bản ghi đã mã hoá. Lark, nơi máy\nchủ email chuyển các email về đăng ký và yêu cầu truy cập và giữ bản sao trong hộp thư của\nchúng tôi, chuyển từng email báo cáo hằng tuần tới địa chỉ đã bật nó, và chuyển các email mô tả ở\n*Email chúng tôi gửi bạn*. Số liệu khách hàng\nhỏi được gửi tới trợ lý AI mà khách hàng đó đã kết nối, như Claude hay ChatGPT, nơi nhà cung\ncấp xử lý chúng theo điều khoản riêng của họ với khách hàng. Các nền tảng quảng cáo là nguồn\ncủa dữ liệu chứ không phải bên nhận, với một ngoại lệ: việc đo quảng cáo của chính hecigo\nbáo các lượt đăng ký cho Meta, TikTok và Google, như nêu ở trên. Không ai khác.","entities":["org:hecigo"],"updated":"2026-10-11"}
{"id":"page:privacy:vi:dịch-vụ-ads-insights~12","url":"https://hecigo.com/vi/privacy/#dịch-vụ-ads-insights","locale":"vi","type":"page","title":"Chính sách bảo mật","headingPath":["Dịch vụ Ads Insights"],"text":"**Giữ bao lâu.** Cho tới khi khách hàng xoá. Thu hồi quyền trên nền tảng là dừng mọi việc\nđọc ngay lập tức; viết tới **hi@hecigo.com** là xoá workspace và mọi thứ bên trong, trong\nvòng 30 ngày, có xác nhận bằng văn bản. Khách hàng cũng có thể đổi hoặc thu hồi khoá truy\ncập của mình bất cứ lúc nào, và ngắt bất kỳ kết nối trợ lý AI nào trong portal. Kết nối trợ\nlý không được dùng trong 90 ngày sẽ tự ngắt. Lịch báo cáo hằng tuần và địa chỉ email của nó\ntồn tại cho tới khi người đó tắt lịch, trong portal hoặc qua link trong bất kỳ email nào của\nnó, không cần đăng nhập; tắt lịch xoá cả hai ngay, xoá workspace cũng vậy. Bản ghi giữ để\nđo quảng cáo của chính chúng tôi đi cùng workspace, và mất mọi định danh sớm hơn nếu bạn yêu\ncầu; cookie `hg_attr` hết hạn sau 90 ngày. Các địa chỉ giữ cho *Email chúng tôi gửi bạn*,\ncùng bản ghi các lựa chọn cho chúng, tồn tại cùng workspace và đi cùng nó; tắt cả hai loại\nkhông bắt buộc thì địa chỉ chỉ còn được dùng cho email dịch vụ.\n\n**Quyền.** Các quyền liệt kê ở *Quyền của bạn* bên dưới áp dụng cho workspace và thông tin\nliên hệ chúng tôi giữ với vai trò bên kiểm soát. Với dữ liệu quảng cáo chúng tôi giữ với vai\ntrò bên xử lý, nền tảng và hợp đồng của chính khách hàng với nền tảng quyết định việc truy\ncập và xoá, và chúng tôi làm theo chỉ dẫn của khách hàng.\n\n**Dữ liệu người dùng Google.** Ads Insights nhận dữ liệu từ Google theo bốn đường, và chỉ\ndùng nó như mô tả ở đây.","entities":["org:hecigo","product:ads-insights"],"updated":"2026-10-11"}
{"id":"page:privacy:vi:dịch-vụ-ads-insights~13","url":"https://hecigo.com/vi/privacy/#dịch-vụ-ads-insights","locale":"vi","type":"page","title":"Chính sách bảo mật","headingPath":["Dịch vụ Ads Insights"],"text":"- **Đăng nhập bằng Google** (scope `openid`, `email`, `profile`). Google chia sẻ định danh\n  tài khoản, tên, địa chỉ email và ảnh hồ sơ. Chúng tôi giữ định danh, tên và địa chỉ email\n  làm thông tin liên hệ của workspace, như nêu ở *Đăng ký*. Một giá trị băm một chiều của\n  địa chỉ email cũng tham gia vào việc đo nêu ở *Đo quảng cáo của chính hecigo*. Ảnh hồ sơ\n  không được lưu.\n- **Kết nối Google Ads** (scope `https://www.googleapis.com/auth/adwords` và `openid`).\n  Khách hàng cấp quyền trên màn hình đồng ý của chính Google. Chúng tôi lưu refresh token\n  Google cấp, mã hoá bằng AES-GCM, và định danh của các tài khoản Google Ads nó mở được,\n  kèm tài khoản quản lý dùng để truy cập chúng nếu có. Chúng tôi cũng giữ, ở dạng mã hoá,\n  tên, trạng thái, tiền tệ, múi giờ và cờ tài khoản thử nghiệm của từng tài khoản Google\n  Ads mà token truy cập được, làm danh sách tài khoản quảng cáo mô tả ở *Những gì được lưu*.\n  Từ `openid` chúng tôi chỉ đọc định danh tài khoản Google, và chỉ giữ một giá trị băm một\n  chiều của nó, niêm phong cùng token. Nó có một công dụng: khi một workspace ngắt kết nối,\n  xác định xem cùng tài khoản Google đó còn kết nối với một workspace hecigo Ads Insights\n  khác không, để việc thu hồi quyền không cắt workspace kia. Với quyền này chúng tôi liệt\n  kê các tài khoản khách hàng truy cập được và chạy truy vấn báo cáo trên chúng: hiệu quả,\n  cấu hình, nội dung quảng cáo và chẩn đoán phân phối.\n- **Kết nối Google Analytics** (scope\n  `https://www.googleapis.com/auth/analytics.readonly` và `openid`) và **kết nối Search\n  Console** (scope `https://www.googleapis.com/auth/webmasters.readonly` và `openid`). Mỗi\n  cái là một lần cấp quyền riêng, trên màn hình đồng ý của chính Google, tách khỏi Google","entities":["org:hecigo","product:ads-insights"],"updated":"2026-10-11"}
{"id":"page:privacy:vi:dịch-vụ-ads-insights~14","url":"https://hecigo.com/vi/privacy/#dịch-vụ-ads-insights","locale":"vi","type":"page","title":"Chính sách bảo mật","headingPath":["Dịch vụ Ads Insights"],"text":"  Ads và tách khỏi nhau; cả hai scope đều chỉ đọc. Với mỗi cái, chúng tôi lưu refresh token\n  Google cấp, mã hoá bằng AES-GCM, định danh của các property Google Analytics hoặc địa chỉ\n  của các site Search Console đã xác minh được đọc mặc định, và, từ `openid`, một giá trị\n  băm một chiều của định danh tài khoản Google, dùng như với Google Ads. Với chúng, chúng\n  tôi liệt kê các property Google Analytics (account summaries của Admin API) hoặc các site\n  Search Console khách hàng truy cập được, và khi khách hàng yêu cầu, chạy báo cáo trên\n  chúng: báo cáo Google Analytics về phiên, người dùng, sự kiện, sự kiện chính và doanh thu\n  theo kênh, nguồn, chiến dịch, trang, thiết bị, địa điểm hoặc ngày (Data API), và báo cáo\n  Search Console về lượt nhấp, lượt hiển thị, tỷ lệ nhấp và vị trí theo truy vấn tìm kiếm,\n  trang, quốc gia, thiết bị hoặc ngày (Search Analytics). Báo cáo Google Analytics tới chúng\n  tôi ở dạng đã tổng hợp; Search Console giữ lại các truy vấn hiếm trước khi chúng tới\n  chúng tôi.\n\n*Được dùng thế nào.* Chỉ để trả lời câu hỏi khách hàng đặt qua trợ lý AI của chính họ, để\ngửi email báo cáo hằng tuần mà khách hàng đã bật tới địa chỉ Google của chính khách hàng đó,\nnhư nêu ở *Lịch báo cáo hằng tuần*, để cho khách hàng thấy trạng thái kết nối trong portal,\nvà để kiểm tra khoảng mỗi ngày một lần rằng kết nối còn chạy và truy cập được những tài\nkhoản nào, như nêu ở *Giám sát*. Google chỉ có một scope cho Google Ads API và scope đó cũng\ncho phép chỉnh sửa, nhưng Ads Insights không có thao tác nào tạo, sửa hay xoá bất cứ thứ gì\ntrong Google Ads. Scope của Google Analytics và Search Console chỉ cho phép đọc.","entities":["product:ads-insights"],"updated":"2026-10-11"}
{"id":"page:privacy:vi:dịch-vụ-ads-insights~15","url":"https://hecigo.com/vi/privacy/#dịch-vụ-ads-insights","locale":"vi","type":"page","title":"Chính sách bảo mật","headingPath":["Dịch vụ Ads Insights"],"text":"*Những gì không bao giờ làm với nó.* Không gì nhận qua kết nối Google Ads, Google Analytics\nhay Search Console bị bán, dùng cho quảng cáo, nhắm lại hay lập hồ sơ, hay dùng để quyết\nđịnh khả năng tín dụng hoặc cho vay. Dữ liệu người dùng Google duy nhất có tham gia vào quảng\ncáo là email đăng nhập, ở dạng băm một chiều, trong việc đo quảng cáo của chính hecigo như\nmô tả ở trên, và nó không bao giờ bị bán. Địa chỉ đăng nhập cũng là địa chỉ hecigo viết tới,\nnhư nêu ở *Email chúng tôi gửi bạn*: email dịch vụ, cập nhật sản phẩm và xin góp ý, và ưu đãi,\nmỗi loại không bắt buộc cho tới khi người đó tắt nó. Nó không được dùng để phát triển, cải tiến hay\nhuấn luyện bất kỳ mô hình trí tuệ nhân tạo hay học máy nào, của chúng tôi hay của ai khác.\nKhông ai ở hecigo đọc nó, trừ khi có sự cho phép của khách hàng để giải quyết một yêu cầu hỗ\ntrợ, khi cần để điều tra vấn đề bảo mật hay lạm dụng, hoặc khi pháp luật yêu cầu.\n\n*Ai nhận.* Số liệu đi tới trợ lý AI khách hàng đã kết nối, vì đó là nơi khách hàng yêu cầu\nchúng, hoặc, khi khách hàng bật lịch báo cáo hằng tuần, tới chính địa chỉ email của khách\nhàng đó qua máy chủ email của Lark. Cloudflare lưu token đã mã hoá và chạy dịch vụ. Giá trị\nbăm của email đăng nhập đi tới Meta, TikTok và Google như nêu ở *Đo quảng cáo của chính\nhecigo*. Không gì khác được chuyển cho ai.\n\n*Được bảo vệ thế nào.* Như nêu ở *Dữ liệu được bảo vệ thế nào*: mã hoá AES-256-GCM khi lưu\nvà TLS khi truyền, không bao giờ được trả lại qua giao diện nào, không bao giờ ghi vào log,\nvà chỉ được mở để trả lời yêu cầu của chính khách hàng.","entities":["org:hecigo"],"updated":"2026-10-11"}
{"id":"page:privacy:vi:dịch-vụ-ads-insights~16","url":"https://hecigo.com/vi/privacy/#dịch-vụ-ads-insights","locale":"vi","type":"page","title":"Chính sách bảo mật","headingPath":["Dịch vụ Ads Insights"],"text":"*Giữ bao lâu.* Token, định danh tài khoản và danh sách tài khoản quảng cáo được giữ cho tới\nkhi khách hàng ngắt kết nối Google Ads trong portal hoặc xoá workspace. Token và định danh\nproperty của Google Analytics, cùng token và địa chỉ site của Search Console, mỗi thứ được\ngiữ cho tới khi khách hàng ngắt kết nối đó trong portal hoặc xoá workspace. Ngắt kết nối là\nxoá chúng và thu hồi quyền tại Google ngay, trừ khi cùng tài khoản Google đó vẫn còn một kết\nnối hecigo Ads Insights khác, ở workspace khác hoặc là một kết nối Google khác của cùng\nworkspace, hoặc khi hecigo không xác nhận được là không còn. Google thu hồi một lần cấp quyền\nkhỏi mọi workspace mà tài khoản đó đã kết nối cùng lúc, nên trong trường hợp đó quyền được\ngiữ cho tới khi workspace cuối cùng của tài khoản ngắt kết nối, và portal sẽ báo điều này.\nKhách hàng cũng có thể gỡ quyền truy cập bất cứ lúc nào tại\n[myaccount.google.com/permissions](https://myaccount.google.com/permissions). Số liệu báo\ncáo không được giữ sau khi câu trả lời đã trả về hoặc email báo cáo hằng tuần đã gửi.\n\n*Limited Use.* Việc hecigo Ads Insights sử dụng và chuyển cho bất kỳ ứng dụng nào khác thông\ntin nhận từ Google API sẽ tuân thủ\n[Google API Services User Data Policy](https://developers.google.com/terms/api-services-user-data-policy),\ngồm cả các yêu cầu Limited Use.","entities":["org:hecigo","product:ads-insights"],"updated":"2026-10-11"}
{"id":"page:privacy:vi:giữ-bao-lâu","url":"https://hecigo.com/vi/privacy/#giữ-bao-lâu","locale":"vi","type":"page","title":"Chính sách bảo mật","headingPath":["Giữ bao lâu"],"text":"**Yêu cầu liên hệ không có hạn cố định.** Chúng tôi giữ một yêu cầu, và thư từ trao đổi sau\nnó, cho tới khi bạn đề nghị xoá. Nếu nó thành một dự án có ký hợp đồng, điều khoản lưu trữ\ncủa hợp đồng đó được áp dụng thay thế. Không có đồng hồ nào chạy ngầm. Đề nghị là xoá; xem\n*Quyền của bạn* bên dưới.\n\n**Yêu cầu truy cập Ads Insights giữ 90 ngày, hoặc 30 ngày sau khi được quyết định.** Yêu cầu\nchưa ai quyết định bị xoá 90 ngày sau khi gửi; yêu cầu đã được duyệt hoặc từ chối, 30 ngày\nsau quyết định đó. Kho lưu trữ tự hết hạn chúng, nên không gì phụ thuộc vào việc có ai nhớ\ndọn dẹp. Yêu cầu được duyệt tiếp tục thành một workspace, mô tả ở *Dịch vụ Ads Insights*.\n\n**Số lượt bấm link rút gọn giữ ba tháng.** Đó là lịch riêng của Cloudflare cho kho chúng tôi\ndùng, và chúng tôi không chép chúng đi đâu khác trước khi chúng hết hạn.\n\n**Dữ liệu phân tích không gắn với bạn, và không xoá được theo yêu cầu.** Google Analytics và\nMeta Pixel ghi lượt xem trang, không ghi danh tính. Không gì site này gửi cho họ mang tên,\nemail hay bất kỳ tài khoản nào của bạn, nên không có \"dữ liệu của bạn\" để chúng tôi tra và\nxoá. Nói thật, chúng tôi không thể đáp ứng yêu cầu như vậy dù muốn. Thay vào đó, dữ liệu này\nhết hạn theo lịch riêng của nền tảng: 14 tháng với Google Analytics, và mặc định của Meta với\nPixel. Bạn có thể dừng việc thu thập bất cứ lúc nào, không cần hỏi chúng tôi, bằng tiện ích\nchặn theo dõi. Trên ads.hecigo.com, email đã băm là một phần của báo cáo khi một workspace\nđược tạo; điều đó nêu ở *Đo quảng cáo của chính hecigo*, và dừng khi bạn yêu cầu.","entities":["org:hecigo","product:ads-insights"],"updated":"2026-10-11"}
{"id":"page:privacy:vi:ai-khác-nhìn-thấy","url":"https://hecigo.com/vi/privacy/#ai-khác-nhìn-thấy","locale":"vi","type":"page","title":"Chính sách bảo mật","headingPath":["Ai khác nhìn thấy"],"text":"Chỉ những bên này, và không ai khác:\n\n- **THE NEXOVA** vận hành workflow tiếp nhận form.\n- **Lark** lưu hộp thư của chúng tôi, nên email yêu cầu và thư trả lời của chúng tôi nằm ở\n  đó, cùng các email Ads Insights gửi về đăng ký và yêu cầu truy cập, và Lark chuyển các\n  email báo cáo hằng tuần mà khách hàng bật.\n- **Telegram** chuyển thông báo có yêu cầu mới, vào một nhóm riêng.\n- **Google** (phân tích) và **Meta** (pixel) nhận dữ liệu lượt xem trang, không nhận nội\n  dung yêu cầu.\n- **Meta, TikTok và Google** cũng nhận dữ liệu đo quảng cáo của chính hecigo trên\n  ads.hecigo.com, nêu ở *Đo quảng cáo của chính hecigo*.\n- **Cloudflare** phục vụ và bảo vệ site, giữ log request ngắn hạn, và giữ số lượt bấm link\n  rút gọn mô tả ở trên.\n\nChúng tôi không chia sẻ nội dung yêu cầu với ai khác, và không công bố tên hay thông tin của\nkhách hàng khi chưa có cho phép bằng văn bản. Netlify phục vụ site này tới ngày 30/08/2026 và\nđã bị gỡ ngày 01/09/2026; nó không còn nhận gì.","entities":["org:hecigo","product:ads-insights"],"updated":"2026-10-11"}
{"id":"page:privacy:vi:quyền-của-bạn","url":"https://hecigo.com/vi/privacy/#quyền-của-bạn","locale":"vi","type":"page","title":"Chính sách bảo mật","headingPath":["Quyền của bạn"],"text":"Điều 4 Luật 91/2025 trao cho bạn một số quyền đối với dữ liệu cá nhân của mình. Đây là\nnhững quyền có tác dụng ở đây, áp cho những gì chúng tôi giữ dưới tên hay địa chỉ email của\nbạn: yêu cầu liên hệ của bạn và mọi trao đổi sau đó. Viết tới **hi@hecigo.com** và bạn có\nthể:\n\n- hỏi chúng tôi giữ gì về bạn và đang dùng nó thế nào,\n- xin một bản sao,\n- yêu cầu sửa thông tin sai,\n- yêu cầu xoá,\n- rút lại sự đồng ý bạn đã cho trên form, bất cứ lúc nào, việc này dừng mọi sử dụng tiếp\n  theo và dẫn tới xoá dữ liệu, trừ khi hợp đồng hoặc pháp luật buộc chúng tôi giữ lại,\n- yêu cầu tạm dừng xử lý khi đang có tranh chấp về nó,\n- phản đối một cách sử dụng cụ thể,\n- khiếu nại tới cơ quan có thẩm quyền, hoặc đưa vụ việc ra toà, nếu bạn cho rằng chúng tôi\n  đã xử lý dữ liệu của bạn sai.\n\nChúng tôi xử lý các yêu cầu này trong vòng 30 ngày và không thu phí. Bạn không cần nêu lý\ndo, và không cần từng là khách hàng.\n\nCác quyền này không áp dụng cho dữ liệu phân tích hay số lượt bấm link rút gọn mô tả ở trên,\nvì lý do đã nêu: cả hai đều không gắn với danh tính, nên không có gì để truy xuất hay xoá. Để\ndừng việc thu thập đó, hãy dùng tiện ích chặn theo dõi hoặc cài đặt \"không theo dõi\" của\ntrình duyệt, hoặc từ chối qua công cụ của chính Google và Meta, không cách nào cần liên hệ\nchúng tôi.","entities":["org:hecigo"],"updated":"2026-10-11"}
{"id":"page:privacy:vi:chuyển-dữ-liệu-ra-nước-ngoài","url":"https://hecigo.com/vi/privacy/#chuyển-dữ-liệu-ra-nước-ngoài","locale":"vi","type":"page","title":"Chính sách bảo mật","headingPath":["Chuyển dữ liệu ra nước ngoài"],"text":"Google, Meta, TikTok, Cloudflare, Lark và Telegram xử lý dữ liệu trên hạ tầng ngoài Việt\nNam. Dữ liệu đo quảng cáo của chính hecigo trên ads.hecigo.com tới Meta, TikTok và Google\ntheo đường này. Điều đó bao gồm cả chính yêu cầu liên hệ, vì hộp thư của chúng tôi chạy trên\nLark và thông báo có yêu cầu mới đi qua Telegram. Workflow tiếp nhận chạy trên một máy chủ\nvận hành cho Việt Nam và Singapore. Gửi form nghĩa là chấp nhận dữ liệu đi theo đường này,\ncho các mục đích đã nêu và không cho mục đích nào khác.","entities":["org:hecigo"],"updated":"2026-10-11"}
{"id":"page:privacy:vi:trẻ-em","url":"https://hecigo.com/vi/privacy/#trẻ-em","locale":"vi","type":"page","title":"Chính sách bảo mật","headingPath":["Trẻ em"],"text":"Site này dành cho doanh nghiệp. Chúng tôi không cố ý thu thông tin của người dưới 16 tuổi.\nNếu bạn cho rằng chúng tôi đã thu, hãy viết tới hi@hecigo.com và chúng tôi sẽ xoá.","entities":["org:hecigo"],"updated":"2026-10-11"}
{"id":"page:privacy:vi:thay-đổi","url":"https://hecigo.com/vi/privacy/#thay-đổi","locale":"vi","type":"page","title":"Chính sách bảo mật","headingPath":["Thay đổi"],"text":"Nếu chính sách này thay đổi đáng kể, chúng tôi sẽ cập nhật ngày và mã phiên bản ở đầu trang,\nvà giữ lại bản câu chữ cũ để một bản ghi đồng ý từ ngày trước vẫn đối chiếu được với văn bản\ncó hiệu lực lúc đó. Bản hiện hành luôn ở [hecigo.com/vi/privacy](https://hecigo.com/vi/privacy/)\n(tiếng Việt) và [hecigo.com/privacy](https://hecigo.com/privacy/) (tiếng Anh), bản Markdown ở\n[hecigo.com/vi/privacy.md](https://hecigo.com/vi/privacy.md) và\n[hecigo.com/privacy.md](https://hecigo.com/privacy.md).","entities":["org:hecigo"],"updated":"2026-10-11"}
{"id":"page:terms:vi:intro","url":"https://hecigo.com/vi/terms/","locale":"vi","type":"page","title":"Điều khoản sử dụng","headingPath":[],"text":"Điều khoản này áp dụng cho website **hecigo.com**, các gói phần mềm hecigo phát hành\nvà phần mềm hecigo vận hành. Nó không áp dụng cho một dự án tích hợp có trả phí: dự án\nđó theo hợp đồng ký cho nó, và chỗ nào hợp đồng khác trang này thì hợp đồng được áp dụng.\n\n**Bản dịch.** Đây là bản tiếng Việt của [Terms of Service](/terms/), cùng phiên bản\n`tos-2026-10-11c`. Nếu hai bản hiểu khác nhau, bản tiếng Anh được áp dụng.\n\n**Bên cung cấp:** CÔNG TY TNHH CÔNG NGHỆ HECIGO (HECIGO TECHNOLOGY CO., LTD), mã số\nthuế 0317653537, CirCO Điện Biên Phủ, 222 Điện Biên Phủ, phường Xuân Hòa, Thành phố\nHồ Chí Minh, Việt Nam. Liên hệ: **hi@hecigo.com**.\n\n**Cập nhật lần cuối:** 11/10/2026. **Phiên bản:** `tos-2026-10-11c`.","entities":["org:hecigo"],"updated":"2026-10-11"}
{"id":"page:terms:vi:điều-khoản-này-áp-dụng-cho-gì","url":"https://hecigo.com/vi/terms/#điều-khoản-này-áp-dụng-cho-gì","locale":"vi","type":"page","title":"Điều khoản sử dụng","headingPath":["Điều khoản này áp dụng cho gì"],"text":"hecigo cung cấp ba thứ khác nhau, và mỗi thứ theo một bộ điều khoản riêng.\n\n| Thứ gì | Theo |\n|---|---|\n| Website này, và bản Markdown của nó phục vụ cho agent | Trang này |\n| Gói mã nguồn mở phát hành dưới scope `@hecigo` và tên `n8n-nodes-*` | Giấy phép trong từng gói, thường là MIT, cộng với trang này |\n| Phần mềm do hecigo vận hành, gồm dịch vụ báo cáo quảng cáo và phân tích | Trang này |\n| Một dự án tích hợp có trả phí | Hợp đồng ký cho dự án đó |\n\nDùng website, cài một gói phần mềm hay kết nối tài khoản vào một dịch vụ do hecigo vận\nhành nghĩa là bạn chấp nhận điều khoản này. Nếu bạn chấp nhận thay mặt một công ty, bạn\nxác nhận mình có quyền ràng buộc công ty đó.\n\nCác dịch vụ này dành cho mục đích kinh doanh. Đừng dùng nếu bạn dưới 16 tuổi.","entities":["org:hecigo"],"updated":"2026-10-11"}
{"id":"page:terms:vi:tài-khoản-và-khoá-truy-cập","url":"https://hecigo.com/vi/terms/#tài-khoản-và-khoá-truy-cập","locale":"vi","type":"page","title":"Điều khoản sử dụng","headingPath":["Tài khoản và khoá truy cập"],"text":"Dịch vụ do hecigo vận hành nhận ra workspace của bạn bằng một khoá truy cập mà hecigo cấp\ncho bạn một lần. Hãy giữ nó như mật khẩu.\n\n- Giữ bí mật. Ai có khoá là đọc được dữ liệu mà workspace của bạn đã kết nối.\n- Báo cho chúng tôi qua **hi@hecigo.com** nếu khoá bị lộ, chúng tôi sẽ đổi khoá. Khoá\n  mới thay khoá cũ ngay lập tức.\n- Bạn chịu trách nhiệm về những gì được làm bằng khoá của mình cho tới khi bạn báo nó đã\n  bị lộ.\n\nhecigo có thể tạm dừng một workspace không cần báo trước khi khoá đang bị dùng để lạm dụng\nnền tảng của bên thứ ba, để vi phạm điều khoản này, hoặc khi một nền tảng yêu cầu.","entities":["org:hecigo"],"updated":"2026-10-11"}
{"id":"page:terms:vi:kết-nối-tài-khoản-quảng-cáo-hay-phân-tích-của-bên-thứ-ba","url":"https://hecigo.com/vi/terms/#kết-nối-tài-khoản-quảng-cáo-hay-phân-tích-của-bên-thứ-ba","locale":"vi","type":"page","title":"Điều khoản sử dụng","headingPath":["Kết nối tài khoản quảng cáo hay phân tích của bên thứ ba"],"text":"Dịch vụ báo cáo đọc, và ở chỗ bạn đã bật, thay đổi dữ liệu trong tài khoản quảng cáo trên\nMeta, Google Ads và TikTok. Nó cũng đọc, và không bao giờ thay đổi, các property Google\nAnalytics 4 và các site Google Search Console bạn kết nối. Từ đó có ba điều.\n\n**Bạn cấp quyền, và bạn rút lại được.** Việc cấp quyền diễn ra trên màn hình đồng ý của\nchính nền tảng, bằng tài khoản đăng nhập nền tảng của bạn. Bạn có thể thu hồi bất cứ lúc\nnào ngay trên nền tảng, không cần hỏi chúng tôi. Thu hồi là dịch vụ dừng đọc hay thay đổi\nbất cứ thứ gì trong tài khoản đó, ngay lập tức.\n\n**Điều khoản của nền tảng vẫn áp dụng cho bạn.** Quảng cáo của bạn vẫn chịu chính sách\ncủa Meta, Google và TikTok, gồm chính sách quảng cáo và quy định về nội dung bị cấm của\nhọ, và việc bạn dùng Google Analytics và Google Search Console vẫn chịu điều khoản của\nGoogle cho các sản phẩm đó. hecigo không rà soát quảng cáo của bạn theo các chính sách\nđó và không chịu trách nhiệm về biện pháp xử lý mà một nền tảng áp lên tài khoản của bạn.\n\n**Chúng tôi làm theo chỉ dẫn, không tự phán đoán.** Ở chỗ dịch vụ có thể thay đổi một\nchiến dịch, nó chỉ làm khi thay đổi đó đã được bạn xem và duyệt. hecigo không phải agency\nquảng cáo, không quyết định ngân sách, đối tượng hay nội dung quảng cáo của bạn, và không\nbảo đảm kết quả quảng cáo nào. Tiền chi cho quảng cáo là do bạn chi, trên tài khoản nền\ntảng của bạn, bằng phương thức thanh toán của bạn.","entities":["org:hecigo"],"updated":"2026-10-11"}
{"id":"page:terms:vi:chúng-tôi-làm-gì-với-dữ-liệu-của-bạn","url":"https://hecigo.com/vi/terms/#chúng-tôi-làm-gì-với-dữ-liệu-của-bạn","locale":"vi","type":"page","title":"Điều khoản sử dụng","headingPath":["Chúng tôi làm gì với dữ liệu của bạn"],"text":"Dữ liệu cá nhân được quy định trong [Chính sách bảo mật](/vi/privacy/), viết theo Luật\nBảo vệ dữ liệu cá nhân số 91/2025/QH15 và Nghị định số 356/2025/NĐ-CP của Việt Nam.\n\nRiêng với dịch vụ báo cáo:\n\n- Thông tin xác thực của nền tảng được mã hoá trước khi lưu, và không giao diện nào trả\n  lại giá trị của chúng, kể cả cho bạn.\n- Số liệu hiệu quả được lấy từ nền tảng khi bạn đặt câu hỏi. Chúng tôi không dựng một\n  bản sao riêng lịch sử quảng cáo, phân tích hay tìm kiếm của bạn để tự dùng.\n- Chúng tôi không bán, cho thuê hay phân phối lại dữ liệu quảng cáo, phân tích hay tìm\n  kiếm của bạn, và không gộp nó với dữ liệu của khách hàng khác.\n- Viết tới **hi@hecigo.com** để xoá một workspace và mọi thứ trong đó. Chúng tôi làm\n  trong vòng 30 ngày và xác nhận bằng văn bản, cùng thời hạn mà\n  [Chính sách bảo mật](/vi/privacy/) cam kết cho mọi yêu cầu khác.","entities":["org:hecigo"],"updated":"2026-10-11"}
{"id":"page:terms:vi:email-chúng-tôi-gửi","url":"https://hecigo.com/vi/terms/#email-chúng-tôi-gửi","locale":"vi","type":"page","title":"Điều khoản sử dụng","headingPath":["Email chúng tôi gửi"],"text":"Đăng nhập vào một dịch vụ do hecigo vận hành bằng Google là địa chỉ đã được Google xác\nminh đó được giữ trên workspace. Chúng tôi viết tới địa chỉ đó về ba loại việc:\n\n- **Email dịch vụ**: thay đổi của điều khoản này hoặc [Chính sách bảo mật](/vi/privacy/),\n  sự cố bảo mật, một kết nối ngừng chạy, và mọi việc khác cần cho việc vận hành workspace\n  của bạn. Chúng được gửi khi workspace còn tồn tại; xoá workspace là chúng dừng.\n- **Cập nhật sản phẩm và xin góp ý**: tính năng mới, thay đổi đáng biết, và thỉnh thoảng\n  một câu hỏi ngắn xem dịch vụ chạy với bạn thế nào. Tối đa bốn email mỗi tháng. Chúng là\n  một phần của thoả thuận này từ lần đăng nhập đầu tiên, và email nào cũng có link để tắt.\n- **Ưu đãi**: ưu đãi và sản phẩm mới của chính hecigo, có [QC] hoặc [AD] trong tiêu đề.\n  Tối đa hai email mỗi tháng và không quá một email mỗi ngày. Giống cập nhật sản phẩm, chúng\n  là một phần của thoả thuận này từ lần đăng nhập đầu tiên, và email nào cũng có link để tắt.\n\nLink ở cuối mỗi email đổi được các lựa chọn này mà không cần đăng nhập, viết tới\n**hi@hecigo.com** cũng vậy. Tắt cập nhật sản phẩm, xin góp ý hay ưu đãi không bao giờ ảnh\nhưởng tới việc bạn dùng dịch vụ. Chúng tôi giữ gì cho việc này, và trong bao lâu, nêu trong\n[Chính sách bảo mật](/vi/privacy/), mục *Email chúng tôi gửi bạn*.","entities":["org:hecigo"],"updated":"2026-10-11"}
{"id":"page:terms:vi:sử-dụng-được-chấp-nhận","url":"https://hecigo.com/vi/terms/#sử-dụng-được-chấp-nhận","locale":"vi","type":"page","title":"Điều khoản sử dụng","headingPath":["Sử dụng được chấp nhận"],"text":"Không dùng phần mềm của hecigo để:\n\n- truy cập dữ liệu của một doanh nghiệp chưa cho phép bạn truy cập;\n- lách giới hạn tần suất, cấp truy cập hay quy trình xét duyệt của một nền tảng;\n- chạy quảng cáo trái pháp luật Việt Nam hoặc pháp luật của thị trường bạn đang quảng cáo;\n- bán lại dữ liệu thô của nền tảng cho bên thứ ba; hoặc\n- dò quét, làm quá tải hay can thiệp vào dịch vụ hoặc hạ tầng nó chạy trên đó.\n\nChúng tôi hoan nghênh nghiên cứu bảo mật. Báo điều bạn tìm thấy tới **hi@hecigo.com**\ntrước khi công bố, và đừng dùng dữ liệu của khách hàng khác để chứng minh.","entities":["org:hecigo"],"updated":"2026-10-11"}
{"id":"page:terms:vi:phí","url":"https://hecigo.com/vi/terms/#phí","locale":"vi","type":"page","title":"Điều khoản sử dụng","headingPath":["Phí"],"text":"Ads Insights hiện miễn phí, không phí ẩn, không cần thẻ. Nếu có gói trả phí, chúng tôi email\ntới địa chỉ của workspace trước khi gói đó có hiệu lực, và gói miễn phí một workspace đang\ndùng vẫn miễn phí.\n\nỞ chỗ dịch vụ có thu phí, giá, kỳ thanh toán và điều gì xảy ra khi gia hạn được nêu tại\nthời điểm mua, và nội dung đó là một phần của điều khoản này. Bản dùng thử của các dịch vụ\nkhác có thể thay đổi hoặc kết thúc, có báo trước tới địa chỉ của workspace. Thuế giá trị\ngia tăng của Việt Nam áp dụng theo quy định; hoá đơn được xuất dạng điện tử.","entities":["product:ads-insights"],"updated":"2026-10-11"}
{"id":"page:terms:vi:sở-hữu-trí-tuệ","url":"https://hecigo.com/vi/terms/#sở-hữu-trí-tuệ","locale":"vi","type":"page","title":"Điều khoản sử dụng","headingPath":["Sở hữu trí tuệ"],"text":"hecigo giữ quyền sở hữu phần mềm, tài liệu và thương hiệu của mình. Gói phần mềm đã phát\nhành mang giấy phép riêng, thường là MIT, và giấy phép đó là thứ trao cho bạn quyền với mã\nnguồn bên trong. Không điều gì ở đây chuyển quyền sở hữu phần mềm của hecigo sang bạn.\n\nDữ liệu của bạn vẫn là của bạn. Kết nối một tài khoản cho phép hecigo xử lý dữ liệu đó\nđể cung cấp dịch vụ cho bạn, và không gì hơn.\n\nKhông được dùng tên, logo và wordmark hecigo để ngụ ý một sự bảo trợ hay quan hệ đối tác\nkhông có thật.","entities":["org:hecigo"],"updated":"2026-10-11"}
{"id":"page:terms:vi:những-gì-chúng-tôi-không-hứa","url":"https://hecigo.com/vi/terms/#những-gì-chúng-tôi-không-hứa","locale":"vi","type":"page","title":"Điều khoản sử dụng","headingPath":["Những gì chúng tôi không hứa"],"text":"Dịch vụ được cung cấp theo hiện trạng.\n\nAPI của các nền tảng thay đổi, bỏ phiên bản cũ, giới hạn tần suất, và đôi khi trả về số\nliệu mà sau đó chính họ điều chỉnh lại. Số liệu dịch vụ hiển thị đến từ nền tảng và mang\ntheo các lưu ý của chính nền tảng; ở chỗ một con số quan trọng về mặt thương mại, hãy đối\nchiếu với giao diện của nền tảng. hecigo không bảo đảm dịch vụ chạy không gián đoạn, mọi\ncon số khớp giao diện của nền tảng ở mọi thời điểm, hay dịch vụ phù hợp với một mục đích\ncụ thể nào của bạn.","entities":["org:hecigo"],"updated":"2026-10-11"}
{"id":"page:terms:vi:trách-nhiệm","url":"https://hecigo.com/vi/terms/#trách-nhiệm","locale":"vi","type":"page","title":"Điều khoản sử dụng","headingPath":["Trách nhiệm"],"text":"Trong phạm vi pháp luật Việt Nam cho phép, hecigo không chịu trách nhiệm về thiệt hại gián\ntiếp hay hệ quả, về lợi nhuận bị mất, hay về chi phí quảng cáo, dù phát sinh thế nào.\n\nVới mọi thứ khác, tổng trách nhiệm của hecigo phát sinh từ một dịch vụ do hecigo vận hành\ngiới hạn ở khoản phí bạn đã trả cho dịch vụ đó trong ba tháng trước sự việc dẫn tới yêu\ncầu bồi thường. Khi không có khoản phí nào được trả, trách nhiệm của hecigo giới hạn ở\nviệc khắc phục lỗi.\n\nKhông điều gì ở đây giới hạn trách nhiệm mà pháp luật Việt Nam không cho phép giới hạn,\ngồm trách nhiệm về thiệt hại do cố ý hoặc do lỗi nghiêm trọng gây ra.","entities":["org:hecigo"],"updated":"2026-10-11"}
{"id":"page:terms:vi:tạm-dừng-và-chấm-dứt","url":"https://hecigo.com/vi/terms/#tạm-dừng-và-chấm-dứt","locale":"vi","type":"page","title":"Điều khoản sử dụng","headingPath":["Tạm dừng và chấm dứt"],"text":"Bạn có thể ngừng dùng một dịch vụ bất cứ lúc nào bằng cách thu hồi quyền truy cập trên nền\ntảng và đề nghị chúng tôi xoá workspace.\n\nhecigo có thể tạm dừng hoặc chấm dứt quyền truy cập khi điều khoản này bị vi phạm, khi một\nnền tảng rút lại quyền truy cập mà dịch vụ phụ thuộc vào, hoặc khi tiếp tục sẽ gây rủi ro\ncho khách hàng khác. Khi chúng tôi chấm dứt một dịch vụ có phí mà không có lý do, chúng tôi\nhoàn lại phần chưa dùng của kỳ bạn đã trả.","entities":["org:hecigo"],"updated":"2026-10-11"}
{"id":"page:terms:vi:thay-đổi-điều-khoản","url":"https://hecigo.com/vi/terms/#thay-đổi-điều-khoản","locale":"vi","type":"page","title":"Điều khoản sử dụng","headingPath":["Thay đổi điều khoản"],"text":"Chúng tôi sửa trang này khi dịch vụ thay đổi, và ghi lại thay đổi bằng mã phiên bản và ngày\nmới ở đầu trang. Khi một thay đổi làm giảm đáng kể quyền của bạn, chúng tôi báo tới địa chỉ\ncủa workspace trước khi nó có hiệu lực. Tiếp tục dùng dịch vụ sau ngày đó là chấp nhận\nphiên bản mới.","entities":[],"updated":"2026-10-11"}
{"id":"page:terms:vi:luật-áp-dụng-và-tranh-chấp","url":"https://hecigo.com/vi/terms/#luật-áp-dụng-và-tranh-chấp","locale":"vi","type":"page","title":"Điều khoản sử dụng","headingPath":["Luật áp dụng và tranh chấp"],"text":"Điều khoản này theo pháp luật Việt Nam.\n\nHãy nói chuyện với chúng tôi trước: phần lớn tranh chấp kết thúc ở **hi@hecigo.com**. Nếu\nmột tranh chấp không giải quyết được trong 30 ngày kể từ khi được nêu bằng văn bản, nó được\ngiải quyết tại toà án có thẩm quyền ở Thành phố Hồ Chí Minh, Việt Nam.","entities":["org:hecigo"],"updated":"2026-10-11"}
{"id":"product:ads-insights:vi:intro","url":"https://hecigo.com/ads-insights/","locale":"vi","type":"product","title":"Ads Insights","headingPath":[],"text":"MCP server chỉ đọc cho Meta Ads, Google Ads, TikTok Ads, Google Analytics 4 và Google Search Console: Trợ lý AI đọc thẳng API của từng nguồn và gộp số liệu thành một bảng.\n\nAds Insights là MCP server chỉ đọc cho Meta Ads, Google Ads, TikTok Ads, Google Analytics 4 (GA4) và Google Search Console. Bạn hỏi trong Claude, ChatGPT, Cursor, VS Code hay bất kỳ Trợ lý AI nào hỗ trợ MCP; Trợ lý AI gọi công cụ của Ads Insights, công cụ đọc thẳng API của từng nguồn, rồi trả về một bảng. Chi tiêu quảng cáo, đơn GA4 đếm được trên web và tìm kiếm tự nhiên nằm chung một câu trả lời.","entities":["product:ads-insights"],"updated":"2026-10-11"}
{"id":"product:ads-insights:vi:kết-nối","url":"https://hecigo.com/ads-insights/","locale":"vi","type":"product","title":"Ads Insights","headingPath":["Kết nối"],"text":"Dán `https://ads.hecigo.com/mcp` vào phần connector của Trợ lý AI. Trợ lý AI mở trang đăng nhập của hecigo (đăng nhập bằng Google), rồi bạn cấp quyền tài khoản quảng cáo ngay trên màn hình của Meta, Google hoặc TikTok. GA4 và Search Console nối riêng, mỗi cái một nút và một màn hình đồng ý của Google, chỉ xin quyền đọc. Không ai cần biết mật khẩu của bạn, và không có khoá nào phải dán vào Trợ lý AI. Từng bước cho từng Trợ lý AI: [hướng dẫn kết nối](https://ads.hecigo.com/guide?lang=vi).","entities":["org:hecigo","product:ads-insights"],"updated":"2026-10-11"}
{"id":"product:ads-insights:vi:mười-hai-công-cụ","url":"https://hecigo.com/ads-insights/","locale":"vi","type":"product","title":"Ads Insights","headingPath":["Mười hai công cụ"],"text":"- `ads_health`: nền tảng nào đã kết nối, thông tin đăng nhập còn dùng được không\n- `ads_accounts`: các tài khoản quảng cáo bạn đã cấp quyền\n- `ads_insights`: chi tiêu, lượt hiển thị, lượt nhấp, chuyển đổi, giá trị và ROAS, tới cấp từng quảng cáo\n- `ads_entities`: chiến dịch, nhóm quảng cáo, quảng cáo nào đang chạy, ngân sách bao nhiêu\n- `ads_creatives`: quảng cáo viết gì, dẫn tới đâu\n- `ads_settings`: mục tiêu giá thầu, vị trí, đối tượng, hành động chuyển đổi\n- `ads_search_terms`: từ khoá tìm kiếm thật của Google Ads\n- `ads_asset_groups`: nhóm tài sản Performance Max\n- `ads_delivery`: vì sao quảng cáo ngừng phân phối\n- `analytics_properties`: các property GA4 bạn đã cấp quyền\n- `analytics_report`: phiên, người dùng, chuyển đổi và doanh thu trong GA4, theo bất kỳ chiều nào; nói rõ khi số bị lấy mẫu hoặc bị ẩn ngưỡng\n- `search_console_report`: lượt nhấp, lượt hiển thị, CTR và vị trí tìm kiếm tự nhiên theo truy vấn, trang, quốc gia, thiết bị hay ngày, kèm tổng toàn site để thấy phần truy vấn Google giấu","entities":["product:ads-insights"],"updated":"2026-10-11"}
{"id":"product:ads-insights:vi:vì-sao-đọc-thẳng-từ-api","url":"https://hecigo.com/ads-insights/","locale":"vi","type":"product","title":"Ads Insights","headingPath":["Vì sao đọc thẳng từ API"],"text":"Cột Clicks của Meta tính cả lượt chạm vào ảnh và \"xem thêm\". Trên một tài khoản thật, cùng khoảng ngày, Meta báo 2.207 lượt nhấp trong khi lượt nhấp link thật là 317. Chia chi tiêu cho con số đầu thì giá mỗi lượt vào trang thấp hơn thực tế gần bảy lần. Ads Insights tách hai con số đó ra.","entities":["product:ads-insights"],"updated":"2026-10-11"}
{"id":"product:ads-insights:vi:cơ-chế-bảo-mật-kiểm-được","url":"https://hecigo.com/ads-insights/","locale":"vi","type":"product","title":"Ads Insights","headingPath":["Cơ chế bảo mật kiểm được"],"text":"- Mọi công cụ khai `readOnlyHint`. Hiện chưa có công cụ ghi nào; Claude xếp chúng vào nhóm chỉ đọc.\n- Khoá workspace, mã mời, token truy cập chỉ được lưu dạng băm SHA-256.\n- Thông tin đăng nhập quảng cáo được niêm phong bằng AES-GCM. Số liệu quảng cáo không được chép vào kho lưu trữ.\n- Thu hồi quyền bất kỳ lúc nào; hiệu lực trong tối đa 60 giây.","entities":["product:ads-insights"],"updated":"2026-10-11"}
{"id":"product:ads-insights:vi:giá-và-hỗ-trợ","url":"https://hecigo.com/ads-insights/","locale":"vi","type":"product","title":"Ads Insights","headingPath":["Giá và hỗ trợ"],"text":"Đang mở miễn phí: không phí ẩn, không cần thẻ. Nếu sau này có gói trả phí, hecigo báo trước qua email, và gói bạn đang dùng vẫn miễn phí. Kẹt ở bước nào khi kết nối thì nhắn [Zalo hecigo](https://zalo.me/3108963776852260798) hoặc [Messenger](https://m.me/hecigolab), hecigo cài cùng bạn trong giờ làm việc.","entities":["org:hecigo","product:ads-insights"],"updated":"2026-10-11"}
{"id":"product:ads-insights:vi:trạng-thái","url":"https://hecigo.com/ads-insights/","locale":"vi","type":"product","title":"Ads Insights","headingPath":["Trạng thái"],"text":"Đang chạy production. Meta duyệt ứng dụng ngày 22/09/2026 với đúng một quyền `ads_read`. Google đã xác minh ứng dụng cho Google Ads. TikTok Ads đã kết nối được. Search Console mở cho mọi workspace. GA4 đang chờ Google xác minh quyền `analytics.readonly` (gửi ngày 11/10/2026); tới lúc đó `analytics_report` là bản xem trước.","entities":["product:ads-insights"],"updated":"2026-10-11"}
{"id":"product:ads-insights:en:intro","url":"https://hecigo.com/ads-insights/","locale":"en","type":"product","title":"Ads Insights","headingPath":[],"text":"A read-only MCP server for Meta Ads, Google Ads, TikTok Ads, Google Analytics 4 and Google Search Console: the assistant reads each source's API directly and merges the numbers into one table.\n\nAds Insights is a read-only MCP server for Meta Ads, Google Ads, TikTok Ads, Google Analytics 4 (GA4) and Google Search Console. You ask in Claude, ChatGPT, Cursor, VS Code or any assistant that supports MCP; the assistant calls an Ads Insights tool, the tool reads each source's API directly, and you get one table back. Ad spend, the orders GA4 counts on your site and organic search sit in the same answer.","entities":["product:ads-insights"],"updated":"2026-10-11"}
{"id":"product:ads-insights:en:connecting","url":"https://hecigo.com/ads-insights/","locale":"en","type":"product","title":"Ads Insights","headingPath":["Connecting"],"text":"Paste `https://ads.hecigo.com/mcp` into your assistant's connector settings. The assistant opens hecigo's sign-in page (sign in with Google), and you grant access to your ad accounts on Meta's, Google's or TikTok's own screen. GA4 and Search Console connect separately, each with its own button and Google consent screen, read access only. Nobody needs your password, and no key goes into the assistant. Step by step for each assistant: [connection guide](https://ads.hecigo.com/guide?lang=en).","entities":["org:hecigo","product:ads-insights"],"updated":"2026-10-11"}
{"id":"product:ads-insights:en:twelve-tools","url":"https://hecigo.com/ads-insights/","locale":"en","type":"product","title":"Ads Insights","headingPath":["Twelve tools"],"text":"- `ads_health`: which platforms are connected and whether their credentials still work\n- `ads_accounts`: the ad accounts you granted access to\n- `ads_insights`: spend, impressions, clicks, conversions, value and ROAS, down to individual ads\n- `ads_entities`: which campaigns, ad sets and ads are running, and on what budget\n- `ads_creatives`: what an ad says and where it links\n- `ads_settings`: bidding targets, locations, audiences, conversion actions\n- `ads_search_terms`: the real search terms behind Google Ads spend\n- `ads_asset_groups`: Performance Max asset groups\n- `ads_delivery`: why delivery stopped\n- `analytics_properties`: the GA4 properties you granted access to\n- `analytics_report`: sessions, users, conversions and revenue in GA4, by any dimension; says so when numbers are sampled or thresholded\n- `search_console_report`: organic clicks, impressions, CTR and position by query, page, country, device or date, with site totals that show what Google withholds","entities":["product:ads-insights"],"updated":"2026-10-11"}
{"id":"product:ads-insights:en:why-read-straight-from-the-api","url":"https://hecigo.com/ads-insights/","locale":"en","type":"product","title":"Ads Insights","headingPath":["Why read straight from the API"],"text":"Meta's Clicks column also counts image taps and taps on \"see more\". On a real account, over the same date range, Meta reported 2,207 clicks while real link clicks were 317. Dividing spend by the first number understates the cost of a site visit nearly sevenfold. Ads Insights keeps the two apart.","entities":["product:ads-insights"],"updated":"2026-10-11"}
{"id":"product:ads-insights:en:security-you-can-check","url":"https://hecigo.com/ads-insights/","locale":"en","type":"product","title":"Ads Insights","headingPath":["Security you can check"],"text":"- Every tool declares `readOnlyHint`. There are no write tools today; Claude lists them under read-only tools.\n- Workspace keys, invite codes and access tokens are stored as SHA-256 hashes only.\n- Ad platform credentials are sealed with AES-GCM. Ad data is not copied into storage.\n- Revoke access at any time; it takes effect within 60 seconds.","entities":["product:ads-insights"],"updated":"2026-10-11"}
{"id":"product:ads-insights:en:price-and-help","url":"https://hecigo.com/ads-insights/","locale":"en","type":"product","title":"Ads Insights","headingPath":["Price and help"],"text":"Free for now: no hidden fees, no card required. If a paid plan comes later, hecigo will tell you by email first, and the plan you are on stays free. Stuck while connecting? Message hecigo on [Zalo](https://zalo.me/3108963776852260798) or [Messenger](https://m.me/hecigolab) and we will set it up with you during working hours.","entities":["org:hecigo","product:ads-insights"],"updated":"2026-10-11"}
{"id":"product:ads-insights:en:status","url":"https://hecigo.com/ads-insights/","locale":"en","type":"product","title":"Ads Insights","headingPath":["Status"],"text":"In production. Meta approved the app on 22 September 2026 with a single permission, `ads_read`. Google has verified the app for Google Ads. TikTok Ads is connected. Search Console is open to every workspace. GA4 is waiting for Google to verify the `analytics.readonly` scope (submitted 11 October 2026); until then `analytics_report` is a preview.","entities":["product:ads-insights"],"updated":"2026-10-11"}
{"id":"product:n8n-nodes-zalo-platform:vi:intro","url":"https://www.npmjs.com/package/n8n-nodes-zalo-platform","locale":"vi","type":"product","title":"n8n-nodes-zalo-platform","headingPath":[],"text":"Community node cho n8n gọi Zalo Bot Platform: gửi tin nhắn, ảnh, sticker và quản lý webhook, 9 thao tác.\n\n`n8n-nodes-zalo-platform` là community node cho n8n, gọi Zalo Bot Platform: gửi tin nhắn, ảnh và sticker, quản lý webhook. Chín thao tác, mã nguồn mở MIT.\n\nCài trong n8n: Settings, Community Nodes, nhập `n8n-nodes-zalo-platform`. Hoặc `npm i n8n-nodes-zalo-platform` trong thư mục custom của n8n tự host.","entities":["product:n8n-nodes-zalo-platform"],"updated":"2026-10-11"}
{"id":"product:n8n-nodes-zalo-platform:en:intro","url":"https://www.npmjs.com/package/n8n-nodes-zalo-platform","locale":"en","type":"product","title":"n8n-nodes-zalo-platform","headingPath":[],"text":"An n8n community node for the Zalo Bot Platform: send messages, photos and stickers, manage webhooks. 9 operations.\n\n`n8n-nodes-zalo-platform` is an n8n community node for the Zalo Bot Platform: send messages, photos and stickers, and manage webhooks. Nine operations, MIT licensed.\n\nInstall in n8n under Settings, Community Nodes, by entering `n8n-nodes-zalo-platform`, or run `npm i n8n-nodes-zalo-platform` in the custom folder of a self-hosted n8n.","entities":["product:n8n-nodes-zalo-platform"],"updated":"2026-10-11"}
{"id":"product:n8n-nodes-firecrawl-v2:vi:intro","url":"https://www.npmjs.com/package/n8n-nodes-firecrawl-v2","locale":"vi","type":"product","title":"n8n-nodes-firecrawl-v2","headingPath":[],"text":"Community node cho n8n gọi Firecrawl v2 API: scrape, crawl, map, search và extract, 10 thao tác.\n\n`n8n-nodes-firecrawl-v2` là community node cho n8n, gọi Firecrawl v2 API: scrape, crawl, map, search và extract. Mười thao tác, mã nguồn mở MIT.\n\nCài trong n8n: Settings, Community Nodes, nhập `n8n-nodes-firecrawl-v2`. Hoặc `npm i n8n-nodes-firecrawl-v2` trong thư mục custom của n8n tự host.","entities":["product:n8n-nodes-firecrawl-v2"],"updated":"2026-10-11"}
{"id":"product:n8n-nodes-firecrawl-v2:en:intro","url":"https://www.npmjs.com/package/n8n-nodes-firecrawl-v2","locale":"en","type":"product","title":"n8n-nodes-firecrawl-v2","headingPath":[],"text":"An n8n community node for the Firecrawl v2 API: scrape, crawl, map, search and extract. 10 operations.\n\n`n8n-nodes-firecrawl-v2` is an n8n community node for the Firecrawl v2 API: scrape, crawl, map, search and extract. Ten operations, MIT licensed.\n\nInstall in n8n under Settings, Community Nodes, by entering `n8n-nodes-firecrawl-v2`, or run `npm i n8n-nodes-firecrawl-v2` in the custom folder of a self-hosted n8n.","entities":["product:n8n-nodes-firecrawl-v2"],"updated":"2026-10-11"}
{"id":"post:mcp-server-la-gi-nhin-tu-mot-server-dang-chay-that:vi:intro","url":"https://hecigo.com/blog/mcp-server-la-gi-nhin-tu-mot-server-dang-chay-that/","locale":"vi","type":"post","title":"MCP server là gì: mổ một MCP server đang chạy thật, từ 3 công cụ lên 9 và 18 KB mô tả trợ lý phải đọc","headingPath":[],"text":"Ngày 12/09/2026, bản đầu của [Ads Insights](https://ads.hecigo.com/) có ba công cụ. Hơn ba tuần sau nó có chín, và danh sách công cụ mà trợ lý AI nhận về trước khi trả lời câu hỏi đầu tiên đo được **18.778 byte**. Riêng mô tả và schema tham số của một công cụ, `ads_insights`, đã chiếm hơn 6.600 ký tự. Người dùng không bao giờ thấy những dòng đó. Trợ lý thì đọc chúng trong mọi cuộc hội thoại, và quyết định gọi gì, truyền gì, cẩn thận tới đâu dựa trên chính chúng.\n\nĐó là câu trả lời thực dụng nhất cho câu hỏi MCP server là gì: một chương trình mà phần lớn \"giao diện\" của nó là chữ viết cho máy đọc. Bài này đi qua một MCP server đang chạy thật của hecigo, từ đường truyền tới danh sách công cụ, kết quả trả về, đăng nhập, và ba chỗ đã làm sai.","entities":["org:hecigo","product:ads-insights"],"updated":"2026-10-05T02:05:00.000Z"}
{"id":"post:mcp-server-la-gi-nhin-tu-mot-server-dang-chay-that:vi:mcp-server-là-gì","url":"https://hecigo.com/blog/mcp-server-la-gi-nhin-tu-mot-server-dang-chay-that/#mcp-server-là-gì","locale":"vi","type":"post","title":"MCP server là gì: mổ một MCP server đang chạy thật, từ 3 công cụ lên 9 và 18 KB mô tả trợ lý phải đọc","headingPath":["MCP server là gì"],"text":"Model Context Protocol (MCP) là một giao thức dựa trên JSON-RPC 2.0. Trong đó có ba vai:\n\n- **Host** là ứng dụng AI: Claude Desktop, Claude Code, VS Code, ChatGPT.\n- **Client** là thành phần bên trong host, giữ đúng một kết nối tới một server. Host nối ba server thì tạo ba client.\n- **Server** là chương trình cung cấp ngữ cảnh và hành động cho client, bất kể nó chạy trên máy bạn hay trên Internet.\n\nMột MCP server có thể đưa ra ba loại thứ: **tools** (hàm trợ lý gọi được, ví dụ gọi một API), **resources** (dữ liệu để đọc làm ngữ cảnh) và **prompts** (khuôn câu dựng sẵn). Ads Insights chỉ dùng tools, vì mọi việc của nó là gọi API quảng cáo của Meta, Google và TikTok rồi trả số.\n\nCâu hỏi đáng tự kiểm trước khi dựng một MCP server: việc của bạn là cho trợ lý *làm* (tools), cho trợ lý *đọc* (resources), hay cho người dùng một *câu hỏi mẫu* (prompts)? Phần lớn server tích hợp hệ thống mà hecigo gặp rơi vào loại đầu.","entities":["org:hecigo","product:ads-insights"],"updated":"2026-10-05T02:05:00.000Z"}
{"id":"post:mcp-server-la-gi-nhin-tu-mot-server-dang-chay-that:vi:hai-đường-truyền-cùng-một-lõi","url":"https://hecigo.com/blog/mcp-server-la-gi-nhin-tu-mot-server-dang-chay-that/#hai-đường-truyền-cùng-một-lõi","locale":"vi","type":"post","title":"MCP server là gì: mổ một MCP server đang chạy thật, từ 3 công cụ lên 9 và 18 KB mô tả trợ lý phải đọc","headingPath":["Hai đường truyền, cùng một lõi"],"text":"Đặc tả định nghĩa hai đường truyền chuẩn, và Ads Insights chạy cả hai từ một mã nguồn.\n\n**stdio, cho một người một máy.** Host khởi động server như một tiến trình con, gửi JSON-RPC vào `stdin`, đọc câu trả lời ở `stdout`, mỗi thông điệp một dòng. Luật quan trọng nhất: server không được ghi bất cứ thứ gì không phải thông điệp MCP ra `stdout`. Log đi `stderr`. Một dòng `console.log` để gỡ lỗi là đủ làm host đọc hỏng luồng. Điểm vào stdio của Ads Insights gần như chỉ có thế:\n\n```ts\nconst config = configFrom(process.env);\nif (!Object.keys(config).filter((k) => k !== \"timeoutMs\").length) {\n  // stderr, không bao giờ stdout: stdout là kênh giao thức.\n  process.stderr.write(\"hecigo-ads-mcp: no platform configured. Starting anyway so ads_health can explain.\\n\");\n}\nconst server = createServerFromConfig(config);\nawait server.connect(new StdioServerTransport());\n```\n\nĐoạn trên rút gọn từ `src/mcp/index.ts`: bỏ phần bắt lỗi khi khởi động. Chú ý server vẫn chạy khi chưa có khoá nào, để công cụ `ads_health` giải thích được thiếu gì, thay vì tiến trình chết và host chỉ báo \"server disconnected\".\n\n**Streamable HTTP, cho nhiều người.** Server có một địa chỉ duy nhất, ví dụ `https://ads.hecigo.com/mcp`. Mỗi thông điệp từ client là một request POST mới; server trả về hoặc một JSON, hoặc một luồng SSE. Phiên (`Mcp-Session-Id`) là tuỳ chọn. Bản chạy trên Cloudflare Worker chọn không giữ phiên và trả JSON:\n\n```ts\nconst transport = new WebStandardStreamableHTTPServerTransport({\n  sessionIdGenerator: undefined, // không phiên: không cần Durable Object cho mỗi cuộc hội thoại\n  enableJsonResponse: true,      // không công cụ nào gửi tiến độ, nên câu trả lời luôn là một thông điệp\n});\nawait server.connect(transport);\nreturn await transport.handleRequest(request);\n```","entities":["org:hecigo","product:ads-insights"],"updated":"2026-10-05T02:05:00.000Z"}
{"id":"post:mcp-server-la-gi-nhin-tu-mot-server-dang-chay-that:vi:hai-đường-truyền-cùng-một-lõi~2","url":"https://hecigo.com/blog/mcp-server-la-gi-nhin-tu-mot-server-dang-chay-that/#hai-đường-truyền-cùng-một-lõi","locale":"vi","type":"post","title":"MCP server là gì: mổ một MCP server đang chạy thật, từ 3 công cụ lên 9 và 18 KB mô tả trợ lý phải đọc","headingPath":["Hai đường truyền, cùng một lõi"],"text":"Mỗi request dựng một server mới và bỏ đi khi xong. Không có gì để mất giữa hai request, nên Worker khởi động lạnh hay chuyển vùng đều không làm đứt cuộc hội thoại.\n\nLõi gọi API quảng cáo nằm ở `src/core` và không import MCP, Node hay Cloudflare. Hai adapter mỏng phủ lên nó. Đó là lý do một thay đổi ở lõi đến được cả hai đường cùng lúc.\n\n> Related: [Tên chiến dịch ghi 22, target ROAS thật là 0,23: hỏi số liệu quảng cáo ngay trong Claude](https://hecigo.com/blog/ten-chien-dich-ghi-22-hoi-so-lieu-quang-cao-ngay-trong-claude/): Nối Google Ads, Meta Ads, TikTok Ads vào Claude hoặc ChatGPT để hỏi ROAS, target giá thầu, search terms và Performance Max. Chỉ đọc, dùng thử được...","entities":["org:hecigo"],"updated":"2026-10-05T02:05:00.000Z"}
{"id":"post:mcp-server-la-gi-nhin-tu-mot-server-dang-chay-that:vi:thứ-trợ-lý-thật-sự-đọc-toolslist","url":"https://hecigo.com/blog/mcp-server-la-gi-nhin-tu-mot-server-dang-chay-that/#thứ-trợ-lý-thật-sự-đọc-toolslist","locale":"vi","type":"post","title":"MCP server là gì: mổ một MCP server đang chạy thật, từ 3 công cụ lên 9 và 18 KB mô tả trợ lý phải đọc","headingPath":["Thứ trợ lý thật sự đọc: tools/list"],"text":"Sau bước bắt tay, client gửi `tools/list`. Server trả về mỗi công cụ một bản ghi: `name`, `title`, `description`, `inputSchema` (JSON Schema của tham số), và `annotations`. Đây là toàn bộ thứ trợ lý biết về server của bạn. Công cụ nhỏ nhất của Ads Insights trông thế này, lấy từ phản hồi thật, bỏ hai trường phụ (`$schema` và `execution`):\n\n```json\n{\n  \"name\": \"ads_health\",\n  \"title\": \"Check ad platform connections\",\n  \"description\": \"Which ad platforms are configured for this workspace, and whether each credential still works. Run this before blaming missing data on an empty account.\",\n  \"inputSchema\": { \"type\": \"object\", \"properties\": {} },\n  \"annotations\": { \"readOnlyHint\": true, \"openWorldHint\": true }\n}\n```\n\nCâu cuối của `description` không mô tả công cụ. Nó dặn trợ lý khi nào gọi. Đó là cách viết mô tả hecigo rút ra sau ba tuần: viết như dặn một đồng nghiệp mới, không viết như tài liệu API.\n\nĐo trên mã nguồn hiện tại, chạy cục bộ qua stdio, không cấu hình khoá nào, ngày 05/10/2026:\n\n| Phần | Kích thước |\n|---|---|\n| `instructions` của server (đọc một lần lúc bắt tay) | 702 ký tự |\n| Tổng `description` của 9 công cụ | 4.991 ký tự |\n| Tổng `inputSchema` của 9 công cụ | 11.998 ký tự |\n| Riêng `ads_insights`: mô tả + schema | 1.470 + 5.158 ký tự |\n| Toàn bộ phản hồi `tools/list` | 18.778 byte |\n\nBản dựng còn nằm trong thư mục `dist` từ tối 12/09, lúc đã thêm ba công cụ sau bản đầu, có sáu công cụ và phản hồi `tools/list` dài 5.282 byte. Gấp hơn ba lần trong ba tuần, phần lớn vì `ads_insights` nhận thêm tham số: cột phụ, hành động Meta theo tên, mốc lịch như `last_week`. Mỗi tham số mới là một đoạn mô tả mà trợ lý mang theo dù câu hỏi không cần tới nó. hecigo chưa đo chi phí token của phần này theo từng trợ lý; con số ở trên là byte và ký tự, không phải token.","entities":["org:hecigo","product:ads-insights"],"updated":"2026-10-05T02:05:00.000Z"}
{"id":"post:mcp-server-la-gi-nhin-tu-mot-server-dang-chay-that:vi:thứ-trợ-lý-thật-sự-đọc-toolslist~2","url":"https://hecigo.com/blog/mcp-server-la-gi-nhin-tu-mot-server-dang-chay-that/#thứ-trợ-lý-thật-sự-đọc-toolslist","locale":"vi","type":"post","title":"MCP server là gì: mổ một MCP server đang chạy thật, từ 3 công cụ lên 9 và 18 KB mô tả trợ lý phải đọc","headingPath":["Thứ trợ lý thật sự đọc: tools/list"],"text":"**Ẩn công cụ thay vì từ chối.** Một workspace chỉ đọc thì công cụ ghi không bao giờ được đăng ký, nên nó không xuất hiện trong `tools/list`. Lý do ghi ngay trong mã: một công cụ trợ lý nhìn thấy là công cụ nó sẽ suy luận và lên kế hoạch quanh, và lời từ chối chỉ tới sau khi trợ lý đã lỡ nói với người dùng rằng nó sửa được chiến dịch.\n\n`readOnlyHint: true` thì vẫn khai, nhưng đừng coi nó là hàng rào. Đặc tả nói client phải coi annotation là không đáng tin trừ khi đến từ server đáng tin. Hàng rào thật nằm ở hai chỗ khác: quyền xin trên nền tảng (với Meta là `ads_read`, quyền đọc báo cáo), và mã nguồn không có đường nào gọi API ghi. Google Ads không có phạm vi quyền chỉ đọc, nên với Google, hàng rào còn lại là mã nguồn và quyền của chính tài khoản Google dùng để uỷ quyền.","entities":[],"updated":"2026-10-05T02:05:00.000Z"}
{"id":"post:mcp-server-la-gi-nhin-tu-mot-server-dang-chay-that:vi:kết-quả-trả-về-chữ-và-dữ-liệu-có-cấu-trúc","url":"https://hecigo.com/blog/mcp-server-la-gi-nhin-tu-mot-server-dang-chay-that/#kết-quả-trả-về-chữ-và-dữ-liệu-có-cấu-trúc","locale":"vi","type":"post","title":"MCP server là gì: mổ một MCP server đang chạy thật, từ 3 công cụ lên 9 và 18 KB mô tả trợ lý phải đọc","headingPath":["Kết quả trả về: chữ và dữ liệu có cấu trúc"],"text":"Một lần `tools/call` trả về mảng `content` (chữ, ảnh, link tài nguyên) và có thể kèm `structuredContent`, một đối tượng JSON. Đặc tả khuyên server trả dữ liệu có cấu trúc thì cũng trả bản chữ, để client cũ vẫn đọc được.\n\nAds Insights trả cả hai trong mọi câu trả lời: bảng chữ cho người và trợ lý đọc, `rows` và `errors` cho trợ lý xử lý tiếp. Không chỉ vì đặc tả khuyên. Ghi chú trong mã nguồn, rút từ lần làm gợi ý nối nền tảng, ghi rằng có trợ lý chỉ đọc phần có cấu trúc và Claude là một trong số đó. Một thông báo chỉ đặt ở phần chữ thì với những trợ lý đó coi như không tồn tại.\n\nLỗi có hai tầng, và chọn sai tầng là trợ lý hiểu sai:\n\n- **Lỗi giao thức** (JSON-RPC error): tên công cụ không tồn tại, tham số sai kiểu. Trợ lý hiểu là nó gọi sai.\n- **Lỗi thực thi** (`isError: true` trong kết quả): API quảng cáo từ chối, nền tảng chưa nối. Trợ lý đọc được nội dung và kể lại cho người dùng.\n\nKhi người dùng hỏi về một nền tảng chưa nối, Ads Insights trả `isError: true` kèm địa chỉ để nối, thay vì trả bảng rỗng. Bảng rỗng là câu trả lời đúng về mặt kỹ thuật và vô dụng với người hỏi: trợ lý sẽ nói \"không có dữ liệu\" trong khi sự thật là chưa có kết nối.\n\nMột nền tảng hỏng cũng không được làm mất số của hai nền tảng kia. Ba lời gọi chạy song song, lỗi quay về theo từng nền tảng trong `errors`.","entities":["product:ads-insights"],"updated":"2026-10-05T02:05:00.000Z"}
{"id":"post:mcp-server-la-gi-nhin-tu-mot-server-dang-chay-that:vi:đăng-nhập-một-cái-401-và-ba-địa-chỉ-tự-tìm","url":"https://hecigo.com/blog/mcp-server-la-gi-nhin-tu-mot-server-dang-chay-that/#đăng-nhập-một-cái-401-và-ba-địa-chỉ-tự-tìm","locale":"vi","type":"post","title":"MCP server là gì: mổ một MCP server đang chạy thật, từ 3 công cụ lên 9 và 18 KB mô tả trợ lý phải đọc","headingPath":["Đăng nhập: một cái 401 và ba địa chỉ tự tìm"],"text":"Server stdio đọc khoá từ biến môi trường. Server từ xa phải biết ai đang gọi, và người dùng chỉ dán đúng một địa chỉ. Hỏi `https://ads.hecigo.com/mcp` mà không mang token, ngày 05/10/2026:\n\n```text\nHTTP/2 401\nwww-authenticate: Bearer realm=\"ads-insights\", resource_metadata=\"https://ads.hecigo.com/.well-known/oauth-protected-resource\"\n```\n\nTừ dòng `resource_metadata` đó, client tự đi tiếp: tài liệu tài nguyên chỉ ra máy chủ cấp quyền là chính `ads.hecigo.com`; tài liệu của máy chủ cấp quyền khai ba địa chỉ (`/oauth/authorize`, `/oauth/token`, `/oauth/register`), chỉ nhận PKCE `S256`, và phương thức xác thực ở token endpoint là `none` vì client công khai không giữ được bí mật. Client tự đăng ký, mở trang đăng nhập Google cho người dùng, rồi đổi mã lấy token. Người dùng chỉ chạm vào hai việc: dán địa chỉ, và bấm cho phép.\n\nBa luật hecigo giữ ở chặng này: PKCE `S256` bắt buộc; mã uỷ quyền bị xoá trước khi kiểm bất cứ điều gì, nên một lần đổi thất bại cũng tiêu luôn mã; refresh token xoay vòng, token bị trộm dùng được đúng một lần rồi làm hỏng client thật, tức là lộ ra thay vì âm thầm. Token chỉ lưu dạng SHA-256.","entities":["org:hecigo"],"updated":"2026-10-05T02:05:00.000Z"}
{"id":"post:mcp-server-la-gi-nhin-tu-mot-server-dang-chay-that:vi:ba-chỗ-đã-làm-sai","url":"https://hecigo.com/blog/mcp-server-la-gi-nhin-tu-mot-server-dang-chay-that/#ba-chỗ-đã-làm-sai","locale":"vi","type":"post","title":"MCP server là gì: mổ một MCP server đang chạy thật, từ 3 công cụ lên 9 và 18 KB mô tả trợ lý phải đọc","headingPath":["Ba chỗ đã làm sai"],"text":"**Trợ lý giữ danh sách công cụ cũ.** Khi `ads_insights` có thêm tham số danh sách `metrics`, các cuộc hội thoại đã mở từ trước vẫn giữ schema cũ, không có tham số đó. Trợ lý vẫn thử dùng, nhưng gửi chuỗi: `\"reach,cpm\"` hoặc `'[\"reach\",\"cpm\"]'`, và schema mới từ chối. Cách sửa là nhận cả chuỗi, tách thành danh sách, rồi mới kiểm từng phần tử với danh sách tên cho phép. Bài học rộng hơn: đổi `tools/list` không đổi ngay thứ trợ lý đang cầm, nên tham số mới phải chịu được cách gọi của trợ lý chưa biết nó.\n\n**Kéo theo cả một khung mà không dùng.** Tới 16/09/2026, đường `/mcp` trên Worker đi qua một gói bọc ngoài SDK. Gói đó kéo theo một MCP client, một bản cài server thứ hai, phần gửi email và cron mà Worker không bao giờ chạy. Bỏ nó, dùng thẳng transport của SDK, bundle giảm từ 3,8 MB xuống 2,0 MB (bản nén từ 748 KB xuống 389 KB). Mỗi isolate khởi động lạnh đều phải đánh giá phần mã thừa đó trước khi trả lời được lời gọi công cụ đầu tiên.\n\n**Phiên bản giao thức đã đi trước.** Server này bắt tay bằng `initialize` và trả `protocolVersion` là `2025-06-18`. Bản đặc tả `2026-07-28` mô tả giao thức không trạng thái: mỗi request tự mang phiên bản và năng lực trong `_meta`, cùng một request `server/discover` để hỏi server hỗ trợ gì. Ads Insights chưa chuyển sang cách đó. Nó vẫn chạy với các client hecigo đã thử, vì client và server thương lượng phiên bản, nhưng đây là việc còn nợ chứ không phải thiết kế đã chọn.\n\nCòn một câu hecigo chưa có đáp án: khi mỗi tham số mới làm dài thêm thứ trợ lý phải đọc trong mọi cuộc hội thoại, ranh giới nằm ở đâu giữa một công cụ nhiều tham số và nhiều công cụ nhỏ, đo bằng số lần trợ lý gọi đúng ngay lần đầu?","entities":["org:hecigo","product:ads-insights"],"updated":"2026-10-05T02:05:00.000Z"}
{"id":"post:mcp-server-la-gi-nhin-tu-mot-server-dang-chay-that:vi:ba-chỗ-đã-làm-sai~2","url":"https://hecigo.com/blog/mcp-server-la-gi-nhin-tu-mot-server-dang-chay-that/#ba-chỗ-đã-làm-sai","locale":"vi","type":"post","title":"MCP server là gì: mổ một MCP server đang chạy thật, từ 3 công cụ lên 9 và 18 KB mô tả trợ lý phải đọc","headingPath":["Ba chỗ đã làm sai"],"text":"> **Muốn xem một MCP server chạy thật?** Thêm địa chỉ `https://ads.hecigo.com/mcp` vào Claude, ChatGPT, Cursor hoặc VS Code, theo [trang hướng dẫn](https://ads.hecigo.com/guide). Đang dựng MCP server cho hệ thống của mình và kẹt ở đăng nhập hay ở cách viết mô tả công cụ thì [nhắn hecigo](https://hecigo.com/#contact).\n\n> Related: [Kiểm tra độ thân thiện của website với AI Agent: Cơ chế hoạt động của Vercel Is Agentic](https://hecigo.com/blog/kiem-tra-do-than-thien-cua-website-voi-ai-agent-co-che-hoat-dong-cua-vercel-is-a/): Is Agentic chấm hecigo.com 73/100. Bốn vòng vá đưa nó lên 100. Lỗi đắt nhất là một phép kiểm mà chính bài này từng lấy làm ví dụ về việc làm đúng.","entities":["org:hecigo"],"updated":"2026-10-05T02:05:00.000Z"}
{"id":"post:mcp-server-la-gi-nhin-tu-mot-server-dang-chay-that:vi:nguồn-tham-khảo","url":"https://hecigo.com/blog/mcp-server-la-gi-nhin-tu-mot-server-dang-chay-that/#nguồn-tham-khảo","locale":"vi","type":"post","title":"MCP server là gì: mổ một MCP server đang chạy thật, từ 3 công cụ lên 9 và 18 KB mô tả trợ lý phải đọc","headingPath":["Nguồn tham khảo"],"text":"- [Architecture overview](https://modelcontextprotocol.io/docs/learn/architecture) - Model Context Protocol\n- [Transports, bản 2025-06-18](https://modelcontextprotocol.io/specification/2025-06-18/basic/transports) - Model Context Protocol\n- [Tools, bản 2025-06-18](https://modelcontextprotocol.io/specification/2025-06-18/server/tools) - Model Context Protocol","entities":[],"updated":"2026-10-05T02:05:00.000Z"}
{"id":"post:doc-so-lieu-quang-cao-meta-google-tiktok-trong-tro-ly-ai:vi:intro","url":"https://hecigo.com/blog/doc-so-lieu-quang-cao-meta-google-tiktok-trong-tro-ly-ai/","locale":"vi","type":"post","title":"Chín việc trợ lý AI làm được với số liệu quảng cáo Meta, Google và TikTok","headingPath":[],"text":"Sáng thứ Hai, để trả lời một câu duy nhất là tuần rồi tiền chảy đi đâu, đội quảng cáo thường mở ba trình quản lý, xuất ba file, rồi ghép tay. Mỗi nền tảng đặt tên cột một kiểu và ghi nhận chuyển đổi theo cửa sổ riêng, nên bảng ghép xong vẫn phải chú thích. Còn mục tiêu thật của từng chiến dịch, target ROAS hay target CPA đang cài, nằm ở màn hình khác và không đọc được từ tên chiến dịch.\n\n[Ads Insights](https://ads.hecigo.com/) bỏ phần ghép tay đó đi. Nó là một connector cho trợ lý AI: bạn hỏi bằng tiếng Việt ngay trong Claude hay ChatGPT, trợ lý đọc thẳng API của Meta Ads, Google Ads và TikTok Ads vào đúng lúc bạn hỏi, rồi trả về một bảng. Không có đường ghi nào trong đó, nên không ai sửa được chiến dịch qua nó.\n\nBài này đi qua chín việc hỏi được, ba chỗ số hay lệch so với Ads Manager và vì sao lệch, thời gian chờ đo thật, phần dữ liệu hecigo giữ lại, và chỗ chưa làm được.","entities":["org:hecigo","product:ads-insights"],"updated":"2026-09-23T08:40:00.000Z"}
{"id":"post:doc-so-lieu-quang-cao-meta-google-tiktok-trong-tro-ly-ai:vi:ba-nền-tảng-một-bảng-và-chỉ-đọc","url":"https://hecigo.com/blog/doc-so-lieu-quang-cao-meta-google-tiktok-trong-tro-ly-ai/#ba-nền-tảng-một-bảng-và-chỉ-đọc","locale":"vi","type":"post","title":"Chín việc trợ lý AI làm được với số liệu quảng cáo Meta, Google và TikTok","headingPath":["Ba nền tảng, một bảng, và chỉ đọc"],"text":"Connector chạy theo chuẩn Model Context Protocol, nên nó không gắn riêng với một trợ lý nào. Bạn thêm một địa chỉ vào Claude, ChatGPT, Cursor hay bất kỳ trợ lý nào hỗ trợ chuẩn đó, đăng nhập bằng Google, bấm nối tài khoản quảng cáo, rồi hỏi. Cả ba nền tảng đều tự nối được: Meta duyệt quyền đọc số liệu quảng cáo cho hecigo ngày 22/09/2026, Google xác minh ứng dụng ngày 15/09, TikTok duyệt cùng đợt.\n\nKhác biệt đáng nói với việc để trợ lý tự mở trình duyệt vào Ads Manager: ở đó trợ lý đứng trong phiên đăng nhập có quyền sửa quảng cáo. Ở đây không có đường ghi nào cả. Máy chủ chỉ đăng ký các công cụ đọc, và một workspace chỉ đọc thì công cụ ghi không bao giờ được đăng ký để trợ lý nhìn thấy.\n\nQuyền xin trên từng nền tảng cũng đi theo nguyên tắc đó. Với Meta, quyền được duyệt là `ads_read`, quyền dùng để đọc báo cáo; thao tác tạo và sửa quảng cáo nằm ở `ads_management`, một lần duyệt riêng mà hecigo chưa xin. Với Google Ads thì khác: API này chỉ có một phạm vi quyền duy nhất, `https://www.googleapis.com/auth/adwords`, và tài liệu của Google mô tả phạm vi đó cho phép nhiều mức truy cập khác nhau vào tài nguyên và thao tác của API, chứ không tách riêng một phạm vi chỉ đọc. Nói cách khác, giới hạn thật không nằm ở màn hình cấp quyền mà nằm ở quyền của chính tài khoản Google bạn dùng để uỷ quyền. Vì vậy trang hướng dẫn khuyên uỷ quyền bằng một tài khoản chỉ có quyền Read only trên tài khoản quảng cáo, và đó cũng là câu hỏi đáng tự kiểm: tài khoản bạn định bấm Nối ngay đang có quyền gì trên Ads Manager?","entities":["org:hecigo"],"updated":"2026-09-23T08:40:00.000Z"}
{"id":"post:doc-so-lieu-quang-cao-meta-google-tiktok-trong-tro-ly-ai:vi:chín-việc-hỏi-được-bằng-tiếng-việt","url":"https://hecigo.com/blog/doc-so-lieu-quang-cao-meta-google-tiktok-trong-tro-ly-ai/#chín-việc-hỏi-được-bằng-tiếng-việt","locale":"vi","type":"post","title":"Chín việc trợ lý AI làm được với số liệu quảng cáo Meta, Google và TikTok","headingPath":["Chín việc hỏi được bằng tiếng Việt"],"text":"Trợ lý gọi chín công cụ. Bạn không cần nhớ tên chúng, nhưng biết tên thì đọc câu trả lời dễ hơn, vì trợ lý thường nói nó vừa gọi cái nào.\n\n| Việc | Công cụ | Câu hỏi thật |\n|---|---|---|\n| So hiệu quả theo giá mỗi kết quả | `ads_insights` | \"30 ngày qua, quảng cáo nào tiêu nhiều nhất mà không có lượt vào trang nào?\" |\n| Đối chiếu ROAS thực tế với target đã cài | `ads_settings` + `ads_insights` | \"Đặt target ROAS đang cài cạnh ROAS thực tế 30 ngày. Chiến dịch nào lệch quá 20%? Đừng đọc target từ tên chiến dịch.\" |\n| Soát hành động chuyển đổi đang được đếm | `ads_settings` | \"Liệt kê hành động chuyển đổi đang tính vào cột conversions và đang dùng để tối ưu giá thầu, kèm cửa sổ ghi nhận.\" |\n| Cắt tiền phí vào search term | `ads_search_terms` | \"Search term nào tốn tiền mà không có chuyển đổi? Gom theo chủ đề và đề xuất danh sách từ khoá phủ định.\" |\n| Soát Performance Max | `ads_asset_groups` | \"Với từng asset group: ad strength, ROAS 30 ngày, asset nào bị đánh giá LOW nên thay.\" |\n| Biết cái gì đang chạy và ngân sách bao nhiêu | `ads_entities` | \"Chiến dịch nào đang bật, ngân sách ngày bao nhiêu, cái nào vừa đổi?\" |\n| Đọc nội dung quảng cáo và link đích | `ads_creatives` | \"Quảng cáo nào đang trỏ về link đích sai hoặc thiếu tham số theo dõi?\" |\n| Tìm lý do quảng cáo không tiêu tiền | `ads_delivery` | \"Tài khoản nào đang có quảng cáo bị từ chối hoặc nhóm quảng cáo học chưa xong?\" |\n| Kiểm tra kết nối và danh sách tài khoản | `ads_health`, `ads_accounts` | \"Kết nối nào đang hỏng, và trợ lý đang đọc những tài khoản nào?\" |\n\nBa câu ở giữa bảng là phần mà đội performance hay hỏi nhất, vì chúng đọc thứ Ads Manager để rải rác ở nhiều màn hình: giá thầu mục tiêu nằm một chỗ, hiệu quả thật nằm chỗ khác, còn hành động chuyển đổi nào đang được đếm thì nằm ở chỗ thứ ba.","entities":[],"updated":"2026-09-23T08:40:00.000Z"}
{"id":"post:doc-so-lieu-quang-cao-meta-google-tiktok-trong-tro-ly-ai:vi:chín-việc-hỏi-được-bằng-tiếng-việt~2","url":"https://hecigo.com/blog/doc-so-lieu-quang-cao-meta-google-tiktok-trong-tro-ly-ai/#chín-việc-hỏi-được-bằng-tiếng-việt","locale":"vi","type":"post","title":"Chín việc trợ lý AI làm được với số liệu quảng cáo Meta, Google và TikTok","headingPath":["Chín việc hỏi được bằng tiếng Việt"],"text":"Một câu hỏi tốt có ba phần: khoảng thời gian, cấp dữ liệu, và việc cần làm với kết quả. Dán nguyên khối này vào trợ lý sau khi đã nối tài khoản là ra bảng đầu tiên:\n\n```text\nTừ 01/09 tới 22/09, ở cấp chiến dịch, trên tất cả tài khoản đã nối:\nchi phí, lượt hiển thị, lượt bấm, chuyển đổi, giá trị chuyển đổi, ROAS.\nXếp theo chi phí giảm dần, đánh dấu chiến dịch có chi phí cao mà không có\nchuyển đổi nào, và nói rõ số của nền tảng nào lấy theo cửa sổ ghi nhận nào.\n```\n\n> Related: [Tên chiến dịch ghi 22, target ROAS thật là 0,23: hỏi số liệu quảng cáo ngay trong Claude](https://hecigo.com/blog/ten-chien-dich-ghi-22-hoi-so-lieu-quang-cao-ngay-trong-claude/): Nối Google Ads, Meta Ads, TikTok Ads vào Claude hoặc ChatGPT để hỏi ROAS, target giá thầu, search terms và Performance Max. Chỉ đọc, dùng thử được...","entities":["org:hecigo"],"updated":"2026-09-23T08:40:00.000Z"}
{"id":"post:doc-so-lieu-quang-cao-meta-google-tiktok-trong-tro-ly-ai:vi:ba-chỗ-số-hay-lệch","url":"https://hecigo.com/blog/doc-so-lieu-quang-cao-meta-google-tiktok-trong-tro-ly-ai/#ba-chỗ-số-hay-lệch","locale":"vi","type":"post","title":"Chín việc trợ lý AI làm được với số liệu quảng cáo Meta, Google và TikTok","headingPath":["Ba chỗ số hay lệch"],"text":"Số của trợ lý và số trong Ads Manager lệch nhau là chuyện thường, và thường thì không bên nào sai. Ba chỗ hay gặp:\n\n**Mốc thời gian.** \"7 ngày qua\" trong Ads Manager không tính hôm nay, còn câu hỏi của bạn có thể đã tính. Hỏi kèm ngày cụ thể thì hết lệch.\n\n**Cửa sổ ghi nhận.** Mỗi nền tảng ghi nhận chuyển đổi theo cửa sổ riêng của nó. Cộng thẳng chuyển đổi của nền tảng này với nền tảng kia rồi so với một con số duy nhất trong hệ của bạn là phép so sai ngay từ đầu, kể cả khi mọi số đều đúng.\n\n**Cấp dữ liệu nền tảng cho phép.** Chiến dịch Promote của TikTok, loại quảng bá bài ngay trong app, chỉ có số ở cấp tài khoản. Không tách được theo chiến dịch hay theo quảng cáo, và đó là giới hạn của dữ liệu chứ không phải của câu hỏi.","entities":[],"updated":"2026-09-23T08:40:00.000Z"}
{"id":"post:doc-so-lieu-quang-cao-meta-google-tiktok-trong-tro-ly-ai:vi:chờ-bao-lâu-và-chờ-ở-đâu","url":"https://hecigo.com/blog/doc-so-lieu-quang-cao-meta-google-tiktok-trong-tro-ly-ai/#chờ-bao-lâu-và-chờ-ở-đâu","locale":"vi","type":"post","title":"Chín việc trợ lý AI làm được với số liệu quảng cáo Meta, Google và TikTok","headingPath":["Chờ bao lâu, và chờ ở đâu"],"text":"Số đo trên chính tài khoản của hecigo ngày 23/09/2026, lấy từ log của máy chủ:\n\n| Đoạn | Thời gian |\n|---|---|\n| Phần của hecigo trước khi gọi nền tảng | 32 ms |\n| Chờ API của nền tảng | 612 tới 2.486 ms |\n| Tổng một câu hỏi | 0,6 tới 2,6 giây |\n\nNghĩa là gần như toàn bộ thời gian chờ nằm ở phía nền tảng quảng cáo, không nằm ở lớp trung gian. Con số này đo trên tài khoản có ba nền tảng đã nối và vài tài khoản quảng cáo; tài khoản nhiều hơn thì phần chờ nền tảng dài hơn, còn phần 32 ms kia gần như không đổi vì nó chỉ gồm kiểm tra đăng nhập, đọc workspace và mở khoá thông tin kết nối.","entities":["org:hecigo"],"updated":"2026-09-23T08:40:00.000Z"}
{"id":"post:doc-so-lieu-quang-cao-meta-google-tiktok-trong-tro-ly-ai:vi:hecigo-giữ-lại-những-gì","url":"https://hecigo.com/blog/doc-so-lieu-quang-cao-meta-google-tiktok-trong-tro-ly-ai/#hecigo-giữ-lại-những-gì","locale":"vi","type":"post","title":"Chín việc trợ lý AI làm được với số liệu quảng cáo Meta, Google và TikTok","headingPath":["hecigo giữ lại những gì"],"text":"Số liệu hiệu quả không được chép vào kho riêng. Nó được lấy từ nền tảng đúng lúc bạn hỏi và đi thẳng vào câu trả lời.\n\nThứ được lưu là thông tin kết nối đã niêm phong bằng AES-256-GCM, tên workspace, email liên hệ, và danh sách tài khoản quảng cáo mà mỗi kết nối truy cập được. Danh sách đó làm mới mỗi ngày và xoá khi bạn ngắt nền tảng. Trong portal bạn chọn tài khoản nào trợ lý được đọc, tối đa 10 mỗi nền tảng ở giai đoạn thử nghiệm, và thấy từng phiên kết nối của từng trợ lý kèm ngày dùng lần cuối. Kết nối trợ lý không dùng quá 90 ngày được thu hồi tự động.\n\nCó thêm một lịch báo cáo tuần gửi qua email, mặc định tắt, chỉ gửi tới email Google đã xác minh của người bật, và số liệu trong thư đọc mới mỗi lần chạy chứ không giữ lại sau khi gửi.","entities":[],"updated":"2026-09-23T08:40:00.000Z"}
{"id":"post:doc-so-lieu-quang-cao-meta-google-tiktok-trong-tro-ly-ai:vi:chỗ-chưa-làm-được","url":"https://hecigo.com/blog/doc-so-lieu-quang-cao-meta-google-tiktok-trong-tro-ly-ai/#chỗ-chưa-làm-được","locale":"vi","type":"post","title":"Chín việc trợ lý AI làm được với số liệu quảng cáo Meta, Google và TikTok","headingPath":["Chỗ chưa làm được"],"text":"Sửa chiến dịch chưa có. Chế độ sửa đang được thiết kế theo hai bước, trợ lý lập kế hoạch kèm bản so sánh rồi một người duyệt đúng kế hoạch đó, và mọi thứ tạo ra đều ở trạng thái tạm dừng. Cho tới khi nó chạy thật thì đây là thiết kế tham chiếu, không phải năng lực đã có.\n\nNhóm tìm kiếm của Performance Max chưa được thử trên một tài khoản thật đang chạy loại chiến dịch đó, nên phần này mới chỉ đúng theo tài liệu của Google chứ chưa có số đo của hecigo. Tầng truy cập Marketing API của Meta hiện ở mức giới hạn, đủ cho lưu lượng hiện tại và là trần tiếp theo khi số tài khoản tăng.\n\nCòn một câu hecigo cũng đang muốn biết câu trả lời: khi trợ lý đọc được cả target lẫn kết quả thật của mọi chiến dịch trong vài giây, buổi họp báo cáo hằng tuần còn lại phần nào cần tới con người?\n\n> **Muốn thử trên tài khoản của bạn?** Vào [ads.hecigo.com](https://ads.hecigo.com/), đăng nhập bằng Google và bấm Nối ngay ở nền tảng bạn đang chạy quảng cáo. Có [trang hướng dẫn](https://ads.hecigo.com/guide) đi từ lúc thêm connector tới câu hỏi đầu tiên. Kẹt ở bước nào thì [nhắn hecigo](https://hecigo.com/#contact) kèm ảnh chụp bước đó.\n\n> Related: [Trợ lý báo một con số, Ads Manager báo con số khác: đọc trang hướng dẫn Ads Insights trước khi kết luận](https://hecigo.com/blog/trang-huong-dan-ads-insights-hoi-dung-cach-doi-chieu-dung-so/): Trang hướng dẫn Ads Insights: thêm connector trong 5 phút, 10 câu hỏi theo việc cho marketer, 5 luật đối chiếu với Ads Manager và cách xử lý lỗi...","entities":["org:hecigo","product:ads-insights"],"updated":"2026-09-23T08:40:00.000Z"}
{"id":"post:doc-so-lieu-quang-cao-meta-google-tiktok-trong-tro-ly-ai:vi:nguồn-tham-khảo","url":"https://hecigo.com/blog/doc-so-lieu-quang-cao-meta-google-tiktok-trong-tro-ly-ai/#nguồn-tham-khảo","locale":"vi","type":"post","title":"Chín việc trợ lý AI làm được với số liệu quảng cáo Meta, Google và TikTok","headingPath":["Nguồn tham khảo"],"text":"- [OAuth 2.0 Internals for Google Ads API](https://developers.google.com/google-ads/api/docs/oauth/internals) - Google for Developers\n- [Authorization, Marketing API](https://developers.facebook.com/docs/marketing-api/overview/authorization) - Meta for Developers","entities":[],"updated":"2026-09-23T08:40:00.000Z"}
{"id":"post:trang-huong-dan-ads-insights-hoi-dung-cach-doi-chieu-dung-so:vi:intro","url":"https://hecigo.com/blog/trang-huong-dan-ads-insights-hoi-dung-cach-doi-chieu-dung-so/","locale":"vi","type":"post","title":"Trợ lý báo một con số, Ads Manager báo con số khác: đọc trang hướng dẫn Ads Insights trước khi kết luận","headingPath":[],"text":"Bạn hỏi trợ lý \"7 ngày qua chi bao nhiêu\", nhận một con số. Mở Ads Manager, chọn \"7 ngày qua\", thấy một con số khác. Phản xạ đầu tiên là một trong hai bên sai.\n\nThường thì không bên nào sai. Mốc \"7 ngày qua\" trong Ads Manager không tính hôm nay, còn câu hỏi của bạn có thể đã tính. Cột Clicks của Meta gồm cả lượt bấm ảnh và bấm \"xem thêm\", còn thứ bạn muốn so là link click. Hai con số đo hai thứ khác nhau, và cả hai đều đúng.\n\nChuyện này nằm trong một mục của [trang hướng dẫn Ads Insights](https://ads.hecigo.com/guide). Bài này đi qua trang đó theo góc của người chạy quảng cáo và người chủ doanh nghiệp: phần nào đáng đọc kỹ, và vì sao.","entities":["org:hecigo","product:ads-insights"],"updated":"2026-09-15T00:45:00.000Z"}
{"id":"post:trang-huong-dan-ads-insights-hoi-dung-cach-doi-chieu-dung-so:vi:trang-hướng-dẫn-có-gì","url":"https://hecigo.com/blog/trang-huong-dan-ads-insights-hoi-dung-cach-doi-chieu-dung-so/#trang-hướng-dẫn-có-gì","locale":"vi","type":"post","title":"Trợ lý báo một con số, Ads Manager báo con số khác: đọc trang hướng dẫn Ads Insights trước khi kết luận","headingPath":["Trang hướng dẫn có gì"],"text":"[Ads Insights](https://ads.hecigo.com/) là connector đọc số liệu Google Ads, Meta Ads và TikTok Ads ngay trong trợ lý AI; trang giới thiệu có câu hỏi mẫu và cách hecigo giữ an toàn dữ liệu. Trang hướng dẫn có tám phần, đi đúng thứ tự bạn sẽ làm: chuẩn bị, thêm connector, đăng nhập, nối tài khoản quảng cáo, kiểm tra kết nối, câu hỏi theo việc, đối chiếu số liệu, xử lý lỗi. Có tiếng Việt và tiếng Anh, đọc tốt trên điện thoại.\n\n![Đầu trang hướng dẫn Ads Insights: từ lúc thêm connector tới câu trả lời đầu tiên](https://hecigo.com/images/blog/trang-huong-dan-ads-insights-hoi-dung-cach-doi-chieu-dung-so/1-trang-huong-dan.webp)\n\nBạn cần ba thứ: một trợ lý hỗ trợ MCP như Claude, ChatGPT hay Cursor, một tài khoản Google, và quyền xem trên tài khoản quảng cáo. Quyền chỉ đọc là đủ, và nên dùng đúng quyền đó.","entities":["org:hecigo","product:ads-insights"],"updated":"2026-09-15T00:45:00.000Z"}
{"id":"post:trang-huong-dan-ads-insights-hoi-dung-cach-doi-chieu-dung-so:vi:thêm-connector-một-địa-chỉ-cho-mọi-trợ-lý","url":"https://hecigo.com/blog/trang-huong-dan-ads-insights-hoi-dung-cach-doi-chieu-dung-so/#thêm-connector-một-địa-chỉ-cho-mọi-trợ-lý","locale":"vi","type":"post","title":"Trợ lý báo một con số, Ads Manager báo con số khác: đọc trang hướng dẫn Ads Insights trước khi kết luận","headingPath":["Thêm connector: một địa chỉ cho mọi trợ lý"],"text":"Mọi trợ lý dùng chung địa chỉ `https://ads.hecigo.com/mcp`. Cách nhanh nhất là bấm nút mở nhanh: địa chỉ được chép sẵn, Cursor và VS Code tự điền, Claude và ChatGPT mở đúng trang cài đặt connector để bạn dán vào.\n\n![Mục thêm connector: địa chỉ, nút mở nhanh, và từng bước riêng cho Claude, ChatGPT, Cursor, VS Code, Claude Code](https://hecigo.com/images/blog/trang-huong-dan-ads-insights-hoi-dung-cach-doi-chieu-dung-so/2-them-connector.webp)\n\nBên dưới là từng bước cho sáu loại trợ lý, mỗi loại một tab. Hai ghi chú đáng đọc trước khi làm: gói Free của Claude thêm được một custom connector, và ChatGPT cần bật Developer mode, tính năng không có ở mọi gói.","entities":["org:hecigo","product:ads-insights"],"updated":"2026-09-15T00:45:00.000Z"}
{"id":"post:trang-huong-dan-ads-insights-hoi-dung-cach-doi-chieu-dung-so:vi:đăng-nhập-và-nối-tài-khoản-quảng-cáo","url":"https://hecigo.com/blog/trang-huong-dan-ads-insights-hoi-dung-cach-doi-chieu-dung-so/#đăng-nhập-và-nối-tài-khoản-quảng-cáo","locale":"vi","type":"post","title":"Trợ lý báo một con số, Ads Manager báo con số khác: đọc trang hướng dẫn Ads Insights trước khi kết luận","headingPath":["Đăng nhập và nối tài khoản quảng cáo"],"text":"Trợ lý mở trang của hecigo. Bạn đăng nhập bằng Google, lần đầu thì một workspace chỉ đọc được tạo ngay.\n\n![Trang cho phép trợ lý đọc số liệu quảng cáo, đăng nhập bằng Google](https://hecigo.com/images/blog/trang-huong-dan-ads-insights-hoi-dung-cach-doi-chieu-dung-so/3-dang-nhap-google.webp)\n\nĐây là chỗ nhiều người dừng lại quá sớm: **connector đã thêm xong không có nghĩa là trợ lý đọc được số.** Trợ lý chỉ đọc được nền tảng đã nối vào workspace. Workspace chưa nối gì thì trang hiện đúng một nút, Nối tài khoản quảng cáo, và trang chọn nền tảng mở ở tab mới.\n\nNối xong, portal cho bạn thấy nền tảng nào đang được đọc, trợ lý nào đang kết nối, và nút ngắt từng cái.\n\n![Portal của một workspace mẫu: Google Ads đã nối, Claude đang kết nối, nút ngắt từng nền tảng và từng trợ lý](https://hecigo.com/images/blog/trang-huong-dan-ads-insights-hoi-dung-cach-doi-chieu-dung-so/4-portal-da-noi.webp)\n\nHôm nay cả ba nền tảng đều tự nối được. TikTok duyệt ứng dụng ngày 15/09/2026, Meta duyệt quyền đọc quảng cáo ngày 22/09/2026, mỗi nền tảng cấp quyền trên màn hình của chính nó.\n\n> Related: [Bảy chỗ hỏng không kêu khi tự dựng lớp gắn tham số cho link](https://hecigo.com/blog/bay-cho-hong-khong-keu-khi-tu-dung-lop-gan-tham-so-cho-link/): Cùng một URL, cùng một lần purge: máy này nhận bản mới, máy kia nhận bản cũ 18 phút tuổi. Bảy chỗ hỏng trong một lớp rút gọn link, không cái nào...","entities":["org:hecigo","product:ads-insights"],"updated":"2026-09-15T00:45:00.000Z"}
{"id":"post:trang-huong-dan-ads-insights-hoi-dung-cach-doi-chieu-dung-so:vi:một-câu-hỏi-tốt-có-ba-phần","url":"https://hecigo.com/blog/trang-huong-dan-ads-insights-hoi-dung-cach-doi-chieu-dung-so/#một-câu-hỏi-tốt-có-ba-phần","locale":"vi","type":"post","title":"Trợ lý báo một con số, Ads Manager báo con số khác: đọc trang hướng dẫn Ads Insights trước khi kết luận","headingPath":["Một câu hỏi tốt có ba phần"],"text":"Mục \"Câu hỏi theo việc\" có mười câu, mỗi câu kèm tên công cụ trợ lý sẽ gọi. Đọc lướt thì giống danh sách để chép. Đọc kỹ thì thấy chúng cùng một cấu trúc:\n\n- **Khoảng ngày rõ ràng**, và nói có tính hôm nay hay không: \"7 ngày qua, bỏ hôm nay\".\n- **Phạm vi**: nền tảng nào, cấp nào (tài khoản, chiến dịch, nhóm, quảng cáo).\n- **Quyết định bạn cần ra**: \"chiến dịch nào nên tăng ngân sách\", \"term nào nên phủ định\". Câu hỏi có quyết định thì câu trả lời có đề xuất, không chỉ có bảng số.\n\n![Mười câu hỏi theo việc trên trang hướng dẫn, mỗi câu ghi công cụ trợ lý sẽ dùng](https://hecigo.com/images/blog/trang-huong-dan-ads-insights-hoi-dung-cach-doi-chieu-dung-so/5-cau-hoi-theo-viec.webp)\n\nBa câu đáng thử đầu tiên, vì chúng trả lời thứ không màn hình quản lý nào gom sẵn:\n\n1. **ROAS thực tế so với target:** đặt target ROAS hoặc target CPA đang cài cạnh kết quả 30 ngày, chỉ ra chiến dịch lệch quá 20%.\n2. **Soát chuyển đổi đang được đếm:** hành động nào đang tính vào cột conversions, cửa sổ ghi nhận bao lâu, có hành động kiểu xem trang đang làm phồng số không.\n3. **Chia lại ngân sách:** dựa trên ROAS, ngân sách ngày và impression share mất do ngân sách, đề xuất con số cho từng chiến dịch.\n\nBạn có đang hỏi trợ lý những câu mà một chuyên viên giỏi sẽ phải hỏi lại \"khoảng ngày nào, so với cái gì\" không?","entities":["org:hecigo","product:ads-insights"],"updated":"2026-09-15T00:45:00.000Z"}
{"id":"post:trang-huong-dan-ads-insights-hoi-dung-cach-doi-chieu-dung-so:vi:năm-luật-đối-chiếu-số-liệu","url":"https://hecigo.com/blog/trang-huong-dan-ads-insights-hoi-dung-cach-doi-chieu-dung-so/#năm-luật-đối-chiếu-số-liệu","locale":"vi","type":"post","title":"Trợ lý báo một con số, Ads Manager báo con số khác: đọc trang hướng dẫn Ads Insights trước khi kết luận","headingPath":["Năm luật đối chiếu số liệu"],"text":"Đây là mục ngắn nhất và, với người phải báo cáo lên trên, có ích nhất:\n\n1. **Chọn cùng khoảng ngày và bỏ hôm nay.** Số của hôm nay vẫn đang chạy.\n2. **Ngày tính theo múi giờ của tài khoản quảng cáo**, không theo múi giờ máy bạn.\n3. **Clicks của Meta khác link click.** Muốn so lượt vào trang thì hỏi theo link click.\n4. **Không cộng thẳng chuyển đổi giữa các nền tảng.** Mỗi nền tảng ghi nhận theo cửa sổ riêng.\n5. **ROAS là số của chính nền tảng.** Google tính theo các hành động chuyển đổi chính; Meta chỉ tính giá trị của đúng hành động đang được đếm.\n\nLuật 4 và 5 là lý do một con số \"tổng ROAS ba nền tảng\" nên được đọc cẩn thận: nó cộng những thứ được đo bằng các thước khác nhau.","entities":["product:ads-insights"],"updated":"2026-09-15T00:45:00.000Z"}
{"id":"post:trang-huong-dan-ads-insights-hoi-dung-cach-doi-chieu-dung-so:vi:khi-có-gì-đó-không-chạy","url":"https://hecigo.com/blog/trang-huong-dan-ads-insights-hoi-dung-cach-doi-chieu-dung-so/#khi-có-gì-đó-không-chạy","locale":"vi","type":"post","title":"Trợ lý báo một con số, Ads Manager báo con số khác: đọc trang hướng dẫn Ads Insights trước khi kết luận","headingPath":["Khi có gì đó không chạy"],"text":"Mục cuối liệt kê mười tình huống, mỗi tình huống kèm cách làm cụ thể.\n\n![Mục xử lý lỗi thường gặp: Google báo chưa xác minh, xác minh 2 bước, trợ lý chưa thấy công cụ mới, liên kết hết hạn](https://hecigo.com/images/blog/trang-huong-dan-ads-insights-hoi-dung-cach-doi-chieu-dung-so/6-xu-ly-loi.webp)\n\nBa tình huống hay gặp nhất tuần đầu:\n\n- **Google báo ứng dụng chưa được xác minh:** mục này đã bỏ khỏi trang hướng dẫn. Google xác minh ứng dụng ngày 15/09/2026, nên màn hình cấp quyền không còn cảnh báo.\n- **Trợ lý không thấy công cụ mới:** trợ lý giữ danh sách công cụ từ lúc mở cuộc trò chuyện. Mở cuộc trò chuyện mới; vẫn chưa thấy thì tắt rồi bật lại connector.\n- **Liên kết nối đã hết hạn:** liên kết trợ lý đưa chỉ dùng được 15 phút. Hỏi lại để lấy liên kết mới, hoặc bấm Nối ngay trong portal.\n\nNếu hai người trong cùng một đội hỏi cùng một câu về ROAS và nhận hai con số khác nhau, lỗi nằm ở câu hỏi, ở cách nền tảng đo, hay ở chỗ đội chưa thống nhất một định nghĩa?\n\n> **Muốn thử trên tài khoản của bạn?** Mở [trang hướng dẫn](https://ads.hecigo.com/guide), làm theo 5 phút đầu và hỏi câu đầu tiên. Kẹt ở bước nào thì [nhắn hecigo](https://hecigo.com/#contact) kèm ảnh chụp bước đó, hoặc theo dõi [Zalo OA](https://zalo.me/3108963776852260798) để nhận bản cập nhật.\n\n> Related: [Kiểm tra độ thân thiện của website với AI Agent: Cơ chế hoạt động của Vercel Is Agentic](https://hecigo.com/blog/kiem-tra-do-than-thien-cua-website-voi-ai-agent-co-che-hoat-dong-cua-vercel-is-a/): Is Agentic chấm hecigo.com 73/100. Bốn vòng vá đưa nó lên 100. Lỗi đắt nhất là một phép kiểm mà chính bài này từng lấy làm ví dụ về việc làm đúng.","entities":["org:hecigo","product:ads-insights"],"updated":"2026-09-15T00:45:00.000Z"}
{"id":"post:ten-chien-dich-ghi-22-hoi-so-lieu-quang-cao-ngay-trong-claude:vi:intro","url":"https://hecigo.com/blog/ten-chien-dich-ghi-22-hoi-so-lieu-quang-cao-ngay-trong-claude/","locale":"vi","type":"post","title":"Tên chiến dịch ghi 22, target ROAS thật là 0,23: hỏi số liệu quảng cáo ngay trong Claude","headingPath":[],"text":"Một marketer dùng thử bản đầu của [Ads Insights](https://ads.hecigo.com/) gửi lại nhận xét rất thẳng: connector chỉ trả về bảy chỉ số, không có giá trị chuyển đổi, không có ROAS, và không trả lời được câu đơn giản nhất là \"chiến dịch này đang đặt target ROAS bao nhiêu\". Chị ấy nói thêm một ý đáng giá hơn cả: tên chiến dịch ghi số 22, nhưng tên thì không đáng tin.\n\nChị ấy đúng. Khi bản mới đọc được cài đặt thật của chính chiến dịch đó, con số trong Google Ads là **target ROAS 0,23x**, tức 23%, còn ROAS thực tế 30 ngày là 0,26x. Tên chiến dịch là thứ ai đó gõ một lần lúc tạo. Target thì đã được sửa sau đó, và không ai sửa tên theo.\n\nDưới đây là bản Ads Insights làm lại sau nhận xét đó: nó trả lời được gì, và chỗ nào chưa làm được.","entities":["org:hecigo","product:ads-insights"],"updated":"2026-09-13T16:22:00.000Z"}
{"id":"post:ten-chien-dich-ghi-22-hoi-so-lieu-quang-cao-ngay-trong-claude:vi:ads-insights-là-gì","url":"https://hecigo.com/blog/ten-chien-dich-ghi-22-hoi-so-lieu-quang-cao-ngay-trong-claude/#ads-insights-là-gì","locale":"vi","type":"post","title":"Tên chiến dịch ghi 22, target ROAS thật là 0,23: hỏi số liệu quảng cáo ngay trong Claude","headingPath":["Ads Insights là gì"],"text":"Ads Insights là connector cho trợ lý AI. Thêm một địa chỉ vào Claude, ChatGPT, Cursor hoặc VS Code, nối tài khoản quảng cáo, rồi hỏi bằng tiếng Việt như hỏi một chuyên viên. Trợ lý lấy số thẳng từ Google Ads, Meta Ads và TikTok Ads rồi mới trả lời. Giới thiệu đầy đủ, câu hỏi mẫu và cách giữ an toàn dữ liệu nằm ở [trang Ads Insights](https://ads.hecigo.com/).\n\n![Minh hoạ một câu hỏi và câu trả lời: trợ lý gọi công cụ ads_insights rồi trả bảng so sánh chi phí mỗi link click, số minh hoạ](https://hecigo.com/images/blog/ten-chien-dich-ghi-22-hoi-so-lieu-quang-cao-ngay-trong-claude/6-hoi-dap-mau.webp)\n\nHai điều nên biết:\n\n- **Chỉ đọc.** Không có đường nào để tạo, tạm dừng, sửa hay nạp tiền cho quảng cáo. Bạn cấp quyền trên màn hình của chính nền tảng, và thu hồi lúc nào cũng được.\n- **Số lấy lúc bạn hỏi.** hecigo không chép số liệu hiệu quả của bạn về một kho riêng.","entities":["org:hecigo","product:ads-insights"],"updated":"2026-09-13T16:22:00.000Z"}
{"id":"post:ten-chien-dich-ghi-22-hoi-so-lieu-quang-cao-ngay-trong-claude:vi:sáu-việc-hỏi-được-ngay-hôm-nay","url":"https://hecigo.com/blog/ten-chien-dich-ghi-22-hoi-so-lieu-quang-cao-ngay-trong-claude/#sáu-việc-hỏi-được-ngay-hôm-nay","locale":"vi","type":"post","title":"Tên chiến dịch ghi 22, target ROAS thật là 0,23: hỏi số liệu quảng cáo ngay trong Claude","headingPath":["Sáu việc hỏi được ngay hôm nay"],"text":"Mỗi việc dưới đây là một câu hỏi bạn có thể chép nguyên vào trợ lý.\n\n**1. Báo cáo tuần cho chủ doanh nghiệp.** \"Tóm tắt 7 ngày qua, bỏ hôm nay, so với 7 ngày trước: tổng chi, giá trị chuyển đổi, ROAS và chi phí mỗi chuyển đổi theo từng nền tảng. Nêu 3 chiến dịch kéo kết quả lên và 3 chiến dịch kéo xuống.\" Trước đây là ba trang quản lý và một bảng tính ghép tay.\n\n**2. ROAS thực tế so với target.** \"Đặt target ROAS hoặc target CPA đang cài của từng chiến dịch Google cạnh ROAS thực tế 30 ngày. Chiến dịch nào lệch quá 20%? Đừng đọc target từ tên.\" Chiến dịch dùng chiến lược giá thầu dùng chung (portfolio) thì trợ lý lấy target của portfolio, vì đó mới là số đang có hiệu lực.\n\n**3. Soát xem chuyển đổi nào đang được đếm.** \"Liệt kê hành động chuyển đổi đang tính vào cột conversions và đang dùng để tối ưu giá thầu, kèm cửa sổ ghi nhận. Có hành động nào như xem trang hay mở app lần đầu đang làm phồng số không?\" Lượt xem trang được đếm là chuyển đổi chính thì chi phí mỗi chuyển đổi nhìn rất đẹp, và thuật toán giá thầu học theo con số đẹp đó.\n\n**4. Cắt tiền phí vào search term.** \"30 ngày qua, search term nào tốn tiền mà không có chuyển đổi? Gom theo chủ đề và đề xuất danh sách từ khoá phủ định.\" Performance Max không có danh sách search term, nên trợ lý đưa nhóm tìm kiếm.\n\n**5. Soát Performance Max.** \"Với từng asset group: ad strength, ROAS 30 ngày, asset nào Google đánh giá LOW nên thay, và tín hiệu tệp có khớp sản phẩm đang bán không?\" Báo cáo chiến dịch gộp tất cả vào một con số, còn chỗ sửa được là asset và tín hiệu.\n\n**6. Vì sao chi tiêu tụt.** \"Hôm qua chi tiêu thấp hơn hẳn. Kiểm tra trạng thái tài khoản, trần chi tiêu, quảng cáo bị từ chối, ngân sách ngày, rồi nói nguyên nhân chính trước.\" Trần chi tiêu đã chạm là lỗi im lặng nhất: không báo đỏ, tiền chỉ ngừng chạy.","entities":[],"updated":"2026-09-13T16:22:00.000Z"}
{"id":"post:ten-chien-dich-ghi-22-hoi-so-lieu-quang-cao-ngay-trong-claude:vi:sáu-việc-hỏi-được-ngay-hôm-nay~2","url":"https://hecigo.com/blog/ten-chien-dich-ghi-22-hoi-so-lieu-quang-cao-ngay-trong-claude/#sáu-việc-hỏi-được-ngay-hôm-nay","locale":"vi","type":"post","title":"Tên chiến dịch ghi 22, target ROAS thật là 0,23: hỏi số liệu quảng cáo ngay trong Claude","headingPath":["Sáu việc hỏi được ngay hôm nay"],"text":"Trợ lý còn đọc được nội dung và link đích của từng quảng cáo, nên bắt được quảng cáo trỏ nhầm sang trang Facebook thay vì website.\n\n> Related: [Bảy chỗ hỏng không kêu khi tự dựng lớp gắn tham số cho link](https://hecigo.com/blog/bay-cho-hong-khong-keu-khi-tu-dung-lop-gan-tham-so-cho-link/): Cùng một URL, cùng một lần purge: máy này nhận bản mới, máy kia nhận bản cũ 18 phút tuổi. Bảy chỗ hỏng trong một lớp rút gọn link, không cái nào...","entities":["org:hecigo"],"updated":"2026-09-13T16:22:00.000Z"}
{"id":"post:ten-chien-dich-ghi-22-hoi-so-lieu-quang-cao-ngay-trong-claude:vi:vì-sao-trợ-lý-trả-lời-mà-không-bịa-số","url":"https://hecigo.com/blog/ten-chien-dich-ghi-22-hoi-so-lieu-quang-cao-ngay-trong-claude/#vì-sao-trợ-lý-trả-lời-mà-không-bịa-số","locale":"vi","type":"post","title":"Tên chiến dịch ghi 22, target ROAS thật là 0,23: hỏi số liệu quảng cáo ngay trong Claude","headingPath":["Vì sao trợ lý trả lời mà không bịa số"],"text":"Nỗi lo lớn nhất với trợ lý AI là nó bịa số. Ở đây trợ lý không phải nhớ hay đoán số nào:\n\n- **Số lấy thẳng từ nền tảng.** Nền tảng không báo giá trị chuyển đổi thì ô ROAS để trống, không ghi 0, vì \"chưa biết\" khác \"bằng không\".\n- **Không đọc được thì nói thẳng.** Phần cài đặt nào Google không trả về, câu trả lời ghi chú phần đó thiếu, phần còn lại vẫn đủ.\n- **Phần phân tích là của trợ lý.** Đề xuất ngân sách hay từ khoá phủ định là suy luận trên số thật; quyết định vẫn là của bạn.\n\nVề tốc độ, một câu hỏi báo cáo cấp chiến dịch đo được **1,38 giây**: **1,32 giây** chờ Google Ads trả số, phần xử lý của hecigo **11 mili giây**. Thời gian còn lại bạn thấy là trợ lý đọc kết quả và viết câu trả lời.","entities":["org:hecigo"],"updated":"2026-09-13T16:22:00.000Z"}
{"id":"post:ten-chien-dich-ghi-22-hoi-so-lieu-quang-cao-ngay-trong-claude:vi:bắt-đầu-trong-khoảng-5-phút","url":"https://hecigo.com/blog/ten-chien-dich-ghi-22-hoi-so-lieu-quang-cao-ngay-trong-claude/#bắt-đầu-trong-khoảng-5-phút","locale":"vi","type":"post","title":"Tên chiến dịch ghi 22, target ROAS thật là 0,23: hỏi số liệu quảng cáo ngay trong Claude","headingPath":["Bắt đầu trong khoảng 5 phút"],"text":"**Bước 1.** Vào [ads.hecigo.com](https://ads.hecigo.com/), bấm nút mở nhanh cho trợ lý bạn dùng: địa chỉ `https://ads.hecigo.com/mcp` được chép sẵn và trang thêm connector mở ra.\n\n![Trang chủ Ads Insights với địa chỉ connector và các nút mở nhanh Claude, ChatGPT, Cursor, VS Code](https://hecigo.com/images/blog/ten-chien-dich-ghi-22-hoi-so-lieu-quang-cao-ngay-trong-claude/1-trang-chu-mo-nhanh.webp)\n\n**Bước 2.** Trợ lý mở trang của hecigo: đăng nhập bằng Google. Lần đầu, workspace chỉ đọc được tạo ngay, không cần mã mời.\n\n![Trang cho phép trợ lý đọc số liệu quảng cáo, đăng nhập bằng Google](https://hecigo.com/images/blog/ten-chien-dich-ghi-22-hoi-so-lieu-quang-cao-ngay-trong-claude/2-dang-nhap-google.webp)\n\n**Bước 3.** Bấm **Nối tài khoản quảng cáo**, chọn Google Ads, TikTok Ads hoặc Meta Ads, rồi cấp quyền trên màn hình của chính nền tảng đó. Google còn báo ứng dụng chưa xác minh: bấm Nâng cao, rồi Truy cập hecigo Ads Insights.\n\n![Trang chọn nền tảng quảng cáo: Meta Ads, TikTok Ads và Google Ads đều có nút Nối ngay, mỗi nền tảng kèm một dòng ghi chú điều kiện](https://hecigo.com/images/blog/ten-chien-dich-ghi-22-hoi-so-lieu-quang-cao-ngay-trong-claude/3-chon-nen-tang.webp)\n\n**Bước 4.** Quay lại trợ lý và hỏi: \"Kiểm tra kết nối Ads Insights giúp tôi.\" Portal cho thấy nền tảng và trợ lý nào đang kết nối, kèm nút ngắt.\n\n![Portal của một workspace mẫu: Google Ads đã nối, Claude đang kết nối, nút ngắt từng nền tảng và từng trợ lý](https://hecigo.com/images/blog/ten-chien-dich-ghi-22-hoi-so-lieu-quang-cao-ngay-trong-claude/5-portal-da-noi.webp)\n\nTừng bước cho mỗi trợ lý và 10 câu hỏi mẫu nằm ở [trang hướng dẫn](https://ads.hecigo.com/guide).","entities":["org:hecigo","product:ads-insights"],"updated":"2026-09-13T16:22:00.000Z"}
{"id":"post:ten-chien-dich-ghi-22-hoi-so-lieu-quang-cao-ngay-trong-claude:vi:chỗ-chưa-làm-được","url":"https://hecigo.com/blog/ten-chien-dich-ghi-22-hoi-so-lieu-quang-cao-ngay-trong-claude/#chỗ-chưa-làm-được","locale":"vi","type":"post","title":"Tên chiến dịch ghi 22, target ROAS thật là 0,23: hỏi số liệu quảng cáo ngay trong Claude","headingPath":["Chỗ chưa làm được"],"text":"Trạng thái ngày 23/09/2026, nói thẳng:\n\n- **Google Ads** tự nối được. Google đã xác minh ứng dụng ngày 15/09/2026, màn hình cấp quyền không còn cảnh báo.\n- **TikTok Ads** tự nối được, TikTok đã duyệt ứng dụng. Chiến dịch Promote (quảng bá bài ngay trong app TikTok) chỉ có số ở cấp tài khoản, không tách được theo chiến dịch hay quảng cáo.\n- **Meta Ads** tự nối được từ 23/09/2026, sau khi Meta duyệt quyền `ads_read` ngày 22/09. Tài khoản Facebook đang đăng nhập phải có quyền trên tài khoản quảng cáo đó.\n- **Nhóm tìm kiếm của Performance Max** chưa được thử trên tài khoản thật có chiến dịch loại này.\n\nNếu trợ lý đọc được cả target lẫn kết quả thực tế của mọi chiến dịch, câu hỏi còn lại là: bao nhiêu phần trong một buổi họp báo cáo hằng tuần vẫn cần tới con người?\n\n> **Muốn thử trên tài khoản của bạn?** Vào [ads.hecigo.com](https://ads.hecigo.com/), đăng nhập bằng Google và hỏi câu đầu tiên. Facebook báo lỗi khi nối Meta Ads thì [nhắn hecigo](https://hecigo.com/#contact), hoặc theo dõi [Zalo OA](https://zalo.me/3108963776852260798).\n\n> Related: [Kiểm tra độ thân thiện của website với AI Agent: Cơ chế hoạt động của Vercel Is Agentic](https://hecigo.com/blog/kiem-tra-do-than-thien-cua-website-voi-ai-agent-co-che-hoat-dong-cua-vercel-is-a/): Is Agentic chấm hecigo.com 73/100. Bốn vòng vá đưa nó lên 100. Lỗi đắt nhất là một phép kiểm mà chính bài này từng lấy làm ví dụ về việc làm đúng.","entities":["org:hecigo"],"updated":"2026-09-13T16:22:00.000Z"}
{"id":"post:bay-cho-hong-khong-keu-khi-tu-dung-lop-gan-tham-so-cho-link:vi:intro","url":"https://hecigo.com/blog/bay-cho-hong-khong-keu-khi-tu-dung-lop-gan-tham-so-cho-link/","locale":"vi","type":"post","title":"Bảy chỗ hỏng không kêu khi tự dựng lớp gắn tham số cho link","headingPath":[],"text":"Một cái link `/go/` vừa lên production. Từ máy tôi, `curl` trả về mã mới. Cùng lúc, từ trình duyệt mở đúng cái URL đó, mã trả về là bản cũ **18 phút tuổi**. Cùng một đường dẫn, cùng một lần purge, hai kết quả ngược nhau.\n\nKhác biệt duy nhất giữa hai phép đo là điểm biên Cloudflare phục vụ và kiểu nén được yêu cầu: một bên SIN với `gzip`, một bên HKG với `br`.\n\nBài này ghi lại một ngày dựng lớp gắn tham số cho mọi link công bố ra ngoài, và bảy chỗ hỏng tìm thấy trong đó. Điểm chung của cả bảy là thứ làm nó đáng viết ra: **không cái nào trả về lỗi.** Link vẫn chạy, mã trạng thái vẫn 200, người bấm vẫn tới nơi. Thứ duy nhất mất là câu trả lời cho câu hỏi \"link này đem về bao nhiêu\", và nó mất trong im lặng.","entities":[],"updated":"2026-09-11T11:40:00.000Z"}
{"id":"post:bay-cho-hong-khong-keu-khi-tu-dung-lop-gan-tham-so-cho-link:vi:dựng-cái-gì","url":"https://hecigo.com/blog/bay-cho-hong-khong-keu-khi-tu-dung-lop-gan-tham-so-cho-link/#dựng-cái-gì","locale":"vi","type":"post","title":"Bảy chỗ hỏng không kêu khi tự dựng lớp gắn tham số cho link","headingPath":["Dựng cái gì"],"text":"Trước ngày đó, `hecigo.com` không có quy ước gắn tham số nào. Mọi link đã đăng đều không truy lại được: một lượt truy cập từ README trên npm, từ một bài LinkedIn, hay từ chữ ký thư đều rơi vào cùng một dòng không tên trong báo cáo.\n\nCái bất đối xứng đáng nói nằm ở chỗ này: **link đăng hôm nay mà không có tham số thì tối vĩnh viễn.** Không có cách nào gắn ngược. Một README đã publish lên npm thì không gọi về được.\n\nThứ dựng ra gồm hai phần, và phần thứ hai mới là phần có giá:\n\n- Một đường dẫn `/go/<bí danh>` trả 302 tới trang thật kèm tham số. Trên một site Next.js tĩnh sau Cloudflare Workers, nó là một nhánh thêm vào worker đang phục vụ toàn site, không phải một dịch vụ mới.\n- Một **quy ước** đặt tên bí danh, và một hàm thuần dịch bí danh thành cặp đích với tham số.\n\nDịch vụ rút gọn có sẵn thì nhiều, và chúng giải đúng phần dễ. Phần khó không phải chuyển hướng, mà là làm sao để tham số sinh ra **đọc được trong công cụ phân tích**, và làm sao để một người viết bài không phải nhớ bảng mã.\n\nBí danh có ba hoặc bốn đoạn:\n\n```text\n/go/<đích>-<nguồn>-<đặt chỗ>[-<chiến dịch>]\n\n/go/dv-np-readme        README trên npm dẫn sang trang developers\n/go/bl-li-post-lab      bài LinkedIn dẫn về blog, thuộc loạt lab notes\n```\n\nTính được, không phải sinh ra rồi lưu. Đó là điều kiện để một trợ lý viết bài có thể tự dựng link đúng mà không cần gọi API nào.\n\nPhần quyết định của lớp này, tức bảng nở đặt chỗ thành cặp tham số cùng bộ kiểm đi kèm, nay nằm trong [`@hecigolab/utm-alias`](https://www.npmjs.com/package/@hecigolab/utm-alias) (MIT, không phụ thuộc gì). Nó **không** gồm phần chuyển hướng: phần đó vài dòng và nên ở lại phía bạn. Đang ở `0.x` vì bảng đặt chỗ là thứ dễ phải sửa nhất khi gặp một cấu hình chưa thấy.","entities":["org:hecigo"],"updated":"2026-09-11T11:40:00.000Z"}
{"id":"post:bay-cho-hong-khong-keu-khi-tu-dung-lop-gan-tham-so-cho-link:vi:1-để-người-viết-tự-chọn-utm_medium-là-cách-làm-rỗng-báo-cáo-kênh","url":"https://hecigo.com/blog/bay-cho-hong-khong-keu-khi-tu-dung-lop-gan-tham-so-cho-link/#1-để-người-viết-tự-chọn-utm_medium-là-cách-làm-rỗng-báo-cáo-kênh","locale":"vi","type":"post","title":"Bảy chỗ hỏng không kêu khi tự dựng lớp gắn tham số cho link","headingPath":["1. Để người viết tự chọn utm_medium là cách làm rỗng báo cáo kênh"],"text":"Bản thiết kế đầu của tôi cho phép người viết đặt thẳng `utm_medium`, với các giá trị nghe rất hợp lý: `bio`, `post`, `share`, `print`, `doc`.\n\nCả năm đều sai, và chúng sai theo cách không báo lỗi.\n\nGA4 gom phiên vào nhóm kênh mặc định bằng cách khớp mẫu cố định trên `utm_medium`. Tài liệu của Google liệt kê rõ: Organic Social khớp khi medium thuộc tập `('social', 'social-network', 'social-media', 'sm', 'social network', 'social media')`, Organic Video khớp biểu thức `^(.*video.*)$`, Email khớp `email|e-mail|e_mail|e mail`, Referral khớp `('referral', 'app', 'link')`. Và khi không luật nào khớp, tài liệu ghi rằng *\"Unassigned is the value Analytics uses when there are no other channel rules that match the event data\"*.\n\nNghĩa là `utm_medium=bio` không rơi vào Organic Social. Nó rơi vào `(Unassigned)`, cùng một chỗ với mọi thứ không phân loại được. Link vẫn chạy, phiên vẫn được ghi, chỉ có báo cáo kênh là rỗng dần. Và vì không có gì báo lỗi, chuyện này chỉ lộ ra khi ai đó mở báo cáo kênh sau vài tháng.\n\nCách sửa là **không cho chọn medium**. Người viết chọn một **đặt chỗ**, và bảng tra nở nó thành cặp `(medium, content)` hợp lệ:\n\n```js\nexport const PLACE = {\n  bio:    { medium: null,       content: 'bio' },\n  post:   { medium: 'social',   content: 'post' },\n  vid:    { medium: 'video',    content: 'video' },\n  share:  { medium: 'social',   content: 'share' },\n  mail:   { medium: 'email',    content: 'newsletter' },\n  readme: { medium: 'referral', content: 'readme' },\n  doc:    { medium: 'document', content: 'doc' },\n}\n```\n\n`medium: null` ở `bio` là chỗ đáng chú ý: cùng một đặt chỗ nhưng kênh khác nhau tuỳ nguồn. Link trong hồ sơ LinkedIn là Organic Social; link trong README trên npm là Referral, vì npm là một trang web thật dẫn người sang.","entities":[],"updated":"2026-09-11T11:40:00.000Z"}
{"id":"post:bay-cho-hong-khong-keu-khi-tu-dung-lop-gan-tham-so-cho-link:vi:1-để-người-viết-tự-chọn-utm_medium-là-cách-làm-rỗng-báo-cáo-kênh~2","url":"https://hecigo.com/blog/bay-cho-hong-khong-keu-khi-tu-dung-lop-gan-tham-so-cho-link/#1-để-người-viết-tự-chọn-utm_medium-là-cách-làm-rỗng-báo-cáo-kênh","locale":"vi","type":"post","title":"Bảy chỗ hỏng không kêu khi tự dựng lớp gắn tham số cho link","headingPath":["1. Để người viết tự chọn utm_medium là cách làm rỗng báo cáo kênh"],"text":"```js\nconst medium = place.medium ?? (SOCIAL.has(sCode) ? 'social' : 'referral')\n```\n\nCòn `doc` thì tôi cố ý để nó rơi vào `(Unassigned)`. GA4 không có nhóm kênh nào cho tài liệu gửi khách, và gán bừa nó vào `referral` cho báo cáo đẹp lên là nói sai nguồn gốc. **Một ô Unassigned đúng thì đọc được; một ô Referral sai thì không.**\n\nCâu tự kiểm ở đây: trong hệ của bạn, ai là người gõ giá trị `utm_medium` vào link, và người đó có bảng nào để tra không?","entities":[],"updated":"2026-09-11T11:40:00.000Z"}
{"id":"post:bay-cho-hong-khong-keu-khi-tu-dung-lop-gan-tham-so-cho-link:vi:2-gắn-nhãn-cho-link-hỏng-là-bơm-nguồn-giả-vào-chính-báo-cáo-mình-đọc","url":"https://hecigo.com/blog/bay-cho-hong-khong-keu-khi-tu-dung-lop-gan-tham-so-cho-link/#2-gắn-nhãn-cho-link-hỏng-là-bơm-nguồn-giả-vào-chính-báo-cáo-mình-đọc","locale":"vi","type":"post","title":"Bảy chỗ hỏng không kêu khi tự dựng lớp gắn tham số cho link","headingPath":["2. Gắn nhãn cho link hỏng là bơm nguồn giả vào chính báo cáo mình đọc"],"text":"Bí danh sai thì làm gì? Ý đầu tiên của tôi là chuyển về trang chủ kèm `utm_source=badlink`, để còn thấy mà sửa.\n\nÝ đó tự mâu thuẫn với chính mục đích của cả lớp này. `badlink` không phải một nguồn; nó là một sự kiện nội bộ. Đưa nó vào GA4 là tạo ra một dòng nguồn không tồn tại trong thực tế, ngay trong bộ số liệu mà lớp này sinh ra để làm sạch.\n\nCách làm hiện tại: bí danh sai thì chuyển về trang chủ **trần**, không một tham số nào. Còn sự kiện \"có người bấm một bí danh không tồn tại\" được ghi ở nơi khác, một kho đếm riêng không đi qua GA4:\n\n```js\nenv.GO_CLICKS.writeDataPoint({\n  indexes: [khoaLayMau(alias)],\n  blobs: [alias, ket_qua, duong_dan, src, med, camp, content, quoc_gia],\n  doubles: [1],\n})\n```\n\nNguyên tắc rút ra, và nó rộng hơn chuyện link: **sự kiện vận hành và sự kiện kinh doanh không dùng chung một kho.** Trộn vào nhau thì kho nào cũng mất khả năng trả lời câu hỏi của nó.\n\nChỗ này cũng không ghi địa chỉ IP. Trường quốc gia lấy từ dữ liệu mà điểm biên đã suy ra sẵn và đính kèm request. Một dịch vụ chuyển hướng theo mặc định sẽ ghi IP, user agent và referrer; không ghi thì không phát sinh nghĩa vụ xử lý dữ liệu cá nhân, và ở quy mô này gần như không mất gì để đổi lại.\n\n> Related: [Ba thứ hỏng mà không kêu, cả ba đều do chính công cụ vận hành gây ra](https://hecigo.com/blog/ba-thu-hong-ma-khong-keu-do-chinh-cong-cu-van-hanh-gay-ra/): apt báo 0 gói chờ nâng. Gắn Ubuntu Pro xong, cùng máy đó báo 25 bản vá bảo mật. Ghi lại một buổi rà soát ba máy chủ, và ba chỗ hỏng mà không có gì...","entities":["org:hecigo"],"updated":"2026-09-11T11:40:00.000Z"}
{"id":"post:bay-cho-hong-khong-keu-khi-tu-dung-lop-gan-tham-so-cho-link:vi:3-facebook-nuốt-mất-nửa-bộ-tham-số-và-không-báo-gì","url":"https://hecigo.com/blog/bay-cho-hong-khong-keu-khi-tu-dung-lop-gan-tham-so-cho-link/#3-facebook-nuốt-mất-nửa-bộ-tham-số-và-không-báo-gì","locale":"vi","type":"post","title":"Bảy chỗ hỏng không kêu khi tự dựng lớp gắn tham số cho link","headingPath":["3. Facebook nuốt mất nửa bộ tham số, và không báo gì"],"text":"Phần này xảy ra trên một site WordPress khác chúng tôi vận hành, khi gắn tham số vào nút chia sẻ cuối bài.\n\nNút chia sẻ do theme dựng, và href của chúng trông như thế này:\n\n```html\n<a href=\"https://www.facebook.com/sharer/sharer.php?u=https://site.com/bai-viet/\">\n<a href=\"https://twitter.com/intent/tweet?url=https://site.com/bai-viet/&text=Tiêu đề\">\n```\n\nĐể ý giá trị của `u=`: URL nằm đó **không được mã hoá**. Với link trần thì không sao, vì `:` và `/` hợp lệ trong phần query.\n\nNhưng nối thẳng tham số vào thì hỏng:\n\n```text\nsharer.php?u=https://site.com/bai-viet/?utm_source=facebook&utm_medium=social\n```\n\nFacebook đọc chuỗi này thành **hai** tham số của chính `sharer.php`: `u` và `utm_medium`. Cái thứ hai bị bỏ đi vì nó không phải tham số mà `sharer.php` biết. Kết quả: chia sẻ vẫn chạy, link vẫn đúng trang, chỉ mất `utm_medium` và `utm_content`.\n\nĐây là kiểu hỏng tệ nhất trong bảy cái, vì nó **hỏng một nửa**. Nếu rụng hết tham số thì sẽ có người để ý. Rụng một nửa thì báo cáo vẫn có dòng `facebook`, chỉ là medium rỗng, và phiên rơi vào Unassigned.\n\nCách sửa là đừng nối chuỗi, để trình duyệt tự mã hoá:\n\n```js\nconst href = new URL(a.getAttribute('href'))\nconst goc = href.searchParams.get('u')          // đọc ra, đã giải mã\nhref.searchParams.set('u', gan(goc, 'facebook')) // ghi lại, tự mã hoá\na.setAttribute('href', href.toString())\n```\n\nSau khi sửa, href thô chứa `%3F` và `%26` thay cho `?` và `&`, nên `sharer.php` chỉ thấy đúng một tham số `u` của nó.\n\nCái bẫy này còn một mặt nữa đáng nói: khi đọc lại để kiểm, công cụ nào cũng **giải mã URL cho dễ nhìn**, và bản đã giải mã trông y hệt bản hỏng. Muốn biết đúng sai thì phải đọc href thô, hoặc đếm xem tầng ngoài có mấy tham số.","entities":[],"updated":"2026-09-11T11:40:00.000Z"}
{"id":"post:bay-cho-hong-khong-keu-khi-tu-dung-lop-gan-tham-so-cho-link:vi:4-nút-được-bấm-nhiều-nhất-lại-là-nút-không-ai-gắn-tham-số","url":"https://hecigo.com/blog/bay-cho-hong-khong-keu-khi-tu-dung-lop-gan-tham-so-cho-link/#4-nút-được-bấm-nhiều-nhất-lại-là-nút-không-ai-gắn-tham-số","locale":"vi","type":"post","title":"Bảy chỗ hỏng không kêu khi tự dựng lớp gắn tham số cho link","headingPath":["4. Nút được bấm nhiều nhất lại là nút không ai gắn tham số"],"text":"Lần khảo sát đầu, tôi `grep` khối nút chia sẻ theo tên miền: `twitter`, `facebook`, `pinterest`. Ra ba nút, và tôi tưởng thế là hết.\n\nKhối đó có **sáu** nút. Hai cái bị bỏ sót là hai cái duy nhất không có tên miền nào trong href:\n\n```html\n<a class=\"share-button share-envelope\" href=\"mailto:...\">\n<a class=\"share-button share-copy\" href=\"#\" data-copy-link-url=\"https://site.com/bai-viet/\">\n```\n\nNút copy giữ địa chỉ trong thuộc tính `data-`, còn `href` chỉ là `#`. Grep theo tên miền không bao giờ thấy nó.\n\nVà đây mới là phần đáng kể: **ở Việt Nam, copy rồi dán vào Zalo nhiều khả năng là cách chia sẻ phổ biến nhất, chứ không phải bấm nút mạng xã hội.** Mọi lượt truy cập từ đường đó rơi vào `direct` trong GA4, vì ứng dụng nhắn tin không gửi referrer. Nghĩa là cách chia sẻ được dùng nhiều nhất lại lẫn vào đúng cái xô rác lớn nhất của báo cáo.\n\nTôi không có số đo cho tỉ trọng đó, vì trước ngày này không có gì để đo. Đó cũng chính là lý do phải gắn tham số trước rồi mới biết.\n\nChọn giá trị cho nút copy là chỗ phải cẩn thận. Không ai biết người ta sẽ dán link vào đâu, nên gán `utm_medium=social` là đoán. Tôi dùng `utm_source=copy-link` với `utm_medium=share`, chấp nhận rơi vào `(Unassigned)`, đúng lý do đã nói ở mục 1: **thứ biết chắc là \"qua nút copy của chính mình\", và chỉ thế thôi.**\n\nBài học về cách tìm thì rộng hơn bài học về nút: `grep` theo thứ mình **đoán** sẽ có thì chỉ tìm ra thứ mình đã biết. Đọc cả khối markup mới thấy hết.\n\nCùng lượt đó lộ ra nút thư đang trỏ `mailto:` tới một địa chỉ cố định, tức nó mời người đọc gửi thư cho chủ site chứ không phải chia sẻ bài cho bạn họ, dù đứng giữa hàng nút chia sẻ. Một nút \"gửi thư cho chúng tôi\" và một nút \"chia sẻ qua thư\" là hai hành vi khác nhau về người hưởng lợi, và chỉ cái thứ hai sinh ra lượt truy cập để đếm.","entities":[],"updated":"2026-09-11T11:40:00.000Z"}
{"id":"post:bay-cho-hong-khong-keu-khi-tu-dung-lop-gan-tham-so-cho-link:vi:5-lấy-địa-chỉ-trang-hiện-tại-làm-link-chia-sẻ-là-rửa-tham-số-của-người-khác","url":"https://hecigo.com/blog/bay-cho-hong-khong-keu-khi-tu-dung-lop-gan-tham-so-cho-link/#5-lấy-địa-chỉ-trang-hiện-tại-làm-link-chia-sẻ-là-rửa-tham-số-của-người-khác","locale":"vi","type":"post","title":"Bảy chỗ hỏng không kêu khi tự dựng lớp gắn tham số cho link","headingPath":["5. Lấy địa chỉ trang hiện tại làm link chia sẻ là rửa tham số của người khác"],"text":"Nút LinkedIn tôi thêm vào lấy `window.location.href` làm địa chỉ chia sẻ. Nghe hợp lý, và nó sai theo cách tự nhân lên.\n\nNgười đọc tới trang bằng một link đã có tham số, ví dụ `?utm_source=facebook&utm_medium=social&utm_content=post`. Họ bấm chia sẻ sang LinkedIn. Link vừa tạo mang nguyên bộ tham số **của họ**, không phải của lần chia sẻ mới. Người thứ hai bấm vào, và phiên đó báo cáo về đúng cái chiến dịch không hề sinh ra nó.\n\nSai số này không đứng yên: mỗi lần chuyển tiếp lại nhân nó lên, và nguồn gốc thật càng lúc càng xa.\n\nCách sửa là lấy địa chỉ **sạch**, và trang thường đã tự khai nó:\n\n```js\nfunction diaChiSach(o) {\n  const c = document.querySelector('link[rel=\"canonical\"]')\n  if (c && c.href) return c.href\n  const u = new URL(window.location.href)\n  u.search = ''\n  u.hash = ''\n  return u.toString()\n}\n```\n\nThẻ canonical là địa chỉ mà chính trang tự khai là địa chỉ thật của nó, nên nó là nguồn tốt hơn mọi thuộc tính do theme đặt.\n\nPhép kiểm cho chỗ này phải nạp trang **kèm tham số của người khác**, nếu không thì bẫy không hiện ra:\n\n```js\nconst d = new JSDOM(html, {\n  url: 'https://site.com/bai-viet/?utm_source=facebook&utm_medium=social',\n  runScripts: 'outside-only',\n})\nd.window.eval(fs.readFileSync('share-links.js', 'utf8'))\nd.window.document.dispatchEvent(new d.window.Event('DOMContentLoaded'))\n```\n\nMột chi tiết mất thời gian ở đây: jsdom giữ `readyState` ở `loading` sau khi dựng xong, nên `DOMContentLoaded` phải bắn bằng tay. Không bắn thì script không chạy, mọi thứ trông như không đổi gì, và rất dễ tưởng nhầm là code hỏng.","entities":[],"updated":"2026-09-11T11:40:00.000Z"}
{"id":"post:bay-cho-hong-khong-keu-khi-tu-dung-lop-gan-tham-so-cho-link:vi:6-96-byte-không-phải-96-ký-tự","url":"https://hecigo.com/blog/bay-cho-hong-khong-keu-khi-tu-dung-lop-gan-tham-so-cho-link/#6-96-byte-không-phải-96-ký-tự","locale":"vi","type":"post","title":"Bảy chỗ hỏng không kêu khi tự dựng lớp gắn tham số cho link","headingPath":["6. 96 byte, không phải 96 ký tự"],"text":"Kho đếm dùng một trường index làm khoá lấy mẫu. Tôi cắt bí danh cho vừa giới hạn:\n\n```js\nindexes: [alias.slice(0, 96)]\n```\n\nTài liệu Cloudflare ghi giới hạn đó là *\"Each index must be less than 96 bytes\"*. Byte, không phải ký tự.\n\nVới bí danh hợp lệ thì hai con số bằng nhau, vì bảng mã chỉ có `[a-z0-9-]`. Nên phép kiểm không thể bắt được. Nhưng đường dẫn **không** hợp lệ thì mang gì cũng được, và 96 ký tự tiếng Việt là gần 170 byte. Điểm dữ liệu quá cỡ bị bỏ, không báo lỗi.\n\nHệ quả đi đúng chiều xấu nhất: **link hỏng càng lạ thì càng dễ biến mất khỏi bảng đếm**, trong khi đó chính là nhóm cần nhìn thấy nhất.\n\n```js\nexport function khoaLayMau(alias) {\n  const enc = new TextEncoder()\n  if (enc.encode(alias).length <= 96) return alias\n  let s = alias\n  while (s.length > 0 && enc.encode(s).length > 96) s = s.slice(0, -1)\n  return s\n}\n```\n\nCắt theo ký tự cho tới khi vừa 96 byte, không cắt byte thô, để không xả một code point làm đôi.\n\nTôi tìm ra chỗ này không phải nhờ kiểm, mà nhờ đọc trang giới hạn để tra thời hạn lưu cho một mục trong chính sách quyền riêng tư. Đó là lần thứ hai trong ngày một thứ hữu ích rơi ra từ việc đọc tài liệu vì một lý do khác.","entities":[],"updated":"2026-09-11T11:40:00.000Z"}
{"id":"post:bay-cho-hong-khong-keu-khi-tu-dung-lop-gan-tham-so-cho-link:vi:7-purge-theo-url-không-chạm-tới-mọi-biến-thể","url":"https://hecigo.com/blog/bay-cho-hong-khong-keu-khi-tu-dung-lop-gan-tham-so-cho-link/#7-purge-theo-url-không-chạm-tới-mọi-biến-thể","locale":"vi","type":"post","title":"Bảy chỗ hỏng không kêu khi tự dựng lớp gắn tham số cho link","headingPath":["7. Purge theo URL không chạm tới mọi biến thể"],"text":"Quay lại hai phép đo ở đầu bài.\n\nPlugin cache đặt tên file bundle JS theo **danh sách file nguồn**, không theo nội dung. Nội dung đổi, tên file và tham số `?ver=` giữ nguyên. Nghĩa là URL cũ và URL mới là một, và việc phát đúng bản phụ thuộc hoàn toàn vào cú purge.\n\nCú purge đó chạy, và báo thành công. Đây là số đo ngay sau đó, cùng một URL:\n\n```text\nshell        PoP SIN   Accept-Encoding: gzip   age=523s    -> bản MỚI\ntrình duyệt  PoP HKG   Accept-Encoding: br     age=1078s   -> bản CŨ\n```\n\nCloudflare cache riêng từng biến thể nén và riêng từng điểm biên. Lần purge theo URL đó không chạm tới biến thể `br` ở HKG. Người dùng ở một số nơi tiếp tục nhận JS cũ, và không có gì trong quy trình phát hành kêu lên.\n\nGốc rễ là asset có tên **không sinh từ nội dung**. Tên đó do plugin đặt, không đổi được từ phía mình, nên còn lại hai việc phải làm.\n\nViệc thứ nhất là đo cho đúng. Tôi đã viết một phép kiểm so nội dung bundle với chính nó qua một tham số phá cache, và **nó báo xanh trong khi edge đang phát bản cũ**: thêm tham số lạ vào URL bundle thì origin trả 404, nên hai vế so sánh đều là trang lỗi và tình cờ khớp nhau. Một đèn xanh không có nghĩa còn tệ hơn không có đèn nào.\n\nThứ đo được và đáng tin là **tuổi bản cache**, vì nó trả lời đúng câu cần hỏi: bản ở edge được nạp trước hay sau khi lần phát hành này bắt đầu. Và phải hỏi cả bốn biến thể nén rồi lấy cái già nhất, vì hỏi một cái rồi kết luận chính là cách tôi suýt bỏ qua nó.\n\n```bash\nfor e in 'br' 'gzip' 'identity' 'gzip, deflate, br, zstd'; do\n  curl -s -D - -o /dev/null -H \"Accept-Encoding: $e\" \"$URL\" |\n    awk 'tolower($1)==\"age:\"{print $2}'\ndone\n```","entities":[],"updated":"2026-09-11T11:40:00.000Z"}
{"id":"post:bay-cho-hong-khong-keu-khi-tu-dung-lop-gan-tham-so-cho-link:vi:7-purge-theo-url-không-chạm-tới-mọi-biến-thể~2","url":"https://hecigo.com/blog/bay-cho-hong-khong-keu-khi-tu-dung-lop-gan-tham-so-cho-link/#7-purge-theo-url-không-chạm-tới-mọi-biến-thể","locale":"vi","type":"post","title":"Bảy chỗ hỏng không kêu khi tự dựng lớp gắn tham số cho link","headingPath":["7. Purge theo URL không chạm tới mọi biến thể"],"text":"Việc thứ hai là khi phát hiện lệch thì leo thang sang purge toàn bộ vùng rồi nạp lại đủ bốn biến thể. Với một site nhỏ và nhịp phát hành thưa, vài phút cache nguội rẻ hơn nhiều so với việc phát nhầm bản cũ cho một phần người dùng.\n\nCâu tự kiểm: trong hệ của bạn, có asset nào mà URL giữ nguyên khi nội dung đổi không? Nếu có, mọi thứ đang phụ thuộc vào một cú purge mà chưa chắc bạn đã kiểm bao giờ.","entities":[],"updated":"2026-09-11T11:40:00.000Z"}
{"id":"post:bay-cho-hong-khong-keu-khi-tu-dung-lop-gan-tham-so-cho-link:vi:ba-chỗ-tôi-tự-làm-hỏng-trong-cùng-ngày","url":"https://hecigo.com/blog/bay-cho-hong-khong-keu-khi-tu-dung-lop-gan-tham-so-cho-link/#ba-chỗ-tôi-tự-làm-hỏng-trong-cùng-ngày","locale":"vi","type":"post","title":"Bảy chỗ hỏng không kêu khi tự dựng lớp gắn tham số cho link","headingPath":["Ba chỗ tôi tự làm hỏng trong cùng ngày"],"text":"Bảy mục trên đều là chỗ hỏng của công cụ hoặc của nền tảng. Nếu bài dừng ở đó thì nó là quảng cáo chứ không phải lab note.\n\n**Phép kiểm báo xanh mà không kiểm gì.** Đã kể ở mục 7. Điều đáng rút ra không phải lỗi so sánh, mà là tôi đã **ship một phép kiểm mình chưa chứng minh được là đúng**. Nó chạy một lần, in ra chữ OK, và tôi tin nó.\n\n**Một file mới không lên server, và quy trình phát hành báo thành công.** Script deploy đẩy theo một danh sách cứng. Danh sách đó bắt được trường hợp \"tên có trong danh sách mà file không tồn tại\", và không bắt trường hợp ngược lại: file có trong repo mà không có tên trong danh sách thì bị bỏ qua, không một dòng nào. Cùng lượt đó lộ ra danh sách của bản staging và bản production **đã lệch nhau**, trong khi ghi chú đầu file vẫn nói hai bên giống hệt. Bộ kiểm giờ dừng lại và gọi tên file, và mọi file trong thư mục theme phải hoặc nằm trong danh sách đẩy, hoặc nằm trong danh sách loại trừ có tên. Không còn loại thứ ba.\n\n**Một công cụ kiểm báo sai ngay lần chạy đầu.** Bộ kiểm bí danh tôi viết để bắt lỗi lúc đang soạn bài đã báo `dv-np-readme` là sai, trong khi đó là bí danh hợp lệ. Nó thử cả hai bảng mã của hai site, mà `np` chỉ có trong bảng của site này. Cách sửa không phải chép bảng sang, vì bản sao thứ ba của một bảng là bản sẽ lệch đầu tiên; mỗi bên có một bộ kiểm đọc bảng của chính nó.\n\n> **Thấy bài này dùng được?** Theo dõi hecigo trên [Zalo OA](https://zalo.me/3108963776852260798) để nhận bài kỹ thuật mới, hoặc [nhắn cho chúng tôi](https://hecigo.com/#contact) nếu hai hệ thống của bạn đang phải nói chuyện với nhau và có gì đó hỏng ở khoảng giữa.","entities":["org:hecigo"],"updated":"2026-09-11T11:40:00.000Z"}
{"id":"post:bay-cho-hong-khong-keu-khi-tu-dung-lop-gan-tham-so-cho-link:vi:ba-chỗ-tôi-tự-làm-hỏng-trong-cùng-ngày~2","url":"https://hecigo.com/blog/bay-cho-hong-khong-keu-khi-tu-dung-lop-gan-tham-so-cho-link/#ba-chỗ-tôi-tự-làm-hỏng-trong-cùng-ngày","locale":"vi","type":"post","title":"Bảy chỗ hỏng không kêu khi tự dựng lớp gắn tham số cho link","headingPath":["Ba chỗ tôi tự làm hỏng trong cùng ngày"],"text":"> Related: [Đọc tiếp: Đổi host và bốn hành vi nền tảng đang làm hộ mà bạn không sở hữu](https://hecigo.com/blog/doi-host-va-bon-hanh-vi-nen-tang-lam-ho-ma-ban-khong-so-huu/): Chuyển hecigo.com sang một host khác. Adapter mất mười lăm dòng. Bốn hành vi nền tảng vẫn làm hộ thì mỗi cái hỏng một kiểu, và không cái nào làm...","entities":["org:hecigo"],"updated":"2026-09-11T11:40:00.000Z"}
{"id":"post:bay-cho-hong-khong-keu-khi-tu-dung-lop-gan-tham-so-cho-link:vi:còn-chưa-xong","url":"https://hecigo.com/blog/bay-cho-hong-khong-keu-khi-tu-dung-lop-gan-tham-so-cho-link/#còn-chưa-xong","locale":"vi","type":"post","title":"Bảy chỗ hỏng không kêu khi tự dựng lớp gắn tham số cho link","headingPath":["Còn chưa xong"],"text":"Bí danh hiện chỉ trỏ được tới các trang trong một bảng mã tĩnh. Một bài blog cụ thể thì chưa có bí danh riêng, nên khi đăng bài lên mạng xã hội vẫn phải chọn giữa link dài có tham số và link ngắn không đo được. Đó là phần kế tiếp, và nó cần một kho tra cứu chứ không phải một bảng biên dịch sẵn.\n\nMột quan sát trong lúc dựng, và tôi đưa ra đây vì nó ngược với thứ tôi tưởng: phần tốn thời gian nhất không phải viết bộ chuyển hướng, mà là **chốt bảng quy ước**. Bộ chuyển hướng khoảng 150 dòng và viết trong một buổi. Bảng quy ước thì mỗi ô đều là một quyết định phải sống chung nhiều năm, vì link đã phát hành không sửa được.\n\nCâu tôi chưa trả lời được, và cũng đang muốn biết: cả bảy chỗ trong bài đều lộ ra vì có người ngồi đo tay, và bốn trong số đó chỉ lộ ra khi đo từ **hai phía cùng lúc**, một phía trong mạng và một phía ngoài. **Vậy loại hỏng \"mã trạng thái 200 nhưng nội dung sai\" thì giám sát tự động được tới đâu, hay nó vốn chỉ bắt được bằng cách đo song song hai điểm nhìn?**","entities":[],"updated":"2026-09-11T11:40:00.000Z"}
{"id":"post:bay-cho-hong-khong-keu-khi-tu-dung-lop-gan-tham-so-cho-link:vi:nguồn-tham-khảo","url":"https://hecigo.com/blog/bay-cho-hong-khong-keu-khi-tu-dung-lop-gan-tham-so-cho-link/#nguồn-tham-khảo","locale":"vi","type":"post","title":"Bảy chỗ hỏng không kêu khi tự dựng lớp gắn tham số cho link","headingPath":["Nguồn tham khảo"],"text":"- [\\[GA4\\] Default channel group](https://support.google.com/analytics/answer/9756891) - Google Analytics Help\n- [Workers Analytics Engine limits](https://developers.cloudflare.com/analytics/analytics-engine/limits/) - Cloudflare Docs","entities":[],"updated":"2026-09-11T11:40:00.000Z"}
{"id":"post:ba-thu-hong-ma-khong-keu-do-chinh-cong-cu-van-hanh-gay-ra:vi:intro","url":"https://hecigo.com/blog/ba-thu-hong-ma-khong-keu-do-chinh-cong-cu-van-hanh-gay-ra/","locale":"vi","type":"post","title":"Ba thứ hỏng mà không kêu, cả ba đều do chính công cụ vận hành gây ra","headingPath":[],"text":"Buổi sáng hôm đó `apt list --upgradable` trên máy production trả về **0 gói chờ nâng**. Buổi chiều, sau khi gắn Ubuntu Pro vào đúng cái máy đó, không cài thêm gì, không đổi cấu hình gì, lệnh y hệt trả về **25 bản vá bảo mật đang chờ**.\n\nHai phép đo cùng một hệ, cách nhau vài tiếng, cho hai kết quả ngược nhau. Không cái nào sai. Bài này ghi lại buổi rà soát định kỳ đội ba máy chủ nhỏ của chúng tôi, và ba chỗ hỏng tìm thấy trong đó. Điểm chung của cả ba là thứ làm nó đáng viết ra: **không cái nào do phần mềm bên ngoài hỏng, cả ba đều do chính công cụ vận hành gây ra.**","entities":[],"updated":"2026-09-05T03:10:00.000Z"}
{"id":"post:ba-thu-hong-ma-khong-keu-do-chinh-cong-cu-van-hanh-gay-ra:vi:định-thử-gì","url":"https://hecigo.com/blog/ba-thu-hong-ma-khong-keu-do-chinh-cong-cu-van-hanh-gay-ra/#định-thử-gì","locale":"vi","type":"post","title":"Ba thứ hỏng mà không kêu, cả ba đều do chính công cụ vận hành gây ra","headingPath":["Định thử gì"],"text":"Đội máy gồm ba cái: một máy production chạy n8n với một dịch vụ scraping tự dựng, một máy R&D để thử luồng tích hợp trước khi đưa vào dự án, và một máy lab ARM làm đích diễn tập khôi phục. Cả ba đều Ubuntu, đều Docker Compose, đều đã bật `unattended-upgrades`.\n\nCâu hỏi ban đầu rất hẹp: có bản vá nào đang chờ không. Bộ rà soát viết ra để trả lời câu đó, chạy chung một script trên cả ba máy, chỉ đọc chứ không sửa gì ngoài `apt-get update`.\n\nNó trả lời được câu hỏi ban đầu trong ba phút. Phần còn lại của buổi chiều là những thứ nó lộ ra mà tôi không đi tìm.","entities":[],"updated":"2026-09-05T03:10:00.000Z"}
{"id":"post:ba-thu-hong-ma-khong-keu-do-chinh-cong-cu-van-hanh-gay-ra:vi:cron-dọn-dẹp-ăn-mất-ảnh-mà-service-cần-để-sống","url":"https://hecigo.com/blog/ba-thu-hong-ma-khong-keu-do-chinh-cong-cu-van-hanh-gay-ra/#cron-dọn-dẹp-ăn-mất-ảnh-mà-service-cần-để-sống","locale":"vi","type":"post","title":"Ba thứ hỏng mà không kêu, cả ba đều do chính công cụ vận hành gây ra","headingPath":["Cron dọn dẹp ăn mất ảnh mà service cần để sống"],"text":"Lệnh `docker compose up -d` trên máy production dừng lại với một dòng:\n\n```text\nError response from daemon: No such image: <ten-anh>:latest\n```\n\nContainer đó vẫn đang chạy bình thường. Nó chạy được vì container giữ tham chiếu tới **image ID**, còn cái mất là **tag**. Chừng nào không ai đụng vào thì không có gì kêu, và không có gì trong log nói rằng chỉ cần container này dừng một lần là hết đường dựng lại.\n\nTag mất vì một dòng cron chúng tôi tự đặt:\n\n```bash\n8 0 * * * root docker image prune -af --filter \"until=24h\"\n```\n\nTài liệu Docker viết rõ về cờ `-a`: nó *\"remove all unused images, not just dangling ones\"*, và *\"also remove all images not referenced by any container\"*. Phần \"not referenced by any container\" là chỗ tôi đọc lướt. Ảnh **có tag** vẫn bị xoá, miễn là không container nào tham chiếu tới nó.\n\nChi tiết thứ hai đắt hơn: `--filter until=` lọc theo **thời điểm tạo ảnh**, không phải thời điểm gắn tag. Nên khi tôi giữ một ảnh cũ làm điểm lùi bằng `docker tag`, ảnh đó vẫn mang ngày tạo gốc từ hai tuần trước, vẫn khớp `until=24h`, và biến mất trong lần cron chạy kế tiếp. Điểm lùi tôi vừa tạo sống được đúng một đêm.\n\nCách sửa là bỏ `-a`, để bản daily chỉ dọn ảnh mồ côi:\n\n```bash\n8 0 * * * root docker image prune -f --filter \"until=24h\"\n```\n\nViệc thu hồi dung lượng vẫn còn một job hàng tuần với cửa sổ `until=168h` lo. Và quy ước mới, ghi thẳng vào runbook: **giữ ảnh cũ bằng `docker tag` không phải là điểm lùi bền.** Muốn lùi được sau một đêm thì `docker save` ra tarball, vì tarball nằm ngoài tầm với của mọi lệnh prune.","entities":[],"updated":"2026-09-05T03:10:00.000Z"}
{"id":"post:ba-thu-hong-ma-khong-keu-do-chinh-cong-cu-van-hanh-gay-ra:vi:cron-dọn-dẹp-ăn-mất-ảnh-mà-service-cần-để-sống~2","url":"https://hecigo.com/blog/ba-thu-hong-ma-khong-keu-do-chinh-cong-cu-van-hanh-gay-ra/#cron-dọn-dẹp-ăn-mất-ảnh-mà-service-cần-để-sống","locale":"vi","type":"post","title":"Ba thứ hỏng mà không kêu, cả ba đều do chính công cụ vận hành gây ra","headingPath":["Cron dọn dẹp ăn mất ảnh mà service cần để sống"],"text":"> Related: [Đổi host và bốn hành vi nền tảng đang làm hộ mà bạn không sở hữu](https://hecigo.com/blog/doi-host-va-bon-hanh-vi-nen-tang-lam-ho-ma-ban-khong-so-huu/): Chuyển hecigo.com sang một host khác. Adapter mất mười lăm dòng. Bốn hành vi nền tảng vẫn làm hộ thì mỗi cái hỏng một kiểu, và không cái nào làm...","entities":["org:hecigo"],"updated":"2026-09-05T03:10:00.000Z"}
{"id":"post:ba-thu-hong-ma-khong-keu-do-chinh-cong-cu-van-hanh-gay-ra:vi:ảnh-không-dựng-lại-được-vì-compose-không-nói-nó-dựng-từ-đâu","url":"https://hecigo.com/blog/ba-thu-hong-ma-khong-keu-do-chinh-cong-cu-van-hanh-gay-ra/#ảnh-không-dựng-lại-được-vì-compose-không-nói-nó-dựng-từ-đâu","locale":"vi","type":"post","title":"Ba thứ hỏng mà không kêu, cả ba đều do chính công cụ vận hành gây ra","headingPath":["Ảnh không dựng lại được vì compose không nói nó dựng từ đâu"],"text":"Vì sao mất tag lại thành chặn được cả `compose up`? Vì khối service đó trông như thế này:\n\n```yaml\nservices:\n  scraper-browser:\n    image: scraper-browser-custom:latest\n    pull_policy: never\n```\n\n`pull_policy: never` nghĩa là *\"Compose doesn't pull the image from a registry and relies on the platform cached image. If there is no cached image, a failure is reported.\"* Không có khối `build:`, cũng không có registry để kéo về. Ảnh nằm sẵn trên máy thì chạy, không nằm sẵn thì hết cách.\n\nĐiều đáng nói không phải là `pull_policy: never` sai. Nó đúng cho ảnh dựng tại chỗ. Điều sai là **compose không nói ảnh đó dựng từ đâu**, nên người đọc file không có đường nào lần ra mã nguồn.\n\nMã nguồn hoá ra vẫn còn, nằm trong thư mục của một service khác đã ngừng dùng từ lâu, cùng chỗ chỉ vì lịch sử chứ không vì liên quan. Không ai đọc compose mà đoán được điều đó.\n\nCách sửa là để mã nguồn cạnh chính file dùng nó, và để file tự khai:\n\n```yaml\nservices:\n  scraper-browser:\n    build:\n      context: ./scraper-browser\n    image: scraper-browser-custom:latest\n```\n\nDựng lại thật từ đầu để kiểm chứ không chỉ sửa file: container `healthy` sau 15 giây, và một lượt scrape thật qua trình duyệt trả 200 với 9.276 ký tự.\n\nCâu tự kiểm cho hệ của bạn: **mở file compose ra, có service nào mà bạn không lần được từ đó tới mã nguồn hoặc tới một registry không?** Nếu có, nó đang ở cùng trạng thái với cái này trước hôm nay.","entities":[],"updated":"2026-09-05T03:10:00.000Z"}
{"id":"post:ba-thu-hong-ma-khong-keu-do-chinh-cong-cu-van-hanh-gay-ra:vi:0-gói-chờ-nâng-khi-không-có-nguồn-nào-để-so","url":"https://hecigo.com/blog/ba-thu-hong-ma-khong-keu-do-chinh-cong-cu-van-hanh-gay-ra/#0-gói-chờ-nâng-khi-không-có-nguồn-nào-để-so","locale":"vi","type":"post","title":"Ba thứ hỏng mà không kêu, cả ba đều do chính công cụ vận hành gây ra","headingPath":["0 gói chờ nâng, khi không có nguồn nào để so"],"text":"Cam kết bảo trì mặc định của Ubuntu LTS phủ repository **Main**, khoảng 2.300 gói, trong năm năm. `universe` không nằm trong đó. Tài liệu Ubuntu tách hai luồng ESM rõ ràng: *\"The Infra pockets cover packages in the Main component, while the Apps pockets cover packages in the Universe component.\"*\n\nMáy production của chúng tôi chạy 24.04, còn trong hạn hỗ trợ tiêu chuẩn tới 2029. Nên `apt` báo 0 gói chờ nâng là **đúng** với những nguồn nó đang có. Nó không sai, nó chỉ không có gì để so ở phần universe.\n\nGắn Ubuntu Pro xong, `noble-apps-security` xuất hiện trong danh sách nguồn, và cùng lệnh đó trả về 25 gói. Đây là những gì có trong đó:\n\n```text\nffmpeg + toàn bộ họ libav*    imagemagick + libmagick*\npython3-pip                   node-lodash\nlibmbedcrypto7t64             libopenexr, libcjson1, libzvbi\n```\n\nCài hết trong một lượt: không cần reboot, không dịch vụ nào phải restart, không container nào bị đụng. Đây là gói của host, còn các container mang bản riêng trong ảnh của chúng, nên đợt vá này không chạm tới chúng và cũng không làm gián đoạn chúng. Đó vừa là tin tốt vừa là một nhắc nhở: vá host xong không có nghĩa là đã vá xong những gì chạy trong container.\n\nTôi cần tách hai mức phát biểu ở đây, vì chúng khác nhau về thẩm quyền. **Tài liệu Ubuntu nói** cam kết tiêu chuẩn phủ Main năm năm, và Pro mở rộng ra toàn bộ archive trong mười năm. **Chúng tôi đo được** là trên một máy 24.04 còn trong hạn tiêu chuẩn, việc gắn Pro làm lộ ra ngay 25 bản vá universe đang chờ. Phép đo đó đúng cho ba máy này; tôi không có dữ liệu để nói nó đúng cho mọi cấu hình.\n\nBản Ubuntu Pro cá nhân *\"is and always will be free for personal use on up to 5 physical machines\"*, đủ chỗ cho một đội ba máy.","entities":[],"updated":"2026-09-05T03:10:00.000Z"}
{"id":"post:ba-thu-hong-ma-khong-keu-do-chinh-cong-cu-van-hanh-gay-ra:vi:0-gói-chờ-nâng-khi-không-có-nguồn-nào-để-so~2","url":"https://hecigo.com/blog/ba-thu-hong-ma-khong-keu-do-chinh-cong-cu-van-hanh-gay-ra/#0-gói-chờ-nâng-khi-không-có-nguồn-nào-để-so","locale":"vi","type":"post","title":"Ba thứ hỏng mà không kêu, cả ba đều do chính công cụ vận hành gây ra","headingPath":["0 gói chờ nâng, khi không có nguồn nào để so"],"text":"Bài học đưa thẳng vào bộ rà soát, và nó là câu đáng nhớ nhất trong cả buổi: **\"0 gói chờ nâng\" chỉ có nghĩa khi biết mình đang so với những nguồn nào.** Script rà soát nay in trạng thái Pro chứ không chỉ đếm gói.","entities":[],"updated":"2026-09-05T03:10:00.000Z"}
{"id":"post:ba-thu-hong-ma-khong-keu-do-chinh-cong-cu-van-hanh-gay-ra:vi:chỗ-tôi-làm-sập-production","url":"https://hecigo.com/blog/ba-thu-hong-ma-khong-keu-do-chinh-cong-cu-van-hanh-gay-ra/#chỗ-tôi-làm-sập-production","locale":"vi","type":"post","title":"Ba thứ hỏng mà không kêu, cả ba đều do chính công cụ vận hành gây ra","headingPath":["Chỗ tôi làm sập production"],"text":"Phần này không nằm trong kế hoạch.\n\nCùng buổi đó tôi phát hiện n8n tải khoảng 1,2 GB trình duyệt Playwright mỗi lần khởi động, vào lớp ghi của container chứ không phải volume. Nghĩa là mỗi lần `compose up` tạo lại container là tải lại từ đầu, và vì có hai container nên 2,8 GB cho cùng một bộ trình duyệt.\n\nCách sửa hiển nhiên là mount cache ra volume dùng chung:\n\n```yaml\nvolumes:\n  - n8n_cache:/home/node/.cache/ms-playwright   # dòng này làm sập production\n```\n\nThư mục `/home/node/.cache` **không tồn tại sẵn trong ảnh**. Mount vào thư mục con của nó khiến Docker tự tạo thư mục cha, và tạo bằng `root`. n8n chạy bằng user `node`, mất quyền ghi `/home/node/.cache/n8n`, và crash-loop:\n\n```text\nEACCES: permission denied, mkdir '/home/node/.cache/n8n'\n```\n\nProduction n8n chết vài phút trước khi tôi nhìn ra. Cách đúng là mount cả thư mục cha, sau khi đã đặt sở hữu cho volume:\n\n```bash\ndocker volume create n8n_cache\ndocker run --rm -v n8n_cache:/c alpine chown 1000:1000 /c\n```\n\n```yaml\nvolumes:\n  - n8n_cache:/home/node/.cache\n```\n\nSố đo sau khi sửa: worker sẵn sàng trong **18 giây** thay vì hơn hai phút, **0 dòng** \"Downloading Chrome\", lớp ghi của worker từ **1,37 GB xuống 0 B** và của n8n từ **1,45 GB xuống 67 MB**.\n\nLý do viết ra: nếu bài này chỉ có ba chỗ hỏng do người khác gây ra và không có chỗ nào do tôi, nó là quảng cáo chứ không phải lab note.\n\n> **Thấy bài này dùng được?** Theo dõi hecigo trên [Zalo OA](https://zalo.me/3108963776852260798) để nhận bài kỹ thuật mới, hoặc [nhắn cho chúng tôi](https://hecigo.com/#contact) nếu hai hệ thống của bạn đang phải nói chuyện với nhau và có gì đó hỏng ở khoảng giữa.","entities":["org:hecigo"],"updated":"2026-09-05T03:10:00.000Z"}
{"id":"post:ba-thu-hong-ma-khong-keu-do-chinh-cong-cu-van-hanh-gay-ra:vi:chỗ-tôi-làm-sập-production~2","url":"https://hecigo.com/blog/ba-thu-hong-ma-khong-keu-do-chinh-cong-cu-van-hanh-gay-ra/#chỗ-tôi-làm-sập-production","locale":"vi","type":"post","title":"Ba thứ hỏng mà không kêu, cả ba đều do chính công cụ vận hành gây ra","headingPath":["Chỗ tôi làm sập production"],"text":"> 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ệ...","entities":["org:hecigo"],"updated":"2026-09-05T03:10:00.000Z"}
{"id":"post:ba-thu-hong-ma-khong-keu-do-chinh-cong-cu-van-hanh-gay-ra:vi:sau-buổi-đó","url":"https://hecigo.com/blog/ba-thu-hong-ma-khong-keu-do-chinh-cong-cu-van-hanh-gay-ra/#sau-buổi-đó","locale":"vi","type":"post","title":"Ba thứ hỏng mà không kêu, cả ba đều do chính công cụ vận hành gây ra","headingPath":["Sau buổi đó"],"text":"Bộ rà soát nay có thêm hai mục: một mục liệt kê service nào khai `pull_policy: never` mà không có `build:`, và một mục in trạng thái Ubuntu Pro trước khi đếm gói. Cả hai đều là câu hỏi mà buổi chiều đó dạy tôi phải hỏi.\n\nMột chỗ vẫn chưa xong, và nó đáng ghi ra vì nó không sửa được bằng cấu hình. Máy lab của chúng tôi chạy Ubuntu 24.04 trên ARM, và livepatch báo `n/a` ở đó. Tôi tưởng lý do là kernel flavour, nhưng bảng kernel được phủ nói khác: flavour `oracle` có trong danh sách, chỉ là cho x86 64-bit. Với 24.04 thì arm64 chưa được phủ, và tài liệu ghi coverage cho arm64 bắt đầu từ bản 26.04. Nghĩa là hai máy x86 vá kernel không cần reboot, còn máy ARM thì vẫn phải, cho tới khi nâng bản.\n\nCâu tôi chưa trả lời được, và cũng đang muốn biết: cả ba chỗ này chỉ lộ ra vì có người ngồi rà tay. Một cái cron ăn mất tag, một ảnh không dựng lại được, một danh sách bản vá rỗng vì thiếu nguồn - chúng đều không sinh ra tín hiệu nào để bắt. **Vậy loại hỏng \"công cụ vận hành làm đúng thứ nó được bảo làm\" thì giám sát được bằng cách nào, hay nó vốn chỉ bắt được bằng mắt người theo chu kỳ?**","entities":[],"updated":"2026-09-05T03:10:00.000Z"}
{"id":"post:ba-thu-hong-ma-khong-keu-do-chinh-cong-cu-van-hanh-gay-ra:vi:nguồn-tham-khảo","url":"https://hecigo.com/blog/ba-thu-hong-ma-khong-keu-do-chinh-cong-cu-van-hanh-gay-ra/#nguồn-tham-khảo","locale":"vi","type":"post","title":"Ba thứ hỏng mà không kêu, cả ba đều do chính công cụ vận hành gây ra","headingPath":["Nguồn tham khảo"],"text":"- [docker image prune](https://docs.docker.com/reference/cli/docker/image/prune/) - Docker Docs\n- [Services top-level element: pull_policy](https://docs.docker.com/reference/compose-file/services/) - Docker Docs\n- [Expanded Security Maintenance (ESM)](https://documentation.ubuntu.com/security/security-updates/esm/) - Ubuntu security documentation\n- [Ubuntu Pro](https://ubuntu.com/pro) - Ubuntu\n- [Kernels covered by Livepatch](https://ubuntu.com/security/livepatch/docs/client/reference/platform/supported-kernels/) - Ubuntu","entities":[],"updated":"2026-09-05T03:10:00.000Z"}
{"id":"post:doi-host-va-bon-hanh-vi-nen-tang-lam-ho-ma-ban-khong-so-huu:vi:intro","url":"https://hecigo.com/blog/doi-host-va-bon-hanh-vi-nen-tang-lam-ho-ma-ban-khong-so-huu/","locale":"vi","type":"post","title":"Đổi host và bốn hành vi nền tảng đang làm hộ mà bạn không sở hữu","headingPath":[],"text":"Trước khi đổi gì, chúng tôi viết test cho những luật mà nền tảng đang thi hành hộ. Test đầu tiên chạy xong thì lộ một lỗi có sẵn từ trước:\n\n```bash\ncurl -sI -H 'Accept: application/json' https://hecigo.com/docs\n# HTTP/2 406\n```\n\n`/docs` đáng lẽ trả `301` về trang tài liệu. Với `*/*`, với `text/html`, với `text/markdown`, hay không gửi `Accept` thì nó trả `301` thật. Chỉ khi người gọi nói `application/json` hoặc `application/xml` thì nó thành `406 Not Acceptable`.\n\nMười sáu luật chuyển hướng, ba mươi hai đường dẫn, chết với đúng nhóm người gọi mà chúng được viết ra để phục vụ. Không ai biết, vì không có test nào hỏi câu đó.\n\nLỗi nằm ở lớp thương lượng nội dung: đường dẫn không có trong danh mục thì nó hỏi origin xem có tồn tại không, rồi đọc **mọi thứ không phải 404** là \"tồn tại nhưng không có định dạng anh xin\". Một cú `301` không phải là một định dạng.\n\nBài này ghi lại phần còn lại của việc đó: bốn hành vi mà nền tảng cũ đang làm hộ, mỗi cái hỏng một kiểu khi đổi sang nền tảng khác, và không cái nào làm build đỏ hay ghi một dòng log.","entities":["org:hecigo"],"updated":"2026-08-30T05:40:00.000Z"}
{"id":"post:doi-host-va-bon-hanh-vi-nen-tang-lam-ho-ma-ban-khong-so-huu:vi:viết-lưới-trước-khi-tháo-sàn","url":"https://hecigo.com/blog/doi-host-va-bon-hanh-vi-nen-tang-lam-ho-ma-ban-khong-so-huu/#viết-lưới-trước-khi-tháo-sàn","locale":"vi","type":"post","title":"Đổi host và bốn hành vi nền tảng đang làm hộ mà bạn không sở hữu","headingPath":["Viết lưới trước khi tháo sàn"],"text":"Site là static export thuần, cộng một lớp code ở edge làm thương lượng nội dung: cùng một URL trả HTML cho trình duyệt và Markdown cho agent, tuỳ header `Accept`.\n\nPhần đó nằm trong repo, có test, và chuyển nền tảng không đụng tới. Phần không nằm trong repo mới là phần đáng lo:\n\n- mười sáu luật chuyển hướng trong một file cấu hình của nền tảng\n- trang 404 do nền tảng gắn vào phản hồi\n- `content-type` và `cache-control` do nền tảng tự thêm\n- luật header trong một file cấu hình khác\n\nBốn thứ đó chạy đúng suốt nhiều tháng và **không có dòng code nào của chúng tôi chịu trách nhiệm cho chúng**.\n\nCách làm: mô hình hoá từng luật thành code thuần, viết test cho mô hình, rồi viết một script hỏi nền tảng đang chạy đúng những câu đó. Test chứng minh mô hình tự nhất quán. Chỉ có script mới chứng minh nó khớp với thực tế.\n\nBước đó tìm ra cú `406` ở đầu bài, trước khi bất cứ thứ gì thay đổi.","entities":[],"updated":"2026-08-30T05:40:00.000Z"}
{"id":"post:doi-host-va-bon-hanh-vi-nen-tang-lam-ho-ma-ban-khong-so-huu:vi:bốn-hành-vi-không-ai-viết-ra","url":"https://hecigo.com/blog/doi-host-va-bon-hanh-vi-nen-tang-lam-ho-ma-ban-khong-so-huu/#bốn-hành-vi-không-ai-viết-ra","locale":"vi","type":"post","title":"Đổi host và bốn hành vi nền tảng đang làm hộ mà bạn không sở hữu","headingPath":["Bốn hành vi không ai viết ra"],"text":"| Hành vi | Nền tảng cũ | Nền tảng mới |\n| --- | --- | --- |\n| File chuyển hướng | nền tảng thi hành | không áp cho request do code của bạn phục vụ |\n| Trang 404 | trả kèm thân phản hồi | thân rỗng, tuỳ thiết lập |\n| `content-type` của `.html` | `text/html; charset=UTF-8` | `text/html` trần |\n| `cache-control` | `public, max-age=0, must-revalidate` | không có |\n\nĐọc theo hàng thì mỗi cái nhỏ. Đọc theo cột phải thì đó là một site vẫn trả `200`, vẫn hiển thị đúng, và đã mất bốn thứ.\n\n**File chuyển hướng.** [Tài liệu Cloudflare nói thẳng](https://developers.cloudflare.com/workers/static-assets/redirects/) rằng luật trong `_redirects` không áp cho request do code Worker phục vụ. Worker thương lượng nội dung thì match mọi đường dẫn. Mười sáu luật im lặng cùng lúc.\n\n**Trang 404.** Thiết lập `not_found_handling` có hai giá trị dùng được và cả hai đều sai nếu bạn muốn tự chọn định dạng lỗi. `\"404-page\"` để asset server trả trang HTML trước khi code của bạn kịp nói gì. `\"none\"` trả một cái 404 **rỗng**, nên nhánh HTML mất thân phản hồi trong khi nhánh JSON và Markdown vẫn chạy. Đó là loại hỏng bị phát hiện sau cùng: máy vẫn đọc được, chỉ có người là gặp trang trắng.\n\n**Header của trang.** Thiếu `charset` thì trang tiếng Việt vẫn đọc được nhờ thẻ `<meta charset>` trong tài liệu, tức nó chỉ suy giảm chứ không gãy. Thiếu `cache-control` thì nặng hơn: trình duyệt rơi về heuristic caching, và trên một site URL cố định còn nội dung đổi mỗi lần deploy, khách có thể nhìn trang của hôm qua hàng giờ mà không có gì báo.\n\nCách xử cho cả bốn giống nhau: đưa vào code, có test, để nó trả lời giống nhau bất kể ai đang host.\n\n```js\n// Trước: để origin tự type. Đúng với host cũ, không đúng nói chung.\nreturn { action: 'origin', headers: { vary: VARY } }","entities":[],"updated":"2026-08-30T05:40:00.000Z"}
{"id":"post:doi-host-va-bon-hanh-vi-nen-tang-lam-ho-ma-ban-khong-so-huu:vi:bốn-hành-vi-không-ai-viết-ra~2","url":"https://hecigo.com/blog/doi-host-va-bon-hanh-vi-nen-tang-lam-ho-ma-ban-khong-so-huu/#bốn-hành-vi-không-ai-viết-ra","locale":"vi","type":"post","title":"Đổi host và bốn hành vi nền tảng đang làm hộ mà bạn không sở hữu","headingPath":["Bốn hành vi không ai viết ra"],"text":"// Sau: nói ra thứ mình muốn.\nreturn {\n  action: 'origin',\n  headers: {\n    'content-type': 'text/html; charset=utf-8',\n    'cache-control': 'public, max-age=0, must-revalidate',\n    vary: VARY,\n  },\n}\n```\n\n> Related: [Kiểm tra độ thân thiện của website với AI Agent: Cơ chế hoạt động của Vercel Is Agentic](https://hecigo.com/blog/kiem-tra-do-than-thien-cua-website-voi-ai-agent-co-che-hoat-dong-cua-vercel-is-a/): Is Agentic chấm hecigo.com 73/100. Bốn vòng vá đưa nó lên 100. Lỗi đắt nhất là một phép kiểm mà chính bài này từng lấy làm ví dụ về việc làm đúng.","entities":["org:hecigo"],"updated":"2026-08-30T05:40:00.000Z"}
{"id":"post:doi-host-va-bon-hanh-vi-nen-tang-lam-ho-ma-ban-khong-so-huu:vi:phép-kiểm-cho-origin-giả-cư-xử-như-host-không-biết-làm-việc-đó","url":"https://hecigo.com/blog/doi-host-va-bon-hanh-vi-nen-tang-lam-ho-ma-ban-khong-so-huu/#phép-kiểm-cho-origin-giả-cư-xử-như-host-không-biết-làm-việc-đó","locale":"vi","type":"post","title":"Đổi host và bốn hành vi nền tảng đang làm hộ mà bạn không sở hữu","headingPath":["Phép kiểm: cho origin giả cư xử như host không biết làm việc đó"],"text":"Đây là phần đáng mang đi nhất, và nó không tốn gì.\n\nBộ test vốn có một origin giả, dựng theo cách host cũ phục vụ thư mục build. Mọi assertion trong đó vì thế là assertion về **host cũ** nhiều ngang với về code, và không có gì nói rõ cái nào là cái nào.\n\nCách tách: chạy **cùng một bộ request trên hai hình dạng origin** rồi assert kết quả giống hệt nhau.\n\n```js\n/** Host cũ: một cú trượt là trang 404, kèm status 404. */\nconst netlifyOrigin = (pathname) =>\n  pathname === '/404.html' ? servePage() : new Response(NOT_FOUND_PAGE, { status: 404 })\n\n/** Host mới với not_found_handling \"none\": một cú trượt là 404 trần. */\nconst workersOrigin = (pathname) =>\n  pathname === '/404.html' ? servePage() : new Response(null, { status: 404 })\n```\n\nChỗ nào hai bên trả khác nhau là chỗ code đang vay mượn nền tảng.\n\nĐiểm quan trọng về cách dùng: khi chưa sửa được, **vẫn viết test cho hiện trạng và nói thẳng trong đó**. Bản đầu của chúng tôi có một test tên là \"trang 404 HTML đi mượn của origin, và một origin trả 404 trần sẽ mất nó\", kèm dòng chú thích rằng khi nhánh HTML thôi mượn thân thì phải sửa chính test này. Nó xanh, nó mô tả đúng sự thật, và nó biến một rủi ro vô hình thành một dòng có tên trong bộ test.\n\nSau khi sửa, test đó đảo chiều thành \"trang 404 HTML giống nhau trên cả hai origin\". Chính assertion đó là bằng chứng bản vá đã đáp.","entities":[],"updated":"2026-08-30T05:40:00.000Z"}
{"id":"post:doi-host-va-bon-hanh-vi-nen-tang-lam-ho-ma-ban-khong-so-huu:vi:cắt-bằng-route-không-phải-bằng-custom-domain","url":"https://hecigo.com/blog/doi-host-va-bon-hanh-vi-nen-tang-lam-ho-ma-ban-khong-so-huu/#cắt-bằng-route-không-phải-bằng-custom-domain","locale":"vi","type":"post","title":"Đổi host và bốn hành vi nền tảng đang làm hộ mà bạn không sở hữu","headingPath":["Cắt bằng route, không phải bằng custom domain"],"text":"Đây là thứ chỉ lộ ra lúc cắt thật.\n\nCloudflare có hai cách gắn code vào một tên miền, và [tài liệu best practices của họ](https://developers.cloudflare.com/workers/best-practices/workers-best-practices/) phân biệt rõ: **custom domain** nghĩa là Worker *là* origin, Cloudflare tự tạo bản ghi DNS và chứng chỉ; **route** nghĩa là Worker chạy *trước* một origin đang có, và cần sẵn một bản ghi DNS proxied.\n\nChúng tôi thử custom domain trước và bị từ chối:\n\n```\nHostname 'example.com' already has externally managed DNS records\n(A, CNAME, etc). Delete them first. [code: 100117]\n```\n\nKhông hỏng gì, vì nó từ chối trước khi làm. Nhưng đi theo lời nó bảo, tức xoá bản ghi rồi deploy, là tự tạo một khoảng chết giữa hai thao tác **và** tự vứt mất đường lùi, vì sau khi xoá thì giá trị cũ không còn ở đâu để đọc lại.\n\nRoute thì ngược hẳn. Bản ghi DNS không đổi một chữ, vẫn trỏ host cũ, nhưng mọi request bị Worker chặn và phục vụ từ tài sản tĩnh đã tải lên, nên host cũ không bao giờ được gọi tới. Không có khoảng chết.\n\n```jsonc\n\"routes\": [\n  { \"pattern\": \"example.com/*\",     \"zone_name\": \"example.com\" },\n  { \"pattern\": \"www.example.com/*\", \"zone_name\": \"example.com\" }\n]\n```\n\nVà quan trọng hơn: **lùi lại là bỏ hai dòng đó rồi deploy.** Request lập tức chảy về host cũ như chưa có gì xảy ra. Không phải khôi phục bản ghi nào, không phải nhớ giá trị cũ.\n\nĐổi sang custom domain sau, khi đã yên tâm và sẵn sàng xoá bản ghi cũ. Lúc đó đo được: tên miền gốc trở lại sau **5 giây**, còn `www` mất **80 giây** vì phải chờ cấp chứng chỉ. Một cutover chỉ kiểm tên miền gốc sẽ tuyên bố thành công trong lúc `www` còn chết, mà `www` là thứ khách gõ tay.","entities":[],"updated":"2026-08-30T05:40:00.000Z"}
{"id":"post:doi-host-va-bon-hanh-vi-nen-tang-lam-ho-ma-ban-khong-so-huu:vi:ba-chỗ-tự-tay-làm-hỏng","url":"https://hecigo.com/blog/doi-host-va-bon-hanh-vi-nen-tang-lam-ho-ma-ban-khong-so-huu/#ba-chỗ-tự-tay-làm-hỏng","locale":"vi","type":"post","title":"Đổi host và bốn hành vi nền tảng đang làm hộ mà bạn không sở hữu","headingPath":["Ba chỗ tự tay làm hỏng"],"text":"**Một: bản sửa tạo ra lỗi mới.** Để tiết kiệm số lần gọi Worker, chúng tôi thu hẹp phạm vi nó chạy xuống hai hình dạng URL. Lập luận đúng: site đặt `trailingSlash: true` nên mọi URL trang kết thúc bằng dấu gạch chéo, còn không asset nào như vậy.\n\nNhưng nguồn chuyển hướng thì **không** có dấu gạch chéo cuối, và file `_redirects` vẫn nằm trong thư mục build. Kết quả: `/docs` do asset server trả lời bằng file, `/docs/` do Worker trả lời. Cùng đích, nên mọi phép kiểm vẫn xanh.\n\nChuyện nặng hơn cái header thiếu: hai hệ thống cùng thi hành một bộ luật từ hai nguồn, và sửa file mà quên sinh lại danh mục là chúng bất đồng ngay. Cách xử là liệt kê thẳng cả mười sáu nguồn vào phạm vi Worker chạy trước, kèm test giữ danh sách đó khớp với file luật.\n\n**Hai: đếm số chỗ lệch không chứng minh được gì.** Script so hai host báo 105 chỗ lệch `Vary` trên các file `.md`. Gọi lẻ từng đường dẫn thì bên cũ trả đủ. Truy ra là cache của host cũ giữ hai bản cho cùng một URL, một bản sinh từ lần revalidate trả `304` nên không mang `Vary` mới.\n\nCách kết luận không phải đếm mà là hỏi **chỗ lệch đó có nghĩa gì**. `Vary` chỉ quan trọng ở URL có nhiều hơn một biểu diễn; URL `.md` có đúng một. Kiểm riêng nhóm URL thương lượng thì chúng luôn đủ `Vary: Accept`.\n\nBa vòng so, 588 phép so mỗi vòng, từ 237 chỗ lệch xuống 124, và phần lớn số còn lại là thân HTML khác nhau vì khác máy dựng. Con số giảm dần nhìn rất thuyết phục và tự nó không nói lên điều gì.","entities":[],"updated":"2026-08-30T05:40:00.000Z"}
{"id":"post:doi-host-va-bon-hanh-vi-nen-tang-lam-ho-ma-ban-khong-so-huu:vi:ba-chỗ-tự-tay-làm-hỏng~2","url":"https://hecigo.com/blog/doi-host-va-bon-hanh-vi-nen-tang-lam-ho-ma-ban-khong-so-huu/#ba-chỗ-tự-tay-làm-hỏng","locale":"vi","type":"post","title":"Đổi host và bốn hành vi nền tảng đang làm hộ mà bạn không sở hữu","headingPath":["Ba chỗ tự tay làm hỏng"],"text":"**Ba: cổng kiểm báo động giả.** Chạy cả bộ trên production thì một đường dẫn trả `502` ở hai trong năm giá trị `Accept`. Gọi lẻ bằng `curl`: `301`. Gọi lẻ bằng `fetch`: `301`. Bắn 120 lần liên tiếp vào đúng đường dẫn đó: `301` cả 120 lần. Chạy lại cả bộ thì `502` rơi vào cùng đường dẫn nhưng ở `Accept` khác. Nó theo **vị trí trong loạt chạy**, không theo đường dẫn.\n\n`5xx` không phải phát biểu về hợp đồng. Nó nói \"lúc này tôi không trả lời được\". Một cổng coi đó là vi phạm sẽ báo động giả, rồi người ta học cách phớt lờ nó, và lần nó kêu thật thì không ai nghe. Bản vá là thử lại hai lần có giãn cách, đếm số lần phải gọi lại và in ra ở dòng tổng kết.","entities":[],"updated":"2026-08-30T05:40:00.000Z"}
{"id":"post:doi-host-va-bon-hanh-vi-nen-tang-lam-ho-ma-ban-khong-so-huu:vi:con-chim-hoàng-yến","url":"https://hecigo.com/blog/doi-host-va-bon-hanh-vi-nen-tang-lam-ho-ma-ban-khong-so-huu/#con-chim-hoàng-yến","locale":"vi","type":"post","title":"Đổi host và bốn hành vi nền tảng đang làm hộ mà bạn không sở hữu","headingPath":["Con chim hoàng yến"],"text":"Sau khi luật chuyển hướng vào code, script kiểm chuyển hướng **không còn phát hiện được Worker chết**. Worker ngừng chạy thì asset server vẫn thi hành `_redirects` từ file, mọi phép kiểm chuyển hướng vẫn xanh, trong khi thương lượng nội dung và thân lỗi JSON đã tắt thở.\n\nPhép kiểm duy nhất lộ ra ngay là một dòng:\n\n```bash\ncurl -sI -H 'Accept: text/markdown' https://hecigo.com/ | grep -i content-type\n# content-type: text/markdown; charset=utf-8\n```\n\nRa `text/markdown` là lớp thương lượng còn sống. Ra `text/html` là nó đã chết và mọi thứ khác đang nói dối, vì asset server tự phục vụ được hết.\n\nNó là phép kiểm đầu tiên trong script kiểm hợp đồng, chạy sau mỗi lần deploy trong CI, cùng 320 phép kiểm khác.\n\nCùng nhóm với nó là một phép kiểm khác, sinh ra từ một thứ chúng tôi phát hiện muộn: đếm số lần địa chỉ liên hệ xuất hiện trong HTML trên mạng, so với bản dựng. Trang chủ có 14 chỗ trong bản dựng, trên mạng còn 10 chỗ nguyên và 2 khối bị thay bằng một đoạn chỉ giải mã được bằng JavaScript. Thủ phạm là [Email Address Obfuscation](https://developers.cloudflare.com/waf/tools/scrape-shield/email-address-obfuscation/), và theo tài liệu Cloudflare thì nó **bật mặc định từ lúc đăng ký tài khoản**. Không ai chọn nó cả.\n\nBản Markdown không bị đụng vì không phải HTML. Nên thứ hành động được nhất của site nằm sau lớp JavaScript, trên một site có cả tầng hạ tầng để không cần JavaScript, và chỉ agent đọc HTML mới dính.\n\nĐó cũng là một hành vi nền tảng làm hộ mà không ai viết ra. Chỉ khác là nó nằm ở dashboard chứ không ở file cấu hình, nên không có commit nào để đọc lại.","entities":["org:hecigo"],"updated":"2026-08-30T05:40:00.000Z"}
{"id":"post:doi-host-va-bon-hanh-vi-nen-tang-lam-ho-ma-ban-khong-so-huu:vi:khi-nào-việc-này-là-thừa","url":"https://hecigo.com/blog/doi-host-va-bon-hanh-vi-nen-tang-lam-ho-ma-ban-khong-so-huu/#khi-nào-việc-này-là-thừa","locale":"vi","type":"post","title":"Đổi host và bốn hành vi nền tảng đang làm hộ mà bạn không sở hữu","headingPath":["Khi nào việc này là thừa"],"text":"Nếu site của bạn không đổi host và sẽ không đổi, mượn hành vi của nền tảng là lựa chọn hợp lý. Nó ít code hơn, ít thứ phải nuôi hơn, và nền tảng làm những việc đó tốt. Bài này không lập luận rằng ai cũng nên viết lại chúng.\n\nCân nhắc thật nằm ở chỗ khác: **bạn có biết mình đang mượn những gì không?** Danh sách bốn dòng ở trên mất một buổi để dựng, và giá trị lớn nhất của nó không phải là bản vá mà là biết danh sách đó tồn tại.\n\nVề chi phí, chúng tôi cũng không có con số chứng minh việc đổi host tiết kiệm được tiền cho một site cỡ này. Lý do đổi là chuyện khác: hạn mức của gói miễn phí bên cũ, khi vượt, sẽ tạm ngừng site tới hết tháng. Đó là rủi ro về hình ảnh, không phải bài toán tối ưu chi phí, và nói cho đúng thì phần lớn công sức trong bài này sinh ra từ việc đổi chứ không phải từ việc tiết kiệm.\n\nVài câu để tự đối chiếu với hệ thống của bạn:\n\n- Có bao nhiêu luật đang nằm trong file cấu hình của nền tảng chứ không nằm trong code có test?\n- Nếu lớp code ở edge của bạn ngừng chạy đêm nay, phép kiểm nào đỏ trong vòng năm phút?\n- Trang lỗi của bạn do ai dựng, và nó còn nguyên nếu origin trả về thân rỗng không?\n- HTML tới tay người đọc có đúng bằng HTML bạn dựng ra không, hay có tầng nào viết lại giữa đường?\n\nCâu cuối là câu chúng tôi vẫn chưa trả lời trọn. Đếm một chuỗi trong HTML thì bắt được việc che địa chỉ email. Nó không bắt được một tầng chèn thêm script, đổi thứ tự thẻ, hay viết lại link theo cách vẫn hợp lệ. Một phép so toàn văn giữa bản dựng và bản trên mạng thì bắt được, nhưng nó cũng đỏ mỗi lần chunk hash đổi, tức đỏ mỗi lần deploy.\n\nChưa nghĩ ra cách phân biệt \"nội dung đổi vì mình vừa build\" với \"nội dung đổi vì có ai đó viết lại\" mà không phải dựng lại đúng bản build ấy để so. Nếu bạn đã giải bài đó rồi, chúng tôi muốn nghe.","entities":[],"updated":"2026-08-30T05:40:00.000Z"}
{"id":"post:doi-host-va-bon-hanh-vi-nen-tang-lam-ho-ma-ban-khong-so-huu:vi:khi-nào-việc-này-là-thừa~2","url":"https://hecigo.com/blog/doi-host-va-bon-hanh-vi-nen-tang-lam-ho-ma-ban-khong-so-huu/#khi-nào-việc-này-là-thừa","locale":"vi","type":"post","title":"Đổi host và bốn hành vi nền tảng đang làm hộ mà bạn không sở hữu","headingPath":["Khi nào việc này là thừa"],"text":"> **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.\n\n> 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ệ...","entities":["org:hecigo"],"updated":"2026-08-30T05:40:00.000Z"}
{"id":"post:doi-host-va-bon-hanh-vi-nen-tang-lam-ho-ma-ban-khong-so-huu:vi:nguồn-tham-khảo","url":"https://hecigo.com/blog/doi-host-va-bon-hanh-vi-nen-tang-lam-ho-ma-ban-khong-so-huu/#nguồn-tham-khảo","locale":"vi","type":"post","title":"Đổi host và bốn hành vi nền tảng đang làm hộ mà bạn không sở hữu","headingPath":["Nguồn tham khảo"],"text":"- [Redirects](https://developers.cloudflare.com/workers/static-assets/redirects/) - Cloudflare Workers docs\n- [Workers Best Practices](https://developers.cloudflare.com/workers/best-practices/workers-best-practices/) - Cloudflare Workers docs\n- [Custom Domains](https://developers.cloudflare.com/workers/configuration/routing/custom-domains/) - Cloudflare Workers docs\n- [Email Address Obfuscation](https://developers.cloudflare.com/waf/tools/scrape-shield/email-address-obfuscation/) - Cloudflare WAF docs\n- [Cache multiple versions of a URL with Vary](https://developers.cloudflare.com/changelog/post/2026-07-02-vary-for-cache-rules/) - Cloudflare changelog\n- [Ignore builds](https://docs.netlify.com/build/configure-builds/ignore-builds/) - Netlify docs","entities":[],"updated":"2026-08-30T05:40:00.000Z"}
{"id":"post:gemini-omni-11-flash-co-che-tao-va-bien-tap-video-qua-interactions-api:vi:intro","url":"https://hecigo.com/blog/gemini-omni-11-flash-co-che-tao-va-bien-tap-video-qua-interactions-api/","locale":"vi","type":"post","title":"Gemini Omni 1.1 Flash: Cơ chế tạo và biên tập video qua Interactions API","headingPath":[],"text":"Google vừa phát hành bản cập nhật Gemini Omni 1.1 Flash cho các nhà phát triển thông qua Google AI Studio và Gemini Enterprise Agent Platform. Khác với các mô hình tạo video chuyên biệt trước đây vốn chỉ nhận prompt rồi render lại toàn bộ cảnh từ đầu, Omni 1.1 Flash là mô hình đa phương thức dạng world model, cho phép chỉnh sửa video theo từng lượt hội thoại có lưu trạng thái (stateful editing), mở rộng phân cảnh và kiểm soát chuyển động giữa các khung hình mẫu.","entities":[],"updated":"2026-08-28T13:48:11.882Z"}
{"id":"post:gemini-omni-11-flash-co-che-tao-va-bien-tap-video-qua-interactions-api:vi:kiến-trúc-đa-phương-thức-và-vòng-lặp-interactions-api","url":"https://hecigo.com/blog/gemini-omni-11-flash-co-che-tao-va-bien-tap-video-qua-interactions-api/#kiến-trúc-đa-phương-thức-và-vòng-lặp-interactions-api","locale":"vi","type":"post","title":"Gemini Omni 1.1 Flash: Cơ chế tạo và biên tập video qua Interactions API","headingPath":["Kiến trúc đa phương thức và vòng lặp Interactions API"],"text":"Phần lớn các công cụ tạo video AI thế hệ trước xử lý dữ liệu theo đường ống tách rời: sinh hình ảnh độc lập, đưa qua mô hình chuyển động, sau đó gắn thêm một track âm thanh riêng. Cách tiếp cận này khiến video dễ mất tính nhất quán khi người dùng muốn thay đổi một chi tiết nhỏ trong khung hình.\n\nTheo [tài liệu chính thức của Google AI for Developers](https://ai.google.dev/gemini-api/docs/models/gemini-omni-flash?hl=vi), Gemini Omni Flash tiếp nhận đồng thời văn bản, hình ảnh, âm thanh và video đầu vào trong cùng một luồng suy luận. Cửa sổ ngữ cảnh của mô hình hỗ trợ lên đến 1.048.576 token, cho phép phân tích mối quan hệ vật lý và ngữ cảnh không gian giữa các đối tượng trong video.\n\nĐiểm khác biệt lớn nhất nằm ở `Interactions API`. Thay vì gửi một request độc lập mỗi lần sinh video, nhà phát triển có thể truyền tham số `previous_interaction_id`. Khi nhận được ID này, mô hình giữ nguyên bố cục khung hình cũ và chỉ can thiệp vào đúng thuộc tính được chỉ định trong câu lệnh tiếp theo (ví dụ: đổi chất liệu bề mặt, thay đổi ánh sáng, làm ẩn một vật thể).\n\n> Related: [Kiểm tra độ thân thiện của website với AI Agent: Cơ chế hoạt động của Vercel Is Agentic](https://hecigo.com/blog/kiem-tra-do-than-thien-cua-website-voi-ai-agent-co-che-hoat-dong-cua-vercel-is-a/): Is Agentic chấm hecigo.com 73/100. Bốn vòng vá đưa nó lên 100. Lỗi đắt nhất là một phép kiểm mà chính bài này từng lấy làm ví dụ về việc làm đúng.","entities":["org:hecigo"],"updated":"2026-08-28T13:48:11.882Z"}
{"id":"post:gemini-omni-11-flash-co-che-tao-va-bien-tap-video-qua-interactions-api:vi:4-nâng-cấp-kỹ-thuật-trong-phiên-bản-omni-11-flash","url":"https://hecigo.com/blog/gemini-omni-11-flash-co-che-tao-va-bien-tap-video-qua-interactions-api/#4-nâng-cấp-kỹ-thuật-trong-phiên-bản-omni-11-flash","locale":"vi","type":"post","title":"Gemini Omni 1.1 Flash: Cơ chế tạo và biên tập video qua Interactions API","headingPath":["4 nâng cấp kỹ thuật trong phiên bản Omni 1.1 Flash"],"text":"Trong [công bố về Gemini Omni 1.1 Flash trên blog Google](https://blog.google/innovation-and-ai/technology/developers-tools/build-with-gemini-omni-1-1-flash/), Google DeepMind bổ sung thêm 4 tính năng điều khiển cho luồng làm việc tự động:\n\n### 1. Kéo dài phân cảnh (Scene Extension) lên 40 giây\nTrước đây, các mô hình video thường chỉ tham chiếu được 1 giây cuối cùng của clip, dẫn đến hiện tượng khung hình sau bị biến dạng hoặc trượt góc nhìn. Omni 1.1 Flash phân tích ngữ cảnh của 10 giây video liền trước. Người phát triển có thể mở rộng video theo từng bước 10 giây, đạt tổng thời lượng tối đa 40 giây cho mỗi cảnh quay liền mạch.\n\n### 2. Nội suy giữa khung hình đầu và cuối (Keyframe Interpolation)\nCho phép lập trình viên chỉ định cụ thể frame bắt đầu và frame kết thúc. Mô hình tính toán và sinh ra toàn bộ chuyển động ở giữa, hỗ trợ các thao tác quay phức tạp như whip-pan, chuyển góc 360 độ hoặc tạo các đoạn video loop mượt mà không bị giật khựng.\n\n### 3. Bản dựng nháp 360p tiết kiệm chi phí\nTrong quá trình thử nghiệm câu lệnh (prompting), việc render trực tiếp độ phân giải cao gây tốn chi phí và tăng độ trễ. Chế độ render 360p cho tốc độ tạo nhanh hơn tới 60% với chi phí tính toán chỉ bằng 1/3 so với độ phân giải 720p tiêu chuẩn.\n\n### 4. Nâng cấp độ phân giải 4K và video tham chiếu\nSau khi kiểm tra bản dựng nháp đạt yêu cầu, luồng xử lý có thể yêu cầu mô hình upscale trực tiếp lên 1080p hoặc 4K. Ngoài ra, mô hình cho phép nạp tối đa 3 giây video tham chiếu trong payload đa phương thức để học chuyển động của nhân vật thật.","entities":[],"updated":"2026-08-28T13:48:11.882Z"}
{"id":"post:gemini-omni-11-flash-co-che-tao-va-bien-tap-video-qua-interactions-api:vi:triển-khai-code-thực-tế-tạo-và-chỉnh-sửa-video","url":"https://hecigo.com/blog/gemini-omni-11-flash-co-che-tao-va-bien-tap-video-qua-interactions-api/#triển-khai-code-thực-tế-tạo-và-chỉnh-sửa-video","locale":"vi","type":"post","title":"Gemini Omni 1.1 Flash: Cơ chế tạo và biên tập video qua Interactions API","headingPath":["Triển khai code thực tế: Tạo và chỉnh sửa video"],"text":"Dưới đây là quy trình hai bước bằng TypeScript sử dụng `@google/genai` SDK: tạo video gốc từ văn bản và sau đó chỉnh sửa video đó bằng cách trích xuất ID tương tác.\n\n```typescript\nimport { GoogleGenAI } from '@google/genai';\nimport * as fs from 'fs';\n\nconst ai = new GoogleGenAI({\n  apiKey: process.env.GEMINI_API_KEY,\n});\n\nasync function generateAndEditVideo() {\n  // Buoc 1: Tao video ban dau voi ty le khung hinh 16:9\n  const initialResponse = await ai.interactions.create({\n    model: 'gemini-omni-1.1-flash',\n    input: 'A red sports car driving on a coastal road at sunset, continuous shot.',\n    response_format: {\n      type: 'video',\n      aspect_ratio: '16:9',\n    },\n  });\n\n  const interactionId = initialResponse.id;\n  console.log(`Interaction ID: ${interactionId}`);\n\n  if (initialResponse.output_video?.data) {\n    fs.writeFileSync(\n      'step1_initial.mp4',\n      Buffer.from(initialResponse.output_video.data, 'base64')\n    );\n  }\n\n  // Buoc 2: Chinh sua video dua tren ID cu ma khong can upload lai file\n  const editedResponse = await ai.interactions.create({\n    model: 'gemini-omni-1.1-flash',\n    previous_interaction_id: interactionId,\n    input: 'Change the weather to heavy rain with wet road reflections, keep the same car motion.',\n  });\n\n  if (editedResponse.output_video?.data) {\n    fs.writeFileSync(\n      'step2_edited.mp4',\n      Buffer.from(editedResponse.output_video.data, 'base64')\n    );\n  }\n}\n\ngenerateAndEditVideo().catch(console.error);\n```\n\nTheo [hướng dẫn phát triển trên Google AI Docs](https://ai.google.dev/gemini-api/docs/omni?hl=vi), khi thao tác trực tiếp qua REST API thay vì SDK, dữ liệu video Base64 không nằm trong trường tiện ích `output_video` mà nằm trong mảng `steps` của payload phản hồi JSON (`steps[i].content[j].data`).","entities":[],"updated":"2026-08-28T13:48:11.882Z"}
{"id":"post:gemini-omni-11-flash-co-che-tao-va-bien-tap-video-qua-interactions-api:vi:xử-lý-hạ-tầng-middleware-đồng-bộ-file-và-quản-lý-id","url":"https://hecigo.com/blog/gemini-omni-11-flash-co-che-tao-va-bien-tap-video-qua-interactions-api/#xử-lý-hạ-tầng-middleware-đồng-bộ-file-và-quản-lý-id","locale":"vi","type":"post","title":"Gemini Omni 1.1 Flash: Cơ chế tạo và biên tập video qua Interactions API","headingPath":["Xử lý hạ tầng middleware: Đồng bộ file và quản lý ID"],"text":"Khi đưa Gemini Omni Flash vào dây chuyền sản xuất media tự động, rào cản kỹ thuật thường không nằm ở câu lệnh prompt mà nằm ở lớp middleware trung gian điều phối dữ liệu:\n\n| Hạng mục kỹ thuật | Vấn đề phát sinh | Giải pháp kiến trúc | Cấu hình tham số |\n| :--- | :--- | :--- | :--- |\n| **Thời gian render** | HTTP timeout khi chờ sinh video (thuờng mất 20 - 90 giây) | Chuyển sang kiến trúc bất đồng bộ (Async Queue) với worker xử lý | Timeout gateway tối thiểu 180s |\n| **Dung lượng file Base64** | Video 10 giây chuẩn nén nhẹ vẫn chiếm vài chục MB chuỗi string | Tránh lưu string trong RAM; pipe trực tiếp stream Base64 xuống S3/GCS | Buffer streaming chunk 64KB |\n| **Quản lý trạng thái** | `previous_interaction_id` hết hạn hoặc thất lạc giữa các worker | Lưu ID phiên làm việc vào Redis kèm timestamp và metadata scene | TTL Redis đặt 24 giờ |\n| **Định dạng đầu vào** | Video tải lên cần đồng bộ frame rate và codec | Sử dụng Files API để upload trước khi gọi lệnh suy luận | Kiểm tra trạng thái file = ACTIVE |\n\nĐối với các video người dùng tự tải lên để biên tập, lập trình viên cần đẩy file qua `Files API` trước, chờ tiến trình xử lý trên máy chủ của Google hoàn tất (`state === 'ACTIVE'`), sau đó mới truyền `uri` vào `Interactions API`.","entities":[],"updated":"2026-08-28T13:48:11.882Z"}
{"id":"post:gemini-omni-11-flash-co-che-tao-va-bien-tap-video-qua-interactions-api:vi:watermark-synthid-và-xác-thực-nguồn-gốc-c2pa","url":"https://hecigo.com/blog/gemini-omni-11-flash-co-che-tao-va-bien-tap-video-qua-interactions-api/#watermark-synthid-và-xác-thực-nguồn-gốc-c2pa","locale":"vi","type":"post","title":"Gemini Omni 1.1 Flash: Cơ chế tạo và biên tập video qua Interactions API","headingPath":["Watermark SynthID và xác thực nguồn gốc C2PA"],"text":"Mọi video xuất ra từ Omni 1.1 Flash đều được nhúng watermark kỹ thuật số vô hình bằng công nghệ SynthID của Google DeepMind, đồng thời kèm theo metadata chuẩn C2PA. Hệ thống này cho phép các công cụ tìm kiếm và trình duyệt nhận diện được nguồn gốc tạo bởi AI mà không làm suy giảm chất lượng hiển thị của từng khung hình.\n\nTrong các quy trình xuất bản nội dung tự động ra các nền tảng mạng xã hội hoặc hệ thống quản lý nội dung (CMS), lớp middleware cần đảm bảo giữ nguyên dải metadata C2PA này khi thực hiện các tác vụ phụ như cắt tỉa định dạng (transcoding) hay nén tệp.\n\n> **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.\n\n> Related: [Đọc tiếp: 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...","entities":["org:hecigo"],"updated":"2026-08-28T13:48:11.882Z"}
{"id":"post:gemini-omni-11-flash-co-che-tao-va-bien-tap-video-qua-interactions-api:vi:nguồn-tham-khảo","url":"https://hecigo.com/blog/gemini-omni-11-flash-co-che-tao-va-bien-tap-video-qua-interactions-api/#nguồn-tham-khảo","locale":"vi","type":"post","title":"Gemini Omni 1.1 Flash: Cơ chế tạo và biên tập video qua Interactions API","headingPath":["Nguồn tham khảo"],"text":"- [Build with Gemini Omni 1.1 Flash](https://blog.google/innovation-and-ai/technology/developers-tools/build-with-gemini-omni-1-1-flash/) - Google\n- [Gemini Omni Flash | Gemini API | Google AI for Developers](https://ai.google.dev/gemini-api/docs/models/gemini-omni-flash?hl=vi) - Google AI for Developers\n- [Tạo và chỉnh sửa video bằng Gemini Omni Flash](https://ai.google.dev/gemini-api/docs/omni?hl=vi) - Google AI for Developers","entities":[],"updated":"2026-08-28T13:48:11.882Z"}
{"id":"post:kiem-tra-do-than-thien-cua-website-voi-ai-agent-co-che-hoat-dong-cua-vercel-is-a:vi:intro","url":"https://hecigo.com/blog/kiem-tra-do-than-thien-cua-website-voi-ai-agent-co-che-hoat-dong-cua-vercel-is-a/","locale":"vi","type":"post","title":"Kiểm tra độ thân thiện của website với AI Agent: Cơ chế hoạt động của Vercel Is Agentic","headingPath":[],"text":"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. Bốn vòng vá thì lên **100/100**.\n\n| Vòng | Điểm | Việc đã làm |\n| --- | --- | --- |\n| Gốc | 73 | |\n| 1 | 79 | Tám mục: negotiation, 404, JSON-LD, canonical, trang neo niềm tin |\n| 2 | 82 | Tắt khối managed robots.txt của CDN. Không có dòng code nào |\n| 3 | 93 | `/openapi.json`, lỗi trả JSON, và vá content-type sai trên đường dẫn `.md` |\n| 4 | 100 | Đảo mặc định của thân lỗi sang JSON, sau khi một mục Essential fail trở lại |\n\nVòng bốn là vòng đáng đọc nhất, vì thứ bị chấm trượt là một phép kiểm mà chính bài này, ở bản đăng ngày 24/08, đã lấy làm ví dụ về việc làm đúng. Phần sửa nằm ở mục cuối và không được viết đè lên chỗ sai.\n\nCon số 79 ở vòng một 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ố.\n\nBài này gồm hai phần: cơ chế chấm điểm hoạt động ra sao, và các 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.","entities":["org:hecigo"],"updated":"2026-08-23T05:58:58.369Z"}
{"id":"post:kiem-tra-do-than-thien-cua-website-voi-ai-agent-co-che-hoat-dong-cua-vercel-is-a:vi:is-agentic-127-check-trên-bốn-tầng","url":"https://hecigo.com/blog/kiem-tra-do-than-thien-cua-website-voi-ai-agent-co-che-hoat-dong-cua-vercel-is-a/#is-agentic-127-check-trên-bốn-tầng","locale":"vi","type":"post","title":"Kiểm tra độ thân thiện của website với AI Agent: Cơ chế hoạt động của Vercel Is Agentic","headingPath":["Is Agentic: 127 check trên bốn tầng"],"text":"Đâ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.\n\nBộ 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.\n\nQuá trình quét đi qua ba việc:\n\n1. **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.\n2. **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.\n3. **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.","entities":[],"updated":"2026-08-23T05:58:58.369Z"}
{"id":"post:kiem-tra-do-than-thien-cua-website-voi-ai-agent-co-che-hoat-dong-cua-vercel-is-a:vi:hai-nhóm-tiêu-chí-essential-và-recommended","url":"https://hecigo.com/blog/kiem-tra-do-than-thien-cua-website-voi-ai-agent-co-che-hoat-dong-cua-vercel-is-a/#hai-nhóm-tiêu-chí-essential-và-recommended","locale":"vi","type":"post","title":"Kiểm tra độ thân thiện của website với AI Agent: Cơ chế hoạt động của Vercel Is Agentic","headingPath":["Hai nhóm tiêu chí: Essential và Recommended"],"text":"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:\n\n| Nhóm kiểm tra | Mục tiêu kỹ thuật | Tác động khi lỗi |\n| --- | --- | --- |\n| **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 |\n| **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ứ đó |\n| **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 |\n\nĐ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.\n\n> 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...","entities":["org:hecigo"],"updated":"2026-08-23T05:58:58.369Z"}
{"id":"post:kiem-tra-do-than-thien-cua-website-voi-ai-agent-co-che-hoat-dong-cua-vercel-is-a:vi:ba-chuẩn-kết-nối-llmstxt-markdown-negotiation-và-mcp","url":"https://hecigo.com/blog/kiem-tra-do-than-thien-cua-website-voi-ai-agent-co-che-hoat-dong-cua-vercel-is-a/#ba-chuẩn-kết-nối-llmstxt-markdown-negotiation-và-mcp","locale":"vi","type":"post","title":"Kiểm tra độ thân thiện của website với AI Agent: Cơ chế hoạt động của Vercel Is Agentic","headingPath":["Ba chuẩn kết nối: llms.txt, Markdown negotiation và MCP"],"text":"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:\n\n### 1. File chỉ dẫn /llms.txt\n\nĐặ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.\n\nPhầ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.\n\nĐ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.\n\n### 2. Markdown content negotiation\n\nKhi 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:\n\n| URL | HTML | Markdown | Giảm |\n| --- | --- | --- | --- |\n| Trang chủ | 215.970 bytes | 4.355 bytes | 98% |\n| Một bài blog kỹ thuật | 115.241 bytes | 8.439 bytes | 93% |\n| Một bài dài hơn | 204.351 bytes | 12.790 bytes | 94% |\n\nTrang 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%.\n\n### 3. Khai báo Model Context Protocol","entities":["org:hecigo"],"updated":"2026-08-23T05:58:58.369Z"}
{"id":"post:kiem-tra-do-than-thien-cua-website-voi-ai-agent-co-che-hoat-dong-cua-vercel-is-a:vi:ba-chuẩn-kết-nối-llmstxt-markdown-negotiation-và-mcp~2","url":"https://hecigo.com/blog/kiem-tra-do-than-thien-cua-website-voi-ai-agent-co-che-hoat-dong-cua-vercel-is-a/#ba-chuẩn-kết-nối-llmstxt-markdown-negotiation-và-mcp","locale":"vi","type":"post","title":"Kiểm tra độ thân thiện của website với AI Agent: Cơ chế hoạt động của Vercel Is Agentic","headingPath":["Ba chuẩn kết nối: llms.txt, Markdown negotiation và MCP"],"text":"Để 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.\n\nhecigo hiện **không** publish MCP server nào. Bản đầu của trang `/developers` nói thẳng điều đó, và phần cuối bài sẽ cho thấy vì sao chính câu nói thẳng ấy lại là thứ tốn điểm. Dù sao thì khai một endpoint không tồn tại vẫn tốn nhiều uy tín hơn là thiếu nó.","entities":["org:hecigo"],"updated":"2026-08-23T05:58:58.369Z"}
{"id":"post:kiem-tra-do-than-thien-cua-website-voi-ai-agent-co-che-hoat-dong-cua-vercel-is-a:vi:cái-bẫy-q-value-trong-content-negotiation","url":"https://hecigo.com/blog/kiem-tra-do-than-thien-cua-website-voi-ai-agent-co-che-hoat-dong-cua-vercel-is-a/#cái-bẫy-q-value-trong-content-negotiation","locale":"vi","type":"post","title":"Kiểm tra độ thân thiện của website với AI Agent: Cơ chế hoạt động của Vercel Is Agentic","headingPath":["Cái bẫy q-value trong content negotiation"],"text":"Đây là chỗ bản đầu của bài này viết sai, nên sửa ngay tại đây.\n\nCách viết trực giác là kiểm chuỗi:\n\n```typescript\n// SAI. Đừng dùng.\nconst isMarkdown = acceptHeader.includes('text/markdown')\n```\n\nNó 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.\n\nHeader `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*.\n\n```typescript\ntype Entry = { type: string; subtype: string; q: number }\n\nfunction parseAccept(header: string): Entry[] {\n  return header.split(',').flatMap((raw) => {\n    const [range, ...params] = raw.split(';')\n    const [type, subtype] = range.trim().toLowerCase().split('/')\n    if (!type || !subtype) return []\n    const q = params\n      .map((p) => p.trim().toLowerCase())\n      .filter((p) => p.startsWith('q='))\n      .map((p) => Number.parseFloat(p.slice(2)))\n      .find(Number.isFinite) ?? 1\n    return [{ type, subtype, q }]\n  })\n}\n\n// Độ cụ thể: khớp đúng 3, text/* 2, ký tự đại diện 1, không khớp 0.\nfunction specificity(e: Entry, mime: string): number {\n  const [type, subtype] = mime.split('/')\n  if (e.type === '*' && e.subtype === '*') return 1\n  if (e.type !== type) return 0\n  if (e.subtype === '*') return 2\n  return e.subtype === subtype ? 3 : 0\n}","entities":[],"updated":"2026-08-23T05:58:58.369Z"}
{"id":"post:kiem-tra-do-than-thien-cua-website-voi-ai-agent-co-che-hoat-dong-cua-vercel-is-a:vi:cái-bẫy-q-value-trong-content-negotiation~2","url":"https://hecigo.com/blog/kiem-tra-do-than-thien-cua-website-voi-ai-agent-co-che-hoat-dong-cua-vercel-is-a/#cái-bẫy-q-value-trong-content-negotiation","locale":"vi","type":"post","title":"Kiểm tra độ thân thiện của website với AI Agent: Cơ chế hoạt động của Vercel Is Agentic","headingPath":["Cái bẫy q-value trong content negotiation"],"text":"// Đ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\n// trong các entry khớp. Đúng chỗ này mới làm header thật của Chrome ra HTML.\nfunction scoreFor(entries: Entry[], mime: string): number {\n  let bestSpec = 0\n  let bestQ = 0\n  for (const e of entries) {\n    const s = specificity(e, mime)\n    if (s === 0) continue\n    if (s > bestSpec || (s === bestSpec && e.q > bestQ)) {\n      bestSpec = s\n      bestQ = e.q\n    }\n  }\n  return bestQ\n}\n\n/** Trả về định dạng nên phục vụ, hoặc null để trả 406. available[0] là mặc định. */\nexport function negotiate(header: string | null, available: string[]): string | null {\n  if (header === null) return available[0] // không có Accept nghĩa là không ràng buộc\n  const entries = parseAccept(header)\n  if (entries.length === 0) return null\n\n  // 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ả:\n  // \"text/markdown;q=0\" nghĩa là \"gì cũng được trừ Markdown\".\n  if (entries.every((e) => e.q === 0)) {\n    return available.find((m) => !entries.some((e) => specificity(e, m) > 0)) ?? null\n  }\n\n  let chosen: string | null = null\n  let top = 0\n  for (const mime of available) {\n    const s = scoreFor(entries, mime)\n    if (s > top) {\n      chosen = mime // so sánh lớn hơn hẳn, để thứ tự available làm phép phá hoà\n      top = s\n    }\n  }\n  return top > 0 ? chosen : null\n}\n```\n\nBộ 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:","entities":[],"updated":"2026-08-23T05:58:58.369Z"}
{"id":"post:kiem-tra-do-than-thien-cua-website-voi-ai-agent-co-che-hoat-dong-cua-vercel-is-a:vi:cái-bẫy-q-value-trong-content-negotiation~3","url":"https://hecigo.com/blog/kiem-tra-do-than-thien-cua-website-voi-ai-agent-co-che-hoat-dong-cua-vercel-is-a/#cái-bẫy-q-value-trong-content-negotiation","locale":"vi","type":"post","title":"Kiểm tra độ thân thiện của website với AI Agent: Cơ chế hoạt động của Vercel Is Agentic","headingPath":["Cái bẫy q-value trong content negotiation"],"text":"| Accept | Server có | Phải trả |\n| --- | --- | --- |\n| `text/markdown` | md, html | markdown |\n| `text/markdown, text/html;q=0.8` | md, html | markdown |\n| `text/html` | md, html | html |\n| `text/markdown;q=0, text/html` | md, html | html |\n| `text/markdown;q=0` | chỉ md | 406 |\n| không có Accept | md, html | html |\n| ký tự đại diện | md, html | html |\n\nDò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.\n\nPhầ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:\n\n```typescript\nexport function middleware(request: NextRequest) {\n  const chosen = negotiate(request.headers.get('accept'), ['text/html', 'text/markdown'])\n\n  if (chosen === null) {\n    return new NextResponse('406 Not Acceptable\\n\\ntext/html\\ntext/markdown\\n', {\n      status: 406,\n      headers: { Vary: 'Accept', 'Cache-Control': 'no-store' },\n    })\n  }\n\n  const response =\n    chosen === 'text/markdown'\n      ? NextResponse.rewrite(new URL(`${request.nextUrl.pathname}.md`, request.url))\n      : NextResponse.next()\n\n  // Vary đặt trên MỌI nhánh, kể cả nhánh HTML. Thiếu nó thì bản nào tới CDN\n  // trước sẽ được phục vụ cho tất cả những ai tới sau.\n  response.headers.set('Vary', 'Accept, Accept-Encoding')\n  return response\n}\n```\n\nĐừ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.","entities":[],"updated":"2026-08-23T05:58:58.369Z"}
{"id":"post:kiem-tra-do-than-thien-cua-website-voi-ai-agent-co-che-hoat-dong-cua-vercel-is-a:vi:tám-lỗi-của-hecigocom-và-cách-vá","url":"https://hecigo.com/blog/kiem-tra-do-than-thien-cua-website-voi-ai-agent-co-che-hoat-dong-cua-vercel-is-a/#tám-lỗi-của-hecigocom-và-cách-vá","locale":"vi","type":"post","title":"Kiểm tra độ thân thiện của website với AI Agent: Cơ chế hoạt động của Vercel Is Agentic","headingPath":["Tám lỗi của hecigo.com và cách vá"],"text":"Đây là báo cáo thật, không phải ví dụ. Điểm gốc 73/100.\n\n| Mục | Trạng thái | Nguyên nhân | Cách vá |\n| --- | --- | --- | --- |\n| 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 |\n| Markdown negotiation | Fail | `Accept: text/markdown` trả về `text/html`, `Vary` thiếu `Accept` | Edge function làm negotiation, đặt `Vary: Accept, Accept-Encoding` |\n| 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 |\n| JSON-LD | Fail | Trang chủ không có khối structured data nào | Đồ thị Organization và WebSite nối bằng `@id` |\n| 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 |\n| Organization schema | Fail | Hệ quả của mục JSON-LD | `contactPoint` và `address` kiểu `PostalAddress` |\n| Metadata | Một nửa | Thiếu thẻ canonical | Đặt canonical theo từng trang |\n| 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 |\n\nHai chỗ đáng nói kỹ hơn vì chúng là bẫy chứ không phải việc thiếu.\n\n**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.","entities":["org:hecigo"],"updated":"2026-08-23T05:58:58.369Z"}
{"id":"post:kiem-tra-do-than-thien-cua-website-voi-ai-agent-co-che-hoat-dong-cua-vercel-is-a:vi:tám-lỗi-của-hecigocom-và-cách-vá~2","url":"https://hecigo.com/blog/kiem-tra-do-than-thien-cua-website-voi-ai-agent-co-che-hoat-dong-cua-vercel-is-a/#tám-lỗi-của-hecigocom-và-cách-vá","locale":"vi","type":"post","title":"Kiểm tra độ thân thiện của website với AI Agent: Cơ chế hoạt động của Vercel Is Agentic","headingPath":["Tám lỗi của hecigo.com và cách vá"],"text":"**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.\n\nĐ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.\n\n### Quét lại: 79/100, và một bất ngờ\n\nCả 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:\n\n- 404: *\"Nonexistent paths return HTTP 404 with markdown guidance for agents - the strongest 404 contract\"*\n- Negotiation: *\"Canonical URL serves text/markdown and text/html via Accept negotiation with Vary: Accept\"*\n\nBề 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:\n\n| | Trước | Sau |\n| --- | --- | --- |\n| Essential | 5 / 7 check, 62,9 điểm | 6 / 9 check, 59,3 điểm |\n| Recommended | 3 / 9 check, 8,9 điểm | 12 / 17 check, 14,5 điểm |\n| Bonus | 7 tín hiệu, +1,6 | 15 tín hiệu, +3,7 |\n\nSố 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.\n\nNguyê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.","entities":["org:hecigo"],"updated":"2026-08-23T05:58:58.369Z"}
{"id":"post:kiem-tra-do-than-thien-cua-website-voi-ai-agent-co-che-hoat-dong-cua-vercel-is-a:vi:tám-lỗi-của-hecigocom-và-cách-vá~3","url":"https://hecigo.com/blog/kiem-tra-do-than-thien-cua-website-voi-ai-agent-co-che-hoat-dong-cua-vercel-is-a/#tám-lỗi-của-hecigocom-và-cách-vá","locale":"vi","type":"post","title":"Kiểm tra độ thân thiện của website với AI Agent: Cơ chế hoạt động của Vercel Is Agentic","headingPath":["Tám lỗi của hecigo.com và cách vá"],"text":"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.","entities":[],"updated":"2026-08-23T05:58:58.369Z"}
{"id":"post:kiem-tra-do-than-thien-cua-website-voi-ai-agent-co-che-hoat-dong-cua-vercel-is-a:vi:thứ-không-nằm-trong-code","url":"https://hecigo.com/blog/kiem-tra-do-than-thien-cua-website-voi-ai-agent-co-che-hoat-dong-cua-vercel-is-a/#thứ-không-nằm-trong-code","locale":"vi","type":"post","title":"Kiểm tra độ thân thiện của website với AI Agent: Cơ chế hoạt động của Vercel Is Agentic","headingPath":["Thứ không nằm trong code"],"text":"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.\n\nCDN đứ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.\n\nKhố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 ở đó.\n\nNghĩ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.\n\nBa điều rút ra, và điều thứ ba là điều đắt nhất:\n\n- **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.\n- **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- **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.\n\nĐâ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.\n\n### Vá xong: 82/100\n\nCách vá không có dòng code nào: tắt khối managed robots.txt trong dashboard của CDN, để file 89 bytes do site sinh ra đi thẳng ra ngoài. Kiểm bằng đúng phép đo rẻ nhất ở trên:\n\n```bash\n$ curl -s https://hecigo.com/robots.txt | wc -c\n89\n```","entities":["org:hecigo"],"updated":"2026-08-23T05:58:58.369Z"}
{"id":"post:kiem-tra-do-than-thien-cua-website-voi-ai-agent-co-che-hoat-dong-cua-vercel-is-a:vi:thứ-không-nằm-trong-code~2","url":"https://hecigo.com/blog/kiem-tra-do-than-thien-cua-website-voi-ai-agent-co-che-hoat-dong-cua-vercel-is-a/#thứ-không-nằm-trong-code","locale":"vi","type":"post","title":"Kiểm tra độ thân thiện của website với AI Agent: Cơ chế hoạt động của Vercel Is Agentic","headingPath":["Thứ không nằm trong code"],"text":"Quét lại: **82/100**. Ba điểm cho một setting, và ba điểm đó không phản ánh đúng giá trị của việc sửa. Trước khi tắt, toàn bộ lớp content negotiation dựng ở phần trên vô hình với ClaudeBot và GPTBot; bộ quét vẫn chấm nó xanh vì bộ quét không tự nhận là ClaudeBot. Điểm số đo cái site *có thể* làm, không đo cái nhóm agent thật *được phép* thấy.\n\nNói cách khác: 73 → 79 là sáu điểm cho một buổi viết code, còn 79 → 82 là ba điểm cho một cú click. Xếp theo tác động thật lên agent thì thứ tự ngược lại.\n\n### Hai check Essential, và ba cách phản ứng\n\nỞ mốc 82, hai mục Essential vẫn fail, cả hai đều là hệ quả của bề mặt API mà chính trang `/developers` đã mở ra: `OpenAPI spec` và `JSON error responses`. Báo cáo lúc đó xếp bề mặt API ở mức \"Needs work\", 3 trên 8 check.\n\nCó ba đường đi, và hai trong số đó sai:\n\n- **Gỡ mọi nhắc đến API khỏi `/developers`** để bộ quét đừng kích hoạt bề mặt đó. Điểm lên ngay. Đây là chỉnh mình cho vừa thước đo, và nó xoá mất một thông tin có ích thật cho người đọc.\n- **Dựng một API giả** chỉ để có cái mà khai. Tệ hơn: một endpoint chết còn tốn uy tín hơn là không có, đúng như phần MCP ở trên đã nói.\n- **Mô tả đúng thứ đang chạy.** Site này *có* một bề mặt máy đọc thật: `llms.txt`, `blog-index.json`, `sitemap.xml`, và negotiation trên mọi URL canonical. Chúng có thật, chúng trả lời thật, và chúng chưa từng được mô tả hình thức.\n\nĐường thứ ba là đường duy nhất không phải nói dối, nên [`/openapi.json`](https://hecigo.com/openapi.json) giờ tồn tại. Nó khai đúng những gì có: toàn GET, không API key, không đường ghi, `security: []`. Nó được sinh ra từ cùng cái manifest mà edge function dùng để negotiation, nên một bài bị gỡ không thể còn sót lại trong đó.\n\nVà lỗi giờ trả về đúng định dạng người gọi hỏi:","entities":["org:hecigo"],"updated":"2026-08-23T05:58:58.369Z"}
{"id":"post:kiem-tra-do-than-thien-cua-website-voi-ai-agent-co-che-hoat-dong-cua-vercel-is-a:vi:thứ-không-nằm-trong-code~3","url":"https://hecigo.com/blog/kiem-tra-do-than-thien-cua-website-voi-ai-agent-co-che-hoat-dong-cua-vercel-is-a/#thứ-không-nằm-trong-code","locale":"vi","type":"post","title":"Kiểm tra độ thân thiện của website với AI Agent: Cơ chế hoạt động của Vercel Is Agentic","headingPath":["Thứ không nằm trong code"],"text":"```bash\n$ curl -s -H \"Accept: application/json\" https://hecigo.com/khong-co-trang-nay/\n```\n\n```json\n{\n  \"type\": \"https://hecigo.com/developers/#http-404\",\n  \"title\": \"Not Found\",\n  \"status\": 404,\n  \"instance\": \"/khong-co-trang-nay/\",\n  \"links\": { \"agentIndex\": \"https://hecigo.com/llms.txt\" }\n}\n```\n\nChỗ đáng nói không phải cái body, mà là **mã trạng thái được chọn theo bằng chứng**. Đường dẫn có thật nhưng không có bản JSON thì trả 406 kèm danh sách hai định dạng nó thật sự có. Đường dẫn không tồn tại thì trả 404. Gộp hai cái làm một sẽ dạy agent rằng một đường chết là có thật và đáng thử lại bằng định dạng khác, tức là đúng loại tín hiệu sai mà cả bài này đang chống.\n\nMột cái bẫy nữa nằm ở chỗ *ai* được nhận JSON. Điều kiện là header `Accept` phải **gọi tên** JSON; ký tự đại diện `*/*` mà mọi trình duyệt đều gửi thì không tính. Bỏ luật đó đi thì một người gõ nhầm URL sẽ nhận về một cục JSON thay vì trang 404. Đây chính xác là cái bẫy q-value ở phần trên, mặc một bộ đồ khác.\n\n> **Đoạn trên là chỗ bài này viết sai, và nó đứng nguyên ở đây vì đó là điều chúng tôi tin ngày 24/08.** Mục tiêu của nó đúng, phép kiểm thì sai, và hai ngày sau bộ quét chấm trượt đúng chỗ đó. [Vòng bốn](#vòng-bốn-cái-bẫy-ký-tự-đại-diện-và-100100) mổ nó ra.","entities":["org:hecigo"],"updated":"2026-08-23T05:58:58.369Z"}
{"id":"post:kiem-tra-do-than-thien-cua-website-voi-ai-agent-co-che-hoat-dong-cua-vercel-is-a:vi:chỗ-tiếp-giáp-thứ-ba-404-đúng-content-type-sai","url":"https://hecigo.com/blog/kiem-tra-do-than-thien-cua-website-voi-ai-agent-co-che-hoat-dong-cua-vercel-is-a/#chỗ-tiếp-giáp-thứ-ba-404-đúng-content-type-sai","locale":"vi","type":"post","title":"Kiểm tra độ thân thiện của website với AI Agent: Cơ chế hoạt động của Vercel Is Agentic","headingPath":["Chỗ tiếp giáp thứ ba: 404 đúng, content-type sai"],"text":"Sau khi mọi mục trên đã xanh, một lần gõ thử vào đường dẫn `.md` bịa ra:\n\n```bash\n$ curl -sI https://hecigo.com/blog/khong-ton-tai.md\nHTTP/2 404\ncontent-type: text/markdown; charset=utf-8\n```\n\nMã trạng thái đúng. Content-type đúng thứ agent đang hỏi. Body là trang 404 HTML đầy đủ, 58.838 byte, mở đầu bằng `<!DOCTYPE html>`.\n\nHeader nói Markdown, body là HTML. Kiểu sai này tệ hơn một lỗi thẳng thừng: agent tin header, nạp `<!DOCTYPE html>` vào chỗ nó chờ Markdown, và thứ rút ra được từ đó là rác. Một `curl -I` không bao giờ thấy, vì `curl -I` chỉ đọc header.\n\nLỗi xảy ra với **mọi** đường dẫn `.md` không tồn tại, và không phụ thuộc header `Accept`: thử lại với `*/*`, `application/json` và `text/markdown` cho ra ba kết quả giống hệt nhau. Trong khi đó `/khong-ton-tai.txt` trả về `404 text/html`, tức là đúng. Chỉ đuôi `.md` sai.\n\nNguyên nhân nằm ở một dòng cấu hình của edge function, kèm nguyên một comment giải thích vì sao dòng đó tồn tại:\n\n```ts\nexcludedPath: [\n  '/_next/*',\n  '/*.md',    // loại ra để rewrite trong handler không chạy lại chính function này\n  '/*.txt',\n]\n```\n\nHai hệ thống, mỗi bên đều đúng phần của mình:\n\n- **Edge function đúng khi tránh xa file tĩnh.** Một file `.md` đã là một biểu diễn cụ thể, không còn gì để negotiation. Loại nó khỏi phạm vi chạy là quyết định đúng.\n- **Netlify đúng khi suy content-type từ đuôi đường dẫn.** Mọi web server đều làm thế.\n\nCái sai chỉ tồn tại ở chỗ hai luật gặp nhau. Một đường dẫn `.md` **không tồn tại** thì không có file nào để suy kiểu, nhưng cái đuôi thì vẫn còn đó, nên Netlify vẫn dán nhãn `text/markdown` lên trang 404 HTML. Không bên nào sai. Chỗ tiếp giáp sai.\n\n### Chỗ đáng ngại khi vá","entities":["org:hecigo"],"updated":"2026-08-23T05:58:58.369Z"}
{"id":"post:kiem-tra-do-than-thien-cua-website-voi-ai-agent-co-che-hoat-dong-cua-vercel-is-a:vi:chỗ-tiếp-giáp-thứ-ba-404-đúng-content-type-sai~2","url":"https://hecigo.com/blog/kiem-tra-do-than-thien-cua-website-voi-ai-agent-co-che-hoat-dong-cua-vercel-is-a/#chỗ-tiếp-giáp-thứ-ba-404-đúng-content-type-sai","locale":"vi","type":"post","title":"Kiểm tra độ thân thiện của website với AI Agent: Cơ chế hoạt động của Vercel Is Agentic","headingPath":["Chỗ tiếp giáp thứ ba: 404 đúng, content-type sai"],"text":"Cách vá nghe đơn giản: bỏ `/*.md` khỏi danh sách loại trừ, rồi cho hàm quyết định một nhánh riêng cho `.md`. Gọi origin, 404 thì trả về Markdown 404 do mình sinh ra, 200 thì trả file nguyên vẹn.\n\nNhưng cái comment trong đoạn cấu hình trên là một cảnh báo thật, và nó đáng kiểm trước khi đụng vào. Edge function này đứng trước **mọi** trang của site. Sai ở đây không hỏng riêng Markdown, nó hỏng cả site.\n\nCâu hỏi phải trả lời: `context.rewrite()` có chạy lại edge function không? Tài liệu của Netlify trả lời thẳng - có. Một rewrite mở ra chuỗi request mới và chạy lại mọi edge function khớp đường dẫn mới. Muốn lấy file tĩnh mà không chạy lại thì phải dùng `context.next()`.\n\nNghĩa là bỏ `/*.md` ra thì rewrite **thật sự** chạy lại function này. Điều đó nghe như đúng thứ cái comment đang cảnh báo, nhưng nó không thành vòng lặp, vì lần chạy bên trong rơi vào nhánh `.md` mới, và nhánh đó gọi `next()` chứ không gọi `rewrite()`:\n\n```\n/about/  (Accept: text/markdown)\n  -> nhánh markdown, rewrite sang /about.md\n     -> chạy lại function, rơi vào nhánh .md\n        -> next(), lấy file tĩnh, dừng\n```\n\nChuỗi sâu đúng hai tầng rồi kết thúc. Giá phải trả là một lượt gọi edge function thêm cho mỗi request Markdown đã negotiation, và đó là cái giá chấp nhận được.\n\nChỗ này đáng nói không phải vì kết luận, mà vì **kết luận đúng trùng với thứ trực giác báo là nguy hiểm**. Cái comment cũ nói \"loại `.md` ra để khỏi chạy lại\". Đọc xong dễ kết luận rằng chạy lại là hỏng, nên đừng đụng. Thực tế là chạy lại không sao, miễn nhánh mới không rewrite tiếp. Nếu tin comment mà bỏ qua, lỗi content-type còn nguyên.\n\n### Test bắt được nó, sau khi được sửa để bắt\n\nBộ test cũ có sẵn một ca cho đường dẫn `.md`, và nó **pass** suốt thời gian lỗi đang chạy trên production:","entities":[],"updated":"2026-08-23T05:58:58.369Z"}
{"id":"post:kiem-tra-do-than-thien-cua-website-voi-ai-agent-co-che-hoat-dong-cua-vercel-is-a:vi:chỗ-tiếp-giáp-thứ-ba-404-đúng-content-type-sai~3","url":"https://hecigo.com/blog/kiem-tra-do-than-thien-cua-website-voi-ai-agent-co-che-hoat-dong-cua-vercel-is-a/#chỗ-tiếp-giáp-thứ-ba-404-đúng-content-type-sai","locale":"vi","type":"post","title":"Kiểm tra độ thân thiện của website với AI Agent: Cơ chế hoạt động của Vercel Is Agentic","headingPath":["Chỗ tiếp giáp thứ ba: 404 đúng, content-type sai"],"text":"```js\ntest('a .md request is never renegotiated', () => {\n  assert.equal(ask('/index.md', 'text/markdown').action, 'passthrough')\n})\n```\n\nNó khẳng định đúng thứ đang xảy ra, và đúng thứ đang sai. Test không sai về mặt logic - nó chỉ đang canh một quyết định thay vì canh một kết quả.\n\nCa mới canh cái quan trọng, là body:\n\n```js\nconst response = await request('/blog/khong-ton-tai.md', 'text/markdown')\nassert.equal(response.status, 404)\nassert.equal(response.headers.get('content-type'), 'text/markdown; charset=utf-8')\n// Chỉ khẳng định trên header là đúng cái đã để lọt lần đầu.\nassert.equal(body.includes('<!DOCTYPE'), false)\nassert.equal(body.startsWith('# 404 Not found'), true)\n```\n\nCùng với đó, bộ giả lập origin trong test tích hợp được sửa để **rewrite chạy lại handler**, đúng như Netlify làm, kèm trần độ sâu. Trước đó nó gọi thẳng vào file, tức là mô hình hoá một hành vi mà production không có. Giờ nếu ai đó làm nhánh Markdown rewrite vào chính nó, thứ đổ vỡ là một test đỏ chứ không phải mọi trang trên hecigo.com.\n\nPhép kiểm cuối là tắt nhánh vá đi rồi chạy lại: 9 ca đỏ. Một bộ test chưa từng thấy đỏ thì chưa biết nó có canh gì không.\n\nKết quả sau khi vá, cùng một đường dẫn, 1.034 byte thay cho 58.838:\n\n```bash\n$ curl -s -H \"Accept: text/markdown\" https://hecigo.com/blog/khong-ton-tai.md\n# 404 Not found\n\nThere is no page at `/blog/khong-ton-tai.md` on hecigo.com.\n```\n\nBa lần, cùng một mẫu: khối managed robots.txt của CDN chồng lên file site tự sinh, trang `/developers` mở ra một bề mặt API để bị chấm, và giờ là cái đuôi `.md` gặp một đường dẫn không tồn tại. Không lần nào có một hệ thống hỏng. Cả ba lần, mỗi bên đều làm đúng việc của nó, và cái sai nằm ở khoảng giữa - đúng chỗ không ai sở hữu, nên cũng không ai test.","entities":["org:hecigo"],"updated":"2026-08-23T05:58:58.369Z"}
{"id":"post:kiem-tra-do-than-thien-cua-website-voi-ai-agent-co-che-hoat-dong-cua-vercel-is-a:vi:quét-lại-93100","url":"https://hecigo.com/blog/kiem-tra-do-than-thien-cua-website-voi-ai-agent-co-che-hoat-dong-cua-vercel-is-a/#quét-lại-93100","locale":"vi","type":"post","title":"Kiểm tra độ thân thiện của website với AI Agent: Cơ chế hoạt động của Vercel Is Agentic","headingPath":["Quét lại: 93/100"],"text":"Sau khi cả ba thứ trên lên production, bộ quét chấm **93/100**, và đổi nhãn từ \"Ready with a few material gaps\" sang \"Strong technical baseline\".\n\nMười một điểm cho ba thay đổi. Nhưng chỗ đáng nói là **thứ đã không phải làm để có chúng**.\n\nỞ mốc 82, danh sách \"fix these gaps first\" của báo cáo có năm mục, xếp theo thứ tự:\n\n| # | Mục | Xử lý |\n| --- | --- | --- |\n| 01 | OpenAPI spec published | Mô tả đúng bề mặt đang chạy |\n| 02 | JSON error responses | Trả lỗi JSON cho client gọi tên JSON |\n| 03 | Developer resource discoverability | Khai `/openapi.json` trong `llms.txt` và `/developers` |\n| 04 | CLI tool available | Không làm |\n| 05 | MCP server / manifest | Không làm |\n\nBa mục đầu vá được mà không phải nói dối câu nào, vì site này **thật sự có** một bề mặt máy đọc: `llms.txt`, `blog-index.json`, `sitemap.xml`, và negotiation trên mọi URL canonical. Chúng chỉ chưa từng được mô tả hình thức. Viết OpenAPI cho chúng là mô tả, không phải phát minh.\n\nHai mục cuối thì không. Dựng một CLI hay một MCP server chỉ để bộ quét thấy là dựng thứ không ai dùng, rồi phải nuôi nó. Một endpoint chết tốn uy tín hơn là thiếu nó, đúng như phần MCP đầu bài đã nói, và nguyên tắc đó không đổi chỉ vì lần này nó đứng giữa mình và một con số tròn hơn.\n\nNói cách khác, và đây là kết luận của bản đăng ngày 24/08: **93 là trần của việc trung thực**, không phải trần của bộ quét. Bảy điểm còn lại nằm ở hai thứ hecigo không có và không giả vờ có.\n\nNửa đầu câu đó đúng tới hôm nay. Nửa sau sai, và mục tiếp theo là chỗ nó vỡ.","entities":["org:hecigo"],"updated":"2026-08-23T05:58:58.369Z"}
{"id":"post:kiem-tra-do-than-thien-cua-website-voi-ai-agent-co-che-hoat-dong-cua-vercel-is-a:vi:vòng-bốn-cái-bẫy-ký-tự-đại-diện-và-100100","url":"https://hecigo.com/blog/kiem-tra-do-than-thien-cua-website-voi-ai-agent-co-che-hoat-dong-cua-vercel-is-a/#vòng-bốn-cái-bẫy-ký-tự-đại-diện-và-100100","locale":"vi","type":"post","title":"Kiểm tra độ thân thiện của website với AI Agent: Cơ chế hoạt động của Vercel Is Agentic","headingPath":["Vòng bốn: cái bẫy ký tự đại diện, và 100/100"],"text":"Hai ngày sau, quét lại. Mục Essential `JSON error responses` **fail**, với bằng chứng: *\"API does not return JSON error responses (or no API detected)\"*.\n\nPhản xạ đầu tiên là kết luận bộ quét chấm sai, vì phần trên bài này vừa cho thấy lỗi JSON đang chạy. Suýt thì dừng ở đó. Chỉ khi curl cả hai chiều mới thấy chỉ một chiều đúng:\n\n```bash\n$ curl -sI -H \"Accept: application/json\" https://hecigo.com/khong-co\nHTTP/2 404\ncontent-type: application/json          # đúng\n\n$ curl -sI https://hecigo.com/khong-co   # curl mặc định gửi Accept: */*\nHTTP/2 404\ncontent-type: text/html                  # đây là chỗ trượt\n\n$ curl -sI -H \"Accept: application/pdf\" https://hecigo.com/\nHTTP/2 406\ncontent-type: text/plain                 # cũng không phải JSON\n```\n\nBộ quét chấm đúng. Nó gửi header mặc định, nhận về HTML, và một agent lạ không có cách nào đoán ra nó phải hỏi bằng header nào để được trả lời tử tế.\n\n### Luật đúng, phép kiểm sai\n\nQuay lại đúng đoạn ở trên:\n\n> Điều kiện là header `Accept` phải **gọi tên** JSON; ký tự đại diện `*/*` mà mọi trình duyệt đều gửi thì không tính.\n\nMục tiêu của câu đó vẫn đúng: người gõ nhầm URL phải nhận trang 404 dựng sẵn, không phải một cục JSON. Phép kiểm thì sai, và sai ở đúng một chỗ.\n\n`*/*` **không phải** dấu hiệu của trình duyệt. Header thật của Chrome là:\n\n```\ntext/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8\n```\n\nTrình duyệt gọi tên `text/html` ngay từ đầu, còn `*/*;q=0.8` chỉ là cái đuôi nói \"còn lại thì cũng nhận\". Thứ gửi `*/*` trần, hoặc không gửi `Accept` gì cả, là `curl`, `fetch`, `requests`, và mọi thư viện HTTP khác.","entities":["org:hecigo"],"updated":"2026-08-23T05:58:58.369Z"}
{"id":"post:kiem-tra-do-than-thien-cua-website-voi-ai-agent-co-che-hoat-dong-cua-vercel-is-a:vi:vòng-bốn-cái-bẫy-ký-tự-đại-diện-và-100100~2","url":"https://hecigo.com/blog/kiem-tra-do-than-thien-cua-website-voi-ai-agent-co-che-hoat-dong-cua-vercel-is-a/#vòng-bốn-cái-bẫy-ký-tự-đại-diện-và-100100","locale":"vi","type":"post","title":"Kiểm tra độ thân thiện của website với AI Agent: Cơ chế hoạt động của Vercel Is Agentic","headingPath":["Vòng bốn: cái bẫy ký tự đại diện, và 100/100"],"text":"Nghĩa là luật cũ đang dùng dấu hiệu của **máy** để nhận diện **người**. Nó vẫn bảo vệ được người đọc, đúng như mục tiêu, nhưng cái giá là mọi client tự động bị đẩy chung vào nhánh dành cho người.\n\nPhép kiểm đúng nằm ở chiều ngược lại: **hỏi xem client có gọi tên `text/html` hay không.** Đó là thứ duy nhất dây thật sự nói ra được.\n\n| Gửi gì | 404 trả gì |\n| --- | --- |\n| Không gửi, hoặc `*/*` | JSON |\n| `Accept: application/json` | JSON |\n| `Accept: text/markdown` | Bản đồ phục hồi Markdown |\n| `Accept: text/html`, tức là trình duyệt | Trang 404 dựng sẵn, y nguyên |\n\nNgười đọc được bảo vệ đúng như trước. Chỉ có mặc định là đảo.\n\n### Cùng một bộ chọn, thêm một danh sách\n\nPhần cài đặt ngắn hơn phần lập luận, vì bộ chọn q-value ở đầu bài đã có sẵn và đã có test. Chọn định dạng cho thân lỗi chỉ là gọi lại chính hàm `negotiate` đó với một danh sách khác:\n\n```js\n// Thứ tự ưu tiên của SERVER cho thân lỗi. Khác với danh sách dùng cho một\n// response thành công, và khác một cách có chủ ý.\nconst ERROR_REPRESENTATIONS = ['application/json', 'text/html', 'text/markdown']\n\nexport function errorFormat(accept, available = ERROR_REPRESENTATIONS) {\n  return negotiate(accept, available) ?? 'application/json'\n}\n```\n\nHai chi tiết đáng nói:\n\n- **Danh sách cho thành công và danh sách cho lỗi khác nhau.** Thành công vẫn là `['text/html', 'text/markdown']`, HTML đứng trước, vì thứ người ta chủ động yêu cầu phải tới ở dạng đọc được. Lỗi thì không ai yêu cầu cả, nên mặc định là dạng phân tích được.\n- **`?? 'application/json'` ở cuối** xử lý client gửi một kiểu chưa nghe bao giờ. Nhánh đó trước kia trả `text/plain`: đọc được, không phân tích được.","entities":[],"updated":"2026-08-23T05:58:58.369Z"}
{"id":"post:kiem-tra-do-than-thien-cua-website-voi-ai-agent-co-che-hoat-dong-cua-vercel-is-a:vi:vòng-bốn-cái-bẫy-ký-tự-đại-diện-và-100100~3","url":"https://hecigo.com/blog/kiem-tra-do-than-thien-cua-website-voi-ai-agent-co-che-hoat-dong-cua-vercel-is-a/#vòng-bốn-cái-bẫy-ký-tự-đại-diện-và-100100","locale":"vi","type":"post","title":"Kiểm tra độ thân thiện của website với AI Agent: Cơ chế hoạt động của Vercel Is Agentic","headingPath":["Vòng bốn: cái bẫy ký tự đại diện, và 100/100"],"text":"Vì dùng lại đúng bộ chọn cũ nên q-value vẫn có tiếng nói ở nhánh lỗi. `Accept: text/html;q=0.9, application/json` ra JSON, `Accept: application/json;q=0.5, text/html` ra HTML, và `application/json;q=0` vẫn là lời từ chối chứ không phải lời yêu cầu.\n\n### Ba thứ đi kèm\n\n**406 giờ cũng là JSON**, kể cả khi `Accept` là kiểu server chưa từng nghe. Thân lỗi thêm ba trường, theo đúng chữ trong khuyến nghị của chính bộ quét (*\"error codes, messages, and resolution hints\"*):\n\n```json\n{\n  \"code\": \"not_found\",\n  \"resolution\": \"Fetch https://hecigo.com/llms.txt for the link index or https://hecigo.com/sitemap.xml for every URL...\",\n  \"documentation_url\": \"https://hecigo.com/developers/#errors\"\n}\n```\n\n`code` là thứ đáng rẽ nhánh theo. `title` và `detail` là chữ viết cho người đọc log, và chữ thì sửa lúc nào cũng được.\n\n**Mọi phản hồi lỗi mang `Link`, kể cả trang 404 HTML.** Đây là cách giữ nguyên trang cho người mà vẫn nói được với máy:\n\n```\nlink: <https://hecigo.com/openapi.json>; rel=\"service-desc\"; type=\"application/vnd.oai.openapi+json\",\n      <https://hecigo.com/llms.txt>; rel=\"service-doc\"; type=\"text/plain\",\n      <https://hecigo.com/developers/#errors>; rel=\"help\"; type=\"text/html\"\n```\n\nMột client không phân tích nổi trang HTML vẫn đọc được header, và từ đó lần ra tài liệu mô tả đúng cái lỗi nó vừa nhận.\n\n**Bốn đuôi `.md`, `.txt`, `.json`, `.xml` rời `excludedPath`.** Đây là cùng một lỗi tiếp giáp với mục `.md` ở phần trên, chỉ rộng hơn: bốn đuôi đó là đúng bốn đuôi mà `/openapi.json` khai là endpoint, mà trượt của chúng lại đi ra dưới dạng trang HTML. Ảnh và font vẫn nằm ngoài, vì không gì phân tích một thân lỗi mà nó đang chờ một tấm ảnh, và cho chúng vào là đặt edge function trước mọi request của site.","entities":["org:hecigo"],"updated":"2026-08-23T05:58:58.369Z"}
{"id":"post:kiem-tra-do-than-thien-cua-website-voi-ai-agent-co-che-hoat-dong-cua-vercel-is-a:vi:vòng-bốn-cái-bẫy-ký-tự-đại-diện-và-100100~4","url":"https://hecigo.com/blog/kiem-tra-do-than-thien-cua-website-voi-ai-agent-co-che-hoat-dong-cua-vercel-is-a/#vòng-bốn-cái-bẫy-ký-tự-đại-diện-và-100100","locale":"vi","type":"post","title":"Kiểm tra độ thân thiện của website với AI Agent: Cơ chế hoạt động của Vercel Is Agentic","headingPath":["Vòng bốn: cái bẫy ký tự đại diện, và 100/100"],"text":"Và `/openapi.json` cũng phải sửa. Bản cũ tự khai `404` là `text/html` cho 7 trên 8 operation: tài liệu đang nói site không trả JSON, đúng lúc bộ quét đi hỏi site có trả JSON không.\n\n### 100/100, với sáu mục vẫn chưa đạt\n\n| | Vòng 3 | Vòng 4 |\n| --- | --- | --- |\n| Essential | 72,7 / 80, 10 trên 11 check | **80 / 80, 11 trên 11** |\n| Recommended | 15,9 / 20, 15 trên 21 check | 15,9 / 20, 15 trên 21 |\n| Bonus | 18 tín hiệu, +4 | 18 tín hiệu, +4 |\n| Tổng | 93 | **100** |\n\nRecommended **không nhích một điểm nào**. Ba mục vẫn fail, ba mục vẫn đạt một phần. Con số 100 là 99,9 làm tròn lên: 80 cộng 15,9 cộng 4.\n\nĐó là chi tiết đáng nhớ hơn cả con số. **Một bảng điểm tròn 100 vẫn đang liệt kê sáu mục chưa đạt**, vì đây là ba quỹ điểm cộng lại chứ không phải một danh sách phải tick cho hết. Essential nặng 80 trên 100, nên đầy quỹ Essential gần như đã đủ tròn số, kể cả khi Recommended còn hở 4 điểm. Đọc một điểm số mà không đọc bảng phân rã bên dưới là bỏ mất đúng phần nói được điều gì.\n\n### Câu ở vòng ba sai chỗ nào\n\nVòng ba kết luận rằng bảy điểm còn lại nằm ở một CLI và một MCP server hecigo không có.\n\nPhần nguyên tắc vẫn đứng: hecigo vẫn không có CLI, vẫn không có MCP server, hai mục đó vẫn đang fail, và vẫn không có ý định dựng chúng chỉ để lấy điểm. Phần định vị thì sai. Bảy điểm kia **không nằm ở đó**. Chúng nằm ở 7,3 điểm Essential đang thiếu, và Essential thiếu vì một phép kiểm sai trong đúng đoạn code mà bài này đã lấy làm ví dụ về việc làm đúng.\n\nCái sai không phải con số. Là việc **tuyên bố mình đã biết bảy điểm còn lại nằm ở đâu** trong khi chưa quét lại để kiểm. Câu đúng ở thời điểm đó lẽ ra là: còn 7 điểm, chưa biết nằm ở đâu, và hai mục kia thì cố ý không làm. Câu đó vẫn sẽ đúng tới hôm nay.","entities":["org:hecigo"],"updated":"2026-08-23T05:58:58.369Z"}
{"id":"post:kiem-tra-do-than-thien-cua-website-voi-ai-agent-co-che-hoat-dong-cua-vercel-is-a:vi:vòng-bốn-cái-bẫy-ký-tự-đại-diện-và-100100~5","url":"https://hecigo.com/blog/kiem-tra-do-than-thien-cua-website-voi-ai-agent-co-che-hoat-dong-cua-vercel-is-a/#vòng-bốn-cái-bẫy-ký-tự-đại-diện-và-100100","locale":"vi","type":"post","title":"Kiểm tra độ thân thiện của website với AI Agent: Cơ chế hoạt động của Vercel Is Agentic","headingPath":["Vòng bốn: cái bẫy ký tự đại diện, và 100/100"],"text":"Xếp lại cả bốn vòng theo tác động thật lên agent thay vì theo điểm số thì thứ tự gần như đảo ngược:\n\n- **Vòng 2 đáng giá nhất, và chỉ được 3 điểm.** Trước khi tắt khối robots.txt, toàn bộ lớp negotiation vô hình với ClaudeBot và GPTBot. Bộ quét vẫn chấm xanh, vì bộ quét không tự nhận là ClaudeBot.\n- **Lỗi `.md` ở vòng 3 không được điểm nào.** Nó nằm ngoài mọi check. Nhưng nó là lỗi đẩy nguyên một trang HTML 58.838 byte vào cửa sổ ngữ cảnh của một agent đang chờ Markdown.\n- **Vòng 4 được nhiều điểm nhất, và lẽ ra không cần tồn tại.** Bảy điểm cho việc sửa một phép kiểm mà vòng 3 đã viết ra, đã giải thích, và đã tin là đúng.\n\nĐiểm số đo cái site *có thể* làm. Nó không đo cái agent thật *được phép* thấy, cũng không đo cái nó *nhận về* khi đã thấy, và như vòng bốn cho thấy, nó cũng không đứng yên chỉ vì lần quét trước đã xanh.","entities":[],"updated":"2026-08-23T05:58:58.369Z"}
{"id":"post:kiem-tra-do-than-thien-cua-website-voi-ai-agent-co-che-hoat-dong-cua-vercel-is-a:vi:điểm-số-sạch-không-đồng-nghĩa-agent-chạy-được-việc","url":"https://hecigo.com/blog/kiem-tra-do-than-thien-cua-website-voi-ai-agent-co-che-hoat-dong-cua-vercel-is-a/#điểm-số-sạch-không-đồng-nghĩa-agent-chạy-được-việc","locale":"vi","type":"post","title":"Kiểm tra độ thân thiện của website với AI Agent: Cơ chế hoạt động của Vercel Is Agentic","headingPath":["Điểm số sạch không đồng nghĩa agent chạy được việc"],"text":"Đạ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.\n\nBa điểm nghẽn thường gặp:\n\n- **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.\n- **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.\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ỳ.\n\nChuẩ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.\n\n> **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.\n\n> 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ệ...","entities":["org:hecigo"],"updated":"2026-08-23T05:58:58.369Z"}
{"id":"post:kiem-tra-do-than-thien-cua-website-voi-ai-agent-co-che-hoat-dong-cua-vercel-is-a:vi:nguồn-tham-khảo","url":"https://hecigo.com/blog/kiem-tra-do-than-thien-cua-website-voi-ai-agent-co-che-hoat-dong-cua-vercel-is-a/#nguồn-tham-khảo","locale":"vi","type":"post","title":"Kiểm tra độ thân thiện của website với AI Agent: Cơ chế hoạt động của Vercel Is Agentic","headingPath":["Nguồn tham khảo"],"text":"- [Is Agentic by Vercel - AI Agent Readiness Score](https://is-agentic.com) - Is Agentic\n- [We partnered with Vercel to launch is-agentic.com](https://ora.ai/blog/is-agentic-with-vercel) - Ora\n- [Parsing Accept and quality values](https://acceptmarkdown.com/guides/accept-parsing) - acceptmarkdown.com\n- [Returning 406 Not Acceptable](https://acceptmarkdown.com/guides/returning-406) - acceptmarkdown.com\n- [Set the Vary: Accept header](https://acceptmarkdown.com/guides/vary-accept) - acceptmarkdown.com\n- [The llms.txt file format](https://llmstxt.org/) - llms.txt\n- [Agentic Infrastructure](https://vercel.com/blog/agentic-infrastructure) - Vercel","entities":[],"updated":"2026-08-23T05:58:58.369Z"}
{"id":"post:n8n-firecrawl-node-choosing-the-right-operation:en:intro","url":"https://hecigo.com/blog/n8n-firecrawl-node-choosing-the-right-operation/","locale":"en","type":"post","title":"Firecrawl on n8n: picking the right operation, and what async does to your workflow","headingPath":[],"text":"`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.\n\nThe [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.","entities":["org:hecigo","product:n8n-nodes-firecrawl-v2"],"updated":"2026-08-22T17:40:00.000Z"}
{"id":"post:n8n-firecrawl-node-choosing-the-right-operation:en:the-decision-in-one-table","url":"https://hecigo.com/blog/n8n-firecrawl-node-choosing-the-right-operation/#the-decision-in-one-table","locale":"en","type":"post","title":"Firecrawl on n8n: picking the right operation, and what async does to your workflow","headingPath":["The decision in one table"],"text":"| You know | You want | Operation |\n|---|---|---|\n| One exact URL | Its content | **Scrape** |\n| A list of exact URLs | All their content | **Batch Scrape** |\n| A site, not which pages | The URL list, cheaply | **Map** |\n| A site, and you want everything | Content of every page under it | **Crawl** |\n| Neither the site nor the URL | Pages matching a query | **Search** |\n| A page and a schema | Structured fields, not prose | **Extract** |\n\nThe two that get misused are Crawl and Extract.\n\n**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.\n\n**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.","entities":[],"updated":"2026-08-22T17:40:00.000Z"}
{"id":"post:n8n-firecrawl-node-choosing-the-right-operation:en:map-first-is-almost-always-right","url":"https://hecigo.com/blog/n8n-firecrawl-node-choosing-the-right-operation/#map-first-is-almost-always-right","locale":"en","type":"post","title":"Firecrawl on n8n: picking the right operation, and what async does to your workflow","headingPath":["Map first is almost always right"],"text":"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.\n\nMap returns the URL list without fetching content. It is fast and cheap, and it turns an unbounded job into a bounded one:\n\n```text\nFirecrawl: Map (https://example.com/docs)\n  -> Code: filter the URLs you actually want\n  -> Firecrawl: Batch Scrape (the filtered list)\n```\n\nThree 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.\n\nUse 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.","entities":[],"updated":"2026-08-22T17:40:00.000Z"}
{"id":"post:n8n-firecrawl-node-choosing-the-right-operation:en:async-operations-change-the-workflow-shape","url":"https://hecigo.com/blog/n8n-firecrawl-node-choosing-the-right-operation/#async-operations-change-the-workflow-shape","locale":"en","type":"post","title":"Firecrawl on n8n: picking the right operation, and what async does to your workflow","headingPath":["Async operations change the workflow shape"],"text":"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.\n\nTwo ways to handle it, and they suit different jobs:\n\n**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.\n\n**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.\n\nFor 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.","entities":[],"updated":"2026-08-22T17:40:00.000Z"}
{"id":"post:n8n-firecrawl-node-choosing-the-right-operation:en:three-defaults-that-surprise-people","url":"https://hecigo.com/blog/n8n-firecrawl-node-choosing-the-right-operation/#three-defaults-that-surprise-people","locale":"en","type":"post","title":"Firecrawl on n8n: picking the right operation, and what async does to your workflow","headingPath":["Three defaults that surprise people"],"text":"**`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.\n\n**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.\n\n**`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.\n\nOne 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.","entities":[],"updated":"2026-08-22T17:40:00.000Z"}
{"id":"post:n8n-firecrawl-node-choosing-the-right-operation:en:self-hosted-versus-cloud","url":"https://hecigo.com/blog/n8n-firecrawl-node-choosing-the-right-operation/#self-hosted-versus-cloud","locale":"en","type":"post","title":"Firecrawl on n8n: picking the right operation, and what async does to your workflow","headingPath":["Self-hosted versus cloud"],"text":"The node works against both. The credential difference is one field:\n\n| | Base URL |\n|---|---|\n| Cloud | `https://api.firecrawl.dev/v2` |\n| Self-hosted | `http://your-host:3002/v2` |\n\n**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.\n\nSelf-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.\n\nThe node does not care which you pick, and switching later is a credential change rather than a workflow change.","entities":[],"updated":"2026-08-22T17:40:00.000Z"}
{"id":"post:n8n-firecrawl-node-choosing-the-right-operation:en:error-handling","url":"https://hecigo.com/blog/n8n-firecrawl-node-choosing-the-right-operation/#error-handling","locale":"en","type":"post","title":"Firecrawl on n8n: picking the right operation, and what async does to your workflow","headingPath":["Error handling"],"text":"The node supports n8n's `continueOnFail`. On failure the item becomes `{ \"error\": \"message\" }` and the workflow keeps going.\n\nThat 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.\n\n> 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, khi nào dùng, và...","entities":["org:hecigo"],"updated":"2026-08-22T17:40:00.000Z"}
{"id":"post:n8n-firecrawl-node-choosing-the-right-operation:en:the-part-after-the-fetch","url":"https://hecigo.com/blog/n8n-firecrawl-node-choosing-the-right-operation/#the-part-after-the-fetch","locale":"en","type":"post","title":"Firecrawl on n8n: picking the right operation, and what async does to your workflow","headingPath":["The part after the fetch"],"text":"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.\n\nThat second half is what we build and run.\n\n> **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.\n\n> 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...","entities":["org:hecigo"],"updated":"2026-08-22T17:40:00.000Z"}
{"id":"post:n8n-firecrawl-node-choosing-the-right-operation:en:references","url":"https://hecigo.com/blog/n8n-firecrawl-node-choosing-the-right-operation/#references","locale":"en","type":"post","title":"Firecrawl on n8n: picking the right operation, and what async does to your workflow","headingPath":["References"],"text":"- [n8n-nodes-firecrawl-v2](https://github.com/hecigo/n8n-nodes-firecrawl-v2) - hecigo\n- [Firecrawl](https://firecrawl.dev) - Firecrawl\n- [Error handling | n8n Docs](https://docs.n8n.io/flow-logic/error-handling/) - n8n","entities":["org:hecigo","product:n8n-nodes-firecrawl-v2"],"updated":"2026-08-22T17:40:00.000Z"}
{"id":"post:n8n-zalo-bot-node-what-breaks-in-production:en:intro","url":"https://hecigo.com/blog/n8n-zalo-bot-node-what-breaks-in-production/","locale":"en","type":"post","title":"Running a Zalo bot on n8n: what breaks between test mode and production","headingPath":[],"text":"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.\n\nThen you activate the workflow and messages stop arriving. Nothing is red. No node errors. The execution list is empty.\n\nEvery 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.","entities":["org:hecigo","product:n8n-nodes-zalo-platform"],"updated":"2026-08-22T17:20:00.000Z"}
{"id":"post:n8n-zalo-bot-node-what-breaks-in-production:en:cloudflare-blocks-zalo-before-n8n-ever-sees-it","url":"https://hecigo.com/blog/n8n-zalo-bot-node-what-breaks-in-production/#cloudflare-blocks-zalo-before-n8n-ever-sees-it","locale":"en","type":"post","title":"Running a Zalo bot on n8n: what breaks between test mode and production","headingPath":["Cloudflare blocks Zalo before n8n ever sees it"],"text":"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.\n\nZalo 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.\n\nTwo rules fix it, both scoped to the webhook path only:\n\n| Rule type | Condition | Action |\n|---|---|---|\n| WAF custom rule | URI path contains `/webhook` | Skip all managed rules |\n| Configuration rule | URI path contains `/webhook` | Disable Browser Integrity Check |\n\nUse `/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.\n\nIf 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.","entities":[],"updated":"2026-08-22T17:20:00.000Z"}
{"id":"post:n8n-zalo-bot-node-what-breaks-in-production:en:the-webhook-belongs-to-the-workflow-not-to-you","url":"https://hecigo.com/blog/n8n-zalo-bot-node-what-breaks-in-production/#the-webhook-belongs-to-the-workflow-not-to-you","locale":"en","type":"post","title":"Running a Zalo bot on n8n: what breaks between test mode and production","headingPath":["The webhook belongs to the workflow, not to you"],"text":"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.\n\nIt also derives the secret token deterministically:\n\n```text\nSHA256(botToken).hex().substring(0, 32)\n```\n\nEvery incoming request is validated against the `X-Bot-Api-Secret-Token` header. Two consequences worth knowing before you debug the wrong thing:\n\n**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.\n\n**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.","entities":[],"updated":"2026-08-22T17:20:00.000Z"}
{"id":"post:n8n-zalo-bot-node-what-breaks-in-production:en:polling-and-webhooks-are-mutually-exclusive","url":"https://hecigo.com/blog/n8n-zalo-bot-node-what-breaks-in-production/#polling-and-webhooks-are-mutually-exclusive","locale":"en","type":"post","title":"Running a Zalo bot on n8n: what breaks between test mode and production","headingPath":["Polling and webhooks are mutually exclusive"],"text":"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.\n\nIt 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.\n\nSo the polling workflow starts with a delete:\n\n```text\nSchedule Trigger (every 30s)\n  -> Zalo Bot: Delete Webhook      // run once, or the first poll returns empty\n  -> Zalo Bot: Get Updates (timeout: 25)\n  -> IF (has data) -> process\n```\n\nSet 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.\n\nPolling 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.","entities":[],"updated":"2026-08-22T17:20:00.000Z"}
{"id":"post:n8n-zalo-bot-node-what-breaks-in-production:en:queue-mode-needs-the-node-on-every-container","url":"https://hecigo.com/blog/n8n-zalo-bot-node-what-breaks-in-production/#queue-mode-needs-the-node-on-every-container","locale":"en","type":"post","title":"Running a Zalo bot on n8n: what breaks between test mode and production","headingPath":["Queue mode needs the node on every container"],"text":"If you run n8n in queue mode, the main process registers webhooks and the workers execute. Community nodes install per container.\n\nInstall 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.\n\nInstall 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.","entities":["product:n8n-nodes-zalo-platform"],"updated":"2026-08-22T17:20:00.000Z"}
{"id":"post:n8n-zalo-bot-node-what-breaks-in-production:en:the-limits-that-bite-later","url":"https://hecigo.com/blog/n8n-zalo-bot-node-what-breaks-in-production/#the-limits-that-bite-later","locale":"en","type":"post","title":"Running a Zalo bot on n8n: what breaks between test mode and production","headingPath":["The limits that bite later"],"text":"Four constraints that do not matter in a demo and do matter at volume:\n\n**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.\n\n**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.\n\n**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.\n\n**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.","entities":[],"updated":"2026-08-22T17:20:00.000Z"}
{"id":"post:n8n-zalo-bot-node-what-breaks-in-production:en:where-this-leaves-you","url":"https://hecigo.com/blog/n8n-zalo-bot-node-what-breaks-in-production/#where-this-leaves-you","locale":"en","type":"post","title":"Running a Zalo bot on n8n: what breaks between test mode and production","headingPath":["Where this leaves you"],"text":"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.\n\n`n8n-nodes-zalo-platform` is MIT licensed and published on npm at version 2.0.0, which requires n8n 1.83 or newer. If you are on an older host, stay on 1.0.13. If you hit a case the node 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.\n\n> 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...","entities":["org:hecigo","product:n8n-nodes-zalo-platform"],"updated":"2026-08-22T17:20:00.000Z"}
{"id":"post:n8n-zalo-bot-node-what-breaks-in-production:en:where-the-harder-problems-are","url":"https://hecigo.com/blog/n8n-zalo-bot-node-what-breaks-in-production/#where-the-harder-problems-are","locale":"en","type":"post","title":"Running a Zalo bot on n8n: what breaks between test mode and production","headingPath":["Where the harder problems are"],"text":"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.\n\nThat is the layer we build and run.\n\n> **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.\n\n> 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ệ...","entities":["org:hecigo"],"updated":"2026-08-22T17:20:00.000Z"}
{"id":"post:n8n-zalo-bot-node-what-breaks-in-production:en:references","url":"https://hecigo.com/blog/n8n-zalo-bot-node-what-breaks-in-production/#references","locale":"en","type":"post","title":"Running a Zalo bot on n8n: what breaks between test mode and production","headingPath":["References"],"text":"- [n8n-nodes-zalo-platform](https://github.com/hecigo/n8n-nodes-zalo-platform) - hecigo\n- [Zalo Bot Platform](https://bot.zaloplatforms.com) - Zalo\n- [Queue mode | n8n Docs](https://docs.n8n.io/hosting/scaling/queue-mode/) - n8n","entities":["org:hecigo","product:n8n-nodes-zalo-platform"],"updated":"2026-08-22T17:20:00.000Z"}
{"id":"post:kien-truc-nen-tang-open-api-dinh-huong-ky-thuat-tuan-thu-va-vai-tro-cua-lop-midd:vi:intro","url":"https://hecigo.com/blog/kien-truc-nen-tang-open-api-dinh-huong-ky-thuat-tuan-thu-va-vai-tro-cua-lop-midd/","locale":"vi","type":"post","title":"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","headingPath":[],"text":"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.","entities":[],"updated":"2026-08-22T13:34:44.291Z"}
{"id":"post:kien-truc-nen-tang-open-api-dinh-huong-ky-thuat-tuan-thu-va-vai-tro-cua-lop-midd:vi:khái-niệm-open-api-và-sự-chuyển-dịch-kiến-trúc","url":"https://hecigo.com/blog/kien-truc-nen-tang-open-api-dinh-huong-ky-thuat-tuan-thu-va-vai-tro-cua-lop-midd/#khái-niệm-open-api-và-sự-chuyển-dịch-kiến-trúc","locale":"vi","type":"post","title":"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","headingPath":["Khái niệm Open API và sự chuyển dịch kiến trúc"],"text":"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ụ.\n\nTheo đị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).\n\nSong 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.\n\n> 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ệ...","entities":["org:hecigo"],"updated":"2026-08-22T13:34:44.291Z"}
{"id":"post:kien-truc-nen-tang-open-api-dinh-huong-ky-thuat-tuan-thu-va-vai-tro-cua-lop-midd:vi:chiến-lược-open-api-trong-hệ-sinh-thái-doanh-nghiệp","url":"https://hecigo.com/blog/kien-truc-nen-tang-open-api-dinh-huong-ky-thuat-tuan-thu-va-vai-tro-cua-lop-midd/#chiến-lược-open-api-trong-hệ-sinh-thái-doanh-nghiệp","locale":"vi","type":"post","title":"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","headingPath":["Chiến lược Open API trong hệ sinh thái doanh nghiệp"],"text":"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:\n\n1. **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.\n2. **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).\n3. **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).\n\n| 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 |\n| :--- | :--- | :--- | :--- |\n| **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 |\n| **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ộ |\n| **API Gateway** | Rate limit, mTLS, WAF, OAuth2 | HTTPS, OAuth2, OIDC | Tấn công từ chối dịch vụ (DDoS), Brute-force |","entities":[],"updated":"2026-08-22T13:34:44.291Z"}
{"id":"post:kien-truc-nen-tang-open-api-dinh-huong-ky-thuat-tuan-thu-va-vai-tro-cua-lop-midd:vi:yêu-cầu-tuân-thủ-và-chuẩn-mực-bảo-mật","url":"https://hecigo.com/blog/kien-truc-nen-tang-open-api-dinh-huong-ky-thuat-tuan-thu-va-vai-tro-cua-lop-midd/#yêu-cầu-tuân-thủ-và-chuẩn-mực-bảo-mật","locale":"vi","type":"post","title":"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","headingPath":["Yêu cầu tuân thủ và chuẩn mực bảo mật"],"text":"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).\n\nĐể đá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:\n\n### 1. Khóa định danh và phân quyền theo phạm vi (OAuth2 Scopes)\nMỗ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`.\n\n### 2. Tính lũy quyền (Idempotency Key)\nMọ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.\n\n### 3. Masking dữ liệu nhạy cảm (PII Redaction)\nDữ 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.","entities":[],"updated":"2026-08-22T13:34:44.291Z"}
{"id":"post:kien-truc-nen-tang-open-api-dinh-huong-ky-thuat-tuan-thu-va-vai-tro-cua-lop-midd:vi:thiết-kế-middleware-xử-lý-dòng-dữ-liệu-open-api","url":"https://hecigo.com/blog/kien-truc-nen-tang-open-api-dinh-huong-ky-thuat-tuan-thu-va-vai-tro-cua-lop-midd/#thiết-kế-middleware-xử-lý-dòng-dữ-liệu-open-api","locale":"vi","type":"post","title":"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","headingPath":["Thiết kế middleware xử lý dòng dữ liệu Open API"],"text":"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.\n\nĐ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:\n\n```typescript\nimport express, { Request, Response, NextFunction } from 'express';\nimport crypto from 'crypto';\n\ninterface CustomRequest extends Request {\n  rawBody?: Buffer;\n  idempotencyKey?: string;\n}\n\nconst processedRequests = new Map<string, { statusCode: number; body: any }>();\n\nexport function verifyHmacSignature(secretKey: string) {\n  return (req: CustomRequest, res: Response, next: NextFunction): void => {\n    const signature = req.headers['x-signature-sha256'] as string;\n    const timestamp = req.headers['x-timestamp'] as string;\n\n    if (!signature || !timestamp) {\n      res.status(401).json({ error: 'Missing security headers' });\n      return;\n    }\n\n    // Chặn request gửi chậm hơn 300 giây để chống replay attack\n    const now = Math.floor(Date.now() / 1000);\n    if (Math.abs(now - parseInt(timestamp, 10)) > 300) {\n      res.status(401).json({ error: 'Request expired' });\n      return;\n    }\n\n    const payload = `${timestamp}.${req.rawBody ? req.rawBody.toString('utf8') : JSON.stringify(req.body)}`;\n    const expectedSignature = crypto\n      .createHmac('sha256', secretKey)\n      .update(payload)\n      .digest('hex');\n\n    if (!crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(expectedSignature))) {\n      res.status(403).json({ error: 'Invalid HMAC signature' });\n      return;\n    }\n\n    next();\n  };\n}","entities":["org:hecigo"],"updated":"2026-08-22T13:34:44.291Z"}
{"id":"post:kien-truc-nen-tang-open-api-dinh-huong-ky-thuat-tuan-thu-va-vai-tro-cua-lop-midd:vi:thiết-kế-middleware-xử-lý-dòng-dữ-liệu-open-api~2","url":"https://hecigo.com/blog/kien-truc-nen-tang-open-api-dinh-huong-ky-thuat-tuan-thu-va-vai-tro-cua-lop-midd/#thiết-kế-middleware-xử-lý-dòng-dữ-liệu-open-api","locale":"vi","type":"post","title":"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","headingPath":["Thiết kế middleware xử lý dòng dữ liệu Open API"],"text":"export function handleIdempotency(req: CustomRequest, res: Response, next: NextFunction): void => {\n  const idempotencyKey = req.headers['x-idempotency-key'] as string;\n  if (!idempotencyKey) {\n    res.status(400).json({ error: 'Missing X-Idempotency-Key header' });\n    return;\n  }\n\n  req.idempotencyKey = idempotencyKey;\n  const cachedResponse = processedRequests.get(idempotencyKey);\n  if (cachedResponse) {\n    res.status(cachedResponse.statusCode).json(cachedResponse.body);\n    return;\n  }\n\n  // Ghi đè res.json để lưu cache kết quả\n  const originalJson = res.json.bind(res);\n  res.json = (body: any) => {\n    if (res.statusCode >= 200 && res.statusCode < 300) {\n      processedRequests.set(idempotencyKey, { statusCode: res.statusCode, body });\n    }\n    return originalJson(body);\n  };\n\n  next();\n}\n```","entities":[],"updated":"2026-08-22T13:34:44.291Z"}
{"id":"post:kien-truc-nen-tang-open-api-dinh-huong-ky-thuat-tuan-thu-va-vai-tro-cua-lop-midd:vi:giải-pháp-quản-lý-vận-hành-và-giám-sát-api","url":"https://hecigo.com/blog/kien-truc-nen-tang-open-api-dinh-huong-ky-thuat-tuan-thu-va-vai-tro-cua-lop-midd/#giải-pháp-quản-lý-vận-hành-và-giám-sát-api","locale":"vi","type":"post","title":"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","headingPath":["Giải pháp quản lý vận hành và giám sát API"],"text":"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:\n\n1. **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`).\n2. **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.\n3. **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.\n\nhecigo 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.\n\n> **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.\n\n> 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...","entities":["org:hecigo"],"updated":"2026-08-22T13:34:44.291Z"}
{"id":"post:kien-truc-nen-tang-open-api-dinh-huong-ky-thuat-tuan-thu-va-vai-tro-cua-lop-midd:vi:nguồn-tham-khảo","url":"https://hecigo.com/blog/kien-truc-nen-tang-open-api-dinh-huong-ky-thuat-tuan-thu-va-vai-tro-cua-lop-midd/#nguồn-tham-khảo","locale":"vi","type":"post","title":"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","headingPath":["Nguồn tham khảo"],"text":"- [Nền tảng API | OpenAI](https://openai.com/vi-VN/api/) - OpenAI\n- [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\n- [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\n- [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\n- [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","entities":[],"updated":"2026-08-22T13:34:44.291Z"}
{"id":"post:watermark-van-ban-cua-claude-ung-dung-thuc-tien-va-khia-canh-dao-duc-trong-ky-ng:vi:intro","url":"https://hecigo.com/blog/watermark-van-ban-cua-claude-ung-dung-thuc-tien-va-khia-canh-dao-duc-trong-ky-ng/","locale":"vi","type":"post","title":"Watermark Văn Bản của Claude: Cơ Chế, Ứng Dụng và Khía Cạnh Đạo Đức","headingPath":[],"text":"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.\n\nVớ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.\n\nBà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.","entities":[],"updated":"2026-08-16T02:46:03.444Z"}
{"id":"post:watermark-van-ban-cua-claude-ung-dung-thuc-tien-va-khia-canh-dao-duc-trong-ky-ng:vi:cơ-chế-hoạt-động-của-watermark-văn-bản-trên-claude","url":"https://hecigo.com/blog/watermark-van-ban-cua-claude-ung-dung-thuc-tien-va-khia-canh-dao-duc-trong-ky-ng/#cơ-chế-hoạt-động-của-watermark-văn-bản-trên-claude","locale":"vi","type":"post","title":"Watermark Văn Bản của Claude: Cơ Chế, Ứng Dụng và Khía Cạnh Đạo Đức","headingPath":["Cơ chế hoạt động của Watermark văn bản trên Claude"],"text":"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).\n\nVí 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.\n\nAnthropic 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.","entities":[],"updated":"2026-08-16T02:46:03.444Z"}
{"id":"post:watermark-van-ban-cua-claude-ung-dung-thuc-tien-va-khia-canh-dao-duc-trong-ky-ng:vi:ứng-dụng-thực-tiễn-của-watermark-ai","url":"https://hecigo.com/blog/watermark-van-ban-cua-claude-ung-dung-thuc-tien-va-khia-canh-dao-duc-trong-ky-ng/#ứng-dụng-thực-tiễn-của-watermark-ai","locale":"vi","type":"post","title":"Watermark Văn Bản của Claude: Cơ Chế, Ứng Dụng và Khía Cạnh Đạo Đức","headingPath":["Ứng dụng thực tiễn của Watermark AI"],"text":"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.\n\n### Minh bạch và Xác thực nội dung\n\nĐâ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.\n\n### Chống gian lận và đạo văn\n\nTrong 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.\n\n### Hạn chế thông tin sai lệch (Misinformation) và Deepfake\n\nKhi 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.\n\n### Bảo vệ quyền sở hữu trí tuệ","entities":[],"updated":"2026-08-16T02:46:03.444Z"}
{"id":"post:watermark-van-ban-cua-claude-ung-dung-thuc-tien-va-khia-canh-dao-duc-trong-ky-ng:vi:ứng-dụng-thực-tiễn-của-watermark-ai~2","url":"https://hecigo.com/blog/watermark-van-ban-cua-claude-ung-dung-thuc-tien-va-khia-canh-dao-duc-trong-ky-ng/#ứng-dụng-thực-tiễn-của-watermark-ai","locale":"vi","type":"post","title":"Watermark Văn Bản của Claude: Cơ Chế, Ứng Dụng và Khía Cạnh Đạo Đức","headingPath":["Ứng dụng thực tiễn của Watermark AI"],"text":"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.\n\n> 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...","entities":["org:hecigo"],"updated":"2026-08-16T02:46:03.444Z"}
{"id":"post:watermark-van-ban-cua-claude-ung-dung-thuc-tien-va-khia-canh-dao-duc-trong-ky-ng:vi:khía-cạnh-đạo-đức-và-những-thách-thức","url":"https://hecigo.com/blog/watermark-van-ban-cua-claude-ung-dung-thuc-tien-va-khia-canh-dao-duc-trong-ky-ng/#khía-cạnh-đạo-đức-và-những-thách-thức","locale":"vi","type":"post","title":"Watermark Văn Bản của Claude: Cơ Chế, Ứng Dụng và Khía Cạnh Đạo Đức","headingPath":["Khía cạnh đạo đức và những thách thức"],"text":"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.\n\n### Quyền riêng tư và ẩn danh\n\nAnthropic 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ọ.\n\n### Nguy cơ thành kiến và phân biệt đối xử\n\nNế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.\n\n### Ảnh hưởng đến sự sáng tạo của con người\n\nMộ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.\n\n### Giới hạn của Watermark","entities":[],"updated":"2026-08-16T02:46:03.444Z"}
{"id":"post:watermark-van-ban-cua-claude-ung-dung-thuc-tien-va-khia-canh-dao-duc-trong-ky-ng:vi:khía-cạnh-đạo-đức-và-những-thách-thức~2","url":"https://hecigo.com/blog/watermark-van-ban-cua-claude-ung-dung-thuc-tien-va-khia-canh-dao-duc-trong-ky-ng/#khía-cạnh-đạo-đức-và-những-thách-thức","locale":"vi","type":"post","title":"Watermark Văn Bản của Claude: Cơ Chế, Ứng Dụng và Khía Cạnh Đạo Đức","headingPath":["Khía cạnh đạo đức và những thách thức"],"text":"[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.","entities":[],"updated":"2026-08-16T02:46:03.444Z"}
{"id":"post:watermark-van-ban-cua-claude-ung-dung-thuc-tien-va-khia-canh-dao-duc-trong-ky-ng:vi:điều-này-đổi-gì-với-quy-trình-có-nội-dung-ai","url":"https://hecigo.com/blog/watermark-van-ban-cua-claude-ung-dung-thuc-tien-va-khia-canh-dao-duc-trong-ky-ng/#điều-này-đổi-gì-với-quy-trình-có-nội-dung-ai","locale":"vi","type":"post","title":"Watermark Văn Bản của Claude: Cơ Chế, Ứng Dụng và Khía Cạnh Đạo Đức","headingPath":["Điều này đổi gì với quy trình có nội dung AI"],"text":"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\nNế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.\n\nBa việc cụ thể:\n\n- **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.\n- **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.\n- **Đừ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.\n\nBlog 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.","entities":[],"updated":"2026-08-16T02:46:03.444Z"}
{"id":"post:watermark-van-ban-cua-claude-ung-dung-thuc-tien-va-khia-canh-dao-duc-trong-ky-ng:vi:kết-luận","url":"https://hecigo.com/blog/watermark-van-ban-cua-claude-ung-dung-thuc-tien-va-khia-canh-dao-duc-trong-ky-ng/#kết-luận","locale":"vi","type":"post","title":"Watermark Văn Bản của Claude: Cơ Chế, Ứng Dụng và Khía Cạnh Đạo Đức","headingPath":["Kết luận"],"text":"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.\n\n> **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.\n\n> 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...","entities":["org:hecigo"],"updated":"2026-08-16T02:46:03.444Z"}
{"id":"post:watermark-van-ban-cua-claude-ung-dung-thuc-tien-va-khia-canh-dao-duc-trong-ky-ng:vi:nguồn-tham-khảo","url":"https://hecigo.com/blog/watermark-van-ban-cua-claude-ung-dung-thuc-tien-va-khia-canh-dao-duc-trong-ky-ng/#nguồn-tham-khảo","locale":"vi","type":"post","title":"Watermark Văn Bản của Claude: Cơ Chế, Ứng Dụng và Khía Cạnh Đạo Đức","headingPath":["Nguồn tham khảo"],"text":"- [Claude's text watermark](https://www.anthropic.com/news/claude-text-watermark) - Anthropic\n- [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\n- [Anthropic explains the mechanics of Claude's text watermark](https://www.unite.ai/anthropic-explains-the-mechanics-of-claudes-text-watermark/) - Unite.AI\n- [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","entities":[],"updated":"2026-08-16T02:46:03.444Z"}
{"id":"post:claude-science-nen-tang-ai-toan-dien-cua-anthropic-tang-toc-nghien-cuu-khoa-hoc:vi:intro","url":"https://hecigo.com/blog/claude-science-nen-tang-ai-toan-dien-cua-anthropic-tang-toc-nghien-cuu-khoa-hoc/","locale":"vi","type":"post","title":"Claude Science: gom công cụ nghiên cứu về một chỗ, và cái giá của việc đó","headingPath":[],"text":"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)).\n\nLậ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.\n\nClaude 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ọ.","entities":[],"updated":"2026-07-04T11:28:31.100Z"}
{"id":"post:claude-science-nen-tang-ai-toan-dien-cua-anthropic-tang-toc-nghien-cuu-khoa-hoc:vi:claude-science-là-gì","url":"https://hecigo.com/blog/claude-science-nen-tang-ai-toan-dien-cua-anthropic-tang-toc-nghien-cuu-khoa-hoc/#claude-science-là-gì","locale":"vi","type":"post","title":"Claude Science: gom công cụ nghiên cứu về một chỗ, và cái giá của việc đó","headingPath":["Claude Science là gì?"],"text":"**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).\n\n### Bối cảnh khoa học truyền thống\n\nNghiê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).\n\n### Claude Science gom những gì về một chỗ\n\nClaude 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).","entities":[],"updated":"2026-07-04T11:28:31.100Z"}
{"id":"post:claude-science-nen-tang-ai-toan-dien-cua-anthropic-tang-toc-nghien-cuu-khoa-hoc:vi:claude-science-là-gì~2","url":"https://hecigo.com/blog/claude-science-nen-tang-ai-toan-dien-cua-anthropic-tang-toc-nghien-cuu-khoa-hoc/#claude-science-là-gì","locale":"vi","type":"post","title":"Claude Science: gom công cụ nghiên cứu về một chỗ, và cái giá của việc đó","headingPath":["Claude Science là gì?"],"text":"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.","entities":[],"updated":"2026-07-04T11:28:31.100Z"}
{"id":"post:claude-science-nen-tang-ai-toan-dien-cua-anthropic-tang-toc-nghien-cuu-khoa-hoc:vi:các-tính-năng-nổi-bật-của-claude-science","url":"https://hecigo.com/blog/claude-science-nen-tang-ai-toan-dien-cua-anthropic-tang-toc-nghien-cuu-khoa-hoc/#các-tính-năng-nổi-bật-của-claude-science","locale":"vi","type":"post","title":"Claude Science: gom công cụ nghiên cứu về một chỗ, và cái giá của việc đó","headingPath":["Các tính năng nổi bật của Claude Science"],"text":"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:\n\n### Môi trường nghiên cứu hợp nhất\n\nClaude 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).\n\n### Tự động hóa quản lý tính toán và mở rộng quy mô\n\nCá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).\n\n### Kho công cụ và kỹ năng chuyên biệt","entities":[],"updated":"2026-07-04T11:28:31.100Z"}
{"id":"post:claude-science-nen-tang-ai-toan-dien-cua-anthropic-tang-toc-nghien-cuu-khoa-hoc:vi:các-tính-năng-nổi-bật-của-claude-science~2","url":"https://hecigo.com/blog/claude-science-nen-tang-ai-toan-dien-cua-anthropic-tang-toc-nghien-cuu-khoa-hoc/#các-tính-năng-nổi-bật-của-claude-science","locale":"vi","type":"post","title":"Claude Science: gom công cụ nghiên cứu về một chỗ, và cái giá của việc đó","headingPath":["Các tính năng nổi bật của Claude Science"],"text":"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).\n\n### Cơ chế kiểm duyệt thông minh (Reviewer Agent)\n\nSau 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.","entities":[],"updated":"2026-07-04T11:28:31.100Z"}
{"id":"post:claude-science-nen-tang-ai-toan-dien-cua-anthropic-tang-toc-nghien-cuu-khoa-hoc:vi:claude-science-hoạt-động-như-thế-nào","url":"https://hecigo.com/blog/claude-science-nen-tang-ai-toan-dien-cua-anthropic-tang-toc-nghien-cuu-khoa-hoc/#claude-science-hoạt-động-như-thế-nào","locale":"vi","type":"post","title":"Claude Science: gom công cụ nghiên cứu về một chỗ, và cái giá của việc đó","headingPath":["Claude Science hoạt động như thế nào?"],"text":"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).\n\n### Quy trình làm việc\n\n1.  **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.\n2.  **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).\n3.  **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ế.\n4.  **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ó.\n\n### Bảo mật và khả năng kiểm soát","entities":[],"updated":"2026-07-04T11:28:31.100Z"}
{"id":"post:claude-science-nen-tang-ai-toan-dien-cua-anthropic-tang-toc-nghien-cuu-khoa-hoc:vi:claude-science-hoạt-động-như-thế-nào~2","url":"https://hecigo.com/blog/claude-science-nen-tang-ai-toan-dien-cua-anthropic-tang-toc-nghien-cuu-khoa-hoc/#claude-science-hoạt-động-như-thế-nào","locale":"vi","type":"post","title":"Claude Science: gom công cụ nghiên cứu về một chỗ, và cái giá của việc đó","headingPath":["Claude Science hoạt động như thế nào?"],"text":"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.","entities":[],"updated":"2026-07-04T11:28:31.100Z"}
{"id":"post:claude-science-nen-tang-ai-toan-dien-cua-anthropic-tang-toc-nghien-cuu-khoa-hoc:vi:ứng-dụng-thực-tế-và-tiềm-năng","url":"https://hecigo.com/blog/claude-science-nen-tang-ai-toan-dien-cua-anthropic-tang-toc-nghien-cuu-khoa-hoc/#ứng-dụng-thực-tế-và-tiềm-năng","locale":"vi","type":"post","title":"Claude Science: gom công cụ nghiên cứu về một chỗ, và cái giá của việc đó","headingPath":["Ứng dụng thực tế và tiềm năng"],"text":"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:\n\n### Tăng tốc khám phá thuốc\n\nManifold 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).\n\n### Đánh giá học thuật quy mô lớn\n\nViệ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ọ.\n\n### Tầm nhìn cho tương lai\n\nClaude 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.","entities":[],"updated":"2026-07-04T11:28:31.100Z"}
{"id":"post:claude-science-nen-tang-ai-toan-dien-cua-anthropic-tang-toc-nghien-cuu-khoa-hoc:vi:ứng-dụng-thực-tế-và-tiềm-năng~2","url":"https://hecigo.com/blog/claude-science-nen-tang-ai-toan-dien-cua-anthropic-tang-toc-nghien-cuu-khoa-hoc/#ứng-dụng-thực-tế-và-tiềm-năng","locale":"vi","type":"post","title":"Claude Science: gom công cụ nghiên cứu về một chỗ, và cái giá của việc đó","headingPath":["Ứng dụng thực tế và tiềm năng"],"text":"> **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.","entities":["org:hecigo"],"updated":"2026-07-04T11:28:31.100Z"}
{"id":"post:claude-science-nen-tang-ai-toan-dien-cua-anthropic-tang-toc-nghien-cuu-khoa-hoc:vi:nguồn-tham-khảo","url":"https://hecigo.com/blog/claude-science-nen-tang-ai-toan-dien-cua-anthropic-tang-toc-nghien-cuu-khoa-hoc/#nguồn-tham-khảo","locale":"vi","type":"post","title":"Claude Science: gom công cụ nghiên cứu về một chỗ, và cái giá của việc đó","headingPath":["Nguồn tham khảo"],"text":"- [Claude Science](https://www.anthropic.com/news/claude-science-ai-workbench) - Anthropic\n- [Claude Science overview](https://claude.com/docs/claude-science/overview) - Anthropic Docs\n- [Claude Science](https://claude.com/product/claude-science) - Anthropic","entities":[],"updated":"2026-07-04T11:28:31.100Z"}
{"id":"post:microsoft-van-hanh-fairwater-sieu-trung-tam-du-lieu-ai-manh-nhat-the-gioi:vi:intro","url":"https://hecigo.com/blog/microsoft-van-hanh-fairwater-sieu-trung-tam-du-lieu-ai-manh-nhat-the-gioi/","locale":"vi","type":"post","title":"Microsoft Vận Hành Fairwater - Siêu Trung Tâm Dữ Liệu AI Mạnh Nhất Thế Giới","headingPath":[],"text":"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.","entities":[],"updated":"2026-04-22T14:24:20.822Z"}
{"id":"post:microsoft-van-hanh-fairwater-sieu-trung-tam-du-lieu-ai-manh-nhat-the-gioi:vi:giới-thiệu-về-fairwater-và-tầm-quan-trọng","url":"https://hecigo.com/blog/microsoft-van-hanh-fairwater-sieu-trung-tam-du-lieu-ai-manh-nhat-the-gioi/#giới-thiệu-về-fairwater-và-tầm-quan-trọng","locale":"vi","type":"post","title":"Microsoft Vận Hành Fairwater - Siêu Trung Tâm Dữ Liệu AI Mạnh Nhất Thế Giới","headingPath":["Giới thiệu về Fairwater và tầm quan trọng"],"text":"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.\n\nFairwater đượ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.","entities":[],"updated":"2026-04-22T14:24:20.822Z"}
{"id":"post:microsoft-van-hanh-fairwater-sieu-trung-tam-du-lieu-ai-manh-nhat-the-gioi:vi:kiến-trúc-phần-cứng-và-con-số","url":"https://hecigo.com/blog/microsoft-van-hanh-fairwater-sieu-trung-tam-du-lieu-ai-manh-nhat-the-gioi/#kiến-trúc-phần-cứng-và-con-số","locale":"vi","type":"post","title":"Microsoft Vận Hành Fairwater - Siêu Trung Tâm Dữ Liệu AI Mạnh Nhất Thế Giới","headingPath":["Kiến trúc phần cứng và con số"],"text":"Đ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.\n\nTheo 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ó.\n\n> 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...","entities":["org:hecigo"],"updated":"2026-04-22T14:24:20.822Z"}
{"id":"post:microsoft-van-hanh-fairwater-sieu-trung-tam-du-lieu-ai-manh-nhat-the-gioi:vi:giải-pháp-làm-mát-và-quản-lý-năng-lượng-bền-vững","url":"https://hecigo.com/blog/microsoft-van-hanh-fairwater-sieu-trung-tam-du-lieu-ai-manh-nhat-the-gioi/#giải-pháp-làm-mát-và-quản-lý-năng-lượng-bền-vững","locale":"vi","type":"post","title":"Microsoft Vận Hành Fairwater - Siêu Trung Tâm Dữ Liệu AI Mạnh Nhất Thế Giới","headingPath":["Giải pháp làm mát và quản lý năng lượng bền vững"],"text":"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.\n\nBê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.","entities":[],"updated":"2026-04-22T14:24:20.822Z"}
{"id":"post:microsoft-van-hanh-fairwater-sieu-trung-tam-du-lieu-ai-manh-nhat-the-gioi:vi:tầm-nhìn-mở-rộng-và-tác-động-đến-ngành-ai","url":"https://hecigo.com/blog/microsoft-van-hanh-fairwater-sieu-trung-tam-du-lieu-ai-manh-nhat-the-gioi/#tầm-nhìn-mở-rộng-và-tác-động-đến-ngành-ai","locale":"vi","type":"post","title":"Microsoft Vận Hành Fairwater - Siêu Trung Tâm Dữ Liệu AI Mạnh Nhất Thế Giới","headingPath":["Tầm nhìn mở rộng và tác động đến ngành AI"],"text":"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.\n\nSự 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.\n\n> **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.\n\n> 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, khi nào dùng, và...","entities":["org:hecigo"],"updated":"2026-04-22T14:24:20.822Z"}
{"id":"post:microsoft-van-hanh-fairwater-sieu-trung-tam-du-lieu-ai-manh-nhat-the-gioi:vi:nguồn-tham-khảo","url":"https://hecigo.com/blog/microsoft-van-hanh-fairwater-sieu-trung-tam-du-lieu-ai-manh-nhat-the-gioi/#nguồn-tham-khảo","locale":"vi","type":"post","title":"Microsoft Vận Hành Fairwater - Siêu Trung Tâm Dữ Liệu AI Mạnh Nhất Thế Giới","headingPath":["Nguồn tham khảo"],"text":"- [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\n- [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\n- [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í","entities":[],"updated":"2026-04-22T14:24:20.822Z"}
{"id":"post:middleware-chia-khoa-mo-khoa-toan-bo-tiem-nang-cua-n8n-openclaw-va-moi-nen-tang-:vi:intro","url":"https://hecigo.com/blog/middleware-chia-khoa-mo-khoa-toan-bo-tiem-nang-cua-n8n-openclaw-va-moi-nen-tang-/","locale":"vi","type":"post","title":"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","headingPath":[],"text":"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ơ.\n\nKhông có node nào lỗi. Không có workflow nào đỏ. Luồng vẫn chạy mỗi ngày.\n\nĐó 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.","entities":[],"updated":"2026-04-18T14:21:23.590Z"}
{"id":"post:middleware-chia-khoa-mo-khoa-toan-bo-tiem-nang-cua-n8n-openclaw-va-moi-nen-tang-:vi:n8n-và-openclaw-giải-hai-bài-toán-khác-nhau","url":"https://hecigo.com/blog/middleware-chia-khoa-mo-khoa-toan-bo-tiem-nang-cua-n8n-openclaw-va-moi-nen-tang-/#n8n-và-openclaw-giải-hai-bài-toán-khác-nhau","locale":"vi","type":"post","title":"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","headingPath":["n8n và OpenClaw giải hai bài toán khác nhau"],"text":"So sánh trực tiếp hai thứ này là so nhầm trục.\n\n**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/)).\n\n**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.\n\nChọ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.\n\nNhưng cả hai đều dừng lại ở cùng một chỗ.","entities":[],"updated":"2026-04-18T14:21:23.590Z"}
{"id":"post:middleware-chia-khoa-mo-khoa-toan-bo-tiem-nang-cua-n8n-openclaw-va-moi-nen-tang-:vi:bốn-thứ-lộ-ra-sau-vài-tuần-chạy-thật","url":"https://hecigo.com/blog/middleware-chia-khoa-mo-khoa-toan-bo-tiem-nang-cua-n8n-openclaw-va-moi-nen-tang-/#bốn-thứ-lộ-ra-sau-vài-tuần-chạy-thật","locale":"vi","type":"post","title":"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","headingPath":["Bốn thứ lộ ra sau vài tuần chạy thật"],"text":"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:\n\n**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.\n\n**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.\n\n**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.\n\n**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.\n\nKhô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ế.","entities":[],"updated":"2026-04-18T14:21:23.590Z"}
{"id":"post:middleware-chia-khoa-mo-khoa-toan-bo-tiem-nang-cua-n8n-openclaw-va-moi-nen-tang-:vi:khóa-chống-trùng-chọn-sai-là-hỏng-cả-hệ-thống","url":"https://hecigo.com/blog/middleware-chia-khoa-mo-khoa-toan-bo-tiem-nang-cua-n8n-openclaw-va-moi-nen-tang-/#khóa-chống-trùng-chọn-sai-là-hỏng-cả-hệ-thống","locale":"vi","type":"post","title":"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","headingPath":["Khóa chống trùng: chọn sai là hỏng cả hệ thống"],"text":"Đâ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.\n\nCá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.\n\nCá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.\n\nKhóa dùng được cần đủ bốn thành phần:\n\n```sql\n-- Khóa chống trùng: hệ thống nguồn + loại sự kiện + id bản ghi + phiên bản.\n-- Thiếu version thì mọi lần sửa đơn hàng đều bị coi là trùng và bị bỏ qua.\nCREATE TABLE sync_ledger (\n  source        text        NOT NULL,   -- 'pos', 'marketplace', 'accounting'\n  event_type    text        NOT NULL,   -- 'order.created', 'order.updated'\n  external_id   text        NOT NULL,   -- id bên hệ thống nguồn\n  version       text        NOT NULL,   -- revision/etag/hash payload nếu API không có\n  target_id     text,                   -- id sau khi ghi sang hệ thống đích\n  processed_at  timestamptz NOT NULL DEFAULT now(),\n  CONSTRAINT sync_ledger_pkey PRIMARY KEY (source, event_type, external_id, version)\n);\n```\n\nGhi 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.\n\nBả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.","entities":[],"updated":"2026-04-18T14:21:23.590Z"}
{"id":"post:middleware-chia-khoa-mo-khoa-toan-bo-tiem-nang-cua-n8n-openclaw-va-moi-nen-tang-:vi:webhook-một-mình-không-đủ","url":"https://hecigo.com/blog/middleware-chia-khoa-mo-khoa-toan-bo-tiem-nang-cua-n8n-openclaw-va-moi-nen-tang-/#webhook-một-mình-không-đủ","locale":"vi","type":"post","title":"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","headingPath":["Webhook một mình không đủ"],"text":"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.\n\nCách làm dùng được là hai kênh song song:\n\n1. **Webhook** xử lý phần lớn sự kiện, độ trễ thấp.\n2. **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.\n\nBộ đố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ứ.\n\nTrong 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.","entities":[],"updated":"2026-04-18T14:21:23.590Z"}
{"id":"post:middleware-chia-khoa-mo-khoa-toan-bo-tiem-nang-cua-n8n-openclaw-va-moi-nen-tang-:vi:lớp-giữa-cần-những-gì","url":"https://hecigo.com/blog/middleware-chia-khoa-mo-khoa-toan-bo-tiem-nang-cua-n8n-openclaw-va-moi-nen-tang-/#lớp-giữa-cần-những-gì","locale":"vi","type":"post","title":"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","headingPath":["Lớp giữa cần những gì"],"text":"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:\n\n| Phần | Nhiệm vụ |\n|---|---|\n| Nhận sự kiện | Webhook + bộ đối soát định kỳ chạy song song |\n| Sổ chống trùng | Khóa `(nguồn, loại, id, phiên bản)`, ghi trước khi gọi đích |\n| 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 |\n| 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 |\n| Nhật ký tra vết | Mỗi sự kiện lưu payload vào, payload ra, kết quả |\n| 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 |\n\nn8n 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.\n\n> 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, khi nào dùng, và...","entities":["org:hecigo"],"updated":"2026-04-18T14:21:23.590Z"}
{"id":"post:middleware-chia-khoa-mo-khoa-toan-bo-tiem-nang-cua-n8n-openclaw-va-moi-nen-tang-:vi:hecigo-làm-gì-ở-đây","url":"https://hecigo.com/blog/middleware-chia-khoa-mo-khoa-toan-bo-tiem-nang-cua-n8n-openclaw-va-moi-nen-tang-/#hecigo-làm-gì-ở-đây","locale":"vi","type":"post","title":"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","headingPath":["hecigo làm gì ở đây"],"text":"hecigo xây và vận hành lớp giữa đó, và nhận trách nhiệm về nó.\n\nPhầ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/).\n\nPhầ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.\n\nRanh 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.\n\n> **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.\n\n> 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...","entities":["org:hecigo","product:n8n-nodes-firecrawl-v2","product:n8n-nodes-zalo-platform"],"updated":"2026-04-18T14:21:23.590Z"}
{"id":"post:middleware-chia-khoa-mo-khoa-toan-bo-tiem-nang-cua-n8n-openclaw-va-moi-nen-tang-:vi:nguồn-tham-khảo","url":"https://hecigo.com/blog/middleware-chia-khoa-mo-khoa-toan-bo-tiem-nang-cua-n8n-openclaw-va-moi-nen-tang-/#nguồn-tham-khảo","locale":"vi","type":"post","title":"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","headingPath":["Nguồn tham khảo"],"text":"- [Queue mode | n8n Docs](https://docs.n8n.io/hosting/scaling/queue-mode/) - n8n\n- [Error handling | n8n Docs](https://docs.n8n.io/flow-logic/error-handling/) - n8n\n- [Creating nodes | n8n Docs](https://docs.n8n.io/integrations/creating-nodes/overview/) - n8n\n- [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","entities":[],"updated":"2026-04-18T14:21:23.590Z"}
{"id":"post:anthropic-claude-design-cuoc-cach-mang-thiet-ke-ai-dang-den-voi-doanh-nghiep-vie:vi:intro","url":"https://hecigo.com/blog/anthropic-claude-design-cuoc-cach-mang-thiet-ke-ai-dang-den-voi-doanh-nghiep-vie/","locale":"vi","type":"post","title":"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","headingPath":[],"text":"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)).\n\nPhầ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.\n\nClaude 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.","entities":[],"updated":"2026-04-18T03:43:58.539Z"}
{"id":"post:anthropic-claude-design-cuoc-cach-mang-thiet-ke-ai-dang-den-voi-doanh-nghiep-vie:vi:claude-design-là-gì","url":"https://hecigo.com/blog/anthropic-claude-design-cuoc-cach-mang-thiet-ke-ai-dang-den-voi-doanh-nghiep-vie/#claude-design-là-gì","locale":"vi","type":"post","title":"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","headingPath":["Claude Design là gì?"],"text":"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.\n\nCô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.","entities":[],"updated":"2026-04-18T03:43:58.539Z"}
{"id":"post:anthropic-claude-design-cuoc-cach-mang-thiet-ke-ai-dang-den-voi-doanh-nghiep-vie:vi:những-tính-năng-nổi-bật-của-claude-design","url":"https://hecigo.com/blog/anthropic-claude-design-cuoc-cach-mang-thiet-ke-ai-dang-den-voi-doanh-nghiep-vie/#những-tính-năng-nổi-bật-của-claude-design","locale":"vi","type":"post","title":"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","headingPath":["Những Tính Năng Nổi Bật của Claude Design"],"text":"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:\n\n### Thiết kế và Tạo Nguyên Mẫu bằng Văn bản\n\nNgườ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ế.\n\n### Thanh Trượt Điều Chỉnh Tùy Chỉnh (Custom Sliders)\n\nMộ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.\n\n### Xây dựng Hệ Thống Thiết kế từ Mã Nguồn và Tệp\n\nClaude 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.\n\n### Trích xuất từ Website và Tài liệu\n\nCô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.\n\n### Xuất tệp và Handoff","entities":[],"updated":"2026-04-18T03:43:58.539Z"}
{"id":"post:anthropic-claude-design-cuoc-cach-mang-thiet-ke-ai-dang-den-voi-doanh-nghiep-vie:vi:những-tính-năng-nổi-bật-của-claude-design~2","url":"https://hecigo.com/blog/anthropic-claude-design-cuoc-cach-mang-thiet-ke-ai-dang-den-voi-doanh-nghiep-vie/#những-tính-năng-nổi-bật-của-claude-design","locale":"vi","type":"post","title":"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","headingPath":["Những Tính Năng Nổi Bật của Claude Design"],"text":"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.\n\n> 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...","entities":["org:hecigo"],"updated":"2026-04-18T03:43:58.539Z"}
{"id":"post:anthropic-claude-design-cuoc-cach-mang-thiet-ke-ai-dang-den-voi-doanh-nghiep-vie:vi:quy-trình-làm-việc-và-khả-năng-cộng-tác","url":"https://hecigo.com/blog/anthropic-claude-design-cuoc-cach-mang-thiet-ke-ai-dang-den-voi-doanh-nghiep-vie/#quy-trình-làm-việc-và-khả-năng-cộng-tác","locale":"vi","type":"post","title":"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","headingPath":["Quy Trình Làm Việc và Khả Năng Cộng Tác"],"text":"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ả:\n\n### Chat-first Workflow\n\nQuy 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ú.\n\n### Hợp tác Nhóm và Chia sẻ\n\nĐể 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.","entities":[],"updated":"2026-04-18T03:43:58.539Z"}
{"id":"post:anthropic-claude-design-cuoc-cach-mang-thiet-ke-ai-dang-den-voi-doanh-nghiep-vie:vi:ứng-dụng-thực-tế-và-lợi-ích-cho-doanh-nghiệp-việt-nam","url":"https://hecigo.com/blog/anthropic-claude-design-cuoc-cach-mang-thiet-ke-ai-dang-den-voi-doanh-nghiep-vie/#ứng-dụng-thực-tế-và-lợi-ích-cho-doanh-nghiệp-việt-nam","locale":"vi","type":"post","title":"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","headingPath":["Ứng Dụng Thực Tế và Lợi Ích cho Doanh Nghiệp Việt Nam"],"text":"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:\n\n*   **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.\n*   **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.\n*   **Độ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.\n\nĐối với các doanh nghiệp Việt Nam, Claude Design mở ra cơ hội lớn để:\n\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.\n*   **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*   **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.","entities":[],"updated":"2026-04-18T03:43:58.539Z"}
{"id":"post:anthropic-claude-design-cuoc-cach-mang-thiet-ke-ai-dang-den-voi-doanh-nghiep-vie:vi:triển-khai-và-khả-năng-tiếp-cận","url":"https://hecigo.com/blog/anthropic-claude-design-cuoc-cach-mang-thiet-ke-ai-dang-den-voi-doanh-nghiep-vie/#triển-khai-và-khả-năng-tiếp-cận","locale":"vi","type":"post","title":"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","headingPath":["Triển Khai và Khả Năng Tiếp Cận"],"text":"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).\n\nSự 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.","entities":[],"updated":"2026-04-18T03:43:58.539Z"}
{"id":"post:anthropic-claude-design-cuoc-cach-mang-thiet-ke-ai-dang-den-voi-doanh-nghiep-vie:vi:chỗ-nó-thật-sự-chạm-tới-quy-trình","url":"https://hecigo.com/blog/anthropic-claude-design-cuoc-cach-mang-thiet-ke-ai-dang-den-voi-doanh-nghiep-vie/#chỗ-nó-thật-sự-chạm-tới-quy-trình","locale":"vi","type":"post","title":"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","headingPath":["Chỗ nó thật sự chạm tới quy trình"],"text":"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ể.\n\nBa khâu còn lại thì không đổi, và chúng mới là phần dài:\n\n- **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.\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.\n- **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\nNó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\nNế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.\n\n> **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.","entities":["org:hecigo"],"updated":"2026-04-18T03:43:58.539Z"}
{"id":"post:anthropic-claude-design-cuoc-cach-mang-thiet-ke-ai-dang-den-voi-doanh-nghiep-vie:vi:chỗ-nó-thật-sự-chạm-tới-quy-trình~2","url":"https://hecigo.com/blog/anthropic-claude-design-cuoc-cach-mang-thiet-ke-ai-dang-den-voi-doanh-nghiep-vie/#chỗ-nó-thật-sự-chạm-tới-quy-trình","locale":"vi","type":"post","title":"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","headingPath":["Chỗ nó thật sự chạm tới quy trình"],"text":"> 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...","entities":["org:hecigo"],"updated":"2026-04-18T03:43:58.539Z"}
{"id":"post:anthropic-claude-design-cuoc-cach-mang-thiet-ke-ai-dang-den-voi-doanh-nghiep-vie:vi:nguồn-tham-khảo","url":"https://hecigo.com/blog/anthropic-claude-design-cuoc-cach-mang-thiet-ke-ai-dang-den-voi-doanh-nghiep-vie/#nguồn-tham-khảo","locale":"vi","type":"post","title":"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","headingPath":["Nguồn tham khảo"],"text":"- [Claude Design](https://www.anthropic.com/news/claude-design-anthropic-labs) - Anthropic\n- [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","entities":[],"updated":"2026-04-18T03:43:58.539Z"}
{"id":"post:hecigo-cap-nhat-giai-phap-ai-moi-gemini-31-flash-tts-va-co-hoi-cho-cac-nha-phat-:vi:intro","url":"https://hecigo.com/blog/hecigo-cap-nhat-giai-phap-ai-moi-gemini-31-flash-tts-va-co-hoi-cho-cac-nha-phat-/","locale":"vi","type":"post","title":"Nối text-to-speech vào workflow: phần khó không nằm ở API","headingPath":[],"text":"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)).\n\nGọ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.","entities":[],"updated":"2026-04-16T13:15:06.964Z"}
{"id":"post:hecigo-cap-nhat-giai-phap-ai-moi-gemini-31-flash-tts-va-co-hoi-cho-cac-nha-phat-:vi:chuẩn-hóa-tiếng-việt-trước-khi-đọc","url":"https://hecigo.com/blog/hecigo-cap-nhat-giai-phap-ai-moi-gemini-31-flash-tts-va-co-hoi-cho-cac-nha-phat-/#chuẩn-hóa-tiếng-việt-trước-khi-đọc","locale":"vi","type":"post","title":"Nối text-to-speech vào workflow: phần khó không nằm ở API","headingPath":["Chuẩn hóa tiếng Việt trước khi đọc"],"text":"Đâ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.\n\nVă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.\n\nVài trường hợp gặp trong hầu hết dự án:\n\n| Trong dữ liệu | Đọc sai thành | Phải chuẩn hóa thành |\n|---|---|---|\n| `1.500.000đ` | \"một chấm năm trăm nghìn\" | \"một triệu năm trăm nghìn đồng\" |\n| `TP.HCM` | \"tê pê chấm hát xê mờ\" | \"Thành phố Hồ Chí Minh\" |\n| `30/4` | \"ba mươi trên bốn\" | \"ngày ba mươi tháng tư\" |\n| `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\" |\n| `SP-A12` | \"ét pê a mười hai\" | \"sản phẩm A mười hai\" |\n| `12,5%` | \"mười hai phẩy năm phần trăm\" (đúng) | giữ nguyên |\n\nHai đ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.\n\nCá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:\n\n```javascript\n// Quy tắc chuẩn hóa chạy TRƯỚC khi gửi cho TTS.\n// Thứ tự quan trọng: khớp cụ thể trước, tổng quát sau. Đảo lại thì quy tắc\n// tiền tệ sẽ nuốt mất số điện thoại, vì cả hai đều là chuỗi chữ số dài.\nconst RULES = [\n  { name: 'tien-te',    re: /(\\d[\\d.]*)\\s*(đ|VND|vnđ)\\b/gi, fn: (_, n) => `${docSoTien(n)} đồng` },\n  { name: 'sdt',        re: /\\b(0\\d{9,10})\\b/g,             fn: (_, n) => docTungCum(n) },\n  { name: 'ngay-thang', re: /\\b(\\d{1,2})\\/(\\d{1,2})\\b/g,    fn: (_, d, m) => `ngày ${d} tháng ${m}` },\n  { name: 'viet-tat',   re: /\\bTP\\.?\\s?HCM\\b/gi,            fn: () => 'Thành phố Hồ Chí Minh' },\n];","entities":[],"updated":"2026-04-16T13:15:06.964Z"}
{"id":"post:hecigo-cap-nhat-giai-phap-ai-moi-gemini-31-flash-tts-va-co-hoi-cho-cac-nha-phat-:vi:chuẩn-hóa-tiếng-việt-trước-khi-đọc~2","url":"https://hecigo.com/blog/hecigo-cap-nhat-giai-phap-ai-moi-gemini-31-flash-tts-va-co-hoi-cho-cac-nha-phat-/#chuẩn-hóa-tiếng-việt-trước-khi-đọc","locale":"vi","type":"post","title":"Nối text-to-speech vào workflow: phần khó không nằm ở API","headingPath":["Chuẩn hóa tiếng Việt trước khi đọc"],"text":"function chuanHoa(text) {\n  const applied = [];\n  let out = text;\n  for (const r of RULES) {\n    const before = out;\n    out = out.replace(r.re, r.fn);\n    if (out !== before) applied.push(r.name);\n  }\n  // Ghi lại quy tắc nào đã chạy: khi người nghe báo \"đọc sai chỗ này\",\n  // đây là thứ duy nhất cho biết nên sửa quy tắc nào.\n  return { text: out, applied };\n}\n```\n\nTrả 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.","entities":[],"updated":"2026-04-16T13:15:06.964Z"}
{"id":"post:hecigo-cap-nhat-giai-phap-ai-moi-gemini-31-flash-tts-va-co-hoi-cho-cac-nha-phat-:vi:audio-đi-đâu-sau-khi-sinh-ra","url":"https://hecigo.com/blog/hecigo-cap-nhat-giai-phap-ai-moi-gemini-31-flash-tts-va-co-hoi-cho-cac-nha-phat-/#audio-đi-đâu-sau-khi-sinh-ra","locale":"vi","type":"post","title":"Nối text-to-speech vào workflow: phần khó không nằm ở API","headingPath":["Audio đi đâu sau khi sinh ra"],"text":"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:\n\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.\n\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.\n\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.","entities":[],"updated":"2026-04-16T13:15:06.964Z"}
{"id":"post:hecigo-cap-nhat-giai-phap-ai-moi-gemini-31-flash-tts-va-co-hoi-cho-cac-nha-phat-:vi:thất-bại-giữa-chừng-và-chi-phí","url":"https://hecigo.com/blog/hecigo-cap-nhat-giai-phap-ai-moi-gemini-31-flash-tts-va-co-hoi-cho-cac-nha-phat-/#thất-bại-giữa-chừng-và-chi-phí","locale":"vi","type":"post","title":"Nối text-to-speech vào workflow: phần khó không nằm ở API","headingPath":["Thất bại giữa chừng và chi phí"],"text":"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.\n\nVớ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:\n\n1. **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ũ.\n2. **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.\n3. **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.","entities":[],"updated":"2026-04-16T13:15:06.964Z"}
{"id":"post:hecigo-cap-nhat-giai-phap-ai-moi-gemini-31-flash-tts-va-co-hoi-cho-cac-nha-phat-:vi:khi-nào-thì-đáng-làm","url":"https://hecigo.com/blog/hecigo-cap-nhat-giai-phap-ai-moi-gemini-31-flash-tts-va-co-hoi-cho-cac-nha-phat-/#khi-nào-thì-đáng-làm","locale":"vi","type":"post","title":"Nối text-to-speech vào workflow: phần khó không nằm ở API","headingPath":["Khi nào thì đáng làm"],"text":"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\nNó 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.\n\nVề 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\nNế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.\n\n> **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.\n\n> 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ệ...","entities":["org:hecigo","product:n8n-nodes-firecrawl-v2","product:n8n-nodes-zalo-platform"],"updated":"2026-04-16T13:15:06.964Z"}
{"id":"post:hecigo-cap-nhat-giai-phap-ai-moi-gemini-31-flash-tts-va-co-hoi-cho-cac-nha-phat-:vi:nguồn-tham-khảo","url":"https://hecigo.com/blog/hecigo-cap-nhat-giai-phap-ai-moi-gemini-31-flash-tts-va-co-hoi-cho-cac-nha-phat-/#nguồn-tham-khảo","locale":"vi","type":"post","title":"Nối text-to-speech vào workflow: phần khó không nằm ở API","headingPath":["Nguồn tham khảo"],"text":"- [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\n- [Speech generation | Gemini API](https://ai.google.dev/gemini-api/docs/speech-generation) - Google AI for Developers\n- [Gemini API pricing](https://ai.google.dev/gemini-api/docs/pricing) - Google AI for Developers","entities":[],"updated":"2026-04-16T13:15:06.964Z"}
{"id":"post:toi-uu-hoa-quy-trinh-thu-thap-du-lieu-web-cho-doanh-nghiep-viet-voi-n8n-va-firec:vi:intro","url":"https://hecigo.com/blog/toi-uu-hoa-quy-trinh-thu-thap-du-lieu-web-cho-doanh-nghiep-viet-voi-n8n-va-firec/","locale":"vi","type":"post","title":"Thu Thập Dữ Liệu Web cho Doanh Nghiệp Việt với n8n và Firecrawl","headingPath":[],"text":"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.\n\nBà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.","entities":[],"updated":"2026-04-11T09:08:00Z"}
{"id":"post:toi-uu-hoa-quy-trinh-thu-thap-du-lieu-web-cho-doanh-nghiep-viet-voi-n8n-va-firec:vi:firecrawl-là-gì","url":"https://hecigo.com/blog/toi-uu-hoa-quy-trinh-thu-thap-du-lieu-web-cho-doanh-nghiep-viet-voi-n8n-va-firec/#firecrawl-là-gì","locale":"vi","type":"post","title":"Thu Thập Dữ Liệu Web cho Doanh Nghiệp Việt với n8n và Firecrawl","headingPath":["Firecrawl là gì?"],"text":"[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ữ.\n\nTheo [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.\n\n### Cloud vs Self-Hosted\n\nFirecrawl 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:\n\n|     | Firecrawl Cloud | Self-Hosted |\n| --- | --- | --- |\n| **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 |\n| **Base URL** | `https://api.firecrawl.dev/v2` | `http://your-server:3002/v2` |\n| **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 |\n| **Chi phí** | Giá dựa trên mức sử dụng | Chỉ chi phí cơ sở hạ tầng |\n\nChú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.","entities":["product:n8n-nodes-firecrawl-v2"],"updated":"2026-04-11T09:08:00Z"}
{"id":"post:toi-uu-hoa-quy-trinh-thu-thap-du-lieu-web-cho-doanh-nghiep-viet-voi-n8n-va-firec:vi:cài-đặt","url":"https://hecigo.com/blog/toi-uu-hoa-quy-trinh-thu-thap-du-lieu-web-cho-doanh-nghiep-viet-voi-n8n-va-firec/#cài-đặt","locale":"vi","type":"post","title":"Thu Thập Dữ Liệu Web cho Doanh Nghiệp Việt với n8n và Firecrawl","headingPath":["Cài đặt"],"text":"### Cài đặt Node\n\nBạn có thể cài đặt node Firecrawl trong n8n thông qua giao diện người dùng:\n\n    Settings > Community Nodes > Install > n8n-nodes-firecrawl-v2\n\nHoặc thông qua dòng lệnh:\n\n```shell\ncd ~/.n8n\nnpm install n8n-nodes-firecrawl-v2\n```\nKhởi động lại n8n sau khi cài đặt.\n\n### Cấu hình Credentials\n\nTạo một credential mới có kiểu **Firecrawl API**:\n\n| Trường | Mặc định | Mô tả |\n| --- | --- | --- |\n| 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`**. |\n| API Key |     | API key Firecrawl của bạn |\n\nAuthentication 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`.","entities":["product:n8n-nodes-firecrawl-v2"],"updated":"2026-04-11T09:08:00Z"}
{"id":"post:toi-uu-hoa-quy-trinh-thu-thap-du-lieu-web-cho-doanh-nghiep-viet-voi-n8n-va-firec:vi:các-thao-tác","url":"https://hecigo.com/blog/toi-uu-hoa-quy-trinh-thu-thap-du-lieu-web-cho-doanh-nghiep-viet-voi-n8n-va-firec/#các-thao-tác","locale":"vi","type":"post","title":"Thu Thập Dữ Liệu Web cho Doanh Nghiệp Việt với n8n và Firecrawl","headingPath":["Các thao tác"],"text":"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:\n\n### 1. Scrape\n\nThao 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.\n\n**Endpoint:** `POST /scrape`\n\n| Tham số | Loại | Mặc định | Mô tả |\n| --- | --- | --- | --- |\n| `url` | String |     | URL mục tiêu (bắt buộc) |\n\n**Các tùy chọn Scrape (tất cả đều tùy chọn):**\n\n| Tham số | Mặc định | Mô tả |\n| --- | --- | --- |\n| `formats` | `markdown` | Các định dạng đầu ra: `markdown`, `html`, `rawHtml`, `links`, `screenshot`, `json`, `summary`, `images`, `audio`, `changeTracking` |\n| `onlyMainContent` | `true` | Loại bỏ headers, navigation và footers |\n| `includeTags` |     | Các CSS selector để giữ lại (ví dụ: `article, .content`) |\n| `excludeTags` |     | Các CSS selector để loại bỏ (ví dụ: `nav, .sidebar`) |\n| `waitFor` | `0` | Chờ JS rendering (ms). Tăng lên cho các trang SPA/React. |\n| `timeout` | `30000` | Thời gian chờ yêu cầu (ms), tối đa 300,000 |\n| `mobile` | `false` | Giả lập viewport của thiết bị di động |\n| `blockAds` | `true` | Chặn quảng cáo và cookie consent popups |\n| `proxy` | `auto` | Chế độ proxy: `auto`, `basic`, `enhanced` |\n| `locationCountry` |     | Mã quốc gia ISO (ví dụ: `VN`, `US`) |\n| `locationLanguages` |     | Mã ngôn ngữ (ví dụ: `vi-VN, en-US`) |\n\n**Ví dụ đầu ra:**\n\n```json\n{\n  \"markdown\": \"# Page Title\\n\\nMain content extracted...\",\n  \"metadata\": {\n    \"title\": \"Page Title\",\n    \"description\": \"Meta description\",\n    \"sourceURL\": \"https://example.com\",\n    \"statusCode\": 200\n  }\n}\n```\n\n### 2. Crawl","entities":[],"updated":"2026-04-11T09:08:00Z"}
{"id":"post:toi-uu-hoa-quy-trinh-thu-thap-du-lieu-web-cho-doanh-nghiep-viet-voi-n8n-va-firec:vi:các-thao-tác~2","url":"https://hecigo.com/blog/toi-uu-hoa-quy-trinh-thu-thap-du-lieu-web-cho-doanh-nghiep-viet-voi-n8n-va-firec/#các-thao-tác","locale":"vi","type":"post","title":"Thu Thập Dữ Liệu Web cho Doanh Nghiệp Việt với n8n và Firecrawl","headingPath":["Các thao tác"],"text":"**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.\n\n**Endpoint:** `POST /crawl`\n\n| Tham số | Mặc định | Mô tả |\n| --- | --- | --- |\n| `crawlUrl` |     | URL bắt đầu (bắt buộc) |\n| `waitForCompletion` | `false` | Giữ thực thi cho đến khi crawl hoàn tất |\n| `maxPollTime` | `300` | Thời gian chờ tối đa tính bằng giây |\n\n**Các tùy chọn Crawl:**\n\n| Tham số | Mặc định | Mô tả |\n| --- | --- | --- |\n| `limit` | `100` | Số lượng trang tối đa để crawl |\n| `maxDiscoveryDepth` | `2` | Độ sâu liên kết tối đa |\n| `includePaths` |     | Các mẫu regex để bao gồm (ví dụ: `/blog/*, /docs/*`) |\n| `excludePaths` |     | Các mẫu regex để loại trừ (ví dụ: `/admin/*, /login`) |\n| `sitemap` | `include` | Xử lý sitemap: `include`, `skip` hoặc `only` |\n| `crawlEntireDomain` | `false` | Theo dõi các liên kết cùng cấp và cha trên toàn miền |\n| `allowExternalLinks` | `false` | Theo dõi các liên kết đến các miền bên ngoài |\n| `allowSubdomains` | `false` | Crawl các subdomain |\n| `delay` | `0` | Số giây giữa các yêu cầu (buộc concurrency về 1) |\n| `formats` | `markdown` | Định dạng đầu ra cho mỗi trang |\n| `onlyMainContent` | `true` | Loại bỏ boilerplate khỏi mỗi trang |\n\n**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.\n\n### 3. Get Crawl Status / 4. Cancel Crawl\n\n| Thao tác | Endpoint | Tham số |\n| --- | --- | --- |\n| Get Crawl Status | `GET /crawl/:id` | `crawlId` (job ID từ Crawl) |\n| Cancel Crawl | `DELETE /crawl/:id` | `cancelCrawlId` (job ID) |\n\n### 5. Map","entities":[],"updated":"2026-04-11T09:08:00Z"}
{"id":"post:toi-uu-hoa-quy-trinh-thu-thap-du-lieu-web-cho-doanh-nghiep-viet-voi-n8n-va-firec:vi:các-thao-tác~3","url":"https://hecigo.com/blog/toi-uu-hoa-quy-trinh-thu-thap-du-lieu-web-cho-doanh-nghiep-viet-voi-n8n-va-firec/#các-thao-tác","locale":"vi","type":"post","title":"Thu Thập Dữ Liệu Web cho Doanh Nghiệp Việt với n8n và Firecrawl","headingPath":["Các thao tác"],"text":"**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.\n\n**Endpoint:** `POST /map`\n\n| Tham số | Mặc định | Mô tả |\n| --- | --- | --- |\n| `mapUrl` |     | URL bắt đầu (bắt buộc) |\n| `search` |     | Truy vấn tìm kiếm để xếp hạng kết quả theo mức độ liên quan |\n| `includeSubdomains` | `true` | Bao gồm các URL subdomain |\n| `limit` | `5000` | Số lượng URL tối đa để trả về (tối đa: 100,000) |\n| `ignoreQueryParameters` | `true` | Loại bỏ các URL trùng lặp bằng cách loại bỏ query string |\n| `ignoreCache` | `false` | Bỏ qua bộ nhớ cache sitemap |\n\n### 6. Search\n\n**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.\n\n**Endpoint:** `POST /search`\n\n| Tham số | Mặc định | Mô tả |\n| --- | --- | --- |\n| `query` |     | Truy vấn tìm kiếm (bắt buộc) |\n| `limit` | `5` | Số lượng kết quả tối đa |\n| `lang` |     | Mã ngôn ngữ (ví dụ: `vi`, `en`) |\n| `country` |     | Mã quốc gia (ví dụ: `VN`, `US`) |\n| `scrapeOptions` |     | Áp dụng các tùy chọn scrape cho mỗi kết quả |","entities":[],"updated":"2026-04-11T09:08:00Z"}
{"id":"post:toi-uu-hoa-quy-trinh-thu-thap-du-lieu-web-cho-doanh-nghiep-viet-voi-n8n-va-firec:vi:ứng-dụng-thực-tế-cho-doanh-nghiệp-việt","url":"https://hecigo.com/blog/toi-uu-hoa-quy-trinh-thu-thap-du-lieu-web-cho-doanh-nghiep-viet-voi-n8n-va-firec/#ứng-dụng-thực-tế-cho-doanh-nghiệp-việt","locale":"vi","type":"post","title":"Thu Thập Dữ Liệu Web cho Doanh Nghiệp Việt với n8n và Firecrawl","headingPath":["Ứng dụng thực tế cho doanh nghiệp Việt"],"text":"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:\n\n- **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ủ\n- **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\n- **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\n- **Lead generation:** Search và scrape thông tin doanh nghiệp từ các danh bạ trực tuyến","entities":[],"updated":"2026-04-11T09:08:00Z"}
{"id":"post:toi-uu-hoa-quy-trinh-thu-thap-du-lieu-web-cho-doanh-nghiep-viet-voi-n8n-va-firec:vi:hecigo-và-node-này","url":"https://hecigo.com/blog/toi-uu-hoa-quy-trinh-thu-thap-du-lieu-web-cho-doanh-nghiep-viet-voi-n8n-va-firec/#hecigo-và-node-này","locale":"vi","type":"post","title":"Thu Thập Dữ Liệu Web cho Doanh Nghiệp Việt với n8n và Firecrawl","headingPath":["hecigo và node này"],"text":"`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ý.\n\nCà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.","entities":["org:hecigo","product:n8n-nodes-firecrawl-v2"],"updated":"2026-04-11T09:08:00Z"}
{"id":"post:toi-uu-hoa-quy-trinh-thu-thap-du-lieu-web-cho-doanh-nghiep-viet-voi-n8n-va-firec:vi:nguồn-tham-khảo","url":"https://hecigo.com/blog/toi-uu-hoa-quy-trinh-thu-thap-du-lieu-web-cho-doanh-nghiep-viet-voi-n8n-va-firec/#nguồn-tham-khảo","locale":"vi","type":"post","title":"Thu Thập Dữ Liệu Web cho Doanh Nghiệp Việt với n8n và Firecrawl","headingPath":["Nguồn tham khảo"],"text":"*   [n8n Firecrawl Node: Web Scraping, Crawling & AI Extraction Guide | THE NEXOVA](https://thenexova.com/n8n-firecrawl-node-web-scraping-crawling-and-ai-extraction-guide/)\n*   [Digital Transformation: Vietnam's Business-First Approach | THE NEXOVA](https://thenexova.com/digital-transformation-vietnams-business-first-approach/)","entities":[],"updated":"2026-04-11T09:08:00Z"}
{"id":"post:toi-uu-tu-dong-hoa-zalo-bot-voi-n8n-huong-dan-chi-tiet-tu-hecigo:vi:intro","url":"https://hecigo.com/blog/toi-uu-tu-dong-hoa-zalo-bot-voi-n8n-huong-dan-chi-tiet-tu-hecigo/","locale":"vi","type":"post","title":"Tối Ưu Tự Động Hóa Zalo Bot với n8n: Hướng Dẫn Chi Tiết từ hecigo","headingPath":[],"text":"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. \n\nBà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/).","entities":["org:hecigo"],"updated":"2026-04-11T08:34:00Z"}
{"id":"post:toi-uu-tu-dong-hoa-zalo-bot-voi-n8n-huong-dan-chi-tiet-tu-hecigo:vi:tại-sao-nên-tự-động-hóa-zalo-bot","url":"https://hecigo.com/blog/toi-uu-tu-dong-hoa-zalo-bot-voi-n8n-huong-dan-chi-tiet-tu-hecigo/#tại-sao-nên-tự-động-hóa-zalo-bot","locale":"vi","type":"post","title":"Tối Ưu Tự Động Hóa Zalo Bot với n8n: Hướng Dẫn Chi Tiết từ hecigo","headingPath":["Tại sao nên tự động hóa Zalo Bot?"],"text":"**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:\n\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.\n*   **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.\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.\n*   **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.","entities":[],"updated":"2026-04-11T08:34:00Z"}
{"id":"post:toi-uu-tu-dong-hoa-zalo-bot-voi-n8n-huong-dan-chi-tiet-tu-hecigo:vi:những-gì-bạn-nhận-được","url":"https://hecigo.com/blog/toi-uu-tu-dong-hoa-zalo-bot-voi-n8n-huong-dan-chi-tiet-tu-hecigo/#những-gì-bạn-nhận-được","locale":"vi","type":"post","title":"Tối Ưu Tự Động Hóa Zalo Bot với n8n: Hướng Dẫn Chi Tiết từ hecigo","headingPath":["Những gì bạn nhận được"],"text":"Package `n8n-nodes-zalo-platform` bao gồm hai node chính:\n\n*   **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.\n*   **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.\n\nZalo 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:\n\n```\nhttps://bot-api.zaloplatforms.com/bot{TOKEN}/{method}\n```","entities":["product:n8n-nodes-zalo-platform"],"updated":"2026-04-11T08:34:00Z"}
{"id":"post:toi-uu-tu-dong-hoa-zalo-bot-voi-n8n-huong-dan-chi-tiet-tu-hecigo:vi:cài-đặt","url":"https://hecigo.com/blog/toi-uu-tu-dong-hoa-zalo-bot-voi-n8n-huong-dan-chi-tiet-tu-hecigo/#cài-đặt","locale":"vi","type":"post","title":"Tối Ưu Tự Động Hóa Zalo Bot với n8n: Hướng Dẫn Chi Tiết từ hecigo","headingPath":["Cài đặt"],"text":"### Bước 1: Tạo Zalo Bot\n\n1.  Mở ứng dụng **Zalo** trên điện thoại của bạn.\n2.  Tìm kiếm Official Account **\"Zalo Bot Manager\"**.\n3.  Nhấn **\"Tao bot\"** (Tạo bot) trong menu chat.\n4.  Nhập tên bot (phải bắt đầu bằng \"Bot\", ví dụ: `Bot MyShop`).\n5.  Zalo sẽ gửi **Bot Token** của bạn qua tin nhắn theo định dạng: `bot_id:secret_key`.\n\n### Bước 2: Cài đặt Node\n\n**Thông qua n8n Community Nodes (khuyến nghị):**\n\n    Settings > Community Nodes > Install > n8n-nodes-zalo-platform\n\n**Cài đặt thủ công (self-hosted):**\n\n```bash\ncd ~/.n8n\nnpm install n8n-nodes-zalo-platform\n```\n\n**Phiên bản n8n tối thiểu:** từ `2.0.0`, node yêu cầu **n8n 1.83 trở lên**. Bản cũ hơn không nạp được package. Nếu chưa nâng n8n được, cài bản `1.0.13`: `npm install n8n-nodes-zalo-platform@1.0.13`.\n\n**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.\n\n### Bước 3: Cấu hình Credentials\n\nTạo một credential mới thuộc loại **Zalo Bot API**:\n\n| Field     | Value                                         |\n| --------- | --------------------------------------------- |\n| Bot Token | Chuỗi `bot_id:secret_key` nhận được từ Zalo |\n\nKhi bạn lưu, n8n sẽ tự động gọi `POST /getMe` để xác minh token có hợp lệ hay không.\n\n> **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/)","entities":["product:n8n-nodes-zalo-platform"],"updated":"2026-04-11T08:34:00Z"}
{"id":"post:toi-uu-tu-dong-hoa-zalo-bot-voi-n8n-huong-dan-chi-tiet-tu-hecigo:vi:cài-đặt~2","url":"https://hecigo.com/blog/toi-uu-tu-dong-hoa-zalo-bot-voi-n8n-huong-dan-chi-tiet-tu-hecigo/#cài-đặt","locale":"vi","type":"post","title":"Tối Ưu Tự Động Hóa Zalo Bot với n8n: Hướng Dẫn Chi Tiết từ hecigo","headingPath":["Cài đặt"],"text":"> 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, khi nào dùng, và...","entities":["org:hecigo"],"updated":"2026-04-11T08:34:00Z"}
{"id":"post:toi-uu-tu-dong-hoa-zalo-bot-voi-n8n-huong-dan-chi-tiet-tu-hecigo:vi:zalo-bot-trigger-nhận-tin-nhắn","url":"https://hecigo.com/blog/toi-uu-tu-dong-hoa-zalo-bot-voi-n8n-huong-dan-chi-tiet-tu-hecigo/#zalo-bot-trigger-nhận-tin-nhắn","locale":"vi","type":"post","title":"Tối Ưu Tự Động Hóa Zalo Bot với n8n: Hướng Dẫn Chi Tiết từ hecigo","headingPath":["Zalo Bot Trigger: Nhận tin nhắn"],"text":"Node **n8n Zalo Bot** Trigger tự động xử lý lifecycle webhook. Khi bạn kích hoạt một workflow, node sẽ:\n\n1.  Đăng ký một URL webhook với Zalo API (`POST /setWebhook`).\n2.  Tạo một **secret token** một cách xác định: `SHA256(botToken).hex().substring(0, 32)`.\n3.  Xác thực mọi yêu cầu đến dựa trên header `X-Bot-Api-Secret-Token`.\n4.  Dọn dẹp webhook khi workflow bị tắt (`POST /deleteWebhook`).\n\nBạn không cần sao chép URL webhook hoặc quản lý secret token thủ công.\n\n### Bộ lọc sự kiện\n\n| Option         | Value              | What Passes Through         |\n| -------------- | ------------------ | ----------------------------- |\n| Any Message    | `anyMessage`       | Tất cả các loại tin nhắn đến    |\n| Text Message   | `message.text.received`  | Chỉ tin nhắn văn bản             |\n| Image Message  | `message.image.received` | Chỉ tin nhắn hình ảnh            |\n| Sticker Message| `message.sticker.received`| Chỉ tin nhắn sticker           |\n\n### Sample Output Payload\n\nKhi người dùng gửi tin nhắn văn bản đến bot của bạn, trigger sẽ xuất ra:\n\n```json\n{\n  \"event_name\": \"message.text.received\",\n  \"message\": {\n    \"date\": 1775362520302,\n    \"chat\": {\n      \"chat_type\": \"PRIVATE\",\n      \"id\": \"818e7bf147beaee0f7af\"\n    },\n    \"message_id\": \"261de7b845d153890ac6\",\n    \"from\": {\n      \"id\": \"818e7bf147beaee0f7af\",\n      \"is_bot\": false,\n      \"display_name\": \"Nguyen Van A\"\n    },\n    \"text\": \"Xin chao\"\n  }\n}\n```\n\n**Các expression chính cho các node downstream:**","entities":[],"updated":"2026-04-11T08:34:00Z"}
{"id":"post:toi-uu-tu-dong-hoa-zalo-bot-voi-n8n-huong-dan-chi-tiet-tu-hecigo:vi:zalo-bot-trigger-nhận-tin-nhắn~2","url":"https://hecigo.com/blog/toi-uu-tu-dong-hoa-zalo-bot-voi-n8n-huong-dan-chi-tiet-tu-hecigo/#zalo-bot-trigger-nhận-tin-nhắn","locale":"vi","type":"post","title":"Tối Ưu Tự Động Hóa Zalo Bot với n8n: Hướng Dẫn Chi Tiết từ hecigo","headingPath":["Zalo Bot Trigger: Nhận tin nhắn"],"text":"| Expression                     | Returns                       |\n| ------------------------------ | ----------------------------- |\n| `$json.message.chat.id` | Chat ID (sử dụng để trả lời) |\n| `$json.message.text`    | Nội dung tin nhắn             |\n| `$json.message.from.display_name` | Tên hiển thị của người gửi   |\n| `$json.event_name`        | Chuỗi loại sự kiện            |","entities":[],"updated":"2026-04-11T08:34:00Z"}
{"id":"post:toi-uu-tu-dong-hoa-zalo-bot-voi-n8n-huong-dan-chi-tiet-tu-hecigo:vi:zalo-bot-action-node-9-operations","url":"https://hecigo.com/blog/toi-uu-tu-dong-hoa-zalo-bot-voi-n8n-huong-dan-chi-tiet-tu-hecigo/#zalo-bot-action-node-9-operations","locale":"vi","type":"post","title":"Tối Ưu Tự Động Hóa Zalo Bot với n8n: Hướng Dẫn Chi Tiết từ hecigo","headingPath":["Zalo Bot Action Node: 9 Operations"],"text":"### Get Bot Info\n\n**Endpoint:** `POST /getMe` | **Parameters:** None\n\nTrả về tên và ID của bot. Sử dụng để xác minh kết nối của bạn.\n\n### Send Message\n\n**Endpoint:** `POST /sendMessage`\n\n| Parameter | Type   | Required | Description                                  |\n| --------- | ------ | -------- | -------------------------------------------- |\n| `chatId`  | String | Yes      | User ID hoặc Group ID                         |\n| `text`    | String | Yes      | Nội dung tin nhắn, tối đa 2000 ký tự          |\n\n**Request body được gửi đến Zalo:**\n\n```json\n{ \"chat_id\": \"818e7bf147beaee0f7af\", \"text\": \"Thanks for reaching out!\" }\n```\n\n### Send Photo\n\n**Endpoint:** `POST /sendPhoto`\n\n| Parameter | Type   | Required | Description           |\n| --------- | ------ | -------- | --------------------- |\n| `chatId`  | String | Yes      | User ID hoặc Group ID |\n| `photo`   | String | Yes      | HTTPS image URL       |\n| `caption` | String | No       | Caption text, max 2000 characters |\n\n### Send Sticker\n\n**Endpoint:** `POST /sendSticker`\n\n| Parameter | Type   | Required | Description           |\n| --------- | ------ | -------- | --------------------- |\n| `chatId`  | String | Yes      | User ID hoặc Group ID |\n| `stickerId`| String | Yes      | Sticker ID (ví dụ: `bfe458bf64fa8da4d4eb`) |\n\n**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.\n\n### Send Chat Action\n\n**Endpoint:** `POST /sendChatAction`","entities":[],"updated":"2026-04-11T08:34:00Z"}
{"id":"post:toi-uu-tu-dong-hoa-zalo-bot-voi-n8n-huong-dan-chi-tiet-tu-hecigo:vi:zalo-bot-action-node-9-operations~2","url":"https://hecigo.com/blog/toi-uu-tu-dong-hoa-zalo-bot-voi-n8n-huong-dan-chi-tiet-tu-hecigo/#zalo-bot-action-node-9-operations","locale":"vi","type":"post","title":"Tối Ưu Tự Động Hóa Zalo Bot với n8n: Hướng Dẫn Chi Tiết từ hecigo","headingPath":["Zalo Bot Action Node: 9 Operations"],"text":"| Parameter | Type    | Required | Description                                                                         |\n| --------- | ------- | -------- | ----------------------------------------------------------------------------------- |\n| `chatId`  | String  | Yes      | User ID hoặc Group ID                                                               |\n| `action`  | Options | Yes      | `typing` (bot đang nhập tin nhắn) hoặc `upload_photo` (bot đang tải ảnh lên)        |\n\n**Request body được gửi đến Zalo:**\n\n```json\n{ \"chat_id\": \"818e7bf147beaee0f7af\", \"action\": \"typing\" }\n```\n\nSử 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ý.\n\n### Set Webhook\n\n**Endpoint:** `POST /setWebhook`\n\n| Parameter     | Type   | Required | Description                                             |\n| ------------- | ------ | -------- | ------------------------------------------------------- |\n| `url`         | String | Yes      | HTTPS URL công khai để Zalo gửi event đến               |\n| `secretToken` | String | No       | Secret token để xác thực request đến từ Zalo            |\n\n> **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.\n\n### Delete Webhook\n\n**Endpoint:** `POST /deleteWebhook` | **Parameters:** None\n\nXó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.\n\n### Get Webhook Info","entities":[],"updated":"2026-04-11T08:34:00Z"}
{"id":"post:toi-uu-tu-dong-hoa-zalo-bot-voi-n8n-huong-dan-chi-tiet-tu-hecigo:vi:zalo-bot-action-node-9-operations~3","url":"https://hecigo.com/blog/toi-uu-tu-dong-hoa-zalo-bot-voi-n8n-huong-dan-chi-tiet-tu-hecigo/#zalo-bot-action-node-9-operations","locale":"vi","type":"post","title":"Tối Ưu Tự Động Hóa Zalo Bot với n8n: Hướng Dẫn Chi Tiết từ hecigo","headingPath":["Zalo Bot Action Node: 9 Operations"],"text":"**Endpoint:** `POST /getWebhookInfo` | **Parameters:** None\n\nTrả về thông tin webhook hiện tại của bot:\n\n```json\n{\n  \"url\": \"https://your-n8n.example.com/webhook/zalo-bot\",\n  \"has_custom_certificate\": false,\n  \"pending_update_count\": 0\n}\n```\n\nDùng để kiểm tra xem webhook đã được đăng ký đúng chưa, hoặc debug khi bot không nhận được event.","entities":[],"updated":"2026-04-11T08:34:00Z"}
{"id":"post:toi-uu-tu-dong-hoa-zalo-bot-voi-n8n-huong-dan-chi-tiet-tu-hecigo:vi:workflow-mẫu-chính-thức-chăm-sóc-khách-hàng-sme-việt-trên-zalo-bot","url":"https://hecigo.com/blog/toi-uu-tu-dong-hoa-zalo-bot-voi-n8n-huong-dan-chi-tiet-tu-hecigo/#workflow-mẫu-chính-thức-chăm-sóc-khách-hàng-sme-việt-trên-zalo-bot","locale":"vi","type":"post","title":"Tối Ưu Tự Động Hóa Zalo Bot với n8n: Hướng Dẫn Chi Tiết từ hecigo","headingPath":["Workflow Mẫu Chính Thức: Chăm Sóc Khách Hàng SME Việt trên Zalo Bot"],"text":"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:\n\n**[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/)**\n\nĐâ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:\n\n*   **Chào mừng và định tuyến tin nhắn** - Tự động phân loại tin nhắn đến theo intent.\n*   **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.\n*   **Chuyển tiếp lên nhân viên** - Tự động escalate khi bot không xử lý được.\n*   **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.\n\nWorkflow 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ế.\n\n**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.\n\n> **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/)","entities":["product:n8n-nodes-zalo-platform"],"updated":"2026-04-11T08:34:00Z"}
{"id":"post:toi-uu-tu-dong-hoa-zalo-bot-voi-n8n-huong-dan-chi-tiet-tu-hecigo:vi:hecigo-và-node-này","url":"https://hecigo.com/blog/toi-uu-tu-dong-hoa-zalo-bot-voi-n8n-huong-dan-chi-tiet-tu-hecigo/#hecigo-và-node-này","locale":"vi","type":"post","title":"Tối Ưu Tự Động Hóa Zalo Bot với n8n: Hướng Dẫn Chi Tiết từ hecigo","headingPath":["hecigo và node này"],"text":"`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.\n\nhecigo 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\nNế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.\n\n> **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.\n\n> 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, khi nào dùng, và...","entities":["org:hecigo","product:n8n-nodes-zalo-platform"],"updated":"2026-04-11T08:34:00Z"}
{"id":"post:toi-uu-tu-dong-hoa-zalo-bot-voi-n8n-huong-dan-chi-tiet-tu-hecigo:vi:nguồn-tham-khảo","url":"https://hecigo.com/blog/toi-uu-tu-dong-hoa-zalo-bot-voi-n8n-huong-dan-chi-tiet-tu-hecigo/#nguồn-tham-khảo","locale":"vi","type":"post","title":"Tối Ưu Tự Động Hóa Zalo Bot với n8n: Hướng Dẫn Chi Tiết từ hecigo","headingPath":["Nguồn tham khảo"],"text":"*   [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/)\n*   [n8n Zalo Bot Node: Setup, Operations & Workflow Guide | THE NEXOVA](https://thenexova.com/n8n-zalo-bot-node-complete-setup-and-operations-guide/)","entities":[],"updated":"2026-04-11T08:34:00Z"}
