通过 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 密钥作为机密信息存储,而不是将其直接写入请求头中。
  • 让身体专注于目的地真正需要的领域。
  • 每次修改后,请检查历史记录,以确认请求是否仍能成功。
  • 在请求前添加一个条件,以防止其在空周期中运行。

相关