소개
기업 CS 메일을 받는 gmail을 가정
고객 메일 제목에 '문의'라는 단어가 포함되는 메일을 CS 대상 메일로 가정.
Apps script를 통해서 두 가지 작업 자동화
'문의' 메일들만 선별하여 Google Sheet에 기록
'문의' 메일들의 본문 키워드를 통해서 유형을 나누고, 유형별로 자동 회신 메일 발송
문의 유형 / 본문 키워드 : '환불', '배송', '계정', '기타' - 일단 4가지로 분류토록 함
자동 메일 형식 ('환불' 예시)
안녕하세요, 고객님 😊
고객님의 문의를 접수하였습니다. 아래와 같이 안내드립니다.
📌 문의 내용:
━━━━━━━━━━━━━━━━━
💬 고객명: [고객명]
📧 이메일: [고객 이메일]
📝 문의 내용: 환불 문의드립니다 - 안녕하세요, 주문한 상품을 환불받고 싶어요. 어떻게 하면 될까요?
━━━━━━━━━━━━━━━━━
📢 자동 응답:
고객님의 환불 요청을 접수하였습니다. 영업일 기준 3일 이내에 처리가 완료됩니다.
추가로 궁금한 점이 있으시면 언제든지 문의해 주세요! 😊
[회사명] 고객 지원팀 드림.
📞 고객센터: [고객센터 번호]
📧 이메일: [회사 이메일]
🌍 웹사이트: [회사 웹사이트 링크]
진행 방법
1.제목에 '문의'가 포함된 메일을 선별하여, 구글 시트로 가져오는 함수 생성.
Apps Script
function saveCustomerInquiries() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("고객문의");
if (!sheet) {
sheet = SpreadsheetApp.getActiveSpreadsheet().insertSheet("고객문의");
}
// 🚀 [헤더 설정] 1행에 정확한 제목 생성 + 스타일 적용
if (sheet.getLastRow() === 0) {
sheet.appendRow(["날짜", "고객명", "이메일 주소", "메일 제목", "문의 내용"]);
formatSheet(sheet); // 스타일 적용 함수 호출
}
var threads = GmailApp.search('subject:문의 newer_than:7d'); // 제목에 '문의'가 포함된 최근 7일 이메일 검색
var messages = threads.map(thread => thread.getMessages()).flat();
var existingData = sheet.getDataRange().getValues().map(row => ({
date: row[0] ? new Date(row[0]).toDateString() : "", // 날짜 (yyyy-mm-dd 형식)
email: row[2] || "", // 이메일
subject: row[3] || "" // 제목
}));
messages.forEach(message => {
var date = new Date(message.getDate()).toISOString().split("T")[0]; // YYYY-MM-DD 형식
var fromRaw = message.getFrom();
var subject = message.getSubject();
var body = message.getPlainBody();
// 이메일과 고객명 분리
var emailMatch = fromRaw.match(/<(.*?)>/);
var customerEmail = emailMatch ? emailMatch[1] : fromRaw;
var customerName = fromRaw.replace(/<.*?>/g, "").trim() || "고객명 없음";
var isDuplicate = existingData.some(entry =>
entry.date === date && entry.email === customerEmail && entry.subject === subject
);
if (!isDuplicate) {
sheet.appendRow([date, customerName, customerEmail, subject, body]);
}
});
formatSheet(sheet); // 📌 새로운 데이터가 추가될 때마다 스타일 적용
Logger.log("고객 문의 저장 완료!");
}
2.구글 시트를 예쁘게 정렬하는 함수
// ✅ 스타일을 적용하는 함수
function formatSheet(sheet) {
var range = sheet.getRange("A1:E1"); // 헤더 범위 선택
range.setFontWeight("bold") // 글자 굵게
.setBackground("#d3d3d3") // 배경색 회색
.setHorizontalAlignment("center"); // 가운데 정렬
// 데이터 셀 스타일 적용
var dataRange = sheet.getDataRange();
dataRange.setVerticalAlignment("middle"); // 세로 정렬
// 열 너비 자동 조정
sheet.setColumnWidth(1, 120); // 날짜
sheet.setColumnWidth(2, 150); // 고객명
sheet.setColumnWidth(3, 200); // 이메일
sheet.setColumnWidth(4, 300); // 메일 제목
sheet.setColumnWidth(5, 500); // 문의 내용 (넓게)
// 본문 내용(E열) 자동 줄 바꿈 설정
sheet.getRange("E:E").setWrap(true);
}
- 구글 시트 결과 화면(1, 2번 결과)
3.문의 유형에 따라서 자동 회신 메일 함수 - Apps Script
function sendAutoReplyEmail(customerEmail, customerName, inquiryMessage) {
var subject = "[문의 접수 완료] 고객님의 문의에 대한 답변입니다! 😊";
var responseMessage = getPredefinedResponse(inquiryMessage);
var body = "안녕하세요, " + customerName + "님 😊\n\n" +
"고객님의 문의를 접수하였습니다. 아래와 같이 안내드립니다.\n\n" +
"📌 문의 내용:\n" +
"━━━━━━━━━━━━━━━━━\n" +
"💬 고객명: " + customerName + "\n" +
"📧 이메일 주소: " + customerEmail + "\n" +
"📝 문의 내용: " + inquiryMessage + "\n" +
"━━━━━━━━━━━━━━━━━\n\n" +
"📢 자동 응답:\n" +
responseMessage + "\n\n" +
"추가로 궁금한 점이 있으시면 언제든지 문의해 주세요! 😊\n\n" +
"[회사명] 고객 지원팀 드림.\n\n" +
"📞 고객센터: [고객센터 번호]\n" +
"📧 이메일: [회사 이메일]\n" +
"🌍 웹사이트: [회사 웹사이트 링크]";
GmailApp.sendEmail(customerEmail, subject, body);
}
// 🔹 고객 문의 유형별 사전 정의된 응답을 반환하는 함수
function getPredefinedResponse(inquiryMessage) {
Logger.log("📌 문의 내용 확인: " + inquiryMessage); // 로그 추가
var responseTemplates = {
"환불": "고객님의 환불 요청을 접수하였습니다. 영업일 기준 3일 이내에 처리가 완료됩니다.",
"배송": "배송 관련 문의 감사합니다. 현재 배송 상태는 [배송 상태 조회 링크]에서 확인할 수 있습니다.",
"계정": "계정 관련 문제를 해결하려면 [계정 복구 페이지 링크]를 방문해 주세요.",
"기타": "문의 내용을 확인하였으며, 빠른 시일 내에 답변드리겠습니다."
};
if (inquiryMessage.includes("환불")) {
Logger.log("✅ '환불' 감지됨! 자동 응답 전송");
return responseTemplates["환불"];
} else if (inquiryMessage.includes("배송")) {
Logger.log("✅ '배송' 감지됨! 자동 응답 전송");
return responseTemplates["배송"];
} else if (inquiryMessage.includes("계정")) {
Logger.log("✅ '계정' 감지됨! 자동 응답 전송");
return responseTemplates["계정"];
} else {
Logger.log("❌ 문의 유형을 감지하지 못함. '기타' 응답 전송");
return responseTemplates["기타"];
}
}
위 1~ 3번 함수를 Apps Script > Editor > Code.gs 에 삽입
4.트리거 메뉴에서 타이머 설정
구글 시트에 저장하는 함수(1) : saveCustomerInquiries (하루에 2번씩, 12h마다)
자동 분류 / 회신 함수(3) : sendAutoReplyEmail (하루에 2번씩, 12h마다)
결과적으로 아침, 저녁 두 번씩 자동 분류/발송.
5.결과와 배운 점
원래는 GPT API를 연동해서 문의 메일마다 GPT가 자동 회신하는 메일 발송 시스템 구현이 목적
하지만, GPT API 연동은 했으나 회신 메일의 완성도가 문제가 있음. 해당 도메인 지식이 없으니 당연한 결과일 듯.
GPTs를 만들어 연동하려 했으나, 아쉽게도 Apps Script와 GPTs를 연동하는 방법 찾지 못함
기업의 CS 메일 형식/스타일을 알려주고, 기존의 회신 메일 내용 아카이브를 학습시킨 GPTs를 만들어서, App Script와 연동시킨다면 좀 더 완성도 있고, 실용적일 듯
도움 받은 글 (옵션)
너무 쉬운 사례라 특별할게 없어서 죄송합니다!