ChatGPT 廣告轉換追蹤碼安裝
若您有使用 ChatGPT/OpenAI 廣告投放,可透過安裝轉換追蹤碼,將消費者於商店中的瀏覽商品、加入購物車、開始結帳及完成訂單等行為回傳至 OpenAI Ads Manager,協助您查看廣告轉換成效。
目前 QDM 尚未提供 ChatGPT 廣告追蹤的內建設定介面,如有使用需求,可依照以下方式自行安裝。
安裝前請先留意
安裝前請先確認以下事項:
此為第三方廣告追蹤程式,實際事件接收、轉換判定及成效統計,皆以 OpenAI Ads Manager 的實際結果為準。
程式會安裝於商店的「自訂 JS 全站程式碼」,並套用至前台全站。
若「自訂 JS 全站程式碼」內原本已有其他內容,請勿刪除、覆蓋或修改原有程式碼。
除本說明指定的 Pixel ID、DEBUG 及必要設定外,不建議自行修改其他程式內容。
正式使用前,建議先完成事件測試及測試訂單,確認事件與金額皆正確。
使用廣告追蹤功能後,部分消費者瀏覽及購買行為資料將提供給 OpenAI,店家應依自身實際使用情況確認相關隱私權告知內容。
一、安裝前準備
請先於 OpenAI Ads Manager 完成以下設定:
建立廣告帳號。
建立轉換追蹤 Pixel。
取得您的 Pixel ID。
官方說明:https://koodata.com/koo-cafe/chatgpt-ads-manager-tutorial-2026
取得 Pixel ID 後,即可進行 QDM 後台設定。
二、安裝追蹤程式碼
步驟 1|進入設定位置
登入 QDM 商店後台後,依序進入:
版面 → 自訂 JS 全站程式碼
步驟 2|確認程式碼貼上位置
進入「自訂 JS 全站程式碼」後,請依目前欄位內容操作。
若目前欄位是空白
可直接將下方提供的完整 ChatGPT Ads 追蹤程式碼貼入。
若目前已經有其他程式碼
請勿刪除或覆蓋既有內容。
請將游標移至原有程式碼的最下方:
移至最後一行。
按 Enter 換行。
建議再空一行。
將 ChatGPT Ads 完整程式碼貼在最下方。
正確結構如下:
// 原本已有的其他程式碼 exampleFunction();
/* ChatGPT Ads (OpenAI Ads) conversion tracking */ (function () { // ChatGPT Ads 追蹤程式碼 })();也就是:
原有程式碼 → 換行 → ChatGPT Ads 完整程式碼
請勿將新的追蹤程式碼插入原有程式碼中間。
步驟 3|貼上完整程式碼
請將以下程式碼從第一行至最後一行完整複製,貼至「自訂 JS 全站程式碼」最下方:
/* ChatGPT Ads (OpenAI Ads) conversion tracking - QDM self-install template v1 */
(function () {
var PIXEL_ID = 'PASTE_YOUR_PIXEL_ID'; /* Merchant settings: only edit these lines*/
var CURRENCY = 'TWD';
var DEBUG = false;
if (!PIXEL_ID || PIXEL_ID === 'PASTE_YOUR_PIXEL_ID') return;
if (window.__qdmOpenAIAdsLoaded) return;
window.__qdmOpenAIAdsLoaded = true;
(function (w, d, s, u) {
if (w.oaiq) return;
var q = function () {
q.q.push(arguments);
};
q.q = [];
w.oaiq = q;
var js = d.createElement(s);
js.async = true;
js.src = u;
var f = d.getElementsByTagName(s)[0];
f.parentNode.insertBefore(js, f);
})(window, document, 'script', 'https://bzrcdn.openai.com/sdk/oaiq.min.js');
window.oaiq('init', { pixelId: PIXEL_ID, debug: DEBUG });
// OpenAI wants integer amounts in the ISO 4217 minor unit (TWD 1,280 -> 128000).
var ZERO_DECIMAL = { JPY: 1, KRW: 1, VND: 1 };
var FACTOR = ZERO_DECIMAL[CURRENCY] ? 1 : 100;
function toMinor(value) {
var n = parseFloat(String(value === undefined || value === null ? '' : value).replace(/[^0-9.\-]/g, ''));
if (!isFinite(n) || n < 0) return 0;
return Math.round(n * FACTOR);
}
function toQty(value) {
var n = parseInt(value, 10);
return n > 0 ? n : 1;
}
function item(id, name, price, qty) {
return {
id: String(id),
name: String(name || ''),
content_type: 'product',
quantity: toQty(qty),
amount: toMinor(price),
currency: CURRENCY
};
}
function sum(items) {
var total = 0;
for (var i = 0; i < items.length; i++) total += items[i].amount * items[i].quantity;
return total;
}
function measure(name, data, options) {
try {
window.oaiq('measure', name, data, options || {});
} catch (e) {}
}
measure('page_viewed', { type: 'contents' });
// Product page
var productId = window.gecommProduct ? parseInt(window.gecommProduct[0], 10) : 0;
if (productId > 0 && window.gecommProductName) {
var viewed = item(productId, window.gecommProductName, window.gecommProductPrice, 1);
measure('contents_viewed', { type: 'contents', amount: viewed.amount, currency: CURRENCY, contents: [viewed] });
}
// Order success page: the platform only fills ecommOrderToCheckout there.
var order = window.ecommOrderToCheckout;
var isSuccess = !!(order && order.order_id);
if (isSuccess) {
var products = order.product || [];
var bought = [];
for (var i = 0; i < products.length; i++) {
var p = products[i];
bought.push(item(p.product_id, p.product_name, p.price, p.quantity));
}
measure(
'order_created',
{ type: 'contents', amount: toMinor(order.order_total), currency: CURRENCY, contents: bought },
{ event_id: 'order_' + order.order_id }
);
}
// Checkout page: same URL rule the platform uses for its own begin_checkout.
var uri = location.pathname + location.search;
if (!isSuccess && uri.indexOf('/checkout') !== -1 && uri.indexOf('success') === -1) {
measure('checkout_started', { type: 'contents', amount: toMinor(window.ecommCheckoutTotal), currency: CURRENCY });
}
// Add to cart: every add-to-cart path pushes a GA4 add_to_cart event to dataLayer.
var dl = (window.dataLayer = window.dataLayer || []);
var originalPush = dl.push;
dl.push = function () {
var result = originalPush.apply(dl, arguments);
try {
for (var a = 0; a < arguments.length; a++) {
var entry = arguments[a];
if (!entry || entry.event !== 'add_to_cart' || !entry.ecommerce || !entry.ecommerce.items) continue;
var added = [];
for (var j = 0; j < entry.ecommerce.items.length; j++) {
var it = entry.ecommerce.items[j];
added.push(item(it.item_id, it.item_name, it.price, it.quantity));
}
measure('items_added', { type: 'contents', amount: sum(added), currency: CURRENCY, contents: added });
}
} catch (e) {}
return result;
};
})();步驟 4|填入 Pixel ID
貼上完成後,找到程式碼上方的:
var PIXEL_ID = 'PASTE_YOUR_PIXEL_ID';
將:
PASTE_YOUR_PIXEL_ID
替換成您於 OpenAI Ads Manager 取得的 Pixel ID。
例如 Pixel ID 為:
abc123xyz請修改為:
var PIXEL_ID = 'abc123xyz';
請注意:
保留 Pixel ID 前後的單引號
' '不需修改其他程式內容
步驟 5|儲存設定
完成後按下「儲存」。
因前台頁面有快取機制,設定完成後約 10 分鐘內生效。
三、安裝後會追蹤哪些事件?
| 顧客行為 | OpenAI 事件 |
|---|---|
已瀏覽頁面 | page_viewed |
已瀏覽內容 | contents_viewed |
已加入商品 | items_added |
| 開始結帳 | checkout_started |
| 建立訂單 | order_created |
四、如何確認安裝成功?
建議安裝完成後先進行一次測試。
1. 開啟測試模式
找到:
var DEBUG = false;
暫時修改為:
var DEBUG = true;
儲存並等待設定生效。
2. 開啟商店測試
使用電腦版 Chrome 開啟自己的商店。
按下 F12 開啟開發人員工具,再進入:
Console/主控台
接著可依序測試:
已瀏覽頁面
已瀏覽內容
已加入商品
開始結帳
建立訂單
若主控台出現類似:
[oaiq] event queued表示追蹤事件已執行。
3. 至 Ads Manager 確認事件
回到 OpenAI Ads Manager 的事件管理頁面,確認是否有收到測試事件。
建議至少確認:
Page Viewedcontents_viewed
items_addedcheckout_startedorder_created
4. 確認訂單金額
完成一筆測試訂單後,請確認 Ads Manager 顯示的訂單金額與 QDM 訂單金額一致。
例如:
QDM 訂單金額 NT$1,280
若 Ads Manager 顯示:
NT$1,280
代表金額正常。
若 Ads Manager 顯示:
NT$128,000
則代表金額被放大 100 倍,請依下方方式調整。
5. 測試完成後關閉 DEBUG
測試完成後,請將:
var DEBUG = true;
改回:
var DEBUG = false;
再重新儲存。
五、Ads Manager 金額放大 100 倍時如何處理?
只有實際測試確認金額放大 100 倍時才需要修改。
找到:
var ZERO_DECIMAL = { JPY: 1, KRW: 1, VND: 1 };修改為:
var ZERO_DECIMAL = { JPY: 1, KRW: 1, VND: 1, TWD: 1 };儲存後重新進行測試。
修改後,台幣金額將直接以原金額送出。
例如:
NT$1,280 → 送出 1280
若遇到此情況,也請將測試結果提供給 QDM 客服,以利後續確認範本設定。
六、使用限制
使用前請留意以下情況:
此範本預設幣別為
TWD,若商店有使用多幣別結帳,事件中的幣別或金額可能與實際訂單不同。若消費者使用廣告阻擋工具或瀏覽器隱私功能,部分事件可能無法記錄。
顧客完成第三方付款後,若未返回商店的訂單完成頁,
order_created事件可能無法送出。加入購物車事件會於加入操作發生時觸發,因此若後續因庫存或其他條件加入失敗,仍可能已產生一次事件。
OpenAI Ads Manager 統計的轉換數與 QDM 實際訂單數不一定會完全一致。
七、隱私權注意事項
此範本本身不會主動將顧客姓名、Email 或電話寫入事件內容傳送給 OpenAI。
但若店家另外於 OpenAI Ads Manager 啟用 Automatic Advanced Matching 或其他進階功能,OpenAI 的程式可能依其功能設定處理頁面中的顧客資料。
店家使用 ChatGPT/OpenAI 廣告追蹤功能後,部分消費者的瀏覽及購買行為資料將提供給 OpenAI。
建議店家依自身實際使用的廣告與追蹤服務,確認並更新網站隱私權政策、Cookie 或相關告知內容。
八、如何移除追蹤程式?
若後續不再使用 ChatGPT/OpenAI 廣告追蹤,請進入:
版面 → 自訂 JS 全站程式碼
找到以下開頭:
/* ChatGPT Ads (OpenAI Ads) conversion tracking
一直到該段最後:
})();
將整段 ChatGPT Ads 追蹤程式碼刪除後儲存即可。
若頁面中原本還有其他第三方程式碼,請勿一併刪除。
這篇文章是否有幫助?
太棒了!
感謝您提供意見回饋
抱歉,沒能幫到您
感謝您提供意見回饋
意見已發送
感謝您的寶貴意見,我們將嘗試修改這篇文章