← Files vox.aiARCHIVED FILE

references/call-baseline.md

9.85 KB · Nov 7, 2026 · 06:13 UTC

↓ Download file

# 통화 기본 묶음

새 음성 에이전트를 만들 때 업무와 상관없이 들어가야 하는 바탕이다. 사용자가 목적을 좁게 말해도 빼지 않는다. 정해지지 않은 부분은 보수적인 기본값으로 넣고, 사용자 확인이 필요한 것만 마무리 보고의 가정에 적는다. 사용자가 정한 값(재권유 횟수, 마무리 방식 등)이 있으면 그 값이 기본값보다 먼저다. 이미 있는 agent를 좁게 고칠 때는 요청 범위 밖의 묶음을 새로 넣지 않고, 빠진 항목을 보고에 추천으로만 적는다.

## 공통 prompt 골격
1. 첫 줄: 누구(회사·가게 이름 그대로), 누구와 통화하는지, 통화 목적과 완료 조건.
2. 첫 인사 한 줄(첫 발화는 하나): 회사 이름, AI 상담원임, 녹음 사실을 밝힌다. 거는 전화면 명단 변수(이름 등)를 넣는다. 업무 질문은 본인·용건 확인 뒤에 한다.
3. `# 말투와 발화`: 한 번에 한두 문장, 한 턴에 한 질문. 목록·기호·내부 용어, Manual·도구 이름을 말하지 않는다. 숫자·시각·금액은 듣기 쉽게 읽고, 받아 적을 번호만 한 자리씩 읽는다. 큰따옴표 안의 원문은 바꾸지 않는다.
4. Manual 선택 우선순위: ① 위급·안전 ② 진행 중인 Manual 계속 ③ 트리거가 하나만 맞는 Manual ④ 둘 이상 맞으면 미리 정한 먼저 처리할 Manual ⑤ 아무것도 안 맞으면 용건을 한 번 묻는다(거는 전화는 아래 「전제와 다른 말」).
5. `# 예외`: 「어느 단계에서든 업무 절차보다 먼저 적용한다」로 시작한다. 항목마다 알아차릴 신호 → 그대로 말할 한 문장 → 남길 결과 값 → 종료를 쓴다. 재권유·재질문 상한은 통화 전체 기준으로 센다.
6. `# 마무리`: 추가 도움 여부를 묻고, 끝인사 뒤 종료 도구를 부른다.

Manual은 손님 의도(원하는 행동) 하나에 하나로 나누고, 정보 주제별로 나누지 않는다(주제별 사실은 안내하는 쪽 한곳에). 금지에는 대신 할 말을 붙인다.

트리거 경계: 두 일이 섞인 발화는 한쪽 트리거에 포함, 다른 쪽에 제외로 적어 서로 통째로 제외하지 않게 한다. 같은 주제를 안내 Manual과 접수 Manual이 나눠 맡으면, 가능 여부를 묻는 말(「~돼요?」)은 안내 쪽이 답한 뒤 접수 의사를 한 번 묻고, 접수 트리거는 「잡아 주세요·바꿀게요·취소할게요」처럼 행동 의사가 분명할 때로 쓴다. 예약·접수 업무면 이미 잡힌 건의 변경·취소를 맡을 곳을 둔다.

명단 변수를 넣은 문장마다 값이 비었을 때 대신 말할 문장을 함께 쓴다(이름이 없으면 「고객님」). 시간 판단은 `{{current_time}}`으로 하고 오늘 날짜를 글로 박지 않는다.

