Google Form に自動返信スクリプト実装 Google Apps Script

Google Form に自動返信スクリプト実装 Google Apps Script


Google フォームをはてなブログにブログデザインのまま埋め込み、自動返信機能を Google Apps Script(GAS)で実装しようというプロジェクトです。


前記事



Google Apps Script(GAS)

GAS の日本語ドキュメントはありませんが、ググれば日本語で解説されているサイトもあります。

developers.google.com


G Suite(Google Apps)に実装された Javascript ベースのサーバーサイド・スクリプトという理解でいいと思います。

今回やろうとしていることは、ユーザーがフォームを送信した場合に送信内容を取得して返信するということですので、次の2つの項目を参考にしました。


Google フォームから GAS を立ち上げる

f:id:ausnichts:20180521113341j:plain

フォームのメニューからスクリプトエディタをクリックします。


f:id:ausnichts:20180521114231j:plain

ここに、ユーザがフォームを送信したら送信内容を取得してメールアドレス宛に内容を送信するコードを書いていけばいいことになります。


フォームの受信データを取得する

まず、受信したデータを取得する方法からやってみます。

Class FormResponse にサンプルコードがありますので、そのままスクリプトエディタに貼り付けてみます。


function myFunction() {
 var activeForm = FormApp.getActiveForm();
 var id = activeForm.getId();

 // Open a form by ID and log the responses to each question.
 var form = FormApp.openById(id);
 var formResponses = form.getResponses();
 for (var i = 0; i < formResponses.length; i++) {
   var formResponse = formResponses[i];
   var itemResponses = formResponse.getItemResponses();
   for (var j = 0; j < itemResponses.length; j++) {
     var itemResponse = itemResponses[j];
     Logger.log('Response #%s to the question "%s" was "%s"',
         (i + 1).toString(),
         itemResponse.getItem().getTitle(),
         itemResponse.getResponse());
   }
 }  
}

フォームの ID はアクティブフォームから自動的に取得していますが、フォーム編集ページの URL https://docs.google.com/forms/d/ここの文字列/edit の文字列を直接入れても同じです。


次に、フォームのプレビューからフォーム送信します。

スクリプトエディタに戻り、実行アイコン(右向き三角)をクリックします。


f:id:ausnichts:20180521122724j:plain

承認を求められますので「許可を確認」をクリックして承認します。

再度実行アイコンをクリックしますと、スクリプトエディタ上に小さなダイアログで進行状況が表示され、終了しますと何も表示されなくなります。


f:id:ausnichts:20180521124108j:plain

表示 > ログ をクリックしてログを見てみますと、送信されたデータが取得されていることがわかります。ただし、このログは回答データがひとつの場合のログで、getResponses() は回答が複数あればすべてのデータを取得してきます。

また、前記事の「Google フォームの「メールアドレスを収集する」を調べてみる」の方法でメールアドレスを収集した場合はこの方法では取得できず、getRespondentEmail() を使うことになります。


フォーム送信でイベント発火させる

フォームデータを取得する方法がわかりましたので、次はユーザーがフォーム送信 submit した時に発火させればいいことになります。

GUIDES > Event Objects > Google Forms events の Form submit(installable) に記述があリますので次のコードで試してみます。


function submitForm(e){
  var itemResponses = e.response.getItemResponses();
  for (var i = 0; i < itemResponses.length; i++) {
    var itemResponse = itemResponses[i];
    Logger.log('Response #%s to the question "%s" was "%s"',
         (i + 1).toString(),
         itemResponse.getItem().getTitle(),
         itemResponse.getResponse());
   }

関数名は自由に決めて構いません。


f:id:ausnichts:20180521160043j:plain

編集 > 現在のプロジェクトのトリガー をクリックします。


f:id:ausnichts:20180521160716j:plain

トリガーが設定されていません。・・・ をクリックします。


f:id:ausnichts:20180521160729j:plain

ドロップダウンから submitForm(記述した任意の関数名がリストされる)を選択し、イベントは、フォーム送信時 を選択します。


f:id:ausnichts:20180521204814j:plain

フォームのプレビューからデータ送信した後、ログを見てみますと、ちゃんと送信内容が取得できています。後は、GmailApp.sendEmail でメール送信するだけです。

GmailApp.sendEmail


完成版は次回です。