MENU

Googleフォームの回答編集URLをGASで取得

当ページのリンクには広告(PR)が含まれていることがあります。
Googleフォームの回答編集URLをGASで取得。送信済み回答、回答編集URL、共有範囲を確認の処理例。

送信済みの回答を直してもらいたい場合は、フォームを新規入力するURLと、その回答を編集するURLを区別します。GASのgetEditResponseUrlは特定のFormResponseに対応する編集URLを生成します。

回答の編集URLは、知っている人がその回答へアクセスするための情報です。全員が見るシートや共有ログへ一覧で公開せず、必要な相手へ渡す範囲を決めます。URLを作ることと、編集を許可する設定や本人確認は別に確かめます。

目次

フォームのIDと回答のIDを分ける

フォームのファイルIDだけでは、どの回答を直すかが決まりません。送信済み回答のIDも指定します。配列の先頭を無条件に選ぶと、意図しない人の回答URLを取り出すおそれがあります。

以下の一覧関数は練習用フォームに送信した少数の回答から、末尾の3件のIDと日時だけを表示します。本文やメールアドレスは表示しません。実際の業務フォーム全件へ広げず、架空の回答が入った練習用フォームで使ってください。

公式のFormResponse資料では、送信前の回答でgetEditResponseUrlを呼ぶとnullになることも説明されています。事前入力URLを作ることと、送信済み回答の編集は違う操作です。

送信済み回答をIDで選ぶコード

一覧から練習用の回答IDを控え、RESPONSE_IDへ指定します。関数は編集URLを返すだけで、メール送信やフォーム設定の変更を行いません。

function listPracticeResponseIds() {
  const form = FormApp.openById('練習用フォームID');
  console.log(JSON.stringify(form.getResponses().slice(-3)
    .map(response => ({id: response.getId(), time: response.getTimestamp()}))));
}

function readResponseEditLink(form, responseId) {
  if (typeof responseId !== 'string' || responseId.trim() === '') {
    throw new Error('送信済みの回答IDを指定してください');
  }
  const response = form.getResponse(responseId);
  if (!response || response.getId() !== responseId) {
    throw new Error('対象の回答を確認してください');
  }
  const url = response.getEditResponseUrl();
  if (!url) throw new Error('送信済み回答の編集URLがありません');
  return {responseId: responseId, showsEditLink: form.canEditResponse(), url: url};
}

function previewResponseEditLink() {
  const RESPONSE_ID = '練習回答ID';
  const form = FormApp.openById('練習用フォームID');
  console.log(JSON.stringify(readResponseEditLink(form, RESPONSE_ID)));
}

responseIdが選んだ回答IDと一致し、urlへ文字列が返ることを確認します。実際のURLには回答ごとの情報が入るため、ここでは完成形のURLを掲載していません。ログを見る権限にも注意してください。

リンクの表示設定と実際の編集を確認する

canEditResponseは、送信後に編集リンクを表示する設定の確認です。Formの公式資料では、その設定と、スクリプトから編集URLを生成することを分けて説明しています。URLが返っただけで、回答者が編集できるとは判断しません。

公式のFormResponse資料にも、編集設定が無効な場合や、アクセス条件の説明があります。設定の名称だけを根拠にせず、練習用の編集URLを、利用者と同じ条件のアカウントで開いて確認します。設定変更が必要なら、その変更による影響を確認してから行ってください。

メールアドレスの収集を有効にしている場合、編集した人のアドレスが記録される条件も公式資料にあります。元の回答者と編集者が同じだと推測せず、誰が直したかを扱う業務では、記録の意味まで確かめます。

修正後の処理も別に確認する

回答を編集した後に、転記済みの台帳や通知先が自動で同じ内容になるとは限りません。フォームの回答本体と、GASが複製した情報の更新方法を分けます。再処理で同じ連絡を重複送信しない条件も必要です。

ローカルの代用回答で確認したのは、指定IDの照合、URLなし、未指定、表示設定の受け渡しです。Google上の編集画面・アクセス権・編集後の連携は未実行です。URLの誤配布は取り消しが難しいため、架空の回答で一度流れを確かめてください。

送信後のデータ処理はフォーム回答の処理、通知を組み込む場合はGmail通知の作り方へつながります。

この記事を書いた人

Watanabeのアバター Watanabe サイト運営者

2020年よりブログ開始。
SEOが思いのほか性にあっていたようで現在に至る。
モットーは「勝率の高い選択をする」
AIは活用するが吉、最後は人間が息を吹き込む。
アートと科学を追求し、日々精進。
―――
収益:6~7桁をウゴウゴ。
サイト:ペラサイト~中規模サイトまで運営中。
案件:1000円以上の案件をメインに取組中。
打ち手:ブラックSEO~ホワイトSEOまで
―――

目次