## 거는 전화
- 본인 확인: 첫 인사에서 회사와 이름으로 본인인지 확인한다. 본인이 아니면 용건을 밝히지 않고, 다음에 연락드리겠다며 마친다.
- 제3자: 가족·동료가 받으면 용건과 개인정보를 말하지 않는다. 본인과 통화할 수 있는 시간만 여쭙고 마친다.
- 통화 가능 확인: 「지금 통화 괜찮으실까요?」를 묻는다. 어렵다고 하면 편한 시간을 여쭤 재통화 희망 시각을 남긴다.
- 음성사서함·자동응답·통신사 비서: 말을 남기지 않고 마친다. `data.callSettings.callScreening`에 개인정보 없는 회사·용건 한 줄의 정적 문장과 응답 뒤 종료를 둔다.
- 수신거부: 「전화하지 마세요」 같은 말을 들으면 사과하고, 수신거부로 남긴 뒤 바로 마친다.
- 번호 경위: 「번호 어떻게 아셨어요?」에 할 답을 항상 둔다. 사용자가 경위를 알려 줬으면 그 말을 그대로 쓴다. 모르면 「정확한 경위는 확인해서 안내드릴게요」라고 답하고 용건을 이어 간다. 「가입 때 남기신 번호로」 같은 그럴듯한 출처를 지어내지 않는다.
- 관심 없음: 사용자가 재권유를 정했을 때만 그 횟수만큼 짧게 권한다. 정하지 않았으면 다시 권하지 않고, 감사 인사 뒤 정중히 마친다.
- 전제와 다른 말(「이미 했어요」, 「해당 없어요」)이나 용건 밖 요청: 용건을 다시 묻지 않고 그 말을 받아 두고, 「확인 후 연락드릴게요」라고 안내한 뒤 결과 항목에 남긴다.
- 목적 밖의 개인정보는 묻지 않는다. 금액·효과·혜택은 받은 값만 말하고 보장하지 않는다.

## 받는 전화
- 첫 인사에서 가게 이름을 말하고 AI 상담원임과 녹음을 밝힌다.
- 문의 유형별로 업무 절차(Manual)를 나누고, 통화 결과에 문의 유형 값을 둔다.
- 운영 시간 분기: 운영 시간을 `{{current_time}}`과 비교한다. 시간 안에는 연결·처리하고, 시간 밖에는 받아 두고 다음 영업일 연락처럼 안내한다. 운영 시간을 모르면 지어내지 않고 「확인 후 안내」로 둔다.
- 넘길 곳: 번호가 있으면 `transfer_call`(warm)로 연결하고, 연결이 실패하면 연락처와 용건을 받아 두는 대안을 둔다. 번호가 없으면 연결하지 않고 받아 둔다.
- 받아 둘 것: 이름, 연락처(「지금 거신 번호로 연락드려도 될까요?」), 용건, 희망 일시, 업무 고유 항목을 하나씩 묻고 통화 결과에도 남긴다.
- 위급 신호는 별도 절차로 먼저 처리한다. 의료 응급이면 119·응급실을, 사고·누출이면 즉시 연결을 안내한다. 진단·법률·투자 판단은 하지 않는다.
- 두 번 못 알아들으면 연결하거나 회신 접수로 넘긴다.
- 안내만으로 끝나지 않는 요청(예약·변경·불만·직원 찾기)은 받아 두는 절차로 넘기는 길을 꼭 둔다.

## 공통 예외
- 침묵: 두 단계로 처리한다. 처음에는 들리는지 묻거나 지금 질문을 한 번 다시 말하고, 그래도 답이 없으면 끝인사 한 문장 뒤 종료한다. 침묵을 동의나 거절로 치지 않는다.
- 못 알아들음: 한 번 다시 묻고, 두 번째에는 위 넘김·받아 두기로 간다.
- 바쁨·재통화 요청, 수신거부, 본인 아님, 자동응답처럼 어디서나 나가는 출구마다 끝인사와 종료를 둔다.

