Skip to main content

CS팀 에이전트

CS(Customer Success)팀 에이전트는 고객 문의 처리, FAQ 자동 생성, 고객 감정 분석, 에스컬레이션 판단을 담당합니다. 빠르고 일관된 고객 응대로 CSAT(고객 만족도)를 높입니다.

CS 에이전트 구현

// src/agents/cs.ts
import { query } from "@anthropic-ai/claude-agent-sdk";
import { AgentResponse } from "../shared/types";
import { extractText, log } from "../shared/utils";

const CS_SYSTEM_PROMPT = `당신은 공감 능력이 뛰어난 고객 성공 전문가입니다.
고객의 감정을 먼저 인정하고, 명확하고 실행 가능한 해결책을 제시합니다.
기술적 내용도 비전문가가 이해할 수 있게 쉽게 설명합니다.
에스컬레이션이 필요한 경우 지체 없이 적절한 팀으로 연결합니다.
응답은 항상 친절하고 전문적으로, 과도한 사과 반복은 피합니다.`;

export async function runCSAgent(task: string): Promise<AgentResponse> {
log("CS", `작업 시작: ${task.slice(0, 40)}...`);

// 감정 분석 먼저 실행
const sentiment = await analyzeSentiment(task);
const needsEscalation = sentiment === "very_negative" ||
task.includes("환불") ||
task.includes("법적") ||
task.includes("언론");

const response = await query({
prompt: `${CS_SYSTEM_PROMPT}

고객 감정 상태: ${sentiment}
에스컬레이션 필요: ${needsEscalation ? "예" : "아니요"}

---

${task}`,
options: {
maxTurns: 8,
allowedTools: ["Read", "Write"]
}
});

const result = extractText(response);
log("CS", `작업 완료 (에스컬레이션: ${needsEscalation})`);

return {
department: "cs",
result,
confidence: needsEscalation ? "low" : "high",
escalationNeeded: needsEscalation,
actionItems: needsEscalation ? ["즉시 CS 매니저에게 연결"] : []
};
}

async function analyzeSentiment(
text: string
): Promise<"positive" | "neutral" | "negative" | "very_negative"> {
const response = await query({
prompt: `다음 고객 메시지의 감정 상태를 분석해줘.
positive/neutral/negative/very_negative 중 하나만 출력해줘.

메시지: ${text}`,
options: { maxTurns: 2 }
});

const result = extractText(response).trim().toLowerCase();

if (result.includes("very_negative")) return "very_negative";
if (result.includes("negative")) return "negative";
if (result.includes("positive")) return "positive";
return "neutral";
}

주요 CS 워크플로우

1. 고객 문의 자동 응답

고객 문의:
"안녕하세요, API 키를 발급받았는데 계속 401 에러가 나요.
급하게 데모를 준비해야 하는데 너무 당황스럽네요."

CS 에이전트 응답:
"걱정되셨겠네요, 데모 준비 중에 이런 상황이 생겨 많이 당황스러우셨을 것 같습니다.

빠르게 해결해 드리겠습니다!

401 에러의 가장 흔한 원인들을 확인해 주세요:

1. API 키 형식 확인
Authorization: Bearer sk-ant-xxxxx
← 'Bearer ' 앞에 공백이 있어야 합니다

2. 키 권한 확인
대시보드 > API Keys > 해당 키의 권한이 '활성'인지 확인

3. 환경 변수 확인
.env 파일과 실제 코드에서 같은 키를 쓰고 있는지 확인

위 방법으로도 해결이 안 되시면 키를 새로 발급받아 시도해 보세요.
데모 시간이 언제인가요? 그 전까지 해결될 수 있도록 도와드리겠습니다."

2. FAQ 자동 생성

async function generateFAQ(
ticketHistory: string[],
topN: number = 20
) {
return runCSAgent(
`다음 고객 지원 티켓 히스토리에서 자주 묻는 질문 ${topN}개를 추출하고
FAQ 문서를 작성해줘.

티켓 히스토리:
${ticketHistory.join("\n\n")}

FAQ 형식:
## [카테고리]
**Q: 질문**
A: 답변 (단계별 해결법 포함)

카테고리: 설치/설정, API 연동, 결제/구독, 데이터/보안, 기타`
);
}

3. 고객 VOC 분석

async function analyzeVOC(
feedbacks: string[],
period: string
) {
return runCSAgent(
`${period} 기간의 고객 피드백을 분석하고 인사이트를 도출해줘.

피드백 데이터:
${feedbacks.join("\n")}

분석 항목:
1. 긍정 피드백 주요 테마 (유지해야 할 강점)
2. 부정 피드백 주요 이슈 (개선 우선순위)
3. 기능 요청 빈도 Top 5
4. 이탈 위험 신호 패턴
5. 즉시 개선 가능한 UX 이슈 3가지
6. 제품팀에 전달할 핵심 인사이트`
);
}

4. 에스컬레이션 판단 로직

interface EscalationRule {
condition: (text: string) => boolean;
target: string;
priority: "urgent" | "high" | "normal";
}

const ESCALATION_RULES: EscalationRule[] = [
{
condition: (t) => t.includes("환불") || t.includes("취소"),
target: "CS 매니저",
priority: "high"
},
{
condition: (t) => t.includes("법적") || t.includes("소송") || t.includes("변호사"),
target: "법무팀",
priority: "urgent"
},
{
condition: (t) => t.includes("데이터 유출") || t.includes("개인정보"),
target: "보안팀 + 법무팀",
priority: "urgent"
},
{
condition: (t) => t.includes("언론") || t.includes("기사"),
target: "PR팀 + 임원",
priority: "urgent"
}
];

function checkEscalation(text: string) {
for (const rule of ESCALATION_RULES) {
if (rule.condition(text)) {
return { shouldEscalate: true, ...rule };
}
}
return { shouldEscalate: false };
}

CSAT 모니터링 자동화

// 매일 CSAT 현황을 분석하고 이상 징후 감지
async function dailyCSATMonitor(csatData: string) {
const analysis = await runCSAgent(
`오늘의 CSAT 데이터를 분석해줘.

CSAT 데이터:
${csatData}

분석:
- 오늘 평균 CSAT 점수 vs 지난 7일 평균
- 낮은 점수(3점 이하) 티켓 공통 패턴
- 특정 담당자나 이슈 유형에서 반복 문제
- 즉시 Follow-up이 필요한 고객 목록`
);

// CSAT 3.0 이하로 떨어지면 CS 팀장에게 알림
if (analysis.result.includes("3.0 이하") ||
analysis.result.includes("급감")) {
await alertCSManager(analysis.result);
}

return analysis;
}
CS 에이전트 활용 팁
  • 제품 문서, 릴리즈 노트를 시스템 프롬프트에 포함해 정확한 답변 보장
  • 부정 감정 감지 시 더 공감적인 톤으로 응답하도록 프롬프트 조정
  • 반복되는 문의는 자동으로 FAQ에 추가하는 루프 구성

다음 챕터: 업종별 템플릿 →