이메일 알림을 통해 Google Apps Script로 서비스 간 협력
12663 단어 ChatworkGoogleAppsScriptgmailapi
소개
사내 커뮤니케이션의 중심에 비즈니스 채팅 툴을 설치해 정보를 집약하고 있는 회사도 많다고 생각합니다. 천하의 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);
}
해설
예
제 회사는 결제 관리 시스템으로 '일하는 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);
}
해설
스크립트
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);
}
해설
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);
}
getAs('application/pdf')
에서도 변환 가능합니다만, 변환시의 옵션을 지정하기 위해서 URL를 호출하고 있습니다. 참고
htps : // 기 st. 기주 b. 코 m / 타박상 사리 v / 아 b57에 95096203에 dc2741
htps : //에서 ゔぇぺぺrs. 오, ぇ. 코 m / 아 ps-sc 리 pt / 레후 렌세 /
ぇぇぺぺr. 제대로 rk. 코 m/그럼/
Reference
이 문제에 관하여(이메일 알림을 통해 Google Apps Script로 서비스 간 협력), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kunikada/items/40b995286cb09069748f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)