Widget Macgi là một thẻ script, khoảng 15 KB, không phụ thuộc thư viện nào và chạy trong Shadow DOM nên không ảnh hưởng tới giao diện của bạn. Trang này dành cho mọi website bạn chèn được mã HTML. Nếu bạn dùng Haravan, Sapo, WooCommerce hay Shopify, hãy xem hướng dẫn riêng cho nền tảng.
Lấy khoá (key)
Mỗi shop có một khoá công khai dạng pk_live_.... Khoá được cấp khi bạn đăng ký beta (miễn phí 1.000 lượt thử, không cần thẻ thanh toán) và gửi qua email trong 1–2 ngày làm việc.
Khoá chỉ hoạt động trên các tên miền của shop. Khi đăng ký, hãy ghi đủ mọi tên miền khách có thể vào: có và không có www, tên miền phụ của nền tảng (ví dụ ten-shop.myharavan.com) và trang thử nghiệm nếu có. Khoá công khai được phép nằm trong mã trang; đừng chia sẻ khoá bí mật nếu sau này bạn được cấp.
Cách 1: chế độ tự động (khuyên dùng)
Dán thẻ sau ngay trước thẻ </body> trong giao diện, trên mọi trang:
<script src="https://cdn.macgi.app/widget.js"
data-key="pk_live_..."
data-auto
defer></script>Có thuộc tính data-auto, widget tự nhận ra trang sản phẩm và chèn nút “Thử đồ” cạnh nút thêm vào giỏ. Một trang được coi là trang sản phẩm khi có ít nhất một trong các dấu hiệu sau:
- dữ liệu có cấu trúc
Product(JSON-LD), thứ hầu hết nền tảng bán hàng đã có sẵn; - thẻ
og:imagechứa ảnh sản phẩm; - biểu mẫu thêm vào giỏ hàng.
Ảnh sản phẩm lấy từ dữ liệu trên trang. Mặc định mọi sản phẩm được thử như áo (top). Để quần, chân váy và váy liền được thử đúng chỗ, thêm quy tắc theo từ khoá trong tên sản phẩm:
<script src="https://cdn.macgi.app/widget.js"
data-key="pk_live_..."
data-auto
data-default-slot="top"
data-slot-rules='{"quần":"bottom","chân váy":"bottom","váy liền":"one_piece","đầm":"one_piece"}'
defer></script>Với sản phẩm không theo quy tắc chung, đặt thẻ meta riêng trên trang sản phẩm đó. Thẻ này ghi đè quy tắc từ khoá và ảnh tự nhận:
<meta name="macgi:slot" content="bottom">
<meta name="macgi:garment-image" content="https://shop-cua-ban.vn/anh/quan-jean-xanh.jpg">Các hướng dẫn Haravan và Sapo chỉ cách sinh thẻ này tự động từ tag sản phẩm.
Cách 2: tự đặt nút
Nếu muốn quyết định chính xác vị trí, chữ và kiểu nút, bỏ data-auto khỏi thẻ script và đặt một phần tử có data-macgi-tryon trên trang sản phẩm. Nút có thể là bất kỳ phần tử nào và có thể thêm sau khi trang đã tải (ứng dụng một trang vẫn chạy). Dùng lớp CSS sẵn có của giao diện để nút trông giống các nút khác.
<script src="https://cdn.macgi.app/widget.js" data-key="pk_live_..." defer></script>
<button type="button" data-macgi-tryon
data-garment-image="https://shop-cua-ban.vn/anh/ao-thun-den.jpg"
data-garment-slot="top"
data-garment-description="áo thun cotton màu đen, cổ tròn">
Thử đồ
</button>Mô tả (data-garment-description) được dùng khi tạo ảnh nên phải khớp với ảnh, nhất là màu sắc. Tên sản phẩm thường là đủ. Để khách thử cả bộ (tối đa 2 món: một áo và một quần hoặc chân váy), dùng data-garments:
<button type="button" data-macgi-tryon
data-garments='[
{"slot":"top","description":"áo sơ mi trắng","imageUrl":"https://shop-cua-ban.vn/anh/so-mi-trang.jpg"},
{"slot":"bottom","description":"quần âu màu be","imageUrl":"https://shop-cua-ban.vn/anh/quan-au-be.jpg"}
]'>
Thử cả bộ
</button>Chọn một trong hai cách cho mỗi trang. Nếu vừa để data-auto vừa tự đặt nút, trang có thể hiện hai nút.
Bảng tuỳ chọn
Thuộc tính của thẻ script
| Thuộc tính | Ý nghĩa |
|---|---|
data-key | Khoá công khai của shop (bắt buộc). |
data-auto | Bật chế độ tự động: tự nhận trang sản phẩm và chèn nút. |
data-default-slot | Loại đồ khi không có quy tắc nào khớp: top (mặc định), bottom hoặc one_piece. |
data-slot-rules | JSON từ khoá → loại đồ, ví dụ {"quần":"bottom","đầm":"one_piece"}. |
data-placement | Bộ chọn CSS của phần tử mà nút được đặt cạnh, khi vị trí tự tìm chưa đẹp, ví dụ .product-form. |
data-lang | vi hoặc en. Mặc định tiếng Việt, tiếng Anh nếu trình duyệt của khách ưu tiên tiếng Anh. |
data-consent | Thay câu xin đồng ý hiện trước khi khách tải ảnh. |
Thuộc tính của nút
| Thuộc tính | Ý nghĩa |
|---|---|
data-macgi-tryon | Đánh dấu phần tử là nút thử đồ. |
data-garment-image | Đường dẫn ảnh sản phẩm (tuyệt đối, tương đối hoặc bắt đầu bằng //). |
data-garment-slot | top (mặc định), bottom hoặc one_piece (váy liền, đầm). |
data-garment-description | Mô tả ngắn, khớp với ảnh, ví dụ “áo thun đen cổ tròn”. |
data-garments | Thay cho ba thuộc tính trên: một bộ 1–2 món dạng JSON. |
Thẻ meta theo trang (chế độ tự động)
| Thẻ | Ý nghĩa |
|---|---|
<meta name="macgi:slot"> | Loại đồ của sản phẩm trên trang này. |
<meta name="macgi:garment-image"> | Ảnh dùng để thử, khi ảnh tự nhận không phải ảnh chụp chính diện của sản phẩm. |
Sự kiện và JavaScript API
Script tạo đối tượng window.Macgi. Bạn không cần gọi init khi thẻ script đã có data-key.
// Mở widget từ mã của bạn (ví dụ từ nút riêng hoặc ứng dụng một trang)
Macgi.open([
{ slot: 'top', description: 'áo thun đen', imageUrl: 'https://shop-cua-ban.vn/anh/ao-thun-den.jpg' },
]);
Macgi.close(); // đóng widget
Macgi.setLang('en'); // đổi ngôn ngữ: 'vi' hoặc 'en'
Macgi.forgetPhoto(); // xoá ảnh của khách đang giữ trong bộ nhớWidget phát các sự kiện trên window, để bạn gửi vào công cụ phân tích hoặc gắn hành động như mở giỏ hàng:
| Sự kiện | Khi nào | event.detail |
|---|---|---|
macgi:open | Khách mở widget | garments |
macgi:photo | Khách chụp hoặc chọn ảnh | bytes |
macgi:submit | Gửi lượt thử | garments |
macgi:result | Có ảnh kết quả | id, resultUrl, processingMs |
macgi:error | Lượt thử lỗi | message |
macgi:close | Khách đóng widget | (trống) |
window.addEventListener('macgi:result', (e) => {
// e.detail = { id, resultUrl, processingMs }
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({ event: 'macgi_tryon_result' });
});
window.addEventListener('macgi:error', (e) => {
console.warn('Macgi:', e.detail.message);
});Sự kiện không chứa ảnh hay thông tin cá nhân của khách. Đường dẫn kết quả hết hạn sau 24 giờ, đừng lưu nó lâu dài.
Quyền riêng tư
- Trước khi tải ảnh, khách thấy câu xin đồng ý (đổi được bằng
data-consent). - Ảnh được thu nhỏ và xoá toàn bộ thông tin kèm theo (vị trí GPS, máy chụp, thời gian) ngay trên máy khách trước khi gửi.
- Không có thông tin nào về khách được ghi vào cơ sở dữ liệu. Ảnh tạm bị xoá khi lượt thử xong; ảnh kết quả tự xoá sau 24 giờ.
- Ảnh chỉ nằm trong bộ nhớ của trang để khách thử thêm món khác, không lưu vào trình duyệt.
Macgi.forgetPhoto()xoá ngay. - Ảnh của khách và ảnh sản phẩm của bạn không được dùng để huấn luyện AI hay làm quảng cáo.
Bạn nên thêm một câu vào chính sách quyền riêng tư của shop, cho biết tính năng thử đồ do Macgi cung cấp và dẫn tới chính sách của chúng tôi.
Xử lý sự cố
Nút không xuất hiện
- Trang không được nhận là trang sản phẩm. Chế độ tự động cần dữ liệu
Product, thẻog:imagehoặc biểu mẫu thêm vào giỏ. Hãy tự đặt nút (cách 2) trên trang đó. - Không tìm thấy ảnh sản phẩm. Thêm
<meta name="macgi:garment-image">, hoặc tự đặt nút vớidata-garment-image. - Tên miền chưa được phép dùng khoá. Khoá chỉ chạy trên tên miền đã đăng ký; tên miền mới, bản có
wwwhay tên miền phụ của nền tảng đều phải thêm riêng. Gửi tên miền cho chúng tôi qua Zalo hoặc email để được thêm. - Script chưa được tải. Mở trang sản phẩm, nhấn F12, chọn Console và gõ
window.Macgi. Nếu kết quả làundefined, giao diện chưa được lưu, bạn đang sửa một giao diện chưa xuất bản, hoặc trang còn bộ nhớ đệm cũ.
Nút ở vị trí chưa đẹp
Thêm data-placement với bộ chọn CSS của khối bạn muốn nút nằm cạnh, hoặc tự đặt nút.
Quần hoặc váy bị thử như áo
Thêm từ khoá vào data-slot-rules, đặt <meta name="macgi:slot"> cho sản phẩm đó, hoặc đặt data-garment-slot trên nút.
Kết quả sai màu hoặc sai kiểu
Kiểm tra mô tả có khớp với ảnh không, và dùng ảnh chụp chính diện, thấy toàn bộ món đồ, nền trơn. Ảnh người mẫu tạo dáng nghiêng hoặc ảnh ghép nhiều màu cho kết quả kém hơn.
Cần giúp cài đặt?
Trong thời gian beta, chúng tôi hỗ trợ cài trực tiếp qua Zalo hoặc email, miễn phí.