← 블로그 목록
유즈케이스2026-06-01

병원 AI 예약 시스템 만들기 — 진료 예약·약 처방·검진 안내 24시간 자동

병원 AI 예약 시스템 만들기 — 진료 예약·약 처방·검진 안내 24시간 자동

병원 데스크가 진료 보면서 전화도 받기는 무리. 영업 외에는 예약 놓침. ClawOps 070 + AI 로 24시간 예약·진료시간·간단 안내를 자동화. 의료법 준수와 환자 정보 보호 패턴까지.

0. 의료법 / 개인정보보호법 주의 (반드시 먼저 확인)

  • AI 가 진단·약 추천 등 의료 행위 금지 (의료법 위반)
  • 환자 진료 기록 노출 금지 — 이름 검증·진료 결과는 의료진만
  • AI 는 "예약·시간·위치·보험 적용 여부" 같은 행정 정보만
  • 통화 녹음시 환자 명시 동의 필요 (의료법 + 개인정보보호법)
  • 의심나면 의료변호사 컨설팅

이 글의 가이드는 행정 정보 안내 범위에 한정.

1. 070 발급 + 가게 정보 정리

from clawops import ClawOps
client = ClawOps()
number = client.numbers.create()

clinic.json:

{
  "name": "OOO 치과",
  "doctors": [
    {"name": "김OO 원장", "specialty": "임플란트·일반진료"},
    {"name": "이OO 부원장", "specialty": "교정·소아진료"}
  ],
  "hours": "월-금 09:30-18:30 (점심 13:00-14:00), 토 09:30-13:00, 일 휴무",
  "address": "서울시 강남구 OOO로 123, 5층",
  "parking": "건물 지하 2시간 무료 (진료확인서 발급)",
  "insurance": "건강보험 가능, 비급여(임플란트/교정) 별도",
  "appointment_policy": "최소 24시간 전 예약, 응급 환자 우선",
  "kids_welcome": true
}

2. system prompt — 안전한 행정 안내 범위

SYSTEM_PROMPT = f"""
당신은 {clinic['name']} 의 예약 안내 직원입니다.

# 할 수 있는 것
- 진료 예약 (날짜/시간/원장 지정)
- 영업시간/위치/주차 안내
- 보험 적용 여부 일반 안내 ("급여 vs 비급여" 수준)
- 진료 후기·간단 안내문 발송

# 절대 못 하는 것
- 의료적 진단·치료 권유 ("이 증상이면 무슨 병이다" 같은 답변 금지)
- 약 추천·복용량 안내
- 다른 환자 진료 기록 누설
- 비용 흥정·할인 약속
- 응급 상황 판단 — "지금 통증이 심하시면 즉시 응급실 119" 안내 후 통화 종료

# 운영
- 영업: {clinic['hours']}
- 주소: {clinic['address']}
- 주차: {clinic['parking']}

# 의사 목록
{chr(10).join([f"- {d['name']} ({d['specialty']})" for d in clinic['doctors']])}

# 행동 규칙
- 짧게, 한국어로
- 환자 이름·생년월일·전화번호만 받기 (주소·주민번호 X)
- 예약 가능 확인은 check_availability_tool 사용
- 확정은 create_appointment_tool
- 응급 상황 의심시 119 안내 후 정중히 hang_up
- 통화 시작 전 "통화는 예약 안내용으로 녹음됩니다, 동의하시나요?" 안내 + 동의 받기

# 첫 발화
"안녕하세요, OOO 치과입니다. 예약·진료 안내 도와드리겠습니다. 
어떤 진료 도움이 필요하신가요?"
"""

3. tool 정의 — 예약 가능 + 등록

from clawops.agent.tools import tool
import datetime
from zoneinfo import ZoneInfo

