【GAS】Google Apps Script で業務効率化

備忘をかねて記載しました。

【GAS】Google Forms 送信時に回答を取得するコード作成

【目的】
お客様先への訪問日時を各現場担当者からFormsにて回答収集し、各現場担当者には回答のコピーをメール送信する。

【回答収集対象】
現場担当者メールアドレス
お客様名
お客様先訪問日
お客様先訪問時間
現場担当者
現場担当者連絡先
備考

【GAS(Google Apps Script)コードサンプル】
*後述の事前設定が必要(事前設定せずにコードをコピーして実行してもエラーになります。)

function getFormValue(e) 
{ 
  //[メールアドレスを収集する]オプションを使用時の回答者のアドレス取得
  let recipient = e.response.getRespondentEmail();
  //回答者のアドレス確認
  Logger.log(recipient);
  
  // フォームの質問・回答を取得
  let itemResponses = e.response.getItemResponses();
  let q_list = [];
  let a_list = [];
  for(let i = 0; i < itemResponses.length; i++)
  {
    let questionTitle = itemResponses[i].getItem().getTitle();
    let questionAnswer = itemResponses[i].getResponse();
    q_list.push(questionTitle);
    a_list.push(questionAnswer);
  }

  // フォームの質問・回答の内容確認
  Logger.log(itemResponses);
  Logger.log(q_list);
  Logger.log(a_list);
  
  // 回答修正用URL取得
  let editURL = e.response.getEditResponseUrl(); 

 // 回答修正用URL取得の内容確認
  Logger.log(editURL);

  // 自動返信メール文書の要素作成
  SubjectElement = a_list[0];

  let body_core = '';
  for(let n = 0;n < itemResponses.length; n++ )
  {
    body_core +=  
    '【' + q_list[n] + '】\n' +
    a_list[n] + '\n' + 
    '\n' 
  }

 // 自動返信メール文書の要素内容確認
  Logger.log(body_core);

  // 自動返信メール送信元
  reply_name = '【送信専用】'

  // 自動返信メール件名
  let subject = 
    '[' + SubjectElement +  ']' + 'の訪問日時ご回答ありがとうございます。'
      
  // 自動返信メール本文
  let body = 
    '【回答修正用URL】回答に変更・修正がある場合はこちらをご利用ください。\n' +
    editURL + '\n' +
    '\n' +
    'ご担当者様\n' +
    'いつもお世話になっております。下記ご確認をお願いいたします。\n' +
    '\n' +
    '─────────────────────────\n' +                                    
    'ご回答内容のコピー\n' +
    '─────────────────────────\n' +
    '\n' +
    '【メールアドレス】\n' +
    recipient + '\n' + 
    '\n' +
    body_core +
    '\n' +
    '※このメールは送信専用のメールアドレスからお送りしています。\n' +
    'ご返信いただいても回答はできませんので、あらかじめご了承ください。\n'+
    '\n' +
    '──────────────────────────────\n' +
    '本フォームに関するお問い合わせは下記までお願いいたします。\n'+
    '○○株式会社 ××部 \n'+
    '山田太郎 \n'+
    'mobile:111-2222-3333 \n'+
    'mail:aaabbbccc@ddd.eee \n'+
    '──────────────────────────────\n';
  
  // メール件名・本文の内容確認
  Logger.log(subject);
  Logger.log(body);
  
  // メール送信
  GmailApp.sendEmail
  (
    recipient,
    subject,
    body,
    {
    name: reply_name,
    }
  )

  //送信メール上限確認 
  Logger.log(MailApp.getRemainingDailyQuota());
}
{
  "timeZone": "Asia/Tokyo",
  "dependencies": {
  },
  "exceptionLogging": "STACKDRIVER",
  "runtimeVersion": "V8",
  "oauthScopes": [
    "https://www.googleapis.com/auth/script.send_mail",
    "https://www.googleapis.com/auth/gmail.modify"
  ]
}

【事前設定】Google Forms 送信時に回答を取得するコード作成(Google Forms 設定)

Googleアカウントでログイン後からGoogle Forms 起動まで

Googleアカウント(Gmail)でログイン

右上の正方形アイコン(Googleアプリ)をクリック。

下にスクロールするとFormsアイコンが出てくるのでクリック。

Google Forms 作成から基本設定まで

Formsの「新しいフォームを作成」の空白[+]をクリック。

左上のFormsアイコンの後ろの「無題のフォーム」をクリックして名前変更。

質問タブの名前も同時に変更される。

回答タブの右上の点3つアイコンをクリック。

「新しい回答についてのメール通知を受け取る」をクリック
*自身のGmail宛にFormsに新しい回答があった場合に通知が届くようになる。

チェックがついたことを確認。
*この時点ではスプレッドシートは作成しないようにする。
→質問の作成が完了してからスプレッドシートを作成する。

