KAT Cloud로그인

통화 후 안내 문자 자동 발송: 전화와 문자를 잇는 시나리오

통화 후 안내 문자 자동 발송은 CALL_COMPLETED 웹훅으로 통화 결과와 요약을 받아 규칙에 맞는 문자를 POST /chat으로 보내고, SEND_RESULT 웹훅으로 전달 여부를 확인하는 흐름입니다. 상태별 규칙, 중복 방지, 비용을 정리했습니다.

사용 사례KAT Cloud 팀6분 읽기
통화 후 안내 문자 자동 발송: 전화와 문자를 잇는 시나리오

통화 후 안내 문자 자동 발송은 KAT Cloud(캣클라우드)가 통화 종료 뒤 보내는 CALL_COMPLETED 웹훅으로 통화 상태와 요약을 받고, 내 서버가 규칙에 맞는 문자를 POST /chat-room과 POST /chat으로 보낸 다음, SEND_RESULT 웹훅으로 전달 여부를 확인하는 흐름입니다. 전화와 문자가 같은 번호, 같은 API로 오가므로 고객은 방금 통화한 번호로 확인 문자를 받습니다. 이 글은 특정 업종의 실제 사례가 아니라 예약·접수형 전화에 두루 쓸 수 있는 설계 예시입니다.

어떤 통화 뒤에 어떤 문자를 보낼까

모든 통화에 문자를 보내면 고객에게 소음이 됩니다. CALL_COMPLETED의 status(ANSWERED, MISSED, REJECTED, UNKNOWN)와 tag(AI, DIRECT, AI_TO_DIRECT, UNKNOWN), isInbound 값으로 규칙을 먼저 정합니다.

조건상황보낼 문자
ANSWERED + AIAI가 접수·안내로 끝낸 통화접수 내용 확인 문자
ANSWERED + AI_TO_DIRECT직원에게 넘어간 통화담당자 상담 안내 또는 생략
ANSWERED + DIRECT직원이 바로 받은 통화대개 생략(직원이 판단)
MISSED받지 못한 통화콜백 안내(번호당 하루 1회)
REJECTED, UNKNOWN거절·확인 불가보내지 않음

업종마다 규칙은 다릅니다. 병원이라면 예약 변경 확인, AS 접수라면 접수번호 안내, 식당이라면 예약 내용 확인이 첫 번째 줄에 들어갑니다. 부재중 기록은 status로 구분하고, 웹훅으로 받지 못한 기록이 있는지 통화 기록 증분 조회로 보완하면 빠짐이 줄어듭니다.

AI 통화가 문자로 이어지는 장면

AI가 토요일 저녁 4명 예약을 확인하고 창가 자리 요청을 기록한 뒤 통화 후 문자로 접수 내용을 보내겠다고 안내하는 예시 대화
통화에서 약속한 문자는 CALL_COMPLETED를 받은 뒤 보냅니다.

AI 에이전트가 통화 중에 "문자로 보내 드릴게요"라고 말하도록 응대 지침(KAT Cloud 콘솔에서 설정)에 넣어 두면, 고객은 문자를 기다리게 되고 다시 전화하는 일이 줄어듭니다. 대신 약속한 문자는 반드시 나가야 하므로 아래 흐름에 실패 처리까지 넣어야 합니다. 직원이 판단해야 하는 내용, 예를 들어 확정이 필요한 예약은 "접수"와 "확정"을 문구에서 구분합니다.

처리 흐름: CALL_COMPLETED에서 SEND_RESULT까지

통화가 끝나면 KAT Cloud가 내 서버로 CALL_COMPLETED를 보내고, 내 서버가 채팅방 확인과 문자 발송을 요청한 뒤 SEND_RESULT로 결과를 받는 순서도
chatId로 발송 요청과 최종 결과를 이어 붙입니다.
  1. 1웹훅을 받으면 먼저 200으로 응답합니다. 웹훅 타임아웃은 10초이므로 문자 발송은 큐에 넣어 비동기로 처리합니다.
  2. 2callHistoryId로 이미 처리한 통화인지 확인합니다.
  3. 3status·tag·isInbound로 위 표의 규칙을 적용합니다.
  4. 4문구는 정해진 템플릿에 summary에서 뽑은 값(날짜, 인원, 접수 내용)만 채웁니다.
  5. 5고객 번호(수신 통화면 fromNumber)와 channelId로 POST /chat-room을 호출해 채팅방 ID를 받습니다. 같은 조합이면 기존 채팅방 ID가 돌아옵니다.
  6. 6POST /chat에 externalMessageId로 call-{callHistoryId}를 넣어 보냅니다.
  7. 7응답의 chatId를 저장해 두고, SEND_RESULT의 resultStatus가 4100(SMS), 6600(LMS/MMS), 7000(카카오) 중 하나면 성공으로 처리합니다.
JavaScript
const SUCCESS = new Set(['4100', '6600', '7000']);

