從 Shopify Flow 發出 HTTP 請求

從 Shopify Flow 發出 HTTP 請求

複製頁面

附影片的逐步指南:如何透過 Workflow Transactional Email 從 Shopify Flow 呼叫外部 API,包含 Shopify Basic 版本。已驗證可行的 Airtable 範例。

為何要將此用於 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 憑證以機密資訊的形式儲存,而非直接將其輸入至標頭中。
  • 讓身體的注意力集中在目的地真正需要的領域上。
  • 進行任何變更後,請檢查「歷史紀錄」,以確認請求仍能成功執行。
  • 在請求前加入一個條件,以避免在空閒週期中執行該請求。

相關