【영업용】인사이드 세일즈로 아포 취득할 수 있었을 때의 손님에게의 메일을 자동 생성한다

18061 단어 GoogleAppsScript

하고 싶은 것 & 그 이유



인사이드 세일을 하고 있어 고객과의 약속을 잡을 때, 협의 조정 메일을 보내고 있다. 그러나, 1개라도 많이 전화를 걸기 위해서, 메일을 치고 있는 시간을 조금이라도 단축하고 싶었다.
또, 향후 무려 100통과 같은 메일을 만드는 것은 시간의 낭비이므로, 자동화하는 것으로, 콜수를 최대화하는 것이 목적.

구현 방법



1:자신의 Google 캘린더를 취득
2:현재로부터 2개월 앞의 예정을 배열로 취득
3 : 2의 배열 중에서 가장 최근에 만들어진 예정을 취득
4:메일 송신시에 필요한 정보를 3으로부터 꺼낸다
5 : 메일 초안 작성

완성 시스템



메일 전송을 위한 HTML 파일과 GAS 스크립트를 준비

gas.js
const CALENDAR_ID = '自分のカレンダーID';

function getCalendarEvents() {
  const calendar = CalendarApp.getCalendarById(CALENDAR_ID); //自分のカレンダーを取得
  const startTime = new Date(); //現在の時刻
  const endTime = new Date();
  endTime.setMonth(endTime.getMonth() + 2); //現在から2か月先の時刻

  var newestEvent = getNewestEvent(calendar, startTime, endTime); //最新の予定を取得
  var emailInformation = getInformationForEmail(newestEvent); //メール送信時に必要な情報を予定から取得


  var template_index = HtmlService.createTemplateFromFile('body');
 template_index.arr = [emailInformation.companyName,
                       emailInformation.name,
                       emailInformation.mtgMonth + 1, //なぜ+1をしてるかは、しらんw getMonth()メソッドの仕様なので+1をしてあげないと、1か月後ろの月が表示されてしまう 
                       emailInformation.mtgDate,
                       emailInformation.mtgDay,
                       emailInformation.mtgHour,
                       emailInformation.mtgMinutes,
                       emailInformation.mtgUrl];

  var html = template_index.evaluate().getContent();

  if(newestEvent.getTitle().match(/WEBお打合せ/) && newestEvent.isOwnedByMe()){ //タイトルに”WEBお打合せ”という文字が入っていたら、下書きを生成する
    GmailApp.createDraft(emailInformation.toEmail, emailInformation.subject, html,{cc: emailInformation.ccEmail, htmlBody: html});
  }

}

function getNewestEvent(calendar, startTime, endTime){
  var events = calendar.getEvents(startTime, endTime); //指定した期間に存在する予定を配列で取得

  var arrUpDate = [];//更新日時を格納する用の配列を用意する

  for (var i = 0;i<events.length;i++){//用意した配列に追加していく
    arrUpDate.push(events[i].getLastUpdated().getTime());
  }

  var maxDay = Math.max.apply(null,arrUpDate);//更新日時が一番新しいものを特定
  var index = arrUpDate.indexOf(maxDay);//更新日時が一番新しい配列のインデックスの取得
  return events[index]; //インデックスを指定して、更新日時が一番新しいものを返す
}


function getInformationForEmail(newestEvent){
  var dayOfWeekStr = ["日曜日", "月曜日", "火曜日", "水曜日", "木曜日", "金曜日", "土曜日"];

  var titleWithArr    = newestEvent.getTitle().split(" ");
  var companyName     = titleWithArr[1];
  var name            = titleWithArr[2];
  var mtgMonth        = newestEvent.getStartTime().getMonth();
  var mtgDate         = newestEvent.getStartTime().getDate();
  var mtgHour         = newestEvent.getStartTime().getHours();
  var mtgMinutes      = newestEvent.getStartTime().getMinutes();
  if(mtgMinutes == 0){
    mtgMinutes = "00"; //仮に2時ピッタリから商談が始まる場合は、getMinutes()メソッドは0を返すので、テキストで”00”を返すようにしている
  }
  var mtgDay          = dayOfWeekStr[newestEvent.getStartTime().getDay()];
  var toEmail         = newestEvent.getGuestList()[0].getEmail();
  var ccEmail         = 'CCに入れたいメール';
  var subject         = name + ':お打合せの日程に関しまして/私だよ^^';
  var mtgUrl          = newestEvent.getLocation();
  return {
    "companyName": companyName,
    "name": name,
    "mtgMonth": mtgMonth,
    "mtgDate": mtgDate,
    "mtgHour": mtgHour,
    "mtgMinutes": mtgMinutes,
    "mtgDay": mtgDay,
    "toEmail": toEmail,
    "ccEmail": ccEmail,
    "subject": subject,
    "mtgUrl": mtgUrl
  };
}

body.html
<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>
<br>
<?= arr[0] ?><br>
<?= arr[1] ?><br>
<br>
いつも大変お世話になっております。<br>
わたしです^^<br>
<br>
先ほどはお電話でのご対応、<br>
誠にありがとうございました。<br>
<br>
改めまして、<br>
以下の日程でお打合せの時間をいただければと存じます。<br>
<br>
日程:<br>
<?= arr[2] ?><?= arr[3] ?>日(<?= arr[4] ?>) <?= arr[5] ?>:<?= arr[6] ?><br>
<br>
会議URL:<br>
<a href = "<?= arr[7] ?>"><?= arr[7] ?></a><br>
<br>
それでは以上となりますが、 <br>
今後とも何卒よろしくお願いいたします。<br>
<br>
  </body>
</html>

마무리



스크립트가 준비되면 트리거를 준비합니다. 캘린더가 업데이트될 때마다 스크립트가 실행됩니다.



실제로 일을 해보자



전화를 걸어 약속이 잡히면 Google 캘린더에 일정을 입력하고 GoogleMeet URL도 화면에서 발행합니다.
덧붙여 GoogleMeet의 URL의 취득만은 아무래도 몰랐다. 표준의 방법으로는 준비가 없다고 생각한다.
따라서 Meeet의 URL에 관해서는 수동으로 복사하여 회의 장소에 붙여 넣음으로써 취득한다.
동시에, 고객의 메일 주소도 인바이트처에 입력을 한다.
또, 예정의 타이틀 부분을 전각 스페이스로 단락지어, 「【확정】 회사명 고객의 이름 WEB 협의」라고 하는 입력 규칙으로 입력한다. 이것을 하지 않으면 회사명과 이름이 잘 취득할 수 없고, 마지막 if문으로 걸리게 되어 있다.



출력



무사히 초안도 생성되었다. 이것으로 월간의 콜수가 30은 증가했을지도 모른다.

코드에 관해서는, 굳이 메소드를 나누었지만, 오히려 알기 어려워진 생각도 한다.

좋은 웹페이지 즐겨찾기