🔗 지금 바로 사용해보세요!
📥 자동화와 매크로 스프레드시트(고객문의 시트) 바로가기
클릭 한 번으로 바로 접속해서 복사하여 사용하실 수 있습니다
Apps Script 환경 진입
1. 확장 프로그램 → Apps Script 클릭
2. 새 프로젝트 생성: "자동화 마스터" 이름 설정
3. 코드 편집기 환경 확인
- 파일에서 스크립트 선택
- 이름을 '고객문의 자동화.gs'라고 저장
- 아래 함수를 입력
폼 응답 자동 분류 및 배정 스크립트
function processFormResponses() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("고객문의");
var data = sheet.getRange(2, 1, sheet.getLastRow() - 1, sheet.getLastColumn()).getValues();
for (var i = 0; i < data.length; i++) {
var row = i + 2;
var timestamp = data[i][0]; // A열: 접수일시
var customerName = data[i][1]; // B열: 고객명
var inquiryType = data[i][2]; // C열: 문의유형
var content = data[i][3]; // D열: 문의내용
var status = data[i][4]; // E열: 처리상태
var currentAssignee = data[i][5]; // F열: 담당자
// 미처리 상태의 문의만 처리
if (status === "대기" && !currentAssignee) {
var assignee = assignToAgent(inquiryType);
var ticketNumber = generateTicketNumber(row);
// 담당자 배정 및 상태 업데이트
sheet.getRange(row, 6).setValue(assignee); // F열: 담당자
sheet.getRange(row, 5).setValue("배정완료"); // E열: 처리상태
sheet.getRange(row, 7).setValue(ticketNumber); // G열: 티켓번호
sheet.getRange(row, 8).setValue(new Date()); // H열: 배정일시
// 담당자에게 알림 이메일 발송
sendAssignmentNotification(assignee, customerName, inquiryType, content, ticketNumber);
// 고객에게 접수 확인 이메일 발송 (이메일 주소가 있다면)
sendCustomerConfirmation(customerName, ticketNumber, inquiryType);
Logger.log("문의 처리 완료: " + customerName + " → " + assignee);
}
}
}
function assignToAgent(inquiryType) {
// 문의 유형별 담당자 자동 배정 규칙
var assignments = {
"기술문의": "tech@###.com", // 실제 이메일 주소로 변경
"결제문의": "billing@###.com", // 실제 이메일 주소로 변경
"일반문의": "support@###.com", // 실제 이메일 주소로 변경
"배송문의": "delivery@###.com", // 실제 이메일 주소로 변경
"환불문의": "refund@###.com" // 실제 이메일 주소로 변경
};
return assignments[inquiryType] || "support@###.com"; // 실제 이메일 주소로 변경
}
function generateTicketNumber(row) {
var date = new Date();
var dateStr = date.getFullYear().toString().slice(-2) +
String(date.getMonth() + 1).padStart(2, '0') +
String(date.getDate()).padStart(2, '0');
return "TK" + dateStr + "-" + String(row).padStart(3, '0');
}
function sendAssignmentNotification(assignee, customerName, inquiryType, content, ticketNumber) {
var subject = "[새 문의 배정] " + inquiryType + " - " + ticketNumber;
var body = "새로운 고객 문의가 배정되었습니다.\n\n";
body += "📋 문의 정보:\n";
body += "• 티켓번호: " + ticketNumber + "\n";
body += "• 고객명: " + customerName + "\n";
body += "• 문의유형: " + inquiryType + "\n";
body += "• 내용: " + content + "\n\n";
body += "빠른 처리 부탁드립니다.\n\n";
body += "고객 서비스 자동화 시스템";
try {
GmailApp.sendEmail(assignee, subject, body);
Logger.log("담당자 알림 발송: " + assignee);
} catch (error) {
Logger.log("이메일 발송 실패: " + error.toString());
}
}
function sendCustomerConfirmation(customerName, ticketNumber, inquiryType) {
// 실제 환경에서는 고객 이메일 주소를 데이터에서 가져와야 함
var customerEmail = "customer@###.com"; // 예시 이메일
var subject = "문의 접수 완료 - " + ticketNumber;
var body = customerName + "님, 안녕하세요.\n\n";
body += "문의해 주셔서 감사합니다.\n\n";
body += "📝 접수 내용:\n";
body += "• 티켓번호: " + ticketNumber + "\n";
body += "• 문의유형: " + inquiryType + "\n";
body += "• 접수일시: " + new Date().toLocaleString() + "\n\n";
body += "담당자가 배정되었으며, 빠른 시일 내에 답변드리겠습니다.\n\n";
body += "감사합니다.\n고객 서비스팀";
// 실제로는 고객 이메일이 있을 때만 발송
// GmailApp.sendEmail(customerEmail, subject, body);
Logger.log("고객 확인 이메일 준비: " + customerName);
}
함수 실행 테스트:
1. processFormResponses, assignToAgent, generateTicketNumber, sendCustomerConfirmation 함수 선택 후 실행 버튼
2. 권한 승인 진행
3. 결과 확인
'스프레드시트 활용' 카테고리의 다른 글
| [자동화 스크립트 5] 모바일 전용 간단 자동화 (0) | 2025.09.03 |
|---|---|
| [자동화 스크립트 4] 자동 실행 트리거 설정 (3) | 2025.09.02 |
| [자동화 스크립트 2] 실시간 재고관리 자동화 (1) | 2025.09.02 |
| [자동화 스크립트 1] 주간 보고서 자동생성 (0) | 2025.09.02 |
| [매크로] 주간 매출 합계 자동계산 (0) | 2025.09.02 |