使用 Zapier Json 对象数组触发多个 webhook

Posted

技术标签:

【中文标题】使用 Zapier Json 对象数组触发多个 webhook【英文标题】:Triggering multiple webhooks with Zapier array of Json objects 【发布时间】:2019-10-30 15:55:54 【问题描述】:

我无法通过 Zapier 触发多个 webhook,例如 explained on Zapiers website 有没有人设法使用这个功能?

我正在尝试创建“一组格式正确的 JSON 对象”。 为了能够在下一步中选择它作为数据源,它需要是一个简单的数组(这就是我将数组内的 json 字符串化的原因)。

这是我在 Zapier Code 中创建的 json 数组,试图用来触发两个单独的 webhook 被触发

var jsonArray = ['"id":1,"data":111','"id":2,"data":222'];

output = jsonArrayOut: jsonArray;

Here is a screenshot of a custom webhook request in Zapier

无论我如何格式化数据,我总是收到一个请求,而不是两个。

This is the result I see

谁能告诉我我错过了什么?

【问题讨论】:

不要对json数组进行字符串化,那么应用程序将无法找到字符串中的元素数。 另外,为什么要将数组包装到另一个对象中?? 您能更清楚地了解您要做什么吗?您是否希望一个代码步骤触发器多次运行后续操作? @xavdid 我想为我们在 Shopify 之外收到的订单更改 Shopify 中的库存水平。例如。 1. 我们通过电子邮件收到订单。 2. 这封电子邮件将在代码中解析,然后我将获取我应该从 shopify 库存中扣除的物品的 ID 和数量 3. 我想触发一个 webhook 来为这些物品中的每一个进行购物并减少每个物品的库存需要有一个单独的 webhook。 Shopify 的 API 不允许在一次调用中完成。一个库存项目 - 一个电话。 【参考方案1】:

酷,所以你在this comment 中描述的应该是完全可能的。

您的 zap 将如下所示:

    触发器 - 新电子邮件 解析电子邮件,返回id, data 数组(见下文) 更新库存(将在第 2 步中针对数组中的每个项目进行)

这利用了代码步骤的undocumented 功能,如果它们返回数组,zap 分支和后续步骤会运行多次。请注意,没有用于此的 UI,它看起来会令人困惑,但它工作。

您的 JS 代码将如下所示:

// parse email code
// get items and their quantities
// return object that looks like this
return [id: 1, data: 123, id: 2, data: 456]

在第 3 步中(无论您如何操作),您都可以选择 iddata 作为可映射输入。当您设置 zap 时,您只会看到 1123 作为选项,但是当 zap 开启并真正运行时,步骤 3 将针对步骤 2 中返回的每个数组元素运行。

【讨论】:

原来我的代码存在多个问题。对于一个我确实想返回一个字符串,而不是一个 JSON 对象。在我准备好字符串之后(与@xavdid 指出的一致),我使用 JSON.parse() 将其转换为 JSON 对象。我遇到的第二个问题是使用输出而不是返回。【参考方案2】:

根据文档:

您可以发送一组格式正确的 JSON 对象,我们将 为数组中的每个对象触发一次 Zap。

应用程序将能够解析 json 并了解其结构。将其作为字符串使其丢失。

所以我猜它作为字符串发送可能行不通。应用程序将无法找到字符串中的元素数量,它会将整个字符串视为一个元素。

试试,

output  = ["id": 1, "data": 111,"id": 2, "data": 222];

【讨论】:

感谢@arjithn 当我将输出作为数组传递时,我无法选择该数组作为下一步的输入 - webhook。 prntscr.com/o2s2hn 当输出是一个数组时,Zapier 将输出拆分为单独的数组元素,我只能选择那些单独的数组元素,而不是整个数组作为 webhook 步骤的输入。 prntscr.com/o2s3nt 如果你返回一个数组,它总是会拆分输出,正如你已经注意到的。如果您想一次访问所有元素,则必须将它们全部返回到一个对象中。该对象将在以下步骤中映射。当然,这意味着您将需要一种为对象中的每个元素生成唯一键的方法。这样做的主要问题是,接下来的步骤会一直期待相同的输入,我想这会很困难。

以上是关于使用 Zapier Json 对象数组触发多个 webhook的主要内容,如果未能解决你的问题,请参考以下文章

通过 Zapier 的 API POST

在“Zapier 代码”操作中触发多个 webhook 调用

Zapier - Catch Hook - JSON 数组 - 遍历数组中的每个项目

Zapier Webhooks 发布 Json 数组

“JSON 中的意外令牌”(通过 Zapier 连接的 Firestore)

从 Django 代码调用 Zapier 触发器