從 Shopify Flow 發出 HTTP 請求

為何要將此用於 HTTP 請求

Shopify Flow 內建了「傳送 HTTP 請求」動作,但此功能僅限於特定Shopify方案。若您的商店採用「基本」方案,您仍可改用 Workflow Transactional Email 來呼叫外部 API。

您只需在應用程式中建立一次請求,接著在工作流程中透過「HTTP 請求」動作選取該請求。將請求保留在應用程式中而非工作流程中,也意味著憑證絕不會存放在您的 Shopify Flow 設定中,而且您還能免費獲得完整的請求與回應記錄。

您將打造什麼

一個每 10 分鐘執行一次的工作流程,用來找出尚未匯入 Airtable 的產品,並將其匯入其中。

此處使用:

  • 保存 Airtable 代號與資料庫 ID 的訣竅
  • **HTTP **請求,用以定義請求範本
  • Shopify Flow 中的「HTTP 請求」動作,用以執行該操作
  • 歷史紀錄以供查核結果

影片指南

整體設定流程:建立機密、HTTP 請求以及工作流程。這段影片沒有聲音。

開始之前

  • Workflow Transactional Email 已安裝。
  • 您可以存取 Shopify Flow。
  • 您已擁有一個 Airtable 資料庫 ID,且有一張已準備好用來接收產品資料的表格。
  • 您擁有一組具備正確權限的 Airtable 存取憑證。

步驟 1:將憑證儲存為機密資訊

與其在請求中直接輸入憑證,不如將其一次儲存為「機密」,並透過 {{ secrets.yourKeyName }} 進行引用。這些機密在儲存時會被加密,可在不同請求間重複使用,且不會出現在您的瀏覽紀錄中。

開啟「**秘密」**並點擊「建立秘密」。

包含「建立密鑰」按鈕的「密鑰」頁面

輸入鍵、值和描述,然後儲存。

輸入密鑰、值和說明

此範例儲存了兩項機密資訊:個人存取憑證以及 Airtable 資料庫 ID。

步驟 2:建立請求

此範例使用 Airtable 的 create-records 端點。

開啟「HTTP 請求」,然後點擊「建立請求」。

包含「建立請求」按鈕的 HTTP 請求頁面

請為其賦予一個明確的名稱,例如「建立 Airtable 產品記錄」 - - 這正是您稍後在 Shopify Flow 中搜尋時會使用的關鍵字。

設定方法。若要建立 Airtable 記錄,請使用 POST 方法。

請在 URL 欄位中輸入端點。前綴 https:// 是固定的,因此請輸入其餘部分:

api.airtable.com/v0/{{ secrets.airTableProductsBaseId }}/Products

這張圖示說明了 Airtable 端點如何對應至您的資料庫,因此您可以根據自身需求進行調整:

Airtable 端點 URL 如何對應至資料庫

請新增 Airtable 所需的欄位標題:

Authorization: Bearer {{ secrets.airtableAccessToken }}
Content-Type: application/json

在請求正文中,請使用變數來儲存記錄,以便 Shopify Flow 能提供這些記錄:

{
  "records": {{ variables.records }}
}

Airtable 預期該變數會解析為形狀如下所示的陣列:

"records": [
  {
    "fields": {
      "Title": "Classic White T-Shirt",
      "Handle": "classic-white-tshirt",
      "Product ID": 1001
    }
  },
  {
    "fields": {
      "Title": "Eco-Friendly Water Bottle",
      "Handle": "eco-water-bottle",
      "Product ID": 1002
    }
  }
]

我們將在下一步的工作流程中建立該陣列。

完成的請求如下所示:

已完成的 Airtable HTTP 請求

「HTTP 請求」頁面列出了已儲存的請求,並顯示其方法與 URL
「HTTP 請求」清單中列出所有已儲存的請求;「建立請求」則會啟動一個新的請求。
包含方法、URL、標頭和正文的 HTTP 請求編輯器
請求:方法、URL、標頭和正文,其中每一項均可使用變數和機密資訊。

