そのうち誰かの役に立つ

もしくは誰の役にも立たない

Google Apps Script(GAS)とLINE Messaging APIでユーザアカウント不要のイベント受付システムを作る -2- Googleフォームの回答と編集URLを取得する

続きもの。

  1. 準備
  2. Googleフォームの回答と編集URLを取得する ←今ココ
  3. Googleドキュメントでチケットを作成する (2019/10/31更新)
  4. Gmailでメールを送信したりLINEにPushメッセージを送ったりする (2019/11/01更新)
  5. まとめ (2019/11/05更新)

Googleフォームに回答があった時に、その後の処理のために回答内容や編集URLを取得する。

用語

以降、特に説明なくこれらの用語を使う。

プロジェクト

GASの管理単位。ダッシュボードなどではこの粒度で選択する。 プロジェクト配下に複数のスクリプトが設置できるので規模が大きくなった時に管理が少し楽になるなどの効果が予想されるが、 本シリーズの開発規模では1プロジェクト1スクリプトで十分。

スクリプトID

GASのスクリプトを識別するID。 スクリプトエディタで ファイル > プロジェクトのプロパティ > 情報 > スクリプトID で取得できる。

GASプロジェクトの作成

まずはGoogleフォームで予約フォームを作成する。 最低限返信用のメールアドレスと来場予定者数(キャンセルを0人とする)があればいいが、まあ味気ないので

  • チケットに記入する名前
  • リマインダが必要かどうか
  • 要望やメッセージなどを記述する自由記述欄

などを設けてもよい。 また、ユーザが人数変更やキャンセルのために回答を編集できるように、フォーム編集画面右上の 設定 から、 全般 > 回答者が行える操作 > 送信後に編集 のチェックを入れておく。

フォームの編集画面の右上で その他 > スクリプトエディタ を選択し、フォームと紐付いたプロジェクトを作成する。 ちなみにこういうオブジェクトに紐付いたプロジェクト(スクリプト)をContainer-bound Scriptsと呼ぶらしい。 オブジェクトに紐付けず独立しているプロジェクト(スクリプト)をStandalone Scriptsと呼んで対比している。 今回はフォームに回答があったことをトリガーにスクリプトを動かしたいので、そういったトリガー設定ができるようにフォームにboundする必要がある。

スクリプト

今回の目的であるところのフォームの回答内容および回答編集URLの取得を実現するスクリプトは以下

function accept(e) {
  // 回答内容取得
  // answers[各質問項目のタイトル] := 各質問項目の回答
  var items = e.response.getItemResponses();
  var answers = {};
  items.forEach(function(item) {
    answers[item.getItem().getTitle()] = item.getResponse();
  }
  
  // 回答編集URL取得
  var edit_url = e.response.getEditResponseUrl();

  // 以下、任意の操作
}

リファレンスとしてはこれとか これとか これあたり。

今回利用するデータだけにスコープを絞るとこんな感じのデータ構造になっているので、それらをいい感じに取ってくる。

フォーム送信時のイベントデータ
`- フォームの質問や回答に関するデータ: FormResponse
    |- フォームの各項目に対するデータ: ItemResponse[]
    |    |- 設問に関するデータ: Item 
    |    |    `- タイトル: String
    |    `- 回答: Object
    `- 回答編集URL: String

トリガー作成

上記スクリプトがフォーム回答時に実行されるようにスクリプトの実行トリガーを設定する。 スクリプトエディタで 編集 > 現在のプロジェクトのトリガー を選択するか、下記URLにアクセスする( {スクリプトID} は適切に置換すること)。

https://script.google.com/home/projects/{スクリプトID}/triggers

右下にある トリガーを追加 をクリックするとトリガー作成モーダルウィンドウが出てくるので、下図のように設定する。

Trigger
トリガー設定

ポイントは

  • 実行する関数は accept (上記スクリプトで設定した関数名)
  • イベントのソースは フォームから
  • イベントの種類は フォーム送信時

このようにするとフォームで回答がある度に accept() が実行される。 過程でスクリプトがデータを触るための権限確認が走るかもしれないが、適宜許可する。

最後に

このシリーズで作成したシステムが動いている演奏会はこちらです(宣伝)

2019年11月30日(土)開場:13時00分  開演:13時30分
すみだトリフォニーホール 小ホールにて(東京都墨田区)
【アクセス】JR「錦糸町駅」北口より徒歩5分/東京メトロ「錦糸町駅」3番出口より徒歩5分
入場無料 事前予約制