Google Workspaceとn8nをつなぐ:フォーム・Gmail・スプレッドシートを外へ流す

公開 書いた人 大林 諒

Googleフォームに体験申込が入ったら、Chatに知らせてkintoneの顧客台帳にも入れる。決済サービスから入金のメールが届いたら、スプレッドシートの月謝の表に入金を付ける。こうした「Googleの中で起きたことを、Googleの外へ流す」処理は、n8nで組むと見通しがよくなります。この記事では、n8nにGoogleの認証情報を入れるところから、フォームとGmailをきっかけにしたワークフローを2本作るところまでを、サンプル料理教室の例で通しで書きます。n8nはすでに動いている(n8n Cloudか、自分のサーバーに入れたもの)前提です。

この記事の内容
  1. 先に決めること
  2. GASとn8nの使い分け
  3. サンプル料理教室で作るワークフロー
  4. Googleの認証情報を作る(セルフホストのn8n)
  5. 体験申込をChat・Slack・kintoneへ流す
  6. Gmailの受信をきっかけに処理する
  7. 応用
  8. できないことと、その代わり
  9. よく詰まるところ
  10. 次にやること

先に決めること

n8nとGoogleをつなぐ前に、次の5つを決めます。後から変えると認証情報を作り直すことになります。

n8nをどこで動かすか

n8n Cloudを使っているなら、Gmail・Sheets・Drive・Calendar・Chatなど対応するノードでは「Managed OAuth2」が選べます。認証情報の画面で「Sign in with Google」を押すだけで、Google Cloudの設定は要りません。自分のサーバーに入れたn8n(セルフホスト)ではこれが使えないので、Google Cloudで自分のOAuthクライアントを作ります。この記事の手順の大半は、セルフホストでの作り方です。

どのアカウントでつなぐか

認証したGoogleアカウントの権限で、n8nがシートを読み、メールを読みます。代表や受付の個人アカウントでつなぐと、その人が退職してアカウントを止めた日にワークフローが全部止まります。実際に運用していると、これがいちばん多い止まり方です。サンプル料理教室では、自動化用のアカウント automation@sample-cooking.example を1つ作り、必要なシートとフォルダだけをこのアカウントに共有します。ユーザーを1人増やすので、その分のGoogle Workspaceの料金はかかります。

OAuthかサービスアカウントか

n8nの公式ドキュメントは、たいていの用途でOAuth2を勧めています。サービスアカウントはGoogle Cloudで作る「人ではないアカウント」で、ログインの画面を通さずに使えますが、設定は込み入ります。小さな会社では、自動化用アカウントでOAuth2をつなぐのがいちばん手早く、つまずきも少なくなります。サービスアカウントを選ぶ場面は後の節に書きます。

OAuthの「対象」を内部にするか外部にするか

Google Cloudで同意画面を作るとき、対象(Audience)を「Internal(内部)」か「External(外部)」から選びます。Google Workspaceの会社なら内部を選びます。外部で「テスト中」のままにすると、認証が7日で切れます(後で詳しく書きます)。

きっかけを拾う方法

n8nがGoogleの変化に気づく方法は2つあります。

  • n8nが定期的に見に行く(ポーリング)。Google Sheets TriggerやGmail Triggerがこれで、数分おきに新しい行やメールを確かめます。コードは要りませんが、気づくまでに見に行く間隔ぶん遅れます
  • Google側からn8nに知らせる。GASでフォームの送信時にn8nのWebhookのURLを呼びます。ほぼ即時に動きますが、GASを数行書きます

体験申込の通知のように数分遅れても困らないものはポーリングで十分です。申込直後に自動で返信したいときはWebhookにします。

GASとn8nの使い分け

Google Apps Script(GAS)も、フォームの送信やシートの編集をきっかけに処理を書けます。どちらで組むかは、処理がGoogleの中で終わるかどうかで分けます。

