
## 使用Google推送通知监控Google Drive文件变化
**厌倦了Google Drive触发器的不可靠性?不想每分钟轮询耗尽系统资源?那么这个工作流就是为您准备的!**
Google Drive因其相对简单、成本低廉和现成的集成而成为自动化的绝佳存储选择。使用Google Drive作为触发器是合乎逻辑的下一步,但许多n8n用户很快意识到内置的Google Drive触发器并不可靠。灾难!
通常的解决方法是短时间间隔轮询Google Drive搜索API,但代价是在不活动期间浪费服务器资源。理想的解决方案当然是推送通知,但它们似乎很难实现…或者真的很难吗?
这个模板证明,为Google Drive文件更改设置Google推送通知实际上并不难!使用这种方法,每当驱动器中的某些内容发生变化时,Google都会发送POST请求,这解决了事件的可靠性和资源的效率问题。
### 工作原理
1. 我们首先向Google Drive API注册一个**通知通道(webhook)**。两个关键信息是(a)推送通知的webhook URL和(b)因为我们希望限定到单个位置,所以是driveId。好消息是您可以使用HTTP调用注册任意多个,但您必须自己管理它们,Google没有通知通道的仪表板!
2. 注册数据以及startPageToken保存在`workflowStaticData`中 – 这是一个方便的持久性存储,我们可以在执行之间保存少量数据。
3. 现在,每当我们的目标Google Drive中创建或更新文件或文件夹时,Google都会向此模板中的webhook触发器发送推送通知。
4. 触发后,我们仍然需要调用Google Drive的`Changes.list`来获取检测到的实际更改事件。我们可以使用HTTP请求节点来完成此操作。
5. Changes API还将返回`nextPageToken` – 一个标记,用于确定下一次获取新批次更改的位置。重要的是我们下次从changes API请求时使用此令牌,因此我们将使用此更新值更新`workflowStaticData`。
6. 不幸的是,`changes.list` API无法按文件夹或操作过滤更改事件,因此请务必执行自己的过滤步骤以获取所需的文件。
7. 最后,对于有效的更改事件,可选地获取文件元数据,这为您提供了更多属性可供使用。例如,您可能想知道更改事件是否由n8n触发,在这种情况下,您需要检查”ModifiedByMe”值。
### 使用方法
* 从步骤1开始,填写”Set Variables”节点,然后单击手动执行触发器。这将为特定驱动器创建单个Google Drive通知通道。
* 激活工作流以开始接收来自Google Drive的事件。
* 要进行测试,请在目标驱动器上执行操作,例如创建文件。观察webhook调用涌入!
* 一旦获得所需的事件,完成此模板以对更改的文件执行某些操作。
### 要求
* Google Drive凭据。请注意,此工作流也适用于共享驱动器。
### 优化此工作流
对于批量操作,您会注意到Google逐渐开始发送越来越多的推送通知 – 有时数量达到数百个!对于云计划用户,如果同一驱动器每天进行大量更改,这很容易耗尽执行限制。一种方法是实现外部节流机制,在将事件发送到n8n之前对其进行批处理。
此节流机制超出了此模板的范围,但使用类似Supabase Edge Functions的东西很容易实现。

评论(0)