async function onCallCompleted(data) {
  if (await alreadyHandled(data.callHistoryId)) return;
  const template = pickTemplate(data.status, data.tag, data.isInbound);
  if (!template) return;
  const customer = data.isInbound ? data.fromNumber : data.toNumber;
  const room = await api.post('/chat-room', { channelId: data.channelId, phoneNumber: customer });
  const chat = await api.post('/chat', {
    chatRoomId: room.data.result,
    content: template(extractFields(data.summary)),
    externalMessageId: `call-${data.callHistoryId}`,
  });
  await saveSent(data.callHistoryId, chat.data.result.chatId);
}

async function onSendResult(data) {
  await markDelivery(data.chatId, SUCCESS.has(data.resultStatus), data.resultMessage);
}

summary와 sttAI의 구조는 통화 받아쓰기와 요약 데이터 구조에, 채팅 API 호출은 채팅 API로 문자 보내기에, 결과 코드 처리는 문자 발송 결과 확인에 자세히 있습니다. 웹훅 서버 뼈대는 Node.js(Express)로 웹훅 수신 서버 만들기에서 시작할 수 있습니다. 이벤트 형식은 API 문서의 웹훅 이벤트를 확인하세요.

월 비용 감 잡기

웹훅과 채팅 API는 비즈니스 요금제 그룹에서 쓸 수 있으므로 비즈니스 플랜(월 50,000원, 수신 3,000분·SMS 200건 포함)을 기준으로 합니다. 가정: 월 수신 1,000통, 통화당 청구 3분(3,000분), 음성 모델 Qwen3.8 Omni Flash Realtime(분당 10원), AI 받아쓰기·요약 사용, 통화 뒤 문자 1,000건. 부가세 별도입니다.

항목SMS로 보낼 때LMS로 보낼 때
비즈니스 플랜50,000원50,000원
수신 3,000분포함 3,000분 이내, 0원0원
음성 모델3,000분 × 10원 = 30,000원30,000원
받아쓰기·요약3,000분 × 20원 = 60,000원60,000원
문자 1,000건(1,000 − 200) × 10원 = 8,000원1,000 × 32원 = 32,000원
합계148,000원172,000원

LMS 열은 포함 200건이 LMS에는 적용되지 않는다고 보고 보수적으로 계산했습니다. 1,000건 기준 차이는 24,000원이므로, 확인 문자는 90바이트(한글 약 45자) 안으로 줄여 SMS로 보내고 긴 안내만 LMS로 보내는 것이 경제적입니다. 단가는 요금에 있습니다.

도입 시 주의할 점

  • 요약을 그대로 보내지 않기: AI 요약은 틀릴 수 있고 내부 메모 성격의 문장이 섞일 수 있습니다. 고객에게는 템플릿 문구와 확인된 값만 보냅니다.
  • 녹음이 꺼진 통화: isRecorded가 false인 통화는 요약과 받아쓰기가 없으므로 기본 문구를 쓰거나 보내지 않습니다.
  • 중복 발송 방지: 같은 이벤트를 두 번 처리하는 경우에 대비해 callHistoryId 처리 기록과 externalMessageId를 함께 씁니다.
  • 실패 처리: 결과 코드가 성공이 아니면 재시도 횟수를 정하고, 그래도 실패하면 담당자에게 알립니다. 웹훅을 못 받았을 때는 GET /chat(chatRoomId)으로 채팅방 메시지의 sendStatus와 resultStatus를 조회해 보완합니다.
  • 시간대와 내용: 새벽 부재중 통화의 콜백 안내는 아침으로 미루는 등 발송 시간을 정합니다. 정보성 문자에 광고 문구를 섞으면 별도 규정이 적용될 수 있으므로 실제 적용은 법률 검토가 필요합니다.

자주 묻는 질문

통화가 끝나면 문자는 언제 보낼 수 있나요?

KAT Cloud의 CALL_COMPLETED 웹훅은 통화가 끝나고 받아쓰기·요약 처리가 완료되면 전송되므로, 끊은 직후가 아니라 요약이 준비된 시점에 문자를 보낼 수 있습니다. 요약이 필요 없는 단순 안내라도 이 이벤트를 기준으로 삼으면 통화 결과(status, tag)를 확인한 뒤 보낼 수 있습니다.

같은 문자가 두 번 나가지 않게 하려면 어떻게 하나요?

내 서버가 callHistoryId별 처리 여부를 저장해 두고, KAT Cloud POST /chat의 externalMessageId에 통화 기록 ID를 넣어 보내는 방식이 안전합니다. externalMessageId는 API 문서에 중복 방지용 외부 메시지 ID로 정의되어 있습니다.

문자가 실제로 도착했는지 어떻게 확인하나요?

KAT Cloud에서 POST /chat 직후의 상태는 PENDING이고, 최종 결과는 SEND_RESULT 웹훅의 resultStatus로 옵니다. SMS는 4100, LMS·MMS는 6600, 카카오는 7000이면 전달 성공이며, 발송 응답의 chatId로 두 기록을 이어 붙입니다.

  • #통화 후 문자
  • #전화 문자 연동
  • #CALL_COMPLETED
  • #SEND_RESULT
  • #사용 사례

Get started

만든 AI에게 전화번호를 주세요.

070 번호 발급, SIP 직접 연결, 음성 AI 모델 연결, 문자·웹훅까지 API 하나로. 월 10,000원부터.