初心者向け

n8n Send and Waitの使い方

メールを送って、相手がボタンを押すかフォームに書き込むまで待つ Send and Wait for Response を、実際に動かして確かめました。返事の種類ごとに次のノードへ届くもの、期限を付けないと西暦3000年まで待つこと、期限切れは承認でも却下でもない形で届くことまで実測しています。

動作確認: — n8n 2.36.8 / Gmail ノード v2.2

Send and Wait for Response は、メールを送って、相手が返事をするまでワークフローを止めておく操作です。 AIが書いた文章を人が確かめてから送る、といった「人の承認」を挟むときに使います。

この記事では Gmail ノードで試しました。実際に動かして分かったことは、次の4つです。

  • 返事の種類(ボタン・自由記述)によって、次のノードに届く中身が違う
  • 返事が届くと、それまで流れてきたデータは消えて、返事だけになる
  • 待ち時間の上限を付けないと、西暦3000年まで待ち続ける
  • 上限で切れたときは、承認でも却下でもない形で次に進む

まず1回動かす

最小の形で試します。

  1. 新しいワークフローに Manual Trigger を置く
  2. その後ろに Gmail ノードを置き、Resource を Message、Operation を Send and Wait for Response にする
  3. To に自分のアドレス、Subject と Message に適当な文を入れる
  4. Response Type は Approval のまま、Approval Options の Type of Approval を Approve Only にする
  5. Execute workflow を押す

すると、こういうメールが届きます。

Gmailに届いたメールの本文。白いカードの中に Single approval test. Press the button. という文と、オレンジ色の Approve it ボタンが1つだけある
Approve Only のメール。ボタンは1つだけ

この間、この実行の状態は waiting(待機中)になっています。 Approve it を押すと実行が再開し、Gmail ノードからはこう出てきました。

{ "data": { "approved": true, "respondedAt": "2026-10-03T09:08:07.086Z" } }

approved が承認されたかどうか、respondedAt が押した時刻です。 手動で実行したときも、本番で動かしたときも、同じように止まって待ちました。

設定する項目

Gmail ノードで Send and Wait for Response を選ぶと、普通の送信の項目(To、Subject、Message)に加えて、次の項目が出ます。

Response Type:返事の受け取り方

Response Type のプルダウンを開いたところ。Approval(User can approve/disapprove from within the message)、Free Text(User can submit a response via a form)、Custom Form(User can submit a response via a custom form)の3つの選択肢がある
返事の受け取り方は3種類
選択肢 相手がすること
Approval メールの中のボタンを押す
Free Text ボタンから開くフォームに、文章を書いて送る
Custom Form 自分で項目を決めたフォームに入力する

Approval Options:ボタンの数

Type of Approval のプルダウンを開いたところ。Approve Only と Approve and Disapprove の2つの選択肢がある
ボタン1つか、2つか
  • Approve Only:承認のボタンだけ
  • Approve and Disapprove:承認と却下の2つのボタン

ボタンの文字は Approve Button Label で変えられます。2つのときは却下側の文字も変えられ、「送る」「送らない」のように日本語にもできました。

Options → Limit Wait Time:待ち時間の上限

Gmailノードの設定の下半分。Approval Options に Type of Approval(Approve Only)、Approve Button Label(Approve it)、Approve Button Style(Primary)。その下の Options に Limit Wait Time があり、Limit Type が After Time Interval、Amount が 3.00、Unit が Minutes
Limit Wait Time は、Options の+から追加しないと出てこない

Limit Wait Time は、Options の+から追加しないと画面に出てきません。 追加しないまま使うと、次の節のとおり、ほぼ永遠に待ちます。

返事の種類ごとに、次のノードに届くもの

実際に動かして、次のノードに届いた中身です。

返事 次のノードに届いたもの
Approve Only で押した data.approved: true、data.respondedAt
Approve and Disapprove で承認 data.approved: true、data.respondedAt
Approve and Disapprove で却下 data.approved: false、data.respondedAt
Free Text で送信 data.text(書いた文章)、data.respondedAt
上限の時間が過ぎた 受け取ったデータがそのまま出てくる。data は無い
Free Text を選んだときに、メールのボタンから開くフォーム。メッセージの下に Response という必須の入力欄があり、テストと入力されている。その下にオレンジ色の Submit ボタンと、Form automated with n8n の表示
Free Text のフォーム。入力欄は1つで、必須になっている

