发送 HTTP 请求
发送 HTTP 请求操作可将工作流连接到 Web 服务器或 URL,并发送 HTTP 请求。
Flow 发送 HTTP 请求后,最多等待 30 秒,等待 HTTP 响应代码。如果 Flow 在 30 秒后没有收到回复,它将关闭与应用的连接。稍后,它会重试请求。
字段
发送 HTTP 请求 操作包含以下字段。
字段 | 描述 |
---|---|
HTTP 方法 | 发送 HTTP 请求的方法。发送 HTTP 请求 操作支持以下方法:
|
URL | 发送 HTTP 请求的服务器的 URL。 |
标头 | HTTP 请求的键和值对。可以输入多个键值对。 |
正文 | 要发送到服务器的内容。 |
客户端错误(4XX 响应) | 当收到指示客户端错误的响应代码时,Flow 将:
|
服务器错误(5XX 或 429 响应) | 当收到表示服务器错误的响应代码时,Flow 将会:
|
返回的数据
要在此操作之后的步骤中访问返回的数据,请使用名为sendHttpRequest
的变量,其中包含 HTTP 响应的所有详细信息。或者,使用运行代码操作来解析响应的body
,以便在后续工作流步骤中使用,例如下面的示例所示。
如果在一个工作流程中多次使用发送 HTTP 请求操作,则变量名会加上一个数字。例如,在一个工作流程中使用了两次发送 HTTP 请求操作,第一次返回的数据变量为 sendHttpRequest
而第二次返回的数据变量为sendHttpRequest1
。无法自定义此名称。
响应代码
下表介绍了 Flow 在收到响应后如何处理 HTTP 响应代码。
HTTP 回复代码 | Flow 处理响应代码的流程 |
---|---|
2XX 或 3XX 成功 | Flow 将 HTTP 请求标记为成功,并随后在工作流中执行操作。 |
4XX 错误、 5XX 和 429 错误 | 根据操作的配置方式,Flow 将:
| 其他回复代码 | 如果响应返回此表中未描述的代码或在重试操作时超时,则 Flow 会将 HTTP 请求标记为失败,工作流程运行失败,并且不会采取后续工作流程操作。 |
加密密钥
机密用于安全地存储用于发送 HTTP 请求操作的敏感信息,例如访问令牌或密码。机密是从Flow >设置页面创建和管理的。机密包含名称、值和描述。将机密作为Liquid 变量引用(例如{{secrets.handle}}
),或在配置URL、标头值或 Body 字段时从添加机密选项中引用。秘密值在 Flow 界面中永远不可见,并且是从工作流运行日志中编校的。
触发器
发送 HTTP 请求操作可用于任何工作流。
示例
示例 1:向外部服务发送 HTTP 请求
在此示例中,使用 Flow 向外部服务发送 HTTP 请求。
在开始前,配置接收 HTTP 请求的 Web 服务,并存储这些请求的数据以用于测试,例如 Request Catcher。向第三方服务发送敏感数据(例如密码或 API 密钥)时,请务必谨慎。
步骤:
选择**产品状态已更新**触发器,用于通过更改产品状态来测试此工作流。
在工作流程中添加一个发送 HTTP 请求操作,并将其连接到触发器。接着点击发送 HTTP 请求步骤以打开配置面板。
- 在 HTTP 方法字段中,输入
POST
。 - 在 URL 字段中,输入要测试的 URL,例如
https://yourFlowTest.requestcatcher.com/test
。 - 在标头部分,输入一个键为
Content-Type
和值为text/plain
的标头。 - 在正文部分,输入
{{product.title}}
和{{product.status}}
,从而触发系统发送产品的标题和更新状态。
- 在 HTTP 方法字段中,输入
激活工作流。
通过更改产品状态(例如从草稿更改为活动)来测试它。
在外部测试服务中查看结果,例如,在此示例中为
https://yourFlowTest.requestcatcher.com/
。
示例 2:使用运行代码解析 HTTP 响应
在此示例中,使用 Flow 向外部服务发送 HTTP 请求,并使用运行代码操作解析 HTTP 响应的body
,以供后续工作流步骤使用。
在开始前,请选择一个可以接收 HTTP 请求并返回数据的网络服务,例如 Postman Echo。向第三方服务发送敏感数据(例如密码或 API 密钥)时,请务必谨慎。
步骤:
- 选择**产品状态已更新**触发器,用于通过更改产品状态来测试此工作流。
- 在工作流程中添加一个发送 HTTP 请求操作,并将其连接到触发器。接着点击发送 HTTP 请求步骤以打开配置面板。
- 在 HTTP 方法字段中,输入
POST
。 - 在 URL 字段中,输入要测试的 URL,例如
https://postman-echo.com/post
。 - 在标头部分,输入一个键为
Content-Type
和值为application/json
的标头。 - 在Body部分中,输入示例 JSON 以返回工作流,例如: ``` { "productTitle": "{{product.title}}", "productStatus": "{{product.status}}" }
- 在 HTTP 方法字段中,输入
3. 将**运行代码**操作添加到您的工作流程并将其连接到**发送 HTTP 请求**操作。然后单击**运行代码**步骤打开配置面板。
- 在**定义输入**字段中,包含`sendHTTPrequest`对象返回的`body` ,例如: ```
query{
sendHttpRequest {
body
}
}
- 在**定义输出**字段中,该字段在输出模式中被定义,如: ```
type Output { productTitle: String! productStatus: String! }
- 在**编写代码**字段中,使用`JSON.parse`方法解析响应,并确保您返回的数据与输出模式中定义的结构和类型相匹配,例如: ```
export default function main(input) {
const body = JSON.parse(input.sendHttpRequest.body);
console.log("body is", body);
return {
productTitle: body.data.productTitle,
productStatus: body.data.productStatus
}
}
- 在工作流程中添加一个日志输出操作,并将其连接到运行代码操作。然后点击运行代码步骤,打开配置面板。
- 在输出字段中,包括运行代码步骤返回的变量,例如: ``` Title from HTTP response: {{runCode.productTitle}} Status from HTTP response: {{runCode.productStatus}}
5. 激活工作流。
6. 通过更改产品状态(例如从**草稿**更改为**活动**)来测试它。
7. 从**[Flow / 最近运行](https://admin.shopify.com/apps/flow/activity)**页面观察运行结果,并注意**日志输出**步骤中的值与**发送 HTTP 请求**输出返回的值相匹配。
## 模板 {#templates}
### 针对即将到来的订单通知发货服务商
当订单在订单标注器中被标记为“仓库”时向发货服务商发送 HTTP 请求。[查看模板](https://shopify.com/admin/apps/flow/editor/templates/e99f15ae-454b-443b-b6c7-7dc4b2afc129)
### 向 Airtable 发送新订单
在创建订单时,将订单发送到 Airtable。[查看模板](https://admin.shopify.com/apps/flow/editor/templates/0196f2e1-ab85-7157-90e2-7de1149201a7)
### 将所有现有产品和新产品发送到 Airtable
每隔 10 分钟,(通过标签)查找尚未发送到 Airtable 的产品并发送到 Airtable。[查看模板](https://admin.shopify.com/apps/flow/editor/templates/0196f2e1-a789-7f9d-a64e-a9be2b544e82)
### 根据 Airtable 中存储的产品数据更新批次中的产品
根据 Airtable 中存储的产品数据更新批次中的产品。[查看模板](https://admin.shopify.com/apps/flow/editor/templates/0196f2e1-b499-7384-a418-919d752d7a8b)
### 使用 SendGrid 通知客户礼品卡即将过期
每天获取所有 7 天内到期的礼品卡,并使用 SendGrid 向客户发送电子邮件。[查看模板](https://admin.shopify.com/apps/flow/editor/templates/0196f2e1-a4b9-7ff0-8181-9de43d95ae1e)
### 当客户为自定义商品下单时,使用 SendGrid 发送电子邮件
当客户下单购买自定义商品时,使用 SendGrid 发送交易电子邮件。[查看模板](https://admin.shopify.com/apps/flow/editor/templates/0196f2e1-adc1-7139-9644-43ba3a4c71eb)