스프레드시트 활용

[자동화 스크립트 3] 고객문의 자동처리

JS's Spreadsheets 2025. 9. 2. 14:04

🔗 지금 바로 사용해보세요!

📥 자동화와 매크로 스프레드시트(고객문의 시트) 바로가기

클릭  번으로 바로 접속해서 복사하여 사용하실  있습니다

 

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@###.co
m",   // 실제 이메일 주소로 변경
    "일반문의": "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.     결과 확인