儲存此請求。現在可在「Shopify Flow」的「HTTP 請求」動作中選取此請求。

步驟 3:建立工作流程

開啟 Shopify Flow 並建立一個新的工作流程。

選擇基於排程的觸發器。此範例為示範目的,每 10 分鐘執行一次 - - 在實際運作環境中,請選擇一個合理的設定。

Shopify Flow中的排程觸發器

擷取尚未匯入 Airtable 的產品。已傳送的產品會在最後一步被標記為「added-to-airtable」,因此此查詢會將其排除在外。請參閱 Shopify 的「」查詢參數參考。

在 Shopify Flow中擷取未標記的產品

現在來格式化資料。請求正文需要一個名為 records 的變數,因此請使用 Shopify Flow 中的「**執行程式碼」**動作,將擷取到的產品資料整理成該陣列。

新增「執行程式碼」動作

請依以下方式設定此步驟:

設定「執行程式碼」步驟

查詢內容:

query {
  getProductData {
    id
    handle
    title
  }
}

程式碼:

export default function main(input) {
  const records = input.getProductData.map((data) => {
    const numericId = parseInt(data.id.replace("gid://shopify/Product/", ""));
    return {
      fields: {
        "Product ID": numericId,
        "Title": data.title,
        "Handle": data.handle
      }
    };
  });

  return {
    records: JSON.stringify(records)
  };
}

輸出結構:

"The output of Run Code"
type Output {
  "The message returned by the script"
  records: String
}

您可以在右側預覽結果:

預覽「執行程式碼」的輸出結果

新增此應用程式所提供的「**HTTP 請求」**動作。

新增 HTTP 請求動作

出現提示時,請選擇您已儲存的請求 - - 「建立 Airtable 產品記錄」 - - 然後儲存並返回工作流程。

選取已儲存的 HTTP 請求

在該動作的「變數」欄位中,傳入您剛才格式化的記錄:

{
  "records": "{{runCode.records}}"
}

將格式化的記錄傳入請求

最後,遍歷已擷取的商品,並為它們加上added-to-airtable標籤,以便下次執行時不會再次擷取這些商品。

在寄出後為商品貼上標籤

儲存並啟用工作流程。

步驟 4:確認是否成功

在「**歷史紀錄」**中,您可以查看請求是否成功,以及 Airtable 回傳了什麼內容。

顯示該請求 的歷史記錄清單

開啟該條目以檢視請求資料、回應資料及時間資訊。

請求詳細資訊頁面

在請求的編輯頁面上,點擊「請求歷史紀錄」按鈕,即可直接跳轉至已篩選該項請求的歷史紀錄頁面。

這款應用程式不允許您撥打哪些電話

由商家設定的請求會經過安全防護機制。針對內部或私有網路位址的請求將被拒絕,包括 localhost、雲端元資料端點,以及任何解析至私有位址範圍的請求 - - 即使是透過重定向亦然。若您看到提及 SSRF blocked 的錯誤訊息,表示該目的地位址已列入此清單。 此外,請求最多允許 5 次重定向,且回應大小上限為 10 MB。

Shopify Flow 該功能本身會將動作回應的大小上限設定為 50 KB。若測試回應大於此限制,應用程式會阻擋儲存操作,而非讓該步驟在實際運作的工作流程中失敗。

最佳實務

  • 請使用清晰的請求名稱,以便在 Shopify Flow 中輕鬆找到它們。
  • 請將 API 憑證以機密資訊的形式儲存,而非直接將其輸入至標頭中。
  • 讓身體的注意力集中在目的地真正需要的領域上。
  • 進行任何變更後,請檢查「歷史紀錄」,以確認該請求是否仍能成功執行。
  • 在請求前加入一個條件,以避免在空閒週期中執行該請求。

相關