【GAS】Google Apps Script 活用事例 Googleドキュメントに保存したテンプレートを元に、メールの下書きを作成する
コロナ禍という事で、例年通り会場を抑えて、会社説明会を開催するという事が出来ないため、説明会、面接含め、Zoomなどのビデオツールを使って行っています。
HRMOSだと、面接日程を設定したり、面接日時を自動で挿入してくれる機能があります。しかし、個別に会社説明会をやっている事は想定されていません。面接日時は、自動挿入されても、説明会日程は手動で入力しなければいけません。
勤め先では、カレンダーの登録はオンタイムだけど、学生には、5分後の日程をお伝えするという例外的な運用をしています。一方で規則性がある業務でもあったので、この機会に自動化したかったのです。
そこでGASが使えるGmailで下書きを作成して、そこからHRMOSのメールエディタにコピペするという手順を取っています。
プログラムで行う事で、日付や曜日、開始時刻などのご案内が正確に出来るので、こういった業務はどんどん自動化していきたいなと思っています。ミスしたら、アウトですし.....。
手順はこんな感じ
1. Google ドキュメントに保存したテンプレ内容を取得
2. GoogleドキュメントのUIからHRMOSのURLを入力
3. URLから、19桁の数字のみを抽出
4. 採用面接用のカレンダーを検索し、説明会・面接日程を取得
5. ['新卒 〇〇さん 会社説明会', '2020/09/25 14:00 - 15:00']
6. 上記の配列を取得したGoogleドキュメントのテンプレ内容に挿入
7. setText()や、replaceText()は、使用しないため、上書きの心配はない。
8. そして、完成したテキストをメールの下書きとして保存
下書きフォルダに、スクリプトで作成したメールが保存されます。多少のタイムラグがあります。作成されていない場合は、リロードしてみてください。
スクリプトはこんな感じ
//1次面接のご案内の下書き
//createDraftでGmailの下書きに、HRMOSで使うメール文章を作成する。
function showYouInternview() {
const url = '**********';//メール本文を保存したGoogle ドキュメントのテンプレ
const document = DocumentApp.openByUrl(url);
const body = document.getBody();
const text = body.getText();
//console.log(text);
//説明会と会社説明会の期日が配列で返ってくる
//['イベントのタイトル', '2020/09/25 14:00 - 15:00']
const dateArray = getEventStartTime();
console.log(dateArray);
//取得したテンプレートの内容に変数を挿入する。
const correctedParagraph = text
.replace('{date}', dateArray[1])
.replace('{date2}', dateArray[3]);
console.log(correctedParagraph);
//メールの下書きを作成
GmailApp.createDraft('********@gmail.com', '面接日程のご案内 HRMOSにコピペしてね', correctedParagraph);
const ui = DocumentApp.getUi();
ui.alert('メールの下書き見てね!!');
}
//カレンダーから面接・説明会日程を取得
function getEventStartTime() {
const HRMOS_ID = get_HRMOS_ID();//HRMOSのID
const calendar = CalendarApp.getCalendarById('***************');
console.log(calendar.getName());
//1か月後までのイベントを取得
const startTime = new Date();
const endTime = new Date();
endTime.setMonth(endTime.getMonth() + 1);
//日付を変換
const stringDate = (date, number, format) => {
date.setDate(date.getDate() + number);
return Utilities.formatDate(date, 'JST', format);
}
//HRMOS IDでカレンダーを検索
//HRMOSのURLから、19桁の数字を抽出したものが、HRMOS ID
const events = calendar.getEvents(startTime, endTime, {search: HRMOS_ID});
let eventDetail = [];
//会社説明会と面接予定の2つを取得
for(const event of events){
const eventTitle = event.getTitle();
//面接や説明会の開始時刻は、5分後
const date = event.getStartTime();//開始日と開始日時
date.setMinutes(date.getMinutes() + 5);
const day = dayOfTheWeek(date.getDay());//曜日
const endDate = event.getEndTime();//終了日
//yyyy/MM/dd形式に変換
const convertedStartDate = stringDate(date, 0, 'yyyy/MM/dd');
const convertedStartTime = stringDate(date, 0, 'HH:mm');
const convertedEndTime = stringDate(endDate, 0, 'HH:mm');
//2020/09/25 (金) 14:00 - 15:00
const margedDate = `${convertedStartDate} (${day}) ${convertedStartTime} - ${convertedEndTime}`;
//['22卒 〇〇さん 会社説明会', '2020/09/25 14:00 - 15:00']
eventDetail.push(eventTitle, margedDate);
}
//console.log(eventDetail);
return eventDetail
}
function get_HRMOS_ID() {
const ui = DocumentApp.getUi();
const response = ui.prompt(
'HRMOSのURLを入力してください。',
'(例)https://hrmos.co/applications#/123456789?tabId=interview',
ui.ButtonSet.OK
);
const inputNumber = response.getResponseText().match(/[0-9]{19}/)[0];
console.log(`入力された元の値: ${response.getResponseText()}`);
console.log(`正規表現で抽出後: ${inputNumber}`);
switch (response.getSelectedButton()) {
case ui.Button.OK:
console.log('%s と入力され、OKが押されました。',inputNumber);
break;
case ui.Button.CLOSE:
console.log('閉じるボタンが押されました。');
}//switch
return inputNumber;
}
メールの下書きに保存したのは、Slack APIが、勤め先の権限の関係で、制限されているのと、Slackからコピーすると、改行がなくなっていたりする事があるのでドキュメントにしています。スプレッドシートでも問題ありません。
個人的に、スプレッドシートは、あくまで、表計算ソフトという位置付けなので、文章を扱う場合は、ドキュメント一択です。
Google ドキュメントのテンプレートについて
今回のスクリプトでは、文章に、{date} と書いている部分に、カレンダーから取得した面接日程が入ります。
Google カレンダーの詳細蘭の自動化
Google カレンダーの詳細蘭の自動化したり、Googleカレンダーから、イベントの出席者のメールアドレスを書き出す事をやっています。
Spreadsheetの面接官を、Slackアカウントに変換したり、既存のイベントに出席者を加える業務の自動化
この記事が気に入ったらサポートをしてみませんか?