【営業マンのための】google calendarの予定に応じて自動でメールを作成する【仕事効率化】
背景
たかだか1本のメール作成であっても、チリも積もれば山となり、バカにならないくらいの時間がかかってきます。
イレギュラーな内容のメールは仕方がないにせよ、御礼メールやリマインドメール、週報メールなどはある程度文章の方向性が決まっており、効率的にメール作成ができるはずだ、ということでやってみました。
やること
google calendarから予定を取得し、その予定に応じてメールを作成し下書きに保存する
使うもの
google app script, google calendar, gmail
実装
メールのテンプレートはスプレッドシートに保存しておきます。
メールの作成のタイミングでスプレッドシートを読みこみ、テンプレートを取得し下書きに保存します。
コードは以下の通り。
function myFunction() { var cal = CalendarApp.getCalendarById('メールアドレス'); var events = cal.getEventsForDay(new Date()); for(var i in events){ var event = new Event(events[i]) if(event.isGoOutTask()){ createDraft(event.companyName(), "往訪"); } } } function createDraft(companyName, mailType){ var mail = new Mail(mailType, companyName, "spreadsheetのURL"); GmailApp.createDraft('', mail.subject(), mail.body()); } Event = function(event){ this.event = event; } Event.prototype.isGoOutTask = function(){ if(this.event.getTitle().match(/^往訪/)){ return true; } return false; } Event.prototype.companyName = function(){ var companyName = this.event.getTitle().match(/【(.*)】/); return companyName[1]; } Mail = function(mailType, companyName, url){ var spreadsheet = SpreadsheetApp.openByUrl(url); var sheet = spreadsheet.getSheetByName(mailType); var startrow = 1; var startcol = 1; var sheetdata = sheet.getSheetValues(startrow, startcol, sheet.getLastRow(), sheet.getLastColumn()); this.companyName = companyName; this.subjectData = sheetdata[0][1]; this.bodyData = sheetdata[1][1]; } Mail.prototype.subject = function(){ return this.subjectData; } Mail.prototype.body = function(){ return this.companyName + String.fromCharCode(10) + this.bodyData; }
イベントの発火は時間駆動型とし、明け方1~4時の寝てる間くらいに実行されるようにセットしています。
発火するとmyFunction()が呼ばれ、google calendarからその日の予定(events)を取得してきます。
var cal = CalendarApp.getCalendarById('メールアドレス'); var events = cal.getEventsForDay(new Date());
そしてそのイベントが往訪であれば、gmailにメールを作成します。
以前もありましたが、予定入力のルールとして、予定名のプレフィクスに予定の種類を入力しています。
takaaki-z.hatenablog.com
MTGの予定なら「会議:ほげほげ打ち合わせ」みたいな感じです。
外出の予定の場合は「往訪:ほげほげ」と入力しているので、これをチェックし予定の種類を判別します。
if(event.isGoOutTask()){ createDraft(event.companyName(), "往訪"); } Event.prototype.isGoOutTask = function(){ if(this.event.getTitle().match(/^往訪/)){ return true; } return false; }
メール作成はもともと用意されてるGmailオブジェクトのcreateDraftメソッドを叩くだけです。
function createDraft(companyName, mailType){ var mail = new Mail(mailType, companyName, "spreadsheetのURL"); GmailApp.createDraft('', mail.subject(), mail.body()); }
今回はメールの本文の宛名として相手の会社名を入れたいので、google calendarの予定のタイトルから宛名となる情報を取得してきます。
予定入力のルールとして、往訪する会社の名前を「【】」でくくって入力するようにしているので、こちらも正規表現で引っ張ってきます。
Event = function(event){ this.event = event; } Event.prototype.companyName = function(){ var companyName = this.event.getTitle().match(/【(.*)】/); return companyName[1]; }
メールの本文はスプレッドシートからテンプレを引っ張ってきてます。
Mail = function(mailType, companyName, url){ var spreadsheet = SpreadsheetApp.openByUrl(url); var sheet = spreadsheet.getSheetByName(mailType); var startrow = 1; var startcol = 1; var sheetdata = sheet.getSheetValues(startrow, startcol, sheet.getLastRow(), sheet.getLastColumn()); this.companyName = companyName; this.subjectData = sheetdata[0][1]; this.bodyData = sheetdata[1][1]; } Mail.prototype.subject = function(){ return this.subjectData; } Mail.prototype.body = function(){ return this.companyName + String.fromCharCode(10) + this.bodyData; }
件名と本文をあらかじめスプレッドシートに入力しておき、対象となるセルを参照し取得します。
件名はそのままひっぱってくればOK。
本文は、宛名のみgoogle calendarの予定に合わせて入力するので、整形したものを返します。
改行は文字コードを直接指定して入力するようにしました。
これで、朝起きたら御礼メールの下書きが作成されます。
あとは実際に往訪時に話した内容に合わせて少し編集すればメール作成が完了します。
さすがに往訪時の話の内容を自動入力するのは難しいので、ここは手動で編集します。
また送信先アドレスも今回は手動入力を想定しています。
往訪前にアドレスがわからないパターンもあるので、今回は自動化しませんでした。
実際に運用してみて
実際にこれを1週間運用してみましたが、想像以上にメール作成が楽になりました。
こういった細かいところからちょっとずつ自動化していき、より本質的な仕事に時間が割けるようにしていきます。
これも働き方改革!