設定タブの回答欄をプルダウン

「メールアドレスを収集する」および「回答の編集を許可する」をONにする。

「回答のコピーを回答者に送信」はオフのままでOK。
*Google Forms 標準プログラムではなく、GAS(Google Apps Script)の自作プログラムにて「回答のコピーを回答者に送信」するため。

設定タブのプレゼンテーション欄は標準設定でOK。

質問タブに戻ると、メールアドレス入力欄が追加されていることが確認できる。


このタイミングで質問項目作成を完成させておくといいかも。
→質問完成後に回答タブからスプレッドシートを作成する。

【質問項目】
*現場担当者メールアドレスはForms上タイトルの一部。

下記の質問項目を作成。
→後ほどGAS(Google Apps Script)にてコード作成時にリスト化する。

1.お客様名:コードのリスト上では「0」番目となる。
2.お客様先訪問日:コードのリスト上では「1」番目となる。
3.お客様先訪問時間:コードのリスト上では「2」番目となる。
4.現場担当者:コードのリスト上では「3」番目となる。
5.現場担当者連絡先:コードのリスト上では「4」番目となる。
6.備考:コードのリスト上では「5」番目となる。

→Formsの質問作成手順は別ページに記載予定。

この例では自動返信メールの件名に「お客様名」を挿入する。
コード完成形にならう都合上、質問項目の1番目(コードのリスト上だと0番目)に「お客様名」を設定。

備考以外は必須をONにしておく。

質問作成が完了したら、ブラウザ右上の点3つアイコンをクリック。

「<>スクリプトエディタ」をクリックして起動したいが、↓のように出てこない時がある。

ブラウザの左右を拡張する。もしくはブラウザを最大化すると上部のアイコンの配列が変化する。

それからブラウザ右上の点3つアイコンをクリックすると、「<>スクリプトエディタ」が出て来るのでこれをクリック。

GAS(Google Apps Script)が起動する。
→このときFormsに、起動したApps Scriptが紐づく。

【事前設定】Google Forms 送信時に回答を取得するコード作成(Google Apps Script 設定)

Apps Script アイコンの後ろの「無題のプロジェクト」の名前を変更。

[Google Apps Script] プロジェクトの設定

左側アイコンの一覧から、「プロジェクトの設定」をクリック。

「全般設定」の[「appsscript.json」マニフェスト ファイルをエディタで表示する]にチェックを入れる。

[Google Apps Script] エディタの設定

左側アイコンの一覧から、「エディタ」をクリック。

「appsscript.json」が追加されているのでクリック。

【appsscript.json初期値】

{
  "timeZone": "Asia/Tokyo",
  "dependencies": {
  },
  "exceptionLogging": "STACKDRIVER",
  "runtimeVersion": "V8"
}

【Gmailを自動送信できるようにセキュリティ認証用のコード追記】

下記コード追記する。上書き保存する際には「Ctrl+S」を使う。

  "oauthScopes": [
    "https://www.googleapis.com/auth/script.send_mail",
    "https://www.googleapis.com/auth/gmail.modify"
  ]

【appsscript.json完成形】

*「”runtimeVersion”: “V8″」の後ろに「,」をつけるのを忘れないようにする。
 また全角のスペース・記号・文字があると、プロジェクト保存の際にハングアップするので注意。

{
  "timeZone": "Asia/Tokyo",
  "dependencies": {
  },
  "exceptionLogging": "STACKDRIVER",
  "runtimeVersion": "V8",
  "oauthScopes": [
    "https://www.googleapis.com/auth/script.send_mail",
    "https://www.googleapis.com/auth/gmail.modify"
  ]
}

左側アイコンの一覧から、「<> エディタ」をクリック。
「コード.gs」をクリック。

下記のようにコード作成。

