1. Vì sao cần Product Feed
Nếu so với e‑commerce truyền thống, Product Feed là thứ nằm giữa:
- “vitrin” sản phẩm (catalog với giá, tình trạng, liên kết và media);
- và một hợp đồng kỹ thuật mô tả chính xác những SKU nào nhà bán hàng sẵn sàng hiển thị và/hoặc bán qua ChatGPT.
OpenAI trong đặc tả của họ nói rõ: feed là single source of truth (nguồn dữ liệu chuẩn duy nhất) về sản phẩm, mà tìm kiếm, gợi ý và chuẩn bị dữ liệu cho checkout đều dựa vào đó.
Ở cửa hàng trực tuyến thông thường, người dùng tự đi qua các trang, duyệt danh mục, lọc, v.v. Trong AI‑commerce thì ngược lại: người dùng chỉ cần nói với mô hình “hãy chọn cho tôi món quà kỹ thuật số tối đa 30 đô la cho người bạn lập trình viên thích board game” — và ChatGPT sẽ tự suy nghĩ xem những SKU nào trong Product Feed của bạn phù hợp, thứ tự hiển thị ra sao và cách trình bày dưới dạng thẻ cũng như tiếp theo là Instant Checkout.
Vì vậy Product Feed giải quyết đồng thời nhiều bài toán.
Thứ nhất, nó cung cấp cho ChatGPT dữ liệu có cấu trúc để tìm kiếm. Mô hình không chỉ dựa vào tên và mô tả sản phẩm, mà còn cả danh mục, thẻ, giá, khả dụng, locale, giới hạn theo quốc gia.
Thứ hai, nó là nguồn dữ liệu cho checkout. Khi ChatGPT bắt đầu chuẩn bị checkout_session, chính từ feed mà lấy ID SKU, giá, tiền tệ, seller URL và thông tin thương mại khác.
Và cuối cùng, Product Feed là một hợp đồng được chuẩn hóa giữa bạn và nền tảng. Bạn nói rõ: “đây là danh sách SKU, đây là những cái chỉ dùng cho tìm kiếm (discovery), và đây là những cái có thể xử lý qua Instant Checkout”.
Để hình dung, ta vẽ một sơ đồ đơn giản.
flowchart TD A[GiftGenius DB] --> B[Feed Builder] B --> C["Product Feed (CSV/JSON/...)"] C --> D[OpenAI Ingestion] D --> E[Chỉ mục tìm kiếm + xếp hạng] E --> F[ChatGPT/Agent chọn quà] F --> G["Instant Checkout (ACP)"]
Bên trái là cơ sở dữ liệu nội bộ của bạn, nơi “catalog thật” đang sống. Bên phải là ChatGPT, cái mà người dùng nhìn thấy. Ở giữa là Product Feed và cơ chế tiếp nhận, lập chỉ mục. Mọi thứ chúng ta làm trong bài giảng này nằm chính xác giữa A và D.
2. Định dạng và “vật lý” của Product Feed
Đặc tả OpenAI khá linh hoạt về định dạng tệp: hỗ trợ TSV, CSV, XML và JSON. Điều này được thiết kế có chủ đích, để hầu hết các hệ thống hiện có (từ monolith tự viết đến Shopify) có thể xuất feed mà không cần “múa may”.
Trong phương án điển hình:
- bạn đặt tệp hoặc endpoint cung cấp Product Feed trên máy chủ HTTPS của mình;
- đăng ký địa chỉ đó trong cổng ChatGPT Merchants;
- OpenAI định kỳ lấy feed đó, kiểm tra tính hợp lệ và lập chỉ mục sản phẩm.
Tài liệu nhấn mạnh cần cập nhật feed thường xuyên (thậm chí 10–15 phút một lần), để người dùng nhìn thấy giá và tồn kho mới nhất, đặc biệt trong các đợt sale và giai đoạn cao điểm.
Trong ví dụ học tập với GiftGenius, chúng ta sẽ dùng JSON vì hợp với các lập trình viên TypeScript. Nhưng quan trọng là: ở mức đặc tả, OpenAI không “gắn chặt” vào JSON, chỉ là với chúng ta nó tiện hơn.
Một feed JSON đơn giản có thể trông như sau:
[
{
"id": "gg-coffee-sub-1m-usd",
"title": "Gói thuê bao cà phê 1 tháng",
"description": "Hộp cà phê hạt hàng tháng dành cho lập trình viên.",
"price": 2900,
"currency": "usd",
"availability": "in_stock",
"link": "https://giftgenius.app/gifts/coffee-subscription-1m",
"image_link": "https://cdn.giftgenius.app/images/coffee-1m.png",
"enable_search": true,
"enable_checkout": true
}
]
Trong thực tế sẽ có nhiều trường hơn; một số là bắt buộc, số khác là khuyến nghị hoặc tùy chọn. Cách tổ chức thế nào — ta sẽ tìm hiểu tiếp.
3. Product vs biến thể (SKU): mô hình hóa ra sao
Một trong những câu hỏi thường gặp: “Trong Product Feed thể hiện kích cỡ, gói, thời hạn thuê bao và các biến thể của cùng một sản phẩm thế nào?”
Đặc tả Product Feed làm việc với các dòng/bản ghi, mỗi dòng mô tả một cấu hình có thể bán. Mẫu kiến trúc mà ngành khuyến nghị (và ăn khớp tốt với feed OpenAI) là: mỗi cấu hình riêng (kích cỡ, biến thể thuê bao, gói, vùng) là một bản ghi riêng trong feed, tức là một SKU riêng.
Sản phẩm gốc nằm trong mô hình nội bộ của bạn, còn trong feed bạn làm việc ở cấp SKU.
Ví dụ bạn có dịch vụ với thuê bao 1 tháng, 3 tháng, 6 tháng. Về phía product feed, đó là các SKU khác nhau. Nếu một dịch vụ có thể mua theo 20 điều kiện khác nhau, thì trong product feed của bạn cần có 20 SKU.
Trong TypeScript có thể diễn đạt như sau:
// Mô hình nội bộ GiftGenius
export interface GiftProduct {
id: string; // product_123
name: string;
description: string;
baseImageUrl: string;
}
// SKU sẽ được đưa vào Product Feed
export interface GiftSkuFeedItem {
id: string; // product_123_usd_1m
productId: string; // liên kết tới GiftProduct.id
title: string;
description: string;
price: number; // ở đơn vị nhỏ nhất (cent)
currency: string; // "usd"
}
Bên trong GiftGenius có thể là quan hệ một‑nhiều giữa GiftProduct và GiftSkuFeedItem. Còn trong feed bạn trả về danh sách SKU “phẳng”.
Để ChatGPT hiểu những SKU nào thuộc cùng một sản phẩm gốc (ví dụ thuê bao 1, 3 và 12 tháng), thường dùng trường nhóm như item_group_id. Tuy nhiên đây là mẫu kiến trúc, không phải yêu cầu bắt buộc của tiêu chuẩn.
Ví dụ:
{
"id": "gg-coffee-sub-1m-usd", // SKU gói thuê bao 1 tháng
"item_group_id": "gg-coffee-sub", // Sản phẩm của bạn
"title": "Gói thuê bao cà phê — 1 tháng",
"price": 2900,
"currency": "usd",
"enable_search": true,
"enable_checkout": true
}
Và cho thuê bao 3 tháng:
{
"id": "gg-coffee-sub-3m-usd", // SKU gói thuê bao 3 tháng
"item_group_id": "gg-coffee-sub", // Cùng id sản phẩm
"title": "Gói thuê bao cà phê — 3 tháng",
"price": 7900,
"currency": "usd",
"enable_search": true,
"enable_checkout": true
}
Cách tiếp cận này giúp cả mô hình lẫn backend của bạn khi tạo đơn: ID SKU trở thành khóa duy nhất, theo đó bạn luôn tìm được đúng cấu hình mà người dùng đã mua.
4. Các trường bắt buộc của Product Feed và tác động đến UX
Trong đặc tả Product Feed, OpenAI chia trường thành ba nhóm: bắt buộc (required), khuyến nghị (recommended) và tùy chọn (optional).
Tên gọi và danh sách cụ thể cần xem tài liệu mới nhất, nhưng cho mục tiêu học tập, có thể dựa vào bộ “tối thiểu” sau.
| Trường | Dùng để làm gì | Nếu thiếu sẽ ra sao |
|---|---|---|
|
Định danh SKU duy nhất trong phạm vi nhà bán hàng | Không thể định danh sản phẩm một cách rõ ràng |
|
Tiêu đề ngắn cho thẻ sản phẩm | Mô hình khó hiểu sản phẩm là gì |
|
Mô tả mở rộng | Câu trả lời sẽ chung chung hơn, cá nhân hóa kém |
|
Giá ở đơn vị nhỏ nhất | Không thể chuẩn bị checkout |
|
Mã tiền tệ ISO 4217, thường ở chữ thường | Nền tảng không hiểu tính bằng đơn vị gì |
|
URL trang sản phẩm của nhà bán hàng | Người dùng không thể chuyển tới trang của bạn |
|
Trạng thái khả dụng (in_stock, out_of_stock, v.v.) | Có thể hiển thị hàng không khả dụng |
|
Có cho phép dùng sản phẩm trong tìm kiếm không | Nếu không true thì sản phẩm không xuất hiện trong kết quả |
|
Có cho phép mua qua Instant Checkout không | Chỉ còn discovery/link‑out |
Một điểm quan trọng: enable_search và enable_checkout phân tách logic các chế độ hoạt động.
Nếu enable_search = true, còn enable_checkout = false, sản phẩm có thể xuất hiện trong kết quả, nhưng khi mua, người dùng sẽ đi theo liên kết của bạn (link) tới website của bạn, chứ không qua Instant Checkout bên trong ChatGPT (nơi thẻ đã được liên kết).
Nếu enable_checkout = true, thì khi đáp ứng các điều kiện khác (vùng hỗ trợ, tiền tệ, ACP backend hợp lệ), sản phẩm có thể được mua trực tiếp trong ChatGPT chỉ với một‑hai lần nhấp (tăng chuyển đổi mạnh).
Ví dụ một đối tượng tối thiểu “dùng được” cho checkout của GiftGenius:
{
"id": "gg-dev-notebook-plain-usd",
"title": "Sổ tay tối giản cho lập trình viên",
"description": "Bìa đen, không dòng kẻ, 120 trang. Dành cho người viết đặc tả bằng tay.",
"price": 1500,
"currency": "usd",
"availability": "in_stock",
"link": "https://giftgenius.app/gifts/dev-notebook",
"image_link": "https://cdn.giftgenius.app/images/dev-notebook.png",
"enable_search": true,
"enable_checkout": true
}
Lưu ý: ngay trong ví dụ chúng ta thêm ảnh (image_link) — về hình thức có thể là trường khuyến nghị chứ không bắt buộc, nhưng thiếu nó UX sẽ giảm đáng kể.
5. Trường khuyến nghị và tùy chọn: làm feed “hấp dẫn” hơn
Trường bắt buộc là “để mọi thứ chạy được”. Nhưng nếu chỉ dừng ở đó, bạn sẽ có thứ gì đó như CSV tối thiểu cho kế toán, chứ không phải một vitrin AI xịn.
Các trường khuyến nghị thường gồm:
- URL ảnh chính và ảnh bổ sung;
- danh mục sản phẩm (thường theo taxon, như “gifts > experiences > online courses”);
- thương hiệu/tên merchant;
- thuộc tính như màu, kích cỡ, chất liệu;
- cờ nội dung người lớn, giới hạn độ tuổi, v.v.
Mô tả sản phẩm càng phong phú, mô hình càng có thể tạo câu trả lời có ý nghĩa. Ví dụ, nếu bạn nêu rõ sổ tay làm từ giấy tái chế và “hỗ trợ các lập trình viên quan tâm tới hành tinh”, ChatGPT có thể chủ động đề xuất cho người dùng đang tìm quà thân thiện với môi trường.
Trong GiftGenius, ta có thể mở rộng mô tả SKU như sau:
{
"id": "gg-dev-notebook-plain-usd",
"title": "Sổ tay sinh thái cho lập trình viên",
"description": "Sổ tay tối giản không dòng kẻ, 120 trang làm từ giấy tái chế.",
"price": 1500,
"currency": "usd",
"availability": "in_stock",
"link": "https://giftgenius.app/gifts/eco-dev-notebook",
"image_link": "https://cdn.giftgenius.app/images/eco-dev-notebook.png",
"category": "gifts > office > notebooks",
"brand": "GiftGenius Originals",
"enable_search": true,
"enable_checkout": true
}
Các thuộc tính bổ sung như category và brand không chỉ cải thiện kết quả mà còn giúp phân tích: bạn có thể xem danh mục nào chuyển đổi tốt qua ChatGPT, danh mục nào kém hơn.
Các trường tùy chọn thường gắn với các kịch bản rất đặc thù (ví dụ thông số giá theo vùng mà ta sẽ bàn riêng, hoặc metadata tùy chỉnh). Hãy thêm chúng khi dự án trưởng thành, không phải chỉ để “đủ checkbox”.
6. Cờ thương mại và chế độ chỉ‑discovery
Hãy chốt lại logic của enable_search và enable_checkout, vì đây là cầu nối quan trọng tới các bài tiếp theo về ACP và Instant Checkout.
Giả sử bạn vừa bắt đầu với vai trò nhà bán hàng ChatGPT. Bạn có catalog quà tặng, nhưng ACP‑backend và Delegated Payment còn đang phát triển. Bạn muốn ngay bây giờ ChatGPT có thể tìm thấy SKU của bạn và đưa người dùng tới website của bạn để thanh toán.
Trong trường hợp này bạn sẽ:
- xuất bản Product Feed với enable_search = true cho các SKU cần thiết;
- để enable_checkout = false cho tới khi bạn hoàn thiện và chứng nhận tích hợp ACP.
Khi đó ChatGPT sẽ có thể đưa quà tặng của bạn vào câu trả lời, hiển thị thẻ và đề xuất liên kết “Đi tới trang GiftGenius”, nhưng sẽ không dựng UI Instant Checkout nội bộ.
Khi bạn triển khai Agentic Checkout và Delegated Payment, một số sản phẩm có thể chuyển sang chế độ “sẵn sàng cho Instant Checkout” — chỉ bằng cách đặt enable_checkout = true và đồng thời đáp ứng mọi yêu cầu dữ liệu (có giá, tiền tệ, seller URL, v.v.).
Ở cấp đặc tả, chính các trường từ Product Feed sẽ được dùng để điền line_items và tổng tiền trong checkout_session.
Như vậy, feed trở thành một đòn bẩy tinh chỉnh: những SKU nào và dưới hình thức nào ChatGPT được phép bán thay mặt bạn.
7. Locale, tiền tệ, vùng và giá đa vùng
Bạn hẳn biết thế giới không chỉ có en-US và đô la. Trong các module về bản địa hóa, ta đã bàn locale và userLocation ảnh hưởng đến logic kinh doanh thế nào. Ở đây điều đó trở nên trọng yếu: hàng ở Đức có thể có giá khác Mỹ, và một số quà có thể không được phép bán ở vài quốc gia.
Đặc tả Product Feed tính tới điều này bằng một vài cơ chế.
Thứ nhất, tiền tệ: currency phải là mã ISO 4217 hợp lệ (ví dụ usd, eur, gbp).
Thứ hai, có thể dùng các trường mô tả giá và tính khả dụng theo địa lý. Tài liệu đưa ví dụ các thuộc tính như geo_price và các mã vùng liên quan dựa trên ISO 3166.
Có hai cách tiếp cận kiến trúc cơ bản.
Cách 1: một feed cho một vùng.
- product-feed-us-en.json cho Mỹ;
- product-feed-de-de.json cho Đức;
- product-feed-br-pt.json cho Brazil.
Trong mỗi feed, mọi SKU đã được quy đổi về tiền tệ và locale phù hợp. Dễ cho ChatGPT, nhưng bạn sẽ phải bảo trì nhiều feed hơn.
Cách 2: một feed thống nhất với các trường geo.
Trong mỗi bản ghi, bạn lưu hoặc mảng giá, hoặc các thuộc tính bổ sung:
{
"id": "gg-dev-notebook-multi",
"title": "Sổ tay sinh thái cho lập trình viên",
"description": "Hỗ trợ tình yêu của bạn với clean code và với hành tinh.",
"prices": [
{ "region": "US", "currency": "usd", "price": 1500 },
{ "region": "DE", "currency": "eur", "price": 1400 }
],
"availability_by_region": [
{ "region": "US", "availability": "in_stock" },
{ "region": "DE", "availability": "out_of_stock" }
],
"enable_search": true,
"enable_checkout": true
}
Cấu trúc cụ thể của các trường đa vùng phụ thuộc vào phiên bản đặc tả, nhưng ý tưởng là: feed phải cho nền tảng hiểu được SKU tồn tại ở quốc gia nào và giá bao nhiêu tại đó.
Với GiftGenius, cần suy nghĩ về mapping giữa:
- locale và userLocation mà ChatGPT biết;
- và phần tương ứng của feed mà từ đó cần lấy giá và văn bản.
Thường trong kịch bản thương mại, bạn không trả về một bản ghi “cho cả thế giới”, mà tạo các SKU khác nhau cho từng nước, để dễ tuân thủ thuế, chính sách và hạn chế hàng hóa.
8. Chất lượng dữ liệu và chính sách: thiếu chúng Instant Checkout sẽ không cất cánh
Product Feed không chỉ là định dạng, mà còn là chất lượng dữ liệu và tuân thủ chính sách OpenAI.
Về chất lượng, OpenAI yêu cầu rõ ràng:
- ID chính xác, ổn định;
- URL hợp lệ với HTTPS và mã phản hồi 200;
- tính nhất quán giữa giá và tiền tệ;
- tình trạng tồn kho cập nhật (không được để in_stock khi thực tế đã hết).
Đặc tả cũng có yêu cầu về độ dài văn bản: ví dụ title không nên quá dài (hàng trăm ký tự), còn description có giới hạn hợp lý (hàng nghìn ký tự), để thẻ gọn gàng, không biến thành một “tiểu thuyết ba tập”.
Một khối riêng là Prohibited Products Policy. Đây là danh sách các loại hàng hóa/dịch vụ không được bán qua Instant Checkout và/hoặc ChatGPT nói chung: các mục hiển nhiên như hàng hóa bất hợp pháp, vũ khí, một số dịch vụ y tế, v.v. Chi tiết luôn cần kiểm tra ở chính sách hiện hành, nhưng điều quan trọng: Product Feed sẽ được kiểm tra không chỉ về định dạng, mà còn về tính chấp nhận nội dung.
Nếu catalog của bạn có các danh mục “nhạy cảm” (ví dụ rượu, cờ bạc hoặc sản phẩm liên quan tới trẻ em), hãy chú ý đặc biệt. Thường đơn giản hơn là để chúng ở chế độ enable_checkout = false và chỉ bán qua website của bạn với phần pháp lý đầy đủ.
9. Thực hành: lắp một Product Feed tối thiểu cho GiftGenius
Giờ hãy áp dụng tất cả và lắp một feed đơn giản cho ba SKU của GiftGenius. Giả sử chúng ta có:
- Sổ tay sinh thái cho lập trình viên.
- Gói thuê bao cà phê 1 tháng.
- Phiếu quà tặng cho khóa học “TypeScript dành cho người lớn”.
Đầu tiên mô tả kiểu TypeScript dùng để sinh feed:
export interface GiftGeniusFeedItem {
id: string;
title: string;
description: string;
price: number; // tính bằng cent
currency: "usd" | "eur";
availability: "in_stock" | "out_of_stock";
link: string;
image_link?: string;
enable_search: boolean;
enable_checkout: boolean;
}
Tiếp theo tạo trong code một mảng với vài phần tử rồi serialize sang JSON:
export const giftGeniusFeed: GiftGeniusFeedItem[] = [
{
id: "gg-eco-notebook-usd",
title: "Sổ tay sinh thái cho lập trình viên",
description: "Sổ tay tối giản không dòng kẻ làm từ giấy tái chế.",
price: 1500,
currency: "usd",
availability: "in_stock",
link: "https://giftgenius.app/gifts/eco-dev-notebook",
image_link: "https://cdn.giftgenius.app/images/eco-dev-notebook.png",
enable_search: true,
enable_checkout: true
},
{
id: "gg-coffee-sub-1m-usd",
title: "Gói thuê bao cà phê cho lập trình viên — 1 tháng",
description: "Hộp cà phê hạt hàng tháng. Hợp với những deadline.",
price: 2900,
currency: "usd",
availability: "in_stock",
link: "https://giftgenius.app/gifts/coffee-subscription-1m",
image_link: "https://cdn.giftgenius.app/images/coffee-1m.png",
enable_search: true,
enable_checkout: true
},
{
id: "gg-ts-course-gift-usd",
title: "Phiếu quà tặng cho khóa TypeScript",
description: "Khóa học online cho lập trình viên cuối cùng muốn hiểu generics.",
price: 9900,
currency: "usd",
availability: "in_stock",
link: "https://giftgenius.app/gifts/ts-course",
image_link: "https://cdn.giftgenius.app/images/ts-course.png",
enable_search: true,
enable_checkout: false // hiện chỉ discovery
}
];
Sau đó có thể làm một tiện ích đơn giản tạo tệp product-feed.json từ cấu trúc này mỗi N phút và đưa lên máy chủ HTTPS của bạn.
import { writeFile } from "node:fs/promises";
import { giftGeniusFeed } from "./feed-data";
// Trình tạo JSON feed đơn giản nhất
async function buildProductFeed() {
const json = JSON.stringify(giftGeniusFeed, null, 2);
await writeFile("public/product-feed.json", json, "utf8");
}
buildProductFeed().catch(console.error);
Dĩ nhiên trong dự án thực tế bạn sẽ không lưu cả feed trong code; thay vào đó dữ liệu lấy từ DB. Nhưng để bắt đầu, hữu ích là lắp một ví dụ học tập như vậy để thử đường ống: sinh → xuất bản → kiểm tra hợp lệ.
10. Phản ví dụ: một Product Feed “tệ” trông thế nào
Để cảm nhận rõ hơn yêu cầu đặc tả và UX, hãy xem một ví dụ feed gần như “chạy được” về mặt hình thức, nhưng thực tế sẽ gây vấn đề:
{
"id": "1",
"title": "Quà tặng",
"description": "Món quà hay ho",
"price": 12.333333,
"currency": "usdollars",
"availability": "yes",
"link": "http://giftgenius.local/gift/1",
"enable_search": "true",
"enable_checkout": "maybe"
}
Ở đây có thể đếm ngay vài vấn đề.
Thứ nhất, id = "1" — là định danh nghèo nàn và không ổn định. Nếu bạn di trú DB hoặc sharding, các định danh như vậy rất mong manh. Tốt hơn dùng ID có ý nghĩa và đủ dài, duy nhất trong phạm vi nhà bán hàng.
Thứ hai, price được ghi là số thập phân với phần lẻ dài. Đặc tả và hệ thống thanh toán thường kỳ vọng giá ở đơn vị nhỏ nhất (cent) là số nguyên, để tránh vấn đề số học dấu phẩy động và làm tròn.
Thứ ba, currency = "usdollars" và availability = "yes" không khớp định dạng mong đợi (ISO 4217 và tập giá trị hợp lệ).
Thứ tư, link dùng http và domain cục bộ — cả hai đều không chấp nhận được trong production; đặc tả yêu cầu HTTPS và công khai truy cập.
Thứ năm, các cờ enable_search và enable_checkout phải là boolean, không phải chuỗi. Nếu không, parser OpenAI có thể không nhận feed, hoặc ép về giá trị mặc định khiến bạn bất ngờ khó chịu.
Những vấn đề này có thể dẫn tới lỗi kiểm tra nghiêm ngặt (feed bị từ chối) hoặc tệ hơn: feed qua được về hình thức, nhưng một phần SKU bị bỏ qua hoặc hoạt động khác kỳ vọng. Vì vậy nên đầu tư vào kiểm tra hợp lệ nội bộ ngay từ phía bạn.
11. Lỗi thường gặp khi làm việc với Product Feed
Lỗi số 1: nghĩ về feed như một “CSV dùng một lần” để nhập liệu.
Đôi khi các đội coi Product Feed là tệp họ sinh ra một lần “để tích hợp” rồi thôi. Trong AI‑commerce thì không: feed là nguồn sự thật sống, cần cập nhật đều đặn. Nếu bạn thay giá, ngừng bán, chạy khuyến mãi — tất cả phải kịp thời vào feed. Nếu không, ChatGPT sẽ đề xuất thứ đã hết hàng hoặc giá cũ, và người dùng bực bội là điều dễ hiểu.
Lỗi số 2: trộn lẫn mô hình sản phẩm và SKU.
Một anti‑pattern phổ biến là cố nhét một sản phẩm gốc với nhiều tùy chọn vào một bản ghi feed với hàng loạt trường “size1/size2/size3” hoặc “duration1/duration2”. Kết quả là mô hình không hiểu chính xác đang bán gì, còn ACP‑backend của bạn khổ sở khi “giải nén” các trường này lúc checkout. Đơn giản và tin cậy hơn: một SKU — một bản ghi feed, kể cả khi đó là biến thể của cùng sản phẩm.
Lỗi số 3: bỏ qua locale và vùng.
Những người làm MVP đầu tiên thường đặt currency = "usd" và enable_checkout = true cho tất cả, mà không nghĩ Instant Checkout có thể chưa khả dụng ở vùng của bạn hoặc có sản phẩm không được bán ở một số nước do chính sách hay luật pháp. Đến khi ra thị trường mới, mọi thứ vỡ: giá không khớp, thuế không tính. Tốt hơn là gắn SKU với vùng và tiền tệ ngay từ đầu, kể cả khi bạn mới có một thị trường.
Lỗi số 4: coi mô tả như SEO‑text của quá khứ.
Một số đội chép vào Product Feed các mô tả cũ từ website, đôi khi viết cho “từ khóa” và máy. Với ChatGPT, điều đó hại nhiều hơn lợi: mô hình tự viết text tốt rồi, thứ quan trọng hơn là dữ liệu có cấu trúc, trung thực và chính xác. Tốt hơn mô tả ngắn gọn, đúng trọng tâm, thay vì nhồi description bằng “nước” marketing chiếm nửa màn hình.
Lỗi số 5: không tự kiểm tra hợp lệ feed.
Chỉ dựa vào kiểm tra của OpenAI là con đường tới những đêm đau đầu trước deadline. Hãy làm một validator đơn giản ở backend hoặc CI của bạn, kiểm tra schema trường, giá trị hợp lệ, định dạng URL và tiền tệ. Có thể làm ngay bằng TypeScript, dùng Zod hoặc tự kiểm tra. Như vậy bạn bắt lỗi trước khi đẩy feed lên production.
Lỗi số 6: nhét “tất cả mọi thứ” vào Product Feed.
Đôi khi muốn thêm cả hàng nghìn SKU cho “đủ bộ, biết đâu cần”. Thực tế điều đó làm khó debug, phân tích và kiểm soát chất lượng. Hợp lý hơn là bắt đầu với tập giới hạn: chỉ những danh mục và SKU bạn sẵn sàng theo dõi và thực sự muốn bán qua ChatGPT. Phần còn lại có thể để ở chế độ discovery hoặc không tích hợp.
Lỗi số 7: không đồng bộ Product Feed và ACP‑backend.
Feed và ACP‑API là hai mặt của một đồng xu. Nếu trong feed xuất hiện SKU mới mà backend của bạn chưa bán được (hoặc ngược lại, SKU đã bỏ khỏi feed nhưng backend vẫn nghĩ nó tồn tại), bạn sẽ có sai lệch, bug phức tạp và ticket hỗ trợ mệt mỏi. Thực hành tốt là có một mô hình miền catalog thống nhất và dùng nó cho cả sinh feed lẫn xử lý checkout.
GO TO FULL VERSION