【问题标题】:Update type of trigger is not working in Zapier更新类型的触发器在 Zapier 中不起作用
【发布时间】:2022-01-27 20:37:37
【问题描述】:

我正在尝试在 Zapier 应用程序/集成中创建一个触发器(基于轮询),它应该在更新现有项目时运行 zap。

API 响应包含这样的数组:

[
  { id: 1, title: 'AWS', time: '2021-12-03T11:41:13.615Z', modTime: '2021-12-03T11:41:13.615Z' },
  { id: 2, title: 'GCP', time: '2021-12-03T11:41:13.615Z', modTime: '2021-12-03T11:46:13.615Z' },
]

现在,根据doc,如果一个项目将包含idupdated_at 键,那么如果将使用上次修改的时间戳字段更新同一记录,它应该可以工作。

要触发更新,请使用列出所有项目(包括新项目和更新项目)的 API 端点,或者使用仅列出更新项目的端点。 Zapier 需要一个复合 id 字段,该字段会在项目更新时更改(理想情况下是 z.hash('md5', item.id + item.updated_at)),因此后续更新不会被 Zapier 的重复数据删除器过滤掉。

为此,我创建了一个新键 updated_at 并复制了 modTime 键的值。但此触发器仅适用于新记录,不适用于现有记录中的任何更新。我错过了什么吗?我每次都可以像这样{ id: rec.id + ':' + rec.modTime ... } 使 id 成为新的,但它也会运行我不想要的新记录。 这是我的代码:

// import statements

const listData = async (z) => {
  const records = await getTaskList(z);
  return records.map((rec) => ({
      ...rec,
      updated_at: rec.modTime
  }));
};


export default {
  display: {
    description: 'Triggers when a task will be updated.',
    label: 'Task Updated',
  },
  key: 'task_updated',
  noun: 'Updated Task',
  operation: {
    outputFields: outFields,
    perform: listData,
    sample: getSampleData(),
  },
};

【问题讨论】:

    标签: zapier zapier-cli


    【解决方案1】:

    好问题! Zapier 重复数据删除器关心名为 id 的字段。这就是为什么仅添加密钥的解决方案仅适用于新项目 - deuper 根本不查看 updated_at 并且按预期工作(仅限新项目)。从这些文档中:

    Zapier 需要一个复合 id 字段在项目更新时更改

    所以你的第二种方法是正确的。 id 字段应该是原始 idupdated_field 的组合。这将触发所有新的更新的对象。

    过滤掉新对象取决于您从中获取数据的 API。您可以在.map 之前执行.filter,但需要一种方法来识别新的(未更新的)对象。在黑暗中拍摄,但如果 time 是创建日期,modTime 是更新日期,您可以过滤以仅返回 time !== modTime 所在的对象。但是,情况可能并非如此。

    最终,无论您从 listData 返回什么,都将被发送到重复数据删除器并在该 zap 之前没有看到 id 时触发。

    希望能解决这个问题!

    【讨论】:

      猜你喜欢
      • 2018-08-17
      • 2019-03-27
      • 2018-09-29
      • 1970-01-01
      • 2018-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-05
      相关资源
      最近更新 更多