自訂商店前端觸發器

內建的商店前端觸發器涵蓋了 Shopify 所報告的事件。自訂商店前端觸發器則涵蓋商店前端發生的所有其他情況:您只需在佈景主題中透過一行 JavaScript 發佈一個事件,該事件便會成為您可在 Shopify Flow 中使用的觸發器。

最明顯的例子就是購物車抽屜。當瀏覽 /cart 頁面時,Shopify 的購物車檢視事件會觸發,但大多數現代主題從不導航至該頁面 - - 而是透過滑動方式展開抽屜。由於 Shopify 未回報任何資訊,因此沒有應用程式能偵測到此事件。在抽屜展開時發佈您自己的事件,即可彌補此缺口。

商店還將它用於其他用途:

  • 商品加入願望清單或點擊**「通知我」**,這兩項動作 Shopify 皆未進行記錄。
  • 點開尺寸指南或退貨政策,可視為對該產品的某種訊號。
  • 選取器中的一項變體變更,這並非新的頁面檢視(請參閱 Storefront 觸發器)。
  • 任何您的主題或第三方應用程式已經知道、但 Shopify 尚未掌握的內容。

運作原理

  1. 在應用程式中建立觸發器,並為其指定一個事件名稱,例如「cart_drawer_opened」。與所有店面觸發器一樣,它需要「店面行為存取權限」,此權限需在「權限」頁面中授予一次。
  2. 請複製應用程式顯示的那行程式碼片段,並將其貼到您主題中發生該情況的位置。如果您不確定該貼什麼或貼在哪裡,使用 AI 產生觸發程式碼 會根據您用通俗英語撰寫的描述,為您的主題生成對應的程式碼片段。
  3. 若要篩選或重新整理傳送的內容,請撰寫一個轉換函式;若要轉發所有內容,則留空即可。
  4. 開啟該功能,然後在「Flow」中新增「自訂商店櫥窗觸發器」,並根據事件名稱進行分支。

以下是主題端完整的整合程式碼片段:

自訂店鋪首頁觸發器編輯器,其中包含名稱、事件名稱以及要新增至主題的程式碼片段
自訂商店首頁觸發器:事件名稱即為您的佈景主題所發布的內容,而編輯器會提供可供複製的程式碼片段。
Publish the event from your themejavascript
Shopify.analytics.publish("cart_drawer_opened", {
  // anything you want the Flow to receive
  itemCount: 3,
  total: "129.90"
});

為活動命名

活動名稱是 Flow 工作流程進行分支的依據,因此請選擇一個易於理解的名稱,且一旦工作流程開始使用該名稱後,就不要再更改它。

名稱可包含字母、數字、底線和連字號,必須以字母或數字開頭,且長度最多為 64 個字元。應用程式會將您輸入的內容轉為簡化形式,因此 Cart drawer opened 會變成 cart_drawer_opened

該名稱在內部已進行命名空間隔離,因此絕不會與同名的「Shopify」事件或同名的 webhook 自訂觸發器發生名稱衝突。

濾波與重塑

您作為第二個參數傳入的資料,會在 Flow 中以觸發器的「output」形式呈現。如果這正是您所需的,那麼就大功告成了。

當您只想在某些情況下觸發事件,或傳送與主題發布時不同的欄位時,請撰寫一個轉換函式(transform) - - 這正是 自訂觸發器 所使用的 JavaScript 模組。若要觸發事件,請回傳一個物件;若要跳過,請回傳 null

Only fire for drawers worth acting onjavascript
export async function transform(payload, topic, shop, ctx) {
  // Anything you published is on `payload`.
  if ((payload.itemCount || 0) < 2) return null;

  return {
    itemCount: payload.itemCount,
    total: payload.total,
    // Present only when the shopper is signed in.
    customerId: payload.customerId,
  };
}

在 Shopify Flow 中使用它

每個「自訂商店前端觸發器」在 Flow 中都會以相同的觸發器名稱出現:自訂商店前端觸發器。將其新增至工作流程後,再新增一個條件,設定為 eventName 等於您所選擇的名稱。

這正是讓一個 Flow 觸發器能夠觸發您所有商店前端事件的原因。該觸發器同時會攜帶您在應用程式中為其命名的名稱,以及您的轉換函式的輸出結果。

它刻意與「自訂觸發器」區隔開來,後者是基於 webhook 的「自訂觸發器」的運作基礎。兩者之間存在一項值得注意的差異:webhook 自訂觸發器在我們的伺服器上執行且相當可靠,而「Storefront 事件」則取決於購物者的瀏覽器能否成功連線至我們的系統,以及其是否已同意分析追蹤。

請勿寄送的物品

publish 的第二個參數完全由您掌控,這意味著您有責任確保其中不包含任何個人資料。

請傳送識別碼與相關資訊:產品及變體 ID、數量、價格,以及發生事件的名稱。若有已登入的客戶,系統會自動為您加入該客戶的 ID,因此您無需自行傳遞此資訊。

傳送姓名、電子郵件地址、電話號碼或郵寄地址。您的工作流程可透過 Flow 中的客戶 ID 查詢上述任何資訊,因此將這些資料放入前端事件中並無任何益處,且此舉會將分析事件轉變為個人資料事件。

這會佔用我的方案流量配額嗎?

是的。所有傳送至我們的事件都會被計入,包括您的轉換函式因傳回 null 而跳過的事件 - - 這與 <a href="/zh-tw/custom-triggers">自訂觸發器</a> 的規則相同。因未獲得同意而在瀏覽器中被捨棄的事件,永遠不會傳送至我們這裡,因此也不會被計入。

由於由您決定程式片段的放置位置,因此您可以直接控制其執行頻率。抽屜開啟事件的觸發頻率遠低於產品瀏覽事件。

我可以從多個地方發布同一個活動嗎?

是的。關鍵在於名稱,而非發布來源。若希望工作流程能區分兩者,在載荷中傳遞來源資訊是個好主意。

打開兩個抽屜是否算作一次事件?

不。刻意觸發的事件會被區分開來,因為若同一事件被記錄兩次,通常表示它確實發生了兩次。這與內建觸發器不同,後者會將同一頁面瀏覽的重複記錄合併處理。

我之後可以更改活動名稱嗎?

你可以這麼做,但你的 Flow 工作流程會根據此名稱進行篩選,因此變更名稱會導致該工作流程停止執行,直到你更新條件為止 - - 而且你還必須更新主題中的程式碼片段以配合變更。一旦工作流程開始使用該名稱,就應將其視為固定值。

在商品上架到我的網店之前,該如何進行測試?

應用程式中的「觸發器」頁面提供了一項測試功能,會執行您的轉換並觸發您的 Flow 工作流程,讓您無需修改主題即可觀察整個流程的執行過程。此測試不會消耗您的配額。

將這段程式碼片段加入您的佈景主題後,「事件歷史紀錄」頁面便會隨事件發生即時顯示實際的事件。

這功能在結帳頁面能正常運作嗎?

透過您自己的佈景主題程式碼發佈內容,僅適用於您的商店首頁。結帳頁面是由 Shopify 渲染的,您無法在其中加入佈景主題程式碼,因此請改為使用內建的「顯示結帳錯誤」與「結帳折扣碼遭拒」觸發器。

下一步