이 글은 누구를 위한 것인가
- 배송 파손·분실 CS가 하루에 수십 건씩 쌓이는 팀
- 클레임 처리가 수동이라 3-5일씩 걸리는 운영팀
- 배송 보험을 도입하고 싶은데 어떻게 연동할지 모르는 팀
들어가며
배송 파손 CS 하나당 평균 처리 시간은 20-30분이다. 월 500건이면 운영팀 전체가 거기에 묶인다. 자동화로 80%를 자동 승인하면 CS는 나머지 20%의 복잡한 케이스에 집중할 수 있다.
이 글은 bluefoxdev.kr의 이커머스 CS 자동화 전략 를 참고하여 작성했습니다.
1. 클레임 자동화 판단 기준
[자동 승인 가능 조건]
상품 가격 < 50,000원
AND 고객 클레임 이력 < 3회/년
AND 사진 파손 증거 명확 (AI 판정 > 0.85)
AND 택배사 보험 적용 상품
[수동 검토 필요 조건]
상품 가격 >= 50,000원
OR 클레임 이력 3회 이상
OR 파손 판정 불명확 (0.5 < score < 0.85)
OR 고가품 (전자제품, 명품)
[자동 거절 조건]
배송 완료 후 7일 초과 신청
OR 사진 미첨부
OR 포장 파손 없이 상품만 파손 주장
OR 동일 상품 재클레임
2. 클레임 접수 및 AI 판정
import anthropic
import base64
from dataclasses import dataclass
from enum import Enum
class ClaimDecision(Enum):
AUTO_APPROVE = "auto_approve"
MANUAL_REVIEW = "manual_review"
AUTO_REJECT = "auto_reject"
@dataclass
class ClaimResult:
decision: ClaimDecision
damage_score: float
compensation_amount: float
reason: str
client = anthropic.Anthropic()
async def evaluate_damage_claim(claim: dict) -> ClaimResult:
"""사진 기반 파손 판정"""
# 이미지를 base64로 인코딩
images_content = []
for image_url in claim.get("damage_photos", []):
image_data = await download_image(image_url)
images_content.append({
"type": "image",
"source": {
"type": "base64",
"media_type": "image/jpeg",
"data": base64.standard_b64encode(image_data).decode("utf-8"),
},
})
images_content.append({
"type": "text",
"text": f"""배송 파손 판정을 해주세요.
상품: {claim['product_name']}
가격: {claim['product_price']:,}원
클레임 내용: {claim['description']}
JSON 응답:
{{
"damage_detected": true/false,
"damage_score": 0.0-1.0,
"damage_type": "packaging_damage|product_damage|complete_loss",
"compensation_rate": 0.0-1.0,
"reason": "판정 이유"
}}"""
})
response = client.messages.create(
model="claude-opus-4-7",
max_tokens=300,
messages=[{"role": "user", "content": images_content}]
)
import json
result = json.loads(response.content[0].text)
# 보상 금액 계산
compensation = claim["product_price"] * result["compensation_rate"]
# 자동화 판정
price = claim["product_price"]
claim_count = await get_customer_claim_count(claim["user_id"])
damage_score = result["damage_score"]
if (price < 50000 and claim_count < 3 and damage_score > 0.85):
decision = ClaimDecision.AUTO_APPROVE
elif damage_score < 0.4:
decision = ClaimDecision.AUTO_REJECT
else:
decision = ClaimDecision.MANUAL_REVIEW
return ClaimResult(
decision=decision,
damage_score=damage_score,
compensation_amount=compensation,
reason=result["reason"],
)
async def process_claim(claim_id: str):
"""클레임 처리 메인 플로우"""
claim = await get_claim(claim_id)
result = await evaluate_damage_claim(claim)
if result.decision == ClaimDecision.AUTO_APPROVE:
await approve_claim(claim_id, result.compensation_amount)
await issue_refund(claim["user_id"], result.compensation_amount)
await notify_customer(claim["user_id"], "승인", result.compensation_amount)
elif result.decision == ClaimDecision.AUTO_REJECT:
await reject_claim(claim_id, result.reason)
await notify_customer(claim["user_id"], "거절", 0)
else:
await queue_for_manual_review(claim_id, result)
await notify_customer(claim["user_id"], "검토중", 0)
# 택배사에 보험 청구
if result.decision == ClaimDecision.AUTO_APPROVE:
await submit_carrier_insurance_claim(claim, result)
3. 택배사 보험 청구 자동화
async def submit_carrier_insurance_claim(claim: dict, result: ClaimResult):
"""CJ대한통운, 한진 등 택배사 보험 API 연동"""
tracking_info = await get_tracking_info(claim["tracking_number"])
insurance_payload = {
"tracking_number": claim["tracking_number"],
"claim_type": "damage", # damage, loss
"declared_value": claim["product_price"],
"claimed_amount": result.compensation_amount,
"damage_description": claim["description"],
"evidence_urls": claim["damage_photos"],
"recipient_info": {
"name": claim["recipient_name"],
"phone": claim["recipient_phone"],
"address": claim["delivery_address"],
},
}
# 택배사 API 호출 (예: CJ대한통운)
async with httpx.AsyncClient() as client:
response = await client.post(
"https://api.cjlogistics.com/v1/insurance/claim",
json=insurance_payload,
headers={"Authorization": f"Bearer {CJ_API_KEY}"},
)
if response.status_code == 200:
claim_number = response.json()["insurance_claim_number"]
await save_insurance_claim(claim["id"], claim_number)
마무리
배송 클레임 자동화의 핵심은 "자동화 가능한 80%를 빠르게 처리하고, 나머지 20%에 인력을 집중"하는 것이다. AI 파손 판정은 5만원 이하 상품에 적용하고, 고가품은 반드시 사람이 검토해야 한다. 택배사 보험 자동 청구까지 연동하면 비용도 회수된다.