工作流介绍
Google Sheets 与 MySQL 双向同步工作流
此 n8n 工作流模板实现了 Google Sheets(通常由 Google 表单提供数据)和 MySQL 数据库之间强大的双向同步系统。该系统专为管理活动或音乐会咨询而设计,可确保两个系统之间的数据一致性,同时支持自动状态跟踪、条件通知和字段映射。工作流在工作时间内按计划运行,也可以手动触发以立即执行。
工作流功能
此工作流的核心目的是:
- 从 Google Sheets(例如,Google 表单的回复)中获取新的或更新的咨询记录。
- 从 MySQL 表 (
ConcertInquiries) 中检索相应的记录,其中source_name = 'GoogleForm'。 - 基于共享键(
timestamp和source_name)比较两个数据集,忽略自动管理的字段,如id、record_created和record_updated。 - 将任何新的或已更改的 Google Sheets 记录插入或更新(upsert)到 MySQL 数据库。
- 在比较结果中检测
DB Status字段的变化,并将这些更新传播回 Google Sheets。 - 识别未收到回复的陈旧咨询(超过 4 小时),并触发通知。
- 在记录确认同步后,在数据库中维护同步标志。
主要功能和能力
- 双向同步:在特定条件下,Google Sheets 或 MySQL 中的更改可以反映在另一个系统中。
- 字段规范化:自动重命名和重新格式化 Google 表单的列名,以标准化数据库友好的字段名称(例如,将日期格式转换为
YYYY-MM-DD)。 - 条件逻辑:使用多个
IF节点来处理不同的同步场景:- 陈旧咨询检测
- 状态字段更新
- 同步确认
- 计划和手动触发器:工作日期间每 30 分钟自动运行一次,支持按需执行。
- 数据比较:利用
Compare Datasets节点智能检测差异,同时排除系统管理的列。 - 文档支持:包含用于 Google 表单和所需 MySQL 表结构的设置说明的便签。
主要节点及其用途
| 节点 | 类型 | 用途 |
|---|---|---|
| Schedule Trigger | scheduleTrigger |
在工作日工作时间内每 30 分钟自动执行工作流 (*/30 6-22 * * 1-5)。 |
| When clicking "Execute Workflow" | manualTrigger |
允许手动触发以进行测试或紧急同步。 |
| Google Sheet Data | googleSheets |
从 Google 电子表格中指定的表(Form Responses 1)读取所有行。 |
| SQL Get inquiries from Google | mySql |
从 ConcertInquiries 表中获取所有 source_name = 'GoogleForm' 的记录。 |
| Rename GSheet variables | set |
将原始 Google 表单字段名称映射到标准化的数据库列名称,并使用 Luxon 的 DateTime 重新格式化日期。 |
| Compare Datasets | compareDatasets |
使用 timestamp 和 source_name 作为合并键来比较 Google Sheets 数据(重命名后)与 MySQL 记录;跳过系统字段。 |
| Add MySQL records | mySql |
在 ConcertInquiries 中执行 upsert 操作,根据 timestamp 进行匹配以避免重复。 |
| No reply too long? | if |
检查记录的 timestamp 是否超过 4 小时;如果为真,则路由到通知逻辑。 |
| DB Status assigned? | if |
检测 DB Status 字段是否在 MySQL 中被更新(通过 different.db_status.inputB),并触发 Google Sheets 更新。 |
| Update GSheet status | googleSheets |
仅更新原始 Google Sheets 行中的 DB Status 和 Timestamp 列。 |
| DB Status in sync? | if |
在将记录标记为已同步之前,验证 source_name 是否存在(作为有效同步状态的代理)。 |
| Sync MySQL data | mySql |
通过将 "Sync" 追加到 source_name 字段来更新 MySQL 记录,确认双向同步成功。 |
| Send Notifications | noOp |
未来通知逻辑(例如,电子邮件、Slack)的占位符;目前不执行任何操作,但为警报标记了路径。 |
| Sticky Notes | stickyNote |
提供设置指南:一个用于 Google 表单结构,另一个链接到 SQL 模式 gist。 |
用例和优势
主要用例:管理通过 Google 表单提交的活动或音乐会预订咨询,确保它们可靠地存储在结构化的 MySQL 数据库中,同时允许员工直接在表格或数据库中更新状态。
优势:
- 数据完整性:防止重复,确保跨平台的字段命名一致性。
- 运营效率:将表单数据自动录入可查询的数据库。
- 状态跟踪:使团队成员能够在任一系统中更新咨询状态,并在两个系统中反映更改。
- 警报就绪:识别陈旧的咨询以进行跟进(通知系统可以从
noOp节点扩展)。 - 低维护:计划运行减少了手动干预;手动触发器支持调试。
分步工作流逻辑
- 触发:工作流通过 Schedule Trigger(工作日早上 6 点至晚上 10 点每 30 分钟)或 Manual Trigger 启动。
- 数据获取:
- Google Sheet Data 检索所有表单回复。
- SQL Get inquiries from Google 获取所有标记为
source_name = 'GoogleForm'的 MySQL 记录。
- 规范化:Rename GSheet variables 节点将 Google 表单字段转换为标准化的 JSON,并进行正确的日期格式化,然后添加
source_name = "GoogleForm"。 - 比较:Compare Datasets 节点使用
timestamp和source_name对齐两个数据集,输出四个流:- 需要 upsert 到 MySQL 的项(
Add MySQL records) - 需要进行陈旧检查的项(
No reply too long?) DB Status已更新的项(DB Status assigned?)- 准备进行同步确认的项(
DB Status in sync?)
- 需要 upsert 到 MySQL 的项(
- 数据库 Upsert:通过 Add MySQL records(基于
timestamp进行 upsert)将新记录或更改的记录插入/更新到 MySQL。 - 条件处理:
- 如果记录超过 4 小时(No reply too long? → true),则流向 Send Notifications(目前是占位符)。
- 如果
DB Status在 MySQL 中被修改(DB Status assigned? → true),Update GSheet status 将新状态写回 Google Sheets。 - 如果记录有效(DB Status in sync? → true),Sync MySQL data 将
source_name更新为"GoogleFormSync"作为同步确认标志。
- 完成:所有路径均无错误地完成,保持系统之间的数据对等。
此工作流为将用户提交的表单数据与关系数据库集成提供了可扩展的基础,非常适合客户支持、活动管理或潜在客户跟踪系统。
使用方法:下载 JSON 文件,然后在 n8n 中选择“从文件导入”。