Google フォームと Slack を連携して回答を自動で通知する 2 つの方法

Google フォームには、回答を Slack へ送る設定がありません。そのため、通知には何らかの中継が必要です。

この記事では、Samurai App のワークフローを中継にする 2 つの方法を比べ、順に手順を説明します。

結論

Samurai App のサービス連携には Google フォームの出来事がありません。次のどちらかで受けます。

Apps Script + 外部トリガー 回答シート + サービス連携
動くきっかけ フォームの送信 スプレッドシートの行の追加
遅れ 送信の直後に起動 最大 15 分
届く値 設問名と回答(コードで決める) 行の値の一覧。列の見出しは含まない
準備 スクリプトとトリガーの作成 回答先シートの作成と Sheets の接続
費用の目安 外部トリガーの受信にサービス連携の費用はかからない 1 件受けるごとに約 0.5 円

すぐ知りたい問い合わせや申し込みなら Apps Script、コードを置きたくない場合や数分の遅れで困らない場合は回答シートが向いています。

できること・できないこと

  • Apps Script の道では、シークレットをヘッダーで送れます。 UrlFetchApp はヘッダーを指定できるので、URL の ?k= は使いません
  • Apps Script のトリガーは、作った人のアカウントで動きます。 担当者が変わるときは、新しい担当者のアカウントでトリガーを作り直してください
  • 外部トリガーの起動は既定で 1 分 10 回、本文は 64 KiB までです。 上限を超えると 429 が返ります。下のコードは送り直さないので、その回答は通知されません。Apps Script の実行の記録で確認し、回答はフォーム側で読みます
  • 選択式の設問に答えなかった場合、その設問は届きません。 Google の資料では、未回答の短文や段落は空文字が返り、それ以外の種類は一覧から外れます。チェックボックスの回答は文字列の配列で届きます
  • 回答シートの道では、見出しが届きません。 row_data は行の値だけの一覧です

用意するもの

  • 通知したい Google フォームの編集権限
  • 投稿先チャンネルの Slack の Incoming Webhook の URL
  • Samurai App のマネージャー以上の権限(外部トリガーとサービス連携の追加に必要です)

手順(Apps Script + 外部トリガー)

完成すると、次のようなワークフローになります。

Google フォームの回答を Slack へ送るワークフローの編集画面

1. 通知先を登録する

「設定」の「通知」にある通知先の登録画面

Slack のアプリ設定で「Incoming Webhooks」を有効にし、「Add New Webhook to Workspace」でチャンネルを選んで URL を作ります。Samurai App の「設定」→「通知」の「通知先」に名前と URL を登録し、「テスト送信」で確認します。

2. ワークフローを作って公開する

「ワークフロー」の「作成」から「新規作成」を選びます。ステップを選んでいない状態の「設定」にある「ワークフローの入力」で「入力の項目を追加」を押し、名前を event、種類を「項目の組」にします。

ステップは「通知先へ送る」を 1 つ置き、「本文」に次を書きます。

{{input.event.title}} に回答がありました({{input.event.submittedAt}})
{{input.event.summary}}

「保存」のあと、「バージョン」タブで「バージョン N を公開」を押します。未公開のままだと、外部トリガーの呼び出しは 422 で断られ、本文に「このワークフローはまだ公開されていません。公開してから実行してください」と返ります。

3. 外部トリガーを発行する

ワークフローの「トリガー」タブにある外部トリガーの追加画面

「トリガー」タブの「外部トリガーを追加」から登録します。URL とシークレットが発行されます。シークレットは作った直後に 1 度だけ表示されるので、その場で控えます。

4. Apps Script にコードを置く

フォームの編集画面の「その他」から「Apps Script」を開きます。左の「プロジェクトの設定」の「スクリプト プロパティ」に、TRIGGER_URL と TRIGGER_SECRET を保存します。コードに直接書くと、スクリプトを見られる人にシークレットが見えてしまうためです。

エディタには次を貼り付けます。

