從 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 請求」,然後點擊「建立請求」。

請為其賦予一個明確的名稱,例如「建立 Airtable 產品記錄」 - - 這正是您稍後在 Shopify Flow 中搜尋時會使用的關鍵字。
設定方法。若要建立 Airtable 記錄,請使用 POST 方法。
請在 URL 欄位中輸入端點。前綴 https:// 是固定的,因此請輸入其餘部分:
api.airtable.com/v0/{{ secrets.airTableProductsBaseId }}/Products
這張圖示說明了 Airtable 端點如何對應至您的資料庫,因此您可以根據自身需求進行調整:

請新增 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
}
}
]
我們將在下一步的工作流程中建立該陣列。
完成的請求如下所示:



儲存此請求。現在可在「Shopify Flow」的「HTTP 請求」動作中選取此請求。
步驟 3:建立工作流程
開啟 Shopify Flow 並建立一個新的工作流程。
選擇基於排程的觸發器。此範例為示範目的,每 10 分鐘執行一次 - - 在實際運作環境中,請選擇一個合理的設定。

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

現在來格式化資料。請求正文需要一個名為 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 請求」**動作。

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

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

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

儲存並啟用工作流程。
步驟 4:確認是否成功
在「**歷史紀錄」**中,您可以查看請求是否成功,以及 Airtable 回傳了什麼內容。
的歷史記錄清單
開啟該條目以檢視請求資料、回應資料及時間資訊。

在請求的編輯頁面上,點擊「請求歷史紀錄」按鈕,即可直接跳轉至已篩選該項請求的歷史紀錄頁面。
這款應用程式不允許您撥打哪些電話
由商家設定的請求會經過安全防護機制。針對內部或私有網路位址的請求將被拒絕,包括 localhost、雲端元資料端點,以及任何解析至私有位址範圍的請求 - - 即使是透過重定向亦然。若您看到提及 SSRF blocked 的錯誤訊息,表示該目的地位址已列入此清單。 此外,請求最多允許 5 次重定向,且回應大小上限為 10 MB。
Shopify Flow 該功能本身會將動作回應的大小上限設定為 50 KB。若測試回應大於此限制,應用程式會阻擋儲存操作,而非讓該步驟在實際運作的工作流程中失敗。
最佳實務
- 請使用清晰的請求名稱,以便在 Shopify Flow 中輕鬆找到它們。
- 請將 API 憑證以機密資訊的形式儲存,而非直接將其輸入至標頭中。
- 讓身體的注意力集中在目的地真正需要的領域上。
- 進行任何變更後,請檢查「歷史紀錄」,以確認該請求是否仍能成功執行。
- 在請求前加入一個條件,以避免在空閒週期中執行該請求。