function getFormValue(e) 
{ 
  //[メールアドレスを収集する]オプションを使用時の回答者のアドレス取得
  let recipient = e.response.getRespondentEmail();
  //回答者のアドレス確認
  Logger.log(recipient);
  
  // フォームの質問・回答を取得
  let itemResponses = e.response.getItemResponses();
  let q_list = [];
  let a_list = [];
  for(let i = 0; i < itemResponses.length; i++)
  {
    let questionTitle = itemResponses[i].getItem().getTitle();
    let questionAnswer = itemResponses[i].getResponse();
    q_list.push(questionTitle);
    a_list.push(questionAnswer);
  }

  // フォームの質問・回答の内容確認
  Logger.log(itemResponses);
  Logger.log(q_list);
  Logger.log(a_list);
  
  // 回答修正用URL取得
  let editURL = e.response.getEditResponseUrl(); 

 // 回答修正用URL取得の内容確認
  Logger.log(editURL);

  // 自動返信メール文書の要素作成
  SubjectElement = a_list[0];

  let body_core = '';
  for(let n = 0;n < itemResponses.length; n++ )
  {
    body_core +=  
    '【' + q_list[n] + '】\n' +
    a_list[n] + '\n' + 
    '\n' 
  }

 // 自動返信メール文書の要素内容確認
  Logger.log(body_core);

  // 自動返信メール送信元
  reply_name = '【送信専用】'

  // 自動返信メール件名
  let subject = 
    '[' + SubjectElement +  ']' + 'の訪問日時ご回答ありがとうございます。'
      
  // 自動返信メール本文
  let body = 
    '【回答修正用URL】回答に変更・修正がある場合はこちらをご利用ください。\n' +
    editURL + '\n' +
    '\n' +
    'ご担当者様\n' +
    'いつもお世話になっております。下記ご確認をお願いいたします。\n' +
    '\n' +
    '─────────────────────────\n' +                                    
    'ご回答内容のコピー\n' +
    '─────────────────────────\n' +
    '\n' +
    '【メールアドレス】\n' +
    recipient + '\n' + 
    '\n' +
    body_core +
    '\n' +
    '※このメールは送信専用のメールアドレスからお送りしています。\n' +
    'ご返信いただいても回答はできませんので、あらかじめご了承ください。\n'+
    '\n' +
    '──────────────────────────────\n' +
    '本フォームに関するお問い合わせは下記までお願いいたします。\n'+
    '○○株式会社 ××部 \n'+
    '山田太郎 \n'+
    'mobile:111-2222-3333 \n'+
    'mail:aaabbbccc@ddd.eee \n'+
    '──────────────────────────────\n';
  
  // メール件名・本文の内容確認
  Logger.log(subject);
  Logger.log(body);
  
  // メール送信
  GmailApp.sendEmail
  (
    recipient,
    subject,
    body,
    {
    name: reply_name,
    }
  )

  //送信メール上限確認 
  Logger.log(MailApp.getRemainingDailyQuota());
}

→GAS(Google Apps Script)のコード説明は別ページに記載予定。

[Google Apps Script] トリガーの設定

左側アイコンの一覧から、「トリガー」をクリック。

右下の「+ トリガーを追加」をクリック。

「テスト(GASプロジェクト名)のトリガーを追加」ウインドウにて、「イベントの種類を選択」から「フォーム送信時」を選択して保存。

[Google Apps Script] Google OAuth2 認証

トリガー保存時にOAuth2認証(セキュリティ認証)画面が表示されるので、自身のGoogleアカウント(Gmail)が選択されていることを確認してクリック。

デベロッパーに自身のGoogleアカウント(Gmail)が表示されていることを確認して、左下の「詳細」をクリック。

ウインドウが展開されるので、「[テスト(GASプロジェクト名)](安全ではないページ)に移動」をクリック。

ウインドウが切り替わるので「許可」をクリック。

「テスト(GASプロジェクト名)のトリガーを追加」ウインドウに戻るので、改めて「保存」をクリック。

トリガーが追加されたことを確認。

GASの設定はこれで完了。

【設定後】[Google Forms] 回答フォームのリンクを取得

先ほどのFormsを起動して、左上の「送信」をクリック。

送信方法の真ん中(リンクタブ)をクリックして、右下の「コピー」をクリック。

Formsから取得した回答フォームのリンクを現場担当者への案内メール本文に貼付して送信。

【運用中】[Google Apps Script] 実行数(過去実行ログ)の参照

実際にFormsから回答があった場合に、過去1週間分のApps Scriptのトリガー実行完了確認と、ログ「Logger.log();」の確認ができる。
→回答集計内容はFormsの回答タブからスプレッドシートを作成して確認すること。

*なお、Formsの回答タブにて「新しい回答についてのメール通知を受け取る」にチェックを入れていないと現場担当者がForms回答しても自分に通知が届かないので注意。

左側アイコンの一覧から、「実行数」をクリック。

トリガーをクリックして展開させる。

【ログ表示元となるコード】

//回答者のアドレス確認
Logger.log(recipient);

// フォームの質問・回答の内容確認
Logger.log(itemResponses);
Logger.log(q_list);
Logger.log(a_list);

// 回答修正用URL取得の内容確認
Logger.log(editURL);

【ログ】

【ログ表示元となるコード】

// 自動返信メール文書の要素内容確認
Logger.log(body_core);

【ログ】

【ログ表示元となるコード】

// メール件名・本文の内容確認
Logger.log(subject);
Logger.log(body);

【ログ】

【ログ表示元となるコード】

//送信メール上限確認
Logger.log(MailApp.getRemainingDailyQuota());

【ログ】

Googleアカウント無料版の場合は、1日に送信できるメールの上限が100件に決められている。
あくまでもアカウントごとの上限件数なので、同じアカウントで別プロジェクトを作成して自動メール送信した場合も合算して件数カウントされるので注意。

コメント

タイトルとURLをコピーしました