## 통화 결과(postCall)
- 항목을 3개 이상 둔다: ① 결과 값(enum) ② 통화 요약(string) ③ 받아 둔 항목·재통화 희망 시각·수신거부·후속 필요 같은 값.
- 결과 enum은 통화가 끝나는 길마다 값을 하나씩 둔다(완료, 거절, 수신거부, 본인 아님, 바쁨·재통화, 자동응답, 무응답, 못 알아들음, 위급 가운데 이 업무에 있는 것). 판단할 수 없을 때를 위한 「미확인」도 둔다. 받는 전화는 문의 유형과 처리 상태(안내 완료, 요청 받아 둠, 확인 필요, 이해 실패, 무응답 종료 등)를 따로 둔다.
- enum 값은 이 업무의 실제 결과로 쓴다. 희망을 들은 것을 「확정」으로 적지 않는다.
- description에 발화에서 무엇을 보고 어떤 값을 고르는지, 못 들었을 때 무엇으로 두는지 쓴다. 맞장구, 다른 질문에 대한 「네」, 침묵은 업무 결과로 치지 않는다. 정정되면 마지막 값을 쓴다.
- 결과를 받을 웹훅 주소를 받았을 때만 `data.webhookSettings`를 넣는다. 없으면 결과를 통화 기록에서 확인한다는 한 줄을 마무리 보고에 남긴다.

## 도구
- 종료 도구 `end_call`을 최소 하나 둔다. 결과를 나눠 보려면 결과마다 하나씩 두고 description에 그 결과를 쓴다.
- `transfer_call`·`send_sms`는 실제 번호·문구가 있을 때만 만든다. description에는 부를 때를 한 줄로 쓴다.
- 도구를 부르는 곳마다 다음을 적는다: 언제 부르는지(필요하면 손님 동의 뒤), 입력, 결과별로 할 말(성공·없음·실패), 실패하면 다시 부르지 않고 무엇을 하는지.
- 약속마다 실행 수단을 맞춘다. 「문자 보내 드릴게요」에는 `send_sms`, 「연결해 드릴게요」에는 `transfer_call`, 「다시 연락드릴게요」에는 그 연락을 위한 결과 항목이 있어야 한다. 수단이 없으면 약속 문장을 바꾼다. 「완료됐어요·접수됐어요」는 실제로 그렇게 될 때만 말하게 한다.

## Flow일 때
노드 모양과 필드는 [Flow ARS 패턴](flow-ars-pattern.md)을 따르고, 위 묶음은 노드로 옮긴다.
- 원문 질문·고지 사이에 다른 줄을 끼우지 않는다.
- 바쁨·수신거부·본인 아님·자동응답·두 번 무응답·못 알아들음처럼 어디서나 나가는 출구는 전역 노드(`global_node_setting`)로 둔다. 출구마다 끝인사와 종료를 둔다. 정해진 문구 경로만으로 끝내지 않는다.
- 거는 전화는 시작에서 필수 명단 값이 있는지 확인하는 분기를 둔다.
- 침묵으로 분기하지 않는다. `loop_condition`에는 포기 출구를 함께 둔다.

## 저장 전 점검
- 결과 항목 3개 이상(끝나는 길별 결과 enum과 요약 포함), `# 예외` 절, 첫 발화 고지, 침묵 처리, 종료 도구가 있다.
- 거는 전화: 명단 변수가 첫 인사와 본문에 쓰이고 빈 값 대안 문장이 있다. 수신거부·재통화 희망 시각이 결과 항목에 있다. 본인 확인·제3자·음성사서함·번호 경위가 있다. 원문 그대로 말할 멘트는 원문과 순서가 같다.
- 받는 전화: 문의 유형, 시간 분기, 넘길 곳(도구 또는 받아 두기 안내), 받아 둘 것, 위급 안내, 두 번 못 알아들음, 종료 도구가 있다.
- 공통: 사용자 자료에 없는 사실 진술 0, 출처 없는 번호·주소·링크·가격·일정·혜택 0, 한 턴 한 질문. 사용자 자료의 사실(이름·시간·주소·가격·정책·원문 멘트)은 빠짐없이 글자 그대로 옮기고, 자료 출처(파일명·URL)를 prompt에 남긴다.

SHA-256: 57f955d16caee3ed90e1fd30d1706a81d27792f8b558e60100922eb32738c1ea