このワークフローについて
Google Sheets と MySQL の双方向同期ワークフロー
この n8n ワークフローテンプレートは、Google Sheets(通常は Google Forms から入力される)と MySQL データベース間の堅牢な双方向同期システムを実装します。イベントやコンサートに関する問い合わせの管理を目的として設計されており、両システム間でデータの整合性を確保しつつ、ステータス追跡、条件付き通知、フィールドマッピングを自動化します。ワークフローは営業時間中にスケジュールに基づいて実行され、即時実行のために手動でトリガーすることも可能です。
ワークフローの機能
このワークフローの主な目的は以下の通りです。
- Google Sheet(例:Google Form からの回答)から新規または更新された問い合わせレコードを取得します。
- MySQL テーブル(
ConcertInquiries)から対応するレコードを取得します(source_name = 'GoogleForm')。 - 共有キー(
timestampおよびsource_name)に基づいて 2 つのデータセットを比較し、id、record_created、record_updatedのような自動管理フィールドは無視します。 - 新規または変更された Google Sheet レコードを MySQL データベースにアップサート(挿入または更新)します。
- 比較結果内の
DB Statusフィールドの変更を検出し、その更新を Google Sheet に反映します。 - 返信がないまま 4 時間以上経過した古い問い合わせを特定し、通知をトリガーします。
- レコードが同期済みとして確認された場合に、データベースに同期フラグを維持します。
主な機能と能力
- 双方向同期: 特定の条件下で、Google Sheets または MySQL のいずれかの変更がもう一方のシステムに反映されます。
- フィールド正規化: Google Form の列名を自動的にリネームおよびフォーマットし、標準化されたデータベースフレンドリーなフィールド名に変換します(例:日付形式を
YYYY-MM-DDに変換)。 - 条件付きロジック: 複数の
IFノードを使用して、さまざまな同期シナリオを処理します。- 古い問い合わせの検出
- ステータスフィールドの更新
- 同期確認
- スケジュール実行と手動トリガー: 平日の午前 6 時から午後 10 時の間で 30 分ごとに自動実行され、オンデマンド実行もサポートします。
- データ比較:
Compare Datasetsノードを活用して、システム管理列を除外しながらインテリジェントに違いを検出します。 - ドキュメントサポート: Google Form のセットアップ手順と、必要な MySQL テーブルスキーマへのリンクを含むスティッキーノートが含まれています。
主要ノードとその目的
| ノード名 | タイプ | 目的 |
|---|---|---|
| Schedule Trigger | scheduleTrigger |
平日の営業時間内(*/30 6-22 * * 1-5)で 30 分ごとにワークフロー実行を自動化します。 |
| When clicking "Execute Workflow" | manualTrigger |
テストまたは緊急同期のために手動トリガーを許可します。 |
| Google Sheet Data | googleSheets |
指定された Google Spreadsheet のシート(Form Responses 1)からすべての行を読み取ります。 |
| SQL Get inquiries from Google | mySql |
ConcertInquiries テーブルから source_name = 'GoogleForm' のすべてのレコードを取得します。 |
| Rename GSheet variables | set |
生の Google Form フィールド名を正規化されたデータベース列名にマッピングし、Luxon の DateTime を使用して日付をフォーマットし直します。 |
| Compare Datasets | compareDatasets |
リネーム後の Google Sheet データと MySQL レコードを timestamp および source_name をマージキーとして比較し、システムフィールドをスキップします。 |
| Add MySQL records | mySql |
重複を避けるために timestamp でマッチングを行い、ConcertInquiries への upsert 操作を実行します。 |
| No reply too long? | if |
レコードの timestamp が 4 時間より古いかどうかを確認します。真の場合は、通知ロジックにルーティングします。 |
| DB Status assigned? | if |
MySQL で DB Status フィールドが更新されたかどうか(different.db_status.inputB 経由)を検出し、Google Sheet の更新をトリガーします。 |
| Update GSheet status | googleSheets |
元の Google Sheet 行の DB Status および Timestamp 列のみを更新します。 |
| DB Status in sync? | if |
有効な同期状態のプロキシとして source_name が存在するかどうかを確認してから、レコードを同期済みとしてマークします。 |
| Sync MySQL data | mySql |
双方向同期の成功を確認する同期確認フラグとして、MySQL レコードの source_name フィールドに "Sync" を追加して更新します。 |
| Send Notifications | noOp |
将来の通知ロジック(例:メール、Slack)のプレースホルダーです。現在は何も行いませんが、アラートのパスを示します。 |
| Sticky Notes | stickyNote |
セットアップガイダンスを提供します。1 つは Google Form の構造用、もう 1 つは SQL スキーマ gist へのリンク用です。 |
ユースケースとメリット
主なユースケース: Google Forms 経由で送信されたイベントまたはコンサート予約の問い合わせを管理し、構造化された 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 Form フィールドを適切な日付フォーマットを持つ標準化された JSON に変換し、
source_name = "GoogleForm"を追加します。 - 比較: Compare Datasets ノードが
timestampおよびsource_nameを使用して 2 つのデータセットを照合し、4 つのストリームを出力します。- MySQL にアップサートするアイテム(
Add MySQL records) - 古いチェックが必要なアイテム(
No reply too long?) DB Statusが更新されたアイテム(DB Status assigned?)- 同期確認準備完了アイテム(
DB Status in sync?)
- MySQL にアップサートするアイテム(
- データベースアップサート: 新規または変更されたレコードは、Add MySQL records(
timestampでアップサート)を介して MySQL に挿入/更新されます。 - 条件付き処理:
- レコードが 4 時間以上経過している場合(No reply too long? → true)、Send Notifications(現在はプレースホルダー)に流れます。
DB Statusが MySQL で変更された場合(DB Status assigned? → true)、Update GSheet status が新しいステータスを Google Sheet に書き戻します。- レコードが有効な場合(DB Status in sync? → true)、Sync MySQL data が同期確認フラグとして
source_nameを"GoogleFormSync"に更新します。
- 完了: すべてのパスはエラーなく完了し、システム間のデータ整合性を維持します。
このワークフローは、ユーザー提出フォームデータをリレーショナルデータベースと統合するためのスケーラブルな基盤を提供し、カスタマーサポート、イベント管理、またはリード追跡システムに最適です。
使い方:JSON をダウンロードし、n8n で「ファイルからインポート」を選択します。