이메일 알림을 통해 Google Apps Script로 서비스 간 협력

소개



사내 커뮤니케이션의 중심에 비즈니스 채팅 툴을 설치해 정보를 집약하고 있는 회사도 많다고 생각합니다. 천하의 Slack님이라면, 처음부터 연계 가능한 서비스도 풍부하게 준비되어 있습니다만, 아직 대응할 수 없는 서비스도 있을 것입니다. Slack 이외가 되면 추측해 알 수 있다.

「뭐야, 제휴할 수 없는거야? Gmail 이메일 주소로 알림을 보내 Google Apps Script로 처리하고 파트너 API를 호출합니다. 단지, 이것뿐입니다.

「뭐야, 그런 건가. 그런 지루한 내용입니다.

서비스 협력의 다이어그램







제 회사는 결제 관리 시스템으로 '일하는 DB'라는 서비스를 이용하고 있습니다. 데이터베이스를 핵으로 한 업무 시스템을 간단하게 구축할 수 있는, 자주 있는 서비스입니다.
왜 그런 것을 이용하고 있는지는 놓고, 이 서비스는 Excel 파일에의 데이터 임베드에 의한 장표 출력 기능은 갖추고 있습니다만, PDF 파일의 직접 출력은 할 수 없습니다.
그래서 Google Apps Script를 사용하여 처리하고 싶습니다.

개략도





스크립트


function myFunction() {
  var threads = GmailApp.search('label:働くdb subject:承認 label:unread');
  if (threads.length == 0) {
    return;
  }

  for (var i = threads.length - 1; i >= 0; i--) {
    var messages = threads[i].getMessages();
    for (var j = messages.length - 1; j >= 0; j--) {
      if (messages[j].isUnread()) {
        var subject = messages[j].getSubject();
        var body = messages[j].getPlainBody();
        var attachment = messages[j].getAttachments()[0];
        var ss = convertExcel2Sheets(attachment.copyBlob(), attachment.getName());
        var pdf = convertSheet2Pdf(ss, attachment.getName().replace(/\.xlsx$/, '.pdf'), '見積書フォルダID');

        var notice = new Notice(subject, body);
        var message = chatwork.addMention('', chatwork.getIdByHDBName(notice.user), notice.user);
        message += notice.title+"\n";
        message += notice.url+"\n";
        message += "見積書の作成が完了しました。\n";
        message += pdf.getUrl();
        chatwork.postMessage(ROOMNUMBER, message);

        messages[j].markRead();
        clear(attachment.getName());
      }
    }
  }
}

function Notice(subject, body) {
  var lines = body.split("\n");
  this.title = lines[0].trim();
  this.url = lines[1].trim();
  this.user = lines[2].trim();
}

function convertSheet2Pdf(spreadsheet, filename, folderId) {
  var params = {
    headers: {'Authorization': 'Bearer ' + ScriptApp.getOAuthToken()}
  };
  var response = UrlFetchApp.fetch('https://docs.google.com/spreadsheets/d/'+spreadsheet.getId()+'/export?format=pdf&size=A4&fitw=false&portrait=true', params);
  var folder = (typeof folderId == 'undefined') ? DriveApp : DriveApp.getFolderById(folderId);
  return folder.createFile(response.getBlob()).setName(filename);
}

해설


  • Excel 파일을 PDF 파일로 직접 변환할 수 없습니다. 일단 Google 스프레드시트로 변환합니다. (참고 1)
  • 레이아웃을 신경쓰지 않는다면, File 클래스의 getAs('application/pdf') 에서도 변환 가능합니다만, 변환시의 옵션을 지정하기 위해서 URL를 호출하고 있습니다.
  • 사내에서는 채팅 워크를 이용하고 있어, 자주(잘) 사용하는 처리를 별도 라이브러리에 정리하고 있습니다.
  • 스크립트를 작성한 후 트리거를 설정하고 정기적으로 실행하는 것을 잊지 마십시오.

  • 참고


  • convertExcel2Sheets
    htps : // 기 st. 기주 b. 코 m / 타박상 사리 v / 아 b57에 95096203에 dc2741
  • Google Apps Script 참조
    htps : //에서 ゔぇぺぺrs. 오, ぇ. 코 m / 아 ps-sc 리 pt / 레후 렌세 /
  • 채팅 작업 API 문서
    ぇぇぺぺr. 제대로 rk. 코 m/그럼/
  • 좋은 웹페이지 즐겨찾기