やりたいこと向くほう理由
フォームの回答に確認メールを返すGASGoogleの中で完結し、送信直後に動く
予約一覧からカレンダーに予定を入れるGASGoogleのサービス同士で、認証の準備が要らない
月末に請求書のPDFを作ってGmailで送るGASドキュメント・ドライブ・Gmailがすべて中にある
申込をkintoneやSlackに入れるn8n外のサービスの認証情報をn8nで一か所にまとめられる
入金メールを読んで表に付け、Chatにも知らせるどちらでも3つ以上のサービスをまたぐならn8nが追いやすい
LINE・kintone・Googleを1本の流れでつなぐn8n実行の履歴が画面で見られ、どこで落ちたか分かる
1日に数万件を処理するどちらも注意GASは実行時間、n8nはサーバーの性能に上限がある

GASは追加の費用がかからず、Googleの中なら認証もほぼ要りません。一方で、外のサービスのAPIキーをスクリプトのあちこちに持つことになり、止まったときにどの処理で落ちたかを追うのが手間です。n8nは実行ごとの入出力が「Executions」に残るので、外とつなぐ処理はn8nに寄せたほうが後の面倒が減ります。サンプル料理教室では、確認メールとカレンダー登録はGAS、外へ流す処理はn8nと決めています。

サンプル料理教室で作るワークフロー

この記事で作るものと、必要な認証情報の一覧です。

ワークフローきっかけ流れる先必要な認証情報
体験申込の通知と台帳登録予約一覧のシートに行が増えたChatの受付スペース・Slack・kintoneの顧客台帳Google Sheets Trigger用のOAuth2、kintoneのAPIトークン、Slack
入金メールの取り込みGmailに入金通知メールが届いた月謝のシート・Chatの経理スペースGmail用のOAuth2、Google Sheets用のOAuth2
失敗の通知どちらかのワークフローが失敗したChatの管理スペースなし(Webhookで送る)

Google側で有効にするAPIは、Google Sheets API・Google Drive API・Gmail APIの3つです。Sheets Triggerは変化を見つけるのにドライブの版の履歴を読むので、Sheetsだけ有効にしても動きません。

Googleの認証情報を作る(セルフホストのn8n)

ここからはn8nの公式ドキュメントの手順どおりです。Google Cloud Consoleには、自動化用アカウント automation@sample-cooking.example でログインして作業します。

Google Cloudでプロジェクトを作り、APIを有効にする

  1. Google Cloud Consoleを開き、上部のプロジェクトの選択欄から「新しいプロジェクト」を選ぶ
  2. プロジェクト名に sample-cooking-n8n のように分かる名前を入れ、組織が sample-cooking.example になっていることを確かめて「作成」を押す
  3. 上部の選択欄で、作ったプロジェクトが選ばれていることを確かめる
  4. 「APIとサービス」→「ライブラリ」を開く
  5. 「Google Sheets API」を検索して開き、「有効にする」を押す
  6. 同じように「Google Drive API」と「Gmail API」を有効にする
Google Cloud Consoleの「APIとサービス」→「ライブラリ」で、Google Sheets APIを有効にしたところ
Google Cloud Consoleの「APIとサービス」→「ライブラリ」で、Google Sheets APIを有効にしたところ

OAuth同意画面を作る

  1. 「APIとサービス」→「OAuth同意画面」を開く。Google Auth Platformの概要が開く
  2. 「概要」タブで「開始」を押す
  3. アプリ名に sample-cooking n8n、ユーザーサポートメールに管理者のアドレスを入れて「次へ」
  4. 対象で「内部」を選んで「次へ」
  5. 連絡先のメールアドレスを入れて「次へ」
  6. ユーザーデータに関するポリシーに同意して「続行」、「作成」を押す
  7. 左のメニューで「ブランディング」を開く
  8. 「承認済みドメイン」で「ドメインを追加」を押し、n8nを置いているドメイン(例 n8n.sample-cooking.example)を入れる
  9. 「保存」を押す
Google Auth Platformの「対象」で「内部」を選んでいるところ
Google Auth Platformの「対象」で「内部」を選んでいるところ