Custom Form は試していません。

期限を付けないと、西暦3000年まで待つ

Limit Wait Time を追加しないまま、ボタンを押さずに置いておくと、実行の記録の再開予定はこうなっていました。

"waitTill": "3000-01-01T00:00:00.000Z"

事実上、永遠に待ちます。 誰も押さなければ、ワークフローはそこで止まったままです。 お客様への返事を承認待ちにしているなら、お客様は放っておかれることになります。

ノードの定義を読むと、Limit Wait Time の既定値として「45分」と書かれています。 しかし、項目を追加しないままでは、上限は無いのと同じでした(項目を追加したとき、欄に最初から何が入っているかは確かめていません)。 HTTP Requestノードの Timeout と同じく、定義の既定値と、項目が無いときの動きは別物です。

上限には式も使えました。Amount に {{ $('Config').first().json.approvalWaitHours }} のように書くと、前のノードで決めた時間で切れます(24 を入れて、再開予定が24時間後になることを確かめました)。

期限切れは、承認でも却下でもない

上限を2分にして、ボタンを押さずに待ちました。約2分後に実行が再開し、次のノードには受け取ったデータがそのまま届きました。data.approved はありません。

そのため、次のノードで「approved が true か false か」の2つに分けていると、期限切れはどちらかに紛れ込みます。 Switch ノードで「true」「false」「どちらでもない」の3つに分けると、期限切れを拾えます。

true          → 送る
false         → 送らない
どちらでもない → 期限切れ(担当者に知らせる など)

approved は String($json.data?.approved) のように文字列にしてから比べると、data が無い期限切れのときもエラーにならずに3つ目へ流れました。 IF ノードで true と false の2つに分けたまま期限が切れたときに、どちらに流れるのか、エラーで止まるのかは試していません。

ボタンを押すときに起きること

ボタンのリンクは localhost を向いている

メールのボタンのリンクは、こうなっていました。

http://localhost:5678/webhook-waiting/(実行ID)/(ノードのID)?approved=true&signature=(署名)

n8n を動かしているパソコンのブラウザからしか押せません。 スマホの Gmail から押しても開きません。 外から押せるようにするには、n8n の環境変数 WEBHOOK_URL に外から開ける URL を設定します (公式ドキュメント)。この設定は試していません。

2回押しても、期限のあとに押しても、何も起きない

一度押したボタンをもう一度押すと、ブラウザにこう出て、次のノードには何も流れませんでした。期限が切れたあとのボタンを押したときも同じでした。

ブラウザに表示されたn8nの画面。中央に何もする必要はありませんと書かれ、その下にフォームは自動化されています n8n と表示されている
押し終えたボタンを、もう一度押したときの画面

うっかり2回押しても、二重には進みません。

メールのコピーを持っている人は、誰でも押せる

宛先を見本のアドレスから書き換え忘れて、誰にも届かなかった承認メールでも、送った側の Gmail の「送信済み」に残ったコピーのボタンを押すと、承認されて先に進みました。

リンクに付いている署名は「n8n が作ったリンクか」を確かめるもので、「誰が押したか」は確かめていません。 承認メールを転送したり、何人かで見ているアドレスに送ったりするときは、見た人なら誰でも押せることに気をつけてください。

待っている間にワークフローを直しても、続きは動いた

承認待ちの間にワークフローを取り込み直して、そのあとでボタンを押したことがありました(1件だけです)。 続きはちゃんと動き、送信まで進みました。

実際に使った例

LINE対応自動化ワークフローで、AIが書いた返信案をスタッフに確かめてもらうために使っています。 Approve and Disapprove のボタンを「送る」「送らない」にし、待ち時間は24時間、期限切れはスタッフに知らせる形です。

確認していないこと

  • Gmail ノードでしか試していません。 Slack など、ほかのサービスのノードにも同じ操作がありますが、同じ動きかは確かめていません
  • Custom Form と、Limit Type の At Specified Time(日時で区切る)は試していません
  • WEBHOOK_URL を設定して、外からボタンを押すところは試していません
  • 期限切れのあと、2つに分ける IF ノードでどう流れるかは試していません

次に読む

次に読む