Googleフォームの回答内容をGoogleAppsScriptで送信する

Googleフォームでアンケートが作成できる

Googleフォームを利用するとWeb上で簡単にアンケートを作成し、公開、集計が可能です。

自分でアンケートを作成するだけでなく、他のユーザーとも同時に共同で作成できます。また、デザイン性の高いさまざまな既製テーマから選択したり、独自のテーマを作成したりすることも可能です。しかも、Google フォーム内で結果を分析できる、Google の無料サービスです。

フォームを作成する

Googleドライブで新規作成または右クリックから「Googleフォーム」を選択します。

googleform1

別タブで新しいフォームが作成されました。

googleform2

久しぶりに作成してみたら、UIが大きく変わっています・・・・
GoogleのサービスはUIがすぐに変わりますので注意してください。

テキストボックスとラジオボタンとテキストエリアの3つの質問を作成しました。
カラーパレットから色を変更でき、テーマからデザインを変更できます。

googleform3

新しい回答についてのメール通知を受け取る

回答のタブをクリックすると回答の内容が表示されます。まだなにもないので回答はありません。新しい回答についてのメール通知を受け取りたい場合は、ドット3つのアイコンをクリックして「新しい回答についてのメール通知を受け取る」をクリックします。

googleform4a

googleform4

アンケートフォームを伝える

送信ボタンから伝える方法を選択します。
メールと共有リンク、HTML埋め込みの3つの方法があります。

googleform5

アンケートに入力する

共有リンクをコピーして、フォームを作成したユーザーとは別のユーザーで開いて登録しました。

googleform6

作成者の受信トレイでメール通知を確認する

新しい回答があった通知メールが届きますが、入力した内容はここでは確認できません。アンケートへのリンクのみです。

googleform7

GoogleAppsScriptでメール送信する

アンケート編集画面の右上のボタンから「スクリプトエディタ」を起動します。

googleform8

function関数にメールを送信するスクリプトを記述して保存します。

googleform9

実行アイコンをクリックして手動で実行してみます。

googleform10

承認を許可するとメールが届きました。

googleform11

このスクリプトをアンケートに回答があったときに送信したい場合はトリガーを設定します。

googleform12

フォームの送信時(アンケートの回答時)にmyFunction関数が実行するトリガーを作成します。

googleform13

これで、アンケート回答時に任意のアドレスに任意のメッセージを送ることができます。

メール本文にアンケートの回答内容を記述する

トリガーで実行する関数にイベントオブジェクトが渡されます。
このオブジェクトからユーザーが回答した内容を取得できます。

イベントオブジェクトは以下のAPIを参照

myFunctionsを以下のように修正しました。

function myFunction(e) {

  var to ="xxxx@xxxx.xx.xxxxxx";
  var title = "";
  var body = "以下の内容でフォームが送信されました。\n\n";
  var itemResponses = e.response.getItemResponses();

  for (var i = 0; i < itemResponses.length; i++) {
    var itemResponse = itemResponses[i];
    var question = itemResponse.getItem().getTitle();
    var answer = itemResponse.getResponse();

    if(i==0){
      title+=answer;
    }else{
      body += (i).toString() + '. ' + question + ': ' + answer + '\n';
    }
  }

  body += "\n\n";
  body += "このメールはフォーム入力後の自動送信です。\n";

  body += e.authMode + "\n";
  body += e.response + "\n";
  body += e.response.getRespondentEmail() + "\n"; // Googleアカウントの自動取得時

  body += e.source + "\n";

  MailApp.sendEmail(to,title,body);

}

修正直後に動かない場合は、トリガーを一度削除して、再設定してください。

宛先の受信トレイでGoogleAppsScriptからのメールを確認する

フォームに再入力しました。

googleform14

GoogleAppsScriptのメール送信先のアカウントの受信メールを確認しました。

googleform15

回答者が入力した内容でメール本文を作成することができます。

スポンサーリンク
memordmレクタングル(大)
memordmレクタングル(大)

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク
memordmレクタングル(大)

コメント

  1. YK より:

    TypeError: undefined からプロパティ「response」を読み取れません。(行 6、ファイル「コード」)

    コピペして使わせてもらおう思いましたが、上記のエラー表記が出てしまいます。

  2. mmr より:

    >function myFunction(e) {
    1行目のeの値はフォーム送信時に自動的にセットされる値です。
    トリガーで「フォーム送信時」の登録をしてください。

    また、「スクリプトエディタ」上で実行しても、eに値がないため
    >ypeError: undefined からプロパティ「response」を読み取れません。
    のエラーが表示されます。

  3. asaikk より:

    貴重なソースコードを開示していただき誠にありがとうございます。

    最後近くの下記4行についての質問です。
    body += e.authMode + “\n”;
    body += e.response + “\n”;
    body += e.response.getRespondentEmail() + “\n”; // Googleアカウントの自動取得時

    body += e.source + “\n”;

    3行目は送信者のemail addressを記載するコマンドだろうと推定しています。
    これ以外の
    body += e.authMode + “\n”;
    body += e.response + “\n”;
    body += e.source + “\n”;
    を付け加える意味は何でしょうか?メール本文としては、これより上のコマンドで作成される分で充分であると思えますので。

    • mmr より:

      コメントありがとうございます。

      はい、以下の記述は不要です。
      >body += e.authMode + “\n”;
      >body += e.response + “\n”;
      >body += e.source + “\n”;
      テストしてるときに、どのような値が入っているか試していただけです。
      まぎらわしいですが、無視してください。