고객 문의를 닫는 조건을 코드로 생각하기: 발송과 완료는 다르다
고객 문의를 시스템에서 ‘완료’로 옮기는 시점은 단순히 답장을 보냈을 때가 아닙니다. 요청을 실제로 처리했더라도 고객에게 확인 대상과 재문의 경로를 알리지 않았다면, 상태는 닫혔지만 대화는 닫히지 않은 셈입니다. 이 글은 작은 팀에서 문의 상태를 설계할 때 쓸 수 있는 종료 조건 을 정리합니다. 특정 제품 구현이 아니라 운영 규칙의 예시입니다. 먼저 상태와 이벤트를 분리하기 처리 중 : 담당자가 조사·수정·발송을 진행하는 상태 고객 확인 대기 : 처리 결과와 확인할 항목을 고객에게 전달한 상태 완료 : 합의한 완료 기준을 충족하고 기록한 상태 ‘메일을 보냈다’는 이벤트이지, 자동으로 ‘완료’가 되는 조건이 아닙니다. 보내기 버튼의 성공 여부와 수신자가 다음 행동을 이해했는지는 서로 다른 사실입니다. 종료…
Closing a customer inquiry involves more than just sending an email. Even if a request is processed, if the customer is not informed about verification and follow-up paths, the state remains "open," not "closed." This article outlines the conditions for closing inquiries, not specific to any product implementation but rather operational rules.
First, separate states and events. In the process of investigation, modification, and sending, the state is "in progress." After sending the results and customer verification items, the state is "waiting for customer confirmation." The "completion" state occurs when the agreed completion standards are satisfied and recorded.
Sending an email does not automatically mark an inquiry as "completed." The success of the "send" button and the recipient understanding the next steps are two different matters. The completion email requires four fields: work done by the team, what the customer sees, the results of the processing, and the path for their response. What has changed is the subject of the customer's attention. The file, screen, or item that has been altered must be clarified.
The customer's confirmation is necessary. If required, keep the inquiry in "waiting for customer confirmation." Only move to "completed" when the project-specific agreed standards are met. Not receiving a reply should not be regarded as sufficient. To determine if an inquiry is truly closed, a verification function should be added before the "close" button. Below is a simple example of representing the closure of a state through code.
```typescript
type Closeout = {
workDone: string;
customerCheck: string;
remainingOwnerAndTime: string;
replyPath: string;
completionAgreed: boolean;
};
function nextStatus(c: Closeout) {
const hasHandoff = [
c.workDone.trim().length > 0,
c.customerCheck.trim().length > 0,
c.remainingOwnerAndTime.trim().length > 0,
c.replyPath.trim().length > 0,
].every(value => value.length > 0);
if (!hasHandoff) return "working";
return c.completionAgreed ? "closed" : "awaiting_customer";
}
```
It's best to record in the log "who agreed on the standards" and "when the state changed." If a customer responds later, you must not cling to the previous completion state, but instead, reconnect to the same conversation and process it again. To avoid duplicate notifications, attaching the message ID and inquiry ID to the email can also be helpful.
Take a look at a recent closed inquiry today. Have you clearly defined the subject of the customer's verification and follow-up path? If not, revise the completion statement before the state. The perspective of finalizing business emails can also be seen in "Reviewing Official Emails."
Written by urgent.news from Dev.to's reporting — not their text. Machine-written — may contain errors; check the original before relying on it.