「内部」が選べないときは、プロジェクトが組織に属していないか、個人のGmailアカウントで作業しています。組織を選び直してプロジェクトを作り直します。

OAuthクライアントIDを作ってn8nに入れる

  1. n8nで「Credentials」から新しい認証情報を作り、種類に「Google Sheets Trigger OAuth2 API」を選ぶ
  2. 認証情報の画面に出ている「OAuth Redirect URL」をコピーする(例 https://n8n.sample-cooking.example/rest/oauth2-credential/callback)
  3. Google Cloud Consoleに戻り、「APIとサービス」→「認証情報」を開く
  4. 「認証情報を作成」→「OAuthクライアントID」を選ぶ
  5. アプリケーションの種類で「ウェブ アプリケーション」を選ぶ
  6. 名前を n8n のように分かるものに変える
  7. 「承認済みのリダイレクトURI」に、手順2でコピーしたURLを貼る。https と http、ポート番号まで一字も違わないようにする
  8. 「作成」を押す
  9. 表示されたクライアントIDとクライアントシークレットを、n8nの認証情報の画面の「Client ID」「Client Secret」に貼る
  10. 「Sign in with Google」を押し、自動化用アカウントでログインして許可する
  11. 「Save」を押す
n8nのGoogle認証情報の画面。OAuth Redirect URL・Client ID・Client Secret・Sign in with Googleのボタン
n8nのGoogle認証情報の画面。OAuth Redirect URL・Client ID・Client Secret・Sign in with Googleのボタン

同じクライアントIDとシークレットで、「Gmail OAuth2 API」「Google Sheets OAuth2 API」の認証情報も作れます。ノードの種類ごとに認証情報を1つずつ作り、それぞれ「Sign in with Google」を押します。

n8n Cloudなら

n8n Cloudでは、認証情報の画面で認証の種類に「Managed OAuth2」を選び、「Sign in with Google」を押すだけです。上のGoogle Cloudの手順は要りません。対応しているのはCalendar・Chat・Docs・Drive・Gmail・Sheetsと、それぞれのトリガーなどです(2026年10月時点)。対応していないノードを使うときだけ「Custom OAuth2」に切り替えて、上の手順で作ります。

サービスアカウントを使う場合

サービスアカウントが向くのは、共有ドライブのファイルを読み書きするだけで、Gmailは使わない場合です。作り方は次のとおりです。

  1. 「APIとサービス」→「認証情報」で「認証情報を作成」→「サービスアカウント」を選ぶ
  2. 名前とIDを入れて「作成して続行」を押す。ロールは付けなくてよいので「完了」を押す
  3. 作ったサービスアカウントを開き、「キー」タブで「鍵を追加」→「新しい鍵を作成」を選ぶ
  4. 「JSON」を選んで「作成」を押す。JSONのファイルがダウンロードされる
  5. n8nで「Google Service Account API」の認証情報を作り、JSONの client_email を「Service Account Email」に、private_key を引用符を除いて「Private Key」に貼る
  6. 「Save」を押す
  7. 読ませたい共有ドライブやシートを、サービスアカウントのメールアドレスに「編集者」か「閲覧者」で共有する

注意点が3つあります。2025年4月15日より後に作ったサービスアカウントはマイドライブにアクセスできず、共有ドライブだけを扱えます。Gmailの読み書きは「Impersonate a User(ユーザーのなりすまし)」を有効にしないと使えず、そのためには管理コンソールでドメイン全体の委任を設定する必要があります。Googleはドメイン全体の委任を勧めていません(全員になりすませる鍵になるため)。サンプル料理教室では、サービスアカウントは使わず、自動化用アカウントのOAuth2にそろえています。

ドメイン全体の委任を設定する場合の経路は、管理コンソールの「セキュリティ」→「アクセスとデータ管理」→「APIの制御」→「ドメイン全体の委任を管理」です。特権管理者しか設定できず、反映まで5分から24時間かかります。

体験申込をChat・Slack・kintoneへ流す

体験レッスンの申込はGoogleフォームで受け、回答はスプレッドシート「予約一覧」の「フォームの回答 1」シートに貯まっています。n8nの公式ドキュメントにはGoogleフォーム専用のトリガーが見当たらないので、回答が入るシートを見張ります。

Google Sheets Triggerを置く

  1. n8nで新しいワークフローを作り、最初のノードに「Google Sheets Trigger」を置く
  2. 「Credential to connect with」に、作った「Google Sheets Trigger OAuth2 API」を選ぶ
  3. 「Poll Times」で「Every Minute」を選ぶ(数分おきでよければ「Every X」で5分などにする)
  4. 「Document」で「予約一覧」を選ぶ
  5. 「Sheet」で「フォームの回答 1」を選ぶ
  6. 「Trigger On」で「Row Added」を選ぶ
  7. 「Fetch Test Event」を押し、テスト用にフォームから1件送った回答が出てくることを確かめる
Google Sheets Triggerの設定。Document・Sheet・Trigger On「Row Added」
Google Sheets Triggerの設定。Document・Sheet・Trigger On「Row Added」

設定の意味は次のとおりです。

項目サンプル料理教室の値意味
Trigger OnRow Added行が増えたときだけ動く。受付が対応状況を書き込んでも動かない
Columns to Watch指定しない「Row Updated」のときに見る列を絞る。指定しないと新しく足した列でも動く
Include in OutputNew Version更新時に、変わる前と後のどちらの値を渡すか
Value Render既定のまま表示どおりの値か、式の結果かを選ぶ
DateTime Render既定のまま日時を表示の形式で受けるか、数値で受けるか

出力には、フォームの質問名がそのまま項目名として入ります。「お名前」「メールアドレス」「希望日」「希望のコース」なら、後のノードでは {{ $json["お名前"] }} のように取り出せます。

Chatの受付スペースに知らせる

Google ChatのノードもありますがChat APIの側の準備が要るので、スペースに知らせるだけならChatの受信Webhookのほうが早く済みます。受信Webhookを使えるのはBusiness・EnterpriseのGoogle Workspaceで、組織で受信Webhookの追加と利用が許可されていることが前提です。

  1. ブラウザでGoogle Chatを開き、受付スペースの名前の横の矢印から「アプリとインテグレーション」を選ぶ
  2. 「Webhookを追加」を押し、名前に n8n通知 と入れて「保存」
  3. 「その他」→「リンクをコピー」でWebhookのURLをコピーする
  4. n8nに戻り、Sheets Triggerの後ろに「HTTP Request」ノードを置く
  5. 「Method」を POST、「URL」にコピーしたURLを貼る
  6. 「Send Body」をオンにし、「Body Content Type」を「JSON」、「Specify Body」を「Using JSON」にする
  7. JSONの欄に次を入れる
{
  "text": "体験申込が入りました\nお名前: {{ $json['お名前'] }}\n希望日: {{ $json['希望日'] }}\nコース: {{ $json['希望のコース'] }}\n予約一覧で対応状況を付けてください"
}

WebhookのURLはスマホのChatアプリからは作れません。またURLには秘密の値が入っているので、マニュアルや共有のメモに貼らないようにします。1つのスペースには、Webhook全体で1秒に1件までしか送れません。まとめて何十件も流すときは間に「Wait」ノードを挟みます。

Chatの受付スペースに、n8nから届いた体験申込の通知
Chatの受付スペースに、n8nから届いた体験申込の通知

Slackにも流す(使っている場合)

講師との連絡にSlackを使っている教室なら、HTTP Requestと並べて「Slack」ノードを置きます。Slackのアプリを作って認証情報を入れ、「Message」の送信で送り先のチャンネルと本文を指定します。本文の書き方はChatと同じく {{ $json['お名前'] }} で差し込みます。1つのノードから線を2本出せば、ChatとSlackに同時に送れます。

kintoneの顧客台帳に入れる

n8nの公式ドキュメントにはkintone専用のノードが見当たらないので、HTTP RequestノードでkintoneのREST APIを呼びます。先にkintoneでAPIトークンを作ります。

  1. kintoneの顧客台帳アプリを開き、右上の歯車「アプリを設定」を押す
  2. 「設定」タブの「カスタマイズ/サービス連携」にある「APIトークン」を押す
  3. 「生成する」を押し、アクセス権で「レコード追加」にチェックを入れる
  4. 画面右下の「保存」を押す
  5. 右上の「アプリを更新」を押し、確認の画面でも「アプリを更新」を押す

次にn8nでHTTP Requestノードを置きます。

  1. 「Method」を POST、「URL」を https://sample-cooking.cybozu.com/k/v1/record.json にする
  2. 「Send Headers」をオンにし、名前 X-Cybozu-API-Token、値にAPIトークンを入れる(実際は認証情報の「Header Auth」に入れておくと、ワークフローを人に見せてもトークンが出ない)
  3. 「Send Body」をオン、「Body Content Type」を「JSON」、「Specify Body」を「Using JSON」にする
  4. JSONの欄に次を入れる
{
  "app": 12,
  "record": {
    "氏名": { "value": {{ JSON.stringify($json['お名前']) }} },
    "メールアドレス": { "value": {{ JSON.stringify($json['メールアドレス']) }} },
    "体験希望日": { "value": {{ JSON.stringify($json['希望日']) }} },
    "流入元": { "value": "体験フォーム" }
  }
}

app はアプリのIDで、kintoneのアプリのURL /k/12/ の数字です。「氏名」などはkintoneのフィールドコードで、フィールド名ではありません。値を JSON.stringify で包んでいるのは、名前に " が入ってもJSONが壊れないようにするためです。日付のフィールドに入れる値は 2026-11-14 の形でないと入りません。フォームの日付の形式が違うときは、手前に「Date & Time」ノードを置いて形をそろえます。

n8nのワークフロー全体。Sheets Triggerから、Chat・Slack・kintoneの3本に分かれている
n8nのワークフロー全体。Sheets Triggerから、Chat・Slack・kintoneの3本に分かれている

公開して動かす

テストで1件ずつ流れることを確かめたら、画面右上でワークフローを公開します(以前の版では「Active」の切り替え)。公開するまでSheets Triggerは見に行きません。公開した後の実行は、エディタではなく「Executions」タブに残ります。

Gmailの受信をきっかけに処理する

サンプル料理教室では、月謝をカード決済のサービスで受けていて、入金のたびに billing@example.com から「入金のお知らせ」というメールが届きます。これを読んで、月謝のシートの入金記録に1行足し、経理スペースに知らせます。

Gmail Triggerを置く

  1. 新しいワークフローを作り、「Gmail Trigger」を置く
  2. 「Credential to connect with」に「Gmail OAuth2 API」の認証情報を選ぶ
  3. 「Poll Times」で「Every X」、間隔を5分にする
  4. 「Event」は「Message Received」のまま
  5. 「Simplify」はオンのまま
  6. 「Filters」の「Search」に from:billing@example.com subject:入金のお知らせ と入れる
  7. 「Read Status」は「Unread and read emails」にする
  8. 「Fetch Test Event」で、届いている入金メールが出てくることを確かめる
Gmail TriggerのFiltersに、Searchの条件を入れたところ
Gmail TriggerのFiltersに、Searchの条件を入れたところ

「Search」にはGmailの検索窓と同じ書き方が使えます。Gmailで同じ条件を検索して、狙ったメールだけが出ることを先に確かめておくと外しません。「Read Status」を既定の未読だけにしておくと、人がスマホで先に開いたメールを拾いません。1回の確認で拾うのは既定で10通、最大50通です(「Max Emails per Poll」)。

本文から値を取り出してシートに足す

メールの本文の書き方はサービスごとに違うので、「Code」ノードで取り出します。本文が「会員番号:M-0123」「金額:12,000円」の形で届く場合の例です。

const out = [];
for (const item of $input.all()) {
  const body = item.json.text || '';
  const member = (body.match(/会員番号[::]\s*([A-Z0-9-]+)/) || [])[1] || '';
  const amount = (body.match(/金額[::]\s*([\d,]+)円/) || [])[1] || '';
  out.push({
    json: {
      受信日時: item.json.date,
      会員番号: member,
      金額: Number(amount.replace(/,/g, '')),
      件名: item.json.subject,
      要確認: member === '' || amount === ''
    }
  });
}
return out;

続けて「Google Sheets」ノードを置き、「Append Row」で月謝のスプレッドシートの「入金記録」シートに1行足します。「Mapping Column Mode」で列とCodeノードの出力を対応させます。会員番号か金額が取れなかったもの(要確認 が true)は、「If」ノードで分けて経理スペースにだけ知らせ、シートには入れません。決済サービスがメールの書式を変えたときに、黙って空の行が増えるのを防ぐためです。

info@ の共同トレイを見張るとき

Googleグループの共同トレイには、Gmailのような受信箱がありません。Gmail Triggerはログインしたアカウントの受信箱しか見られないので、info@ に届くメールを拾いたいときは、自動化用アカウントをグループのメンバーに入れ、メールが届く設定にしておきます。こうすると、自動化用アカウントの受信箱にinfo@ 宛のメールの写しが届くので、それをGmail Triggerで拾えます。

応用

GASからn8nに知らせて、すぐ動かす

ポーリングの遅れが困るときは、フォームの送信時にGASからn8nのWebhookを呼びます。n8n側は最初のノードを「Webhook」にし、「HTTP Method」を POST、「Authentication」を「Header Auth」にしておきます。予約一覧のスプレッドシートで「拡張機能」→「Apps Script」を開き、次を貼ります。

function onFormSubmitToN8n(e) {
  const props = PropertiesService.getScriptProperties();
  const url = props.getProperty('N8N_WEBHOOK_URL');
  const token = props.getProperty('N8N_HEADER_TOKEN');
  const payload = {
    row: e.range.getRow(),
    answers: e.namedValues
  };
  const res = UrlFetchApp.fetch(url, {
    method: 'post',
    contentType: 'application/json',
    headers: { 'X-Webhook-Token': token },
    payload: JSON.stringify(payload),
    muteHttpExceptions: true
  });
  if (res.getResponseCode() >= 300) {
    console.error(res.getResponseCode() + ' ' + res.getContentText());
  }
}

スクリプトの「プロジェクトの設定」にあるスクリプトプロパティに、N8N_WEBHOOK_URL(n8nのProduction URL)と N8N_HEADER_TOKEN(YOUR_HEADER_TOKEN。n8nのHeader Authに入れたのと同じ値)を入れます。トリガーは「トリガー」の画面で、関数 onFormSubmitToN8n、イベントのソース「スプレッドシートから」、イベントの種類「フォーム送信時」で作ります。e.namedValues には質問名ごとに値が配列で入るので、n8n側では {{ $json.body.answers['お名前'][0] }} で取り出します。

WebhookのURLは2種類あります。「Test URL」はエディタで「Listen for Test Event」を押している間だけ受け付け、「Production URL」はワークフローを公開している間だけ受け付けます。GASに入れるのはProduction URLです。

失敗したらChatに知らせる

認証が切れたり、kintoneのフィールドコードが変わったりすると、ワークフローは黙って失敗します。気づけるように、失敗を知らせるワークフローを1本作っておきます。

  1. 新しいワークフローを作り、最初のノードに「Error Trigger」を置く
  2. 後ろにChatのWebhookへ送るHTTP Requestを置き、本文に {{ $json.workflow.name }} と {{ $json.execution.url }} を入れる
  3. エラー通知 という名前で保存する
  4. 見張りたいワークフローを開き、「Options」→「Settings」の「Error workflow」で エラー通知 を選んで保存する

1本の失敗通知を、すべてのワークフローで使い回せます。

時間の基準をそろえる

「毎朝8時に前日の申込をまとめて送る」のようにSchedule Triggerを使うときは、タイムゾーンを日本に合わせます。ワークフローごとなら「Workflow menu」→「Settings」の「Timezone」、セルフホスト全体なら環境変数 GENERIC_TIMEZONE を Asia/Tokyo にします。合わせないと、9時間ずれて夜中の23時に送られます。

できないことと、その代わり

できないこと代わりの手
Googleフォームの送信そのものをn8nの専用トリガーで受ける(公式ドキュメントに見当たらない)回答先のシートをSheets Triggerで見張るか、GASからWebhookを呼ぶ
Sheets Triggerで即時に動かすポーリングなので最短でも1分の遅れが出る。即時が要るならGASからWebhook
共同トレイ(Googleグループ)の受信箱を直接見る自動化用アカウントをメンバーにして、その受信箱を見る
新しいサービスアカウントでマイドライブを読む共有ドライブに置くか、OAuth2の認証情報にする
回答者への確認メールをn8nで即時に返すGoogleの中で終わる処理なのでGASで返す
大量の行を一度に流すGASかn8nのどちらかでまとめて送る。Chatの1秒1件などの相手側の上限に合わせて間を空ける
サーバーの面倒を見ずに使うセルフホストは更新や停止の対応が要る。手が回らなければn8n Cloudにする

n8nを入れるかどうか迷っている段階なら、外へ流す先が1つだけのうちはGASで書いても十分です。流す先が2つ、3つと増えてきて、どこで止まったか分からなくなってきたらn8nに寄せます。

よく詰まるところ

症状原因直し方
1週間ほどで急に全部のGoogleノードが失敗する同意画面の対象が「外部」で、公開ステータスが「テスト中」。更新トークンが7日で切れる対象を「内部」にして認証情報を作り直す。外部のままなら公開ステータスを本番にする
「アクセスがブロックされました」と出てログインできない外部・テスト中で、ログインしたアカウントがテストユーザーに入っていない「対象」の「テストユーザー」に追加するか、内部にする
redirect_uri_mismatch と出るGoogle側に入れたリダイレクトURIが、n8nが送るものと一字でも違うn8nの「OAuth Redirect URL」をコピーし直して貼る。httpとhttps、ポート番号も合わせる
invalid_client と出るクライアントIDかシークレットの貼り間違い前後の空白に注意してコピーし直す
Sheets Triggerが「Forbidden」や版の履歴のエラーで止まるGoogle Drive APIを有効にしていない、またはサービスアカウントでなりすましが無いライブラリでGoogle Drive APIを有効にする。サービスアカウントならOAuth2に替える
Gmailのノードで「Forbidden – perhaps check your credentials?」サービスアカウントで「Impersonate a User」をオンにしていないGmailは自動化用アカウントのOAuth2でつなぐ
Gmailで401「Client is unauthorized」Gmail APIが有効になっていない「APIとサービス」→「ライブラリ」でGmail APIを有効にする
フォームの質問名を変えたらシートへの書き込みがずれる列名がノードを作った後に変わった「Mapping Column Mode」を選び直して列名を読み込み直す
公開したのに動かない、テストでは動いた公開していない、またはGASにTest URLを入れている公開状態を確かめ、GASにはProduction URLを入れる
自動化用アカウントのパスワードを変えたらGmailだけ止まったGmailの権限を含む更新トークンは、パスワード変更で切れる認証情報を開いて「Sign in with Google」を押し直す
半年使っていなかったワークフローが動かない6か月使われなかった更新トークンは無効になる認証情報をつなぎ直す
毎晩23時に朝の通知が届くタイムゾーンが日本になっていないワークフローの「Timezone」か GENERIC_TIMEZONE を Asia/Tokyo にする
kintoneに入らず、エラーも分かりにくいフィールドコードの間違い、または日付の形式違い。存在しないフィールドコードは黙って無視されるkintoneの「フォーム」の設定でフィールドコードを確かめる。日付は YYYY-MM-DD にそろえる
Gmailで送ったメールに英語の一文が付く送信時にn8nの署名を付ける設定が既定でオンGmailノードの「Options」で「Append n8n attribution」をオフにする

次にやること

あわせて読む