@tool
def check_appointment_slot(date: str, time: str, doctor: str = None) -> dict:
    """예약 가능 슬롯 조회. date=YYYY-MM-DD, time=HH:MM, doctor 선택 가능."""
    dt = datetime.datetime.fromisoformat(f"{date}T{time}").astimezone(ZoneInfo("Asia/Seoul"))
    # 영업시간 / 휴진일 / 점심시간 체크
    if dt.weekday() == 6: return {"available": False, "reason": "일요일 휴진"}
    if dt.weekday() == 5 and dt.hour >= 13: return {"available": False, "reason": "토요일 오후 휴진"}
    if dt.hour < 9 or dt.hour >= 18 or 13 <= dt.hour < 14:
        return {"available": False, "reason": "영업시간 외"}
    # 의사 별 슬롯 (예시)
    booked = db.query(
        "SELECT COUNT(*) FROM appointments WHERE date = ? AND time = ? AND doctor = ?",
        (date, time, doctor or "any"),
    ).fetchone()[0]
    return {"available": booked < 1, "doctor": doctor}

@tool
def create_appointment(date: str, time: str, name: str, phone: str, 
                       birth_year: int, doctor: str, reason: str) -> dict:
    """예약 등록. AI 가 슬롯 확인 후 호출."""
    db.execute(
        "INSERT INTO appointments (date, time, name, phone, birth_year, doctor, reason) "
        "VALUES (?, ?, ?, ?, ?, ?, ?)",
        (date, time, name, phone, birth_year, doctor, reason),
    )
    return {"confirmed": True, "code": f"A{int(datetime.datetime.now().timestamp())}"}

@tool
def send_directions_sms(phone: str) -> dict:
    """병원 위치 SMS 발송."""
    client.messages.create(
        to=phone, from_=number.phone_number,
        body=f"{clinic['name']} 위치: {clinic['address']}, 주차: {clinic['parking']}",
    )
    return {"sent": True}

4. serve

from clawops.agent import ClawOpsAgent, OpenAIRealtime

ClawOpsAgent(
    from_=number.phone_number,
    session=OpenAIRealtime(
        system_prompt=SYSTEM_PROMPT,
        language="ko-KR",
        voice="alloy",
        tools=[check_appointment_slot, create_appointment, send_directions_sms],
    ),
).serve()

5. 통화 흐름 예시 (안전 범위)

환자: "여보세요, 다음주 화요일 오전 임플란트 상담 예약 가능한가요?"
AI: "통화 안내드리기 전에 통화 녹음 동의 부탁드립니다. 동의하시면 '네' 라고 말씀해 주세요."
환자: "네"
AI: "감사합니다. 다음주 화요일은 6월 3일이네요. 오전 시간대 확인해드릴게요. 
    임플란트는 김OO 원장님께서 보세요. 10시 30분 가능하시네요. 
    예약하시려면 성함, 연락처, 출생연도 알려주세요."
환자: "김OOO, 010-1234-5678, 1985년이요."
AI: "네 확인됐습니다. 김OOO 님, 6월 3일 화요일 오전 10시 30분 
    임플란트 상담 예약 완료됐고요, 예약번호 A123456 입니다. 
    위치 안내 SMS 보내드릴까요?"
환자: "네 부탁드려요."
AI: "보내드렸습니다. 그날 뵙겠습니다, 감사합니다."
[hang_up]

6. 응급 상황 트리거

환자: "여보세요, 어금니 너무 아파서 못 자겠어요."
AI: "통증이 심하신 것 같은데, 야간/응급 통증은 응급실 진료가 안전합니다. 
    지금 즉시 119 또는 가까운 야간 응급실 이용 권해드립니다. 
    내일 오전에 저희 병원 응급 예약 도와드릴까요?"

응급 의심시 119 안내 의무.

7. 비용

  • ClawOps Individual ₩19,000/월 (월 100통 정도)
  • OpenAI Realtime 통화 시간만큼

8. 환자 정보 보호

  • 환자 발화는 ClawOps 가 자동 녹음 (Add-on Transcription 활성화시 전사도)
  • 녹음/전사 데이터는 GCP 서울 리전 내 저장
  • 7년 (의료법 기준) 보관 후 자동 폐기 설정
  • 외부 LLM 호출 (OpenAI 등) 시 환자 식별 정보 (이름·전화) 는 placeholder 로 마스킹 권장

다음 단계

관련 글 더 보기

ClawOps AI 전화 API로 시작하기

070 번호 발급부터 AI 음성 통화까지, REST API 몇 줄이면 됩니다.