오빠두 구글 설문지 발송 자동화 특강

이메일 검증
이메일 검증 : [a-zA-Z0-9_\.\+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-\.]+
JavaScript
복사
전화번호 검증
전화번호 검증 : ^\d{3}-\d{3,4}-\d{4}$
JavaScript
복사
설문지 발송 자동화 마스터 코드
/* ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ */ /* ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 이 영역을 수정하세요. ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ */ const sourceSpreadsheetId = '스프레드시트ID'; const destinationFolderId = '폴더ID'; const sh_name_inv = '견적서'; // 업데이트 할 서식의 시트명 const sh_name_form = '설문지'; // 설문지와 연동된 시트명 const logo_url = '' // 빙 이미지 생성기에서 만든 이미지 URL을 작성합니다.; // 이메일 발송에 사용할 제목과 본문입니다. HTML 본문 중, 로고 이미지는 {logo_url}로 작성합니다. // 나머지 항목은 {client_name}과 같이 중괄호로 묶어서 작성하면, 메일을 발송할 때 고객이 입력한 정보로 변경됩니다. const mailtitle = '[갓빠두 뷰티살롱] {client_name} 님의 견적서를 보내드립니다.'; const htmlbody = `{client_name} 님이 요청하신 견적서입니다.`; /* ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ 이 영역을 수정하세요. ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ */ /* ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ */ // 설문지 데이터를 기반으로 문서를 생성하는 함수입니다. function sendEmailfromForm() { // 소스 스프레드시트를 엽니다. var sourceSpreadsheet = SpreadsheetApp.openById(sourceSpreadsheetId); // '설문지' 시트에서 새롭게 추가된 항목을 배열로 가져옵니다. var sh = sourceSpreadsheet.getSheetByName(sh_name_form); var last_row = sh.getLastRow(); var rng = sh.getDataRange(); var values = rng.getValues()[last_row - 1]; var header = rng.getValues()[0]; // 파일이름에 사용할 현재 시간을 파싱합니다. var formattedTime = Utilities.formatDate(new Date(), 'Asia/Seoul', 'yyMMddHHmmss'); // 가져온 설문지 데이터를 파싱합니다. var formdata = parseFormData(values, header); // 파싱된 데이터를 콘솔에 출력합니다. console.log(formdata) // '견적서' 템플릿을 복사합니다. var sh_inv = sourceSpreadsheet.getSheetByName(sh_name_inv); var sh_copy = sh_inv.copyTo(sourceSpreadsheet); // 복사된 시트의 데이터 범위를 참조합니다. var new_rng = sh_copy.getDataRange(); var new_values = new_rng.getValues(); // 복사된 시트의 모든 셀을 돌아가벼 반복문을 실행합니다. for (var i = 0; i < new_values.length; i++) { for (var j = 0; j < new_values[i].length; j++) { var cell = new_values[i][j]; // 셀이 문자열이고 '{'와 '}'로 시작하고 끝나는지 확인합니다. if (typeof cell === 'string' && cell.startsWith('{') && cell.endsWith('}')) { var key = cell.substring(1, cell.length - 1); // 셀에 'rowID'라는 키가 있으면 마지막 행 번호로 값을 설정합니다. if (key == 'rowID') { sh_copy.getRange(i + 1,j + 1).setValue(last_row); } else { // 그렇지 않으면 해당 키에 해당하는 데이터로 값을 설정합니다. sh_copy.getRange(i + 1,j + 1).setValue(formdata[key]); } } } } // 스프레드시트에 대기 중인 변경사항을 적용합니다. SpreadsheetApp.flush(); // 완성된 견적서 시트의 함수를 값으로 변경합니다. rng = sh_copy.getDataRange(); values =rng.getValues(); rng.setValues(values); // 새로운 스프레드시트를 생성합니다. var newSpreadsheet = SpreadsheetApp.create('Sheet'); var newSpreadsheetId = newSpreadsheet.getId(); var sh_copied = sh_copy.copyTo(newSpreadsheet); // 완성된 견적서를 새 스프레드시트로 옮깁니다. sh_copied.setName(sh_name_inv); sourceSpreadsheet.deleteSheet(sh_copy); // 새 스프레드시트의 기본시트를 제거하고, 견적서 시트만 남깁니다. var defaultSheet = newSpreadsheet.getSheets()[0]; newSpreadsheet.deleteSheet(defaultSheet); // 새 스프레드시트를 지정한 폴더에 저장합니다. var file = DriveApp.getFileById(newSpreadsheetId); var fileName = "OPD-"+last_row.toString().padStart(5,'0')+'-'+formattedTime; file.setName(fileName); var folder = DriveApp.getFolderById(destinationFolderId); file.moveTo(folder); var fileId = SaveAsPDF(newSpreadsheetId, sh_name_inv, "A1:I34", destinationFolderId, fileName+".pdf"); var emailbody = htmlbody; var emailtitle = mailtitle; // 이메일 본문 중 "{}"로 작성된 값을 고객이 제출한 설문지 데이터로 변경합니다. for (var key in formdata) { if (formdata.hasOwnProperty(key)) { // 정규표현식을 작성합니다. var regex = new RegExp('{' + key + '}', 'g'); // 필드명에 date, time이 있을 경우 표시형식을 날짜, 시간 형식으로 변경합니다. if (key.toLowerCase().includes("date")) { var replacevalue = Utilities.formatDate(formdata[key], 'Asia/Seoul', 'yyyy-MM-dd'); } else if (key.toLowerCase().includes("time")) { var replacevalue = Utilities.formatDate(formdata[key], 'Asia/Seoul', 'a hh:mm:ss'); } else { var replacevalue = formdata[key]; } // "{키}" 를 설문지 값으로 변경합니다. emailbody = emailbody.replace(regex, replacevalue); emailtitle = emailtitle.replace(regex, replacevalue); } } // {logo_url}이 있을 경우, 실제 로고 이미지 주소로 변경합니다. emailbody = emailbody.replace("{logo_url}",logo_url); // 고객에게 첨부파일과 함께 이메일을 발송합니다. sendEmailWithAttachment(formdata['client_email'], emailtitle, emailbody, fileId); } // 헤더와 값을 딕셔너리로 변환하는 함수입니다. function parseFormData(values, header) { // 비어있는 배열을 생성합니다. var result = {}; // 항목을 하나씩 돌아가며 헤더와 값을 하나의 배열로 합칩니다. for (var i = 0; i < values.length; i++) { var key = header[i]; var value = values[i]; // 키에 count 라는 단어가 포함된 경우, 값에서 숫자만 남기고 '명'을 지웁니다. if (key.toLowerCase().includes("count")) { value = value.toString().replace("명", ""); } result[key] = value; } return result; } // 시트를 PDF로 저장하는 함수입니다. function SaveAsPDF(sheetId, sheetName, printRange, folderId, pdfFileName) { // PDF로 저장할 시트를 불러옵니다. var folder = DriveApp.getFolderById(folderId); var spreadsheet = SpreadsheetApp.openById(sheetId); var sheet = spreadsheet.getSheetByName(sheetName); // 시트를 PDF로 저장하기 위한 URL을 생성합니다. var url = spreadsheet.getUrl().replace(/edit$/, '') + 'export?exportFormat=pdf&format=pdf' // Specify the range and sheet name + '&gid=' + sheet.getSheetId() + '&range=' + printRange // Add other parameters for PDF formatting as needed + '&size=A4' + '&portrait=true' + '&scale=4' + '&sheetnames=false&printtitle=false&pagenumbers=false' + '&gridlines=false' + '&fzr=false'; // 보안 토큰을 헤더에 추가합니다. var token = ScriptApp.getOAuthToken(); var response = UrlFetchApp.fetch(url, { headers: { 'Authorization': 'Bearer ' + token } }); // 완성된 PDF를 구글 드라이브 폴더에 저장합니다. var pdfBlob = response.getBlob().setName(pdfFileName); var pdfFile = folder.createFile(pdfBlob); return pdfFile.getId(); } // PDF 첨부파일과 함께 이메일을 발송하는 함수입니다. function sendEmailWithAttachment(emailaddress, title, body, fileId) { var recipient = emailaddress; var subject = title; var htmlBody = body; var file = DriveApp.getFileById(fileId); GmailApp.sendEmail(recipient, subject, '', { htmlBody: htmlBody, attachments: [file.getAs(MimeType.PDF)] }); }
JavaScript
복사
ChatGPT 이미지 생성 프롬프트 요청하기 dall-e3 모델을 써서 헤어&메이크업 뷰티 브랜드를 위한 로고를 만들려고해. 심플하면서도 사람들의 시선을 사로잡을 수 있는 로고가 필요해. 영어로 프롬프트를 작성해줘.
ChatGPT로 이메일 HTML 본문 만들기 난 고객에게 헤어 스타일링과 메이크업을 제공하는 사업을 운영하고 있어. 회사 이름은 "갓빠두 뷰티 살롱" 이야. 고객이 원하는 서비스 종류, 장소, 시간을 작성한 설문지를 제출하였을 때, 감사함을 표시하는 이메일을 보내려고해. 이메일에 사용할 수 있는 세련되고 멋진 html 코드를 작성해줘.
그리고 스타일은 스타일 시트를 사용하지 않고, inline-style로 작성하고,
이메일 상단에는 회사 로고가 약 60px 사이즈로 잘 보이도록 넣어줘.
로고 이미지의 크기는 일반적인 로고 사이즈로 꼭 수정해야 합니다.
로고 url : https://th.bing.com/th/id/OIG.bm2CDeo7WBMzGNhwx97L?w=1024&h=1024&rs=1&pid=ImgDetMain 브랜드 컬러 : 파랑, 남색계열 환영메시지를 포함해줘. 예약 정보 : 서비스 종류, 행사 구분, 날짜 및 시간, 인원
■■■■■■■■■■■■■■
이미지생성, HTML본문 만들기가 어려울 경우 아래 항목을 그대로 사용하세요!
로고URL https://th.bing.com/th/id/OIG.y_6SW4LTq3a0IlWJgV5l?pid=ImgGn
HTML본문 <!DOCTYPE html> <html> <body style="font-family: Arial, sans-serif; background-color: #f4f4f4; color: #333; margin: 0; padding: 0;"> <div class="email-container" style="max-width: 600px; margin: 0 auto; background: white; padding: 20px;"> <div class="header" style="background-color: #f7f7f7; color: white; padding: 10px 20px; text-align: center;"> <div style="height: 60px; width: auto; margin: auto;"><img style="height: 60px;" src="{logo_url}" class="logo"></div> <div style="font-size: 1rem; color: #333; margin-top: 10px; font-weight: bold;">갓빠두 뷰티살롱 in 강남</div> </div> <div class="content" style="padding: 20px;"> <h1>환영합니다!</h1> <p>갓빠두 뷰티 살롱에 예약해주셔서 감사합니다. 고객님이 선택하신 서비스는 다음과 같습니다:</p> <ul> <li>서비스 종류: {service_type}</li> <li>행사 구분: {event_type}</li> <li>날짜: {service_date} {serice_time}</li> <li>인원: 남자 - {male_count}명, 여자 - {female_count}명</li> </ul> <p>만약 변경사항이나 질문이 있으시면 언제든지 저희에게 연락해주세요.</p> </div> <div class="footer" style="background-color: #023e8a; color: white; text-align: center; padding: 10px 20px;"> <p> 2023 갓빠두 뷰티 살롱. All right reserved.</p> </div> </div> </body> </html>
Html 코드 확인
오늘은 아래 내용을 배울 예정이에요! ( 강의 시간 : 21:00 ~ 23:00 / 120분) *강의 종료 시간은 진행 환경에 따라 조금씩 변동될 수 있습니다. a. 구글 시트 : 견적서 서식 만들기 -. 완성된 견적서 서식 살펴보기 -. Bing 이미지 생성기로 로고 제작하기 -. 견적서 자동 생성을 위한 필수 항목 설정하기 b. 구글 설문지 : 고객 요청 수집을 위한 설문지 제작 -. 고객 요청을 수집하는 설문지 만들기 -. 이메일, 전화번호의 유효성 검증 설정하기 -. 구글 설문지를 구글 시트에 연동하기 -. 견적서 생성에 사용될 각 필드의 머리글 변경하기 c. 앱스 스크립트 : 견적서 자동 발송 시스템 구축 -. 앱스 스크립트 실행 및 기본 사용법 -. 견적서 자동 발송 시스템을 위한 마스터 코드 살펴보기 -. 설문지 제출 후, 자동 코드 실행을 위한 트리거 설정하기 d. 이메일 만들기 : 견적서 안내 메일에 사용할 본문 작성하기 -. ChatGPT로 안내 메일의 HTML 본문 만들기 -. 설문지로 수집한 내용을 HTML 본문에 반영하기 버전 안내 - 이번 수업은 윈도우와 Mac 모든 환경에서 진행 가능합니다. - Bing 이미지 생성기는 MS 무료 회원가입 후에 사용할 수 있습니다. - 이번 강의에서는 구글 앱 스크립트를 사용합니다. 완성된 앱스크립트를 제공하므로, 초보자도 서식을 쉽게 완성할 수 있습니다. - 앱 스크립트에 대한 자세한 설명이 궁금하시다면 이전에 진행한 앱스크립트 기초 완성 라이브 강의를 참고하세요.
감사합니다.