function onFormSubmit(e) {
  const props = PropertiesService.getScriptProperties();
  const summary = e.response.getItemResponses().map((item) => {
    const answer = [].concat(item.getResponse()).join("、");
    return item.getItem().getTitle() + ": " + answer;
  }).join("\n");

  UrlFetchApp.fetch(props.getProperty("TRIGGER_URL"), {
    method: "post",
    contentType: "application/json",
    headers: { Authorization: "Bearer " + props.getProperty("TRIGGER_SECRET") },
    payload: JSON.stringify({
      title: e.source.getTitle(),
      submittedAt: Utilities.formatDate(e.response.getTimestamp(), "Asia/Tokyo", "yyyy/MM/dd HH:mm"),
      summary: summary,
    }),
  });
}

5. フォーム送信時のトリガーを付ける

左の「トリガー」で「トリガーを追加」を押します。実行する関数に onFormSubmit、イベントのソースにフォーム、イベントの種類にフォーム送信時を選んで保存します。初回は権限の確認が出るので、内容を読んで許可します。

6. 回答して確認する

フォームに 1 件回答します。Slack に届けば完了です。「実行」タブの「最近の実行」に「外部から起動」の行が増えます。

手順(回答シート + サービス連携)

1. 回答先のスプレッドシートを作る

フォームの「回答」タブからスプレッドシートにリンクします。URL の /d/ と /edit の間が、スプレッドシートの ID です。

2. Google Sheets を接続する

「コネクタ」画面の「コネクタ」タブで Google Sheets の「追加」を押し、「標準連携アプリで追加」を選んでサインインします。

3. ワークフローを作って公開する

入力の event と「通知先へ送る」は上と同じです。「本文」には次のように書きます。

フォームに回答がありました(シートの {{input.event.row_number}} 行目)
{{input.event.row_data}}

row_data は ["2026/11/04 10:00:00","山田","法人"] のような JSON の形で本文に入ります。

4. サービス連携を付ける

「トリガー」タブの「サービス連携を追加」で Google Sheets の接続を選び、「どうなったら動かすか」で「New Rows in Google Sheet」(GOOGLESHEETS_NEW_ROWS_TRIGGER)を選びます。「絞り込み」の spreadsheet_id に ID を入れ、sheet_name に回答のシート名を入れます。

動かないとき

Apps Script の実行が 404 で失敗する

シークレットの無い呼び出しは 404 になります。スクリプト プロパティの名前と値を確認し、シークレットを控え損ねたときは外部トリガーを作り直します。

Slack の本文が空か、ステップが失敗する

本文の項目名と、コードが送る項目名を揃えます。送っていない項目を本文に書くと「$ref '…' の値がありません」で失敗します。

回答シートの道で通知が遅い

見に行く方式なので最大 15 分遅れます。遅れで困るときは Apps Script の道に変えます。

回答しても Apps Script が動かない

エディタの実行の記録(Executions)を開き、失敗の内容を確認します。Google の資料によると、許可していないサービスを使うとトリガーの実行はすぐに失敗します。また、別のアカウントが作ったトリガーは自分の画面に表示されないので、作った人に確認します。

よくある質問

Slack の Webhook を Apps Script から直接呼ぶのと何が違いますか

直接呼べば Samurai App は要りません。ワークフローを挟むと、失敗の記録が「最近の実行」に残り、「カテゴリ分類」で問い合わせの種類を分けるなど、通知の前に処理を足せます。

回答者のメールアドレスも送れますか

フォームでメールアドレスを収集している場合だけ、e.response.getRespondentEmail() で取得できます。Slack のチャンネルの全員に見えるので、載せるかどうかを先に決めてください。

関連する使い方

出典

関連する機能AIでワークフロー自動化 —— 定型業務を決めた順にSamurai App のワークフローは、書いたとおりの順に必ず動くステップの並びです。AI の判断、承認待ち、外部サービスの操作を 1 本にまとめ、定期実行や外部からの起動で定型業務を自動化します。

ほかの自動化の例

Slack の連携と自動化の方法をすべて見る

活用術の記事一覧へ

日々の仕事が集まり、つながり、会社の力になる。

資料請求Samurai App を開く

デモを見る資料請求