솔로 상담 예약 키트 — 개인 개업을 위한 초기 상담 예약 시스템
⚠️ 먼저 읽으세요 — HIPAA 전제 조건 (무엇이든 만들기 전에)
이 시스템은 비즈니스 동반자 계약(BAA)이 체결된 Google Workspace 계정 내에서 실행될 때만 HIPAA를 지원합니다. 다음 모든 조건이 충족될 때까지 시스템을 구축, 배포하거나 실제 고객 데이터를 입력하지 마십시오:
- Google Workspace(Business Starter, Standard, Plus 또는 이에 준하는 요금제)를 개인 진료소 도메인에서 사용 중이어야 합니다. 무료 개인 Gmail 계정(@gmail.com)은 안 됩니다. 개인 계정은 BAA를 체결할 수 없으며 이 시스템이나 데이터를 보관해서는 안 됩니다.
- Google Workspace BAA가 서명되어 있어야 합니다. Google 관리 콘솔(관리자 → 계정 → 법률 / '비즈니스 동반자 수정안' — 정확한 메뉴 이름은 변경될 수 있음)에서 Google Workspace/Cloud Identity에 대한 BAA를 검토 및 수락하고 날짜를 기록해 두십시오. 서명은 Workspace 관리자가 한 번 클릭으로 완료할 수 있습니다. 찾을 수 없는 경우 중단하고 먼저 해결하십시오. 적용된다고 가정하고 진행하지 마십시오.
- 모든 것이 해당 Workspace 계정에 있어야 합니다. Apps Script 프로젝트, 예약 스프레드시트, 상담 일정을 받는 캘린더, 확인 이메일을 보내는 메일함이 모두 동일한 Workspace 사용자(귀하)에 속해야 합니다. 개인 Google 계정에서 어떤 부분도 실행하지 말고 개인 캘린더를 예약 대상으로 지정하지 마십시오. 개인 계정은 BAA 외부에 있습니다.
- 계정 보안 강화: 계정에 2단계 인증(패스키/고급 보호 권장)을 적용하고, 비밀번호 관리자에 강력한 고유 비밀번호를 사용하며, 본인이 제어하는 복구 옵션을 설정하십시오.
소프트웨어가 'HIPAA 인증'을 받을 수는 없으며, 이 키트가 자체적으로 진료소를 HIPAA 규정을 준수하도록 만들지는 않습니다. 이 키트는 HIPAA 지원 보호 조치(데이터 최소화, 해시된 만료 관리 링크, 일반 캘린더 이벤트, 데이터 보존 스윕, 감사 로그 — references/security-and-hipaa.md 참조)와 함께 구축되었으며, BAA에 서명할 의사가 있는 공급업체(Google)에서 실행됩니다. 규정 준수를 위해서는 자체 위험 분석, 정책, 교육 및 개인정보 보호 관행 고지도 필요합니다. 위 전제 조건 중 하나라도 누락된 경우, 에이전트의 첫 번째 작업은 앱을 구축하는 것이 아니라 소유자가 이를 해결하도록 돕는 것입니다.
목적
그룹 개업에서 사용하는 예약 시스템을 그룹 관련 기능 없이 개인 개업 의사에게 제공합니다:
- 파트 A — 공개 예약 앱. 잠재 내담자가 간단한 적합도 확인(거주 주, 지불 방식, 상담 대상, 언어)에 응답하고, 실제로 열린 시간대(귀하가 설정한 상담 시간에서 실제 캘린더의 바쁜 시간, 휴무, 기존 예약을 제외한 시간)만 확인한 후 무료 초기 상담(기본 15분, 설정 가능)을 예약할 수 있는 공개 웹 페이지(진료소 웹사이트에 삽입)입니다. 내담자는 확인 이메일(.ics 파일 포함)과 개인 재예약/취소 링크를 받고, 귀하는 최소한의 알림을 받습니다. 리마인더(약 24시간 전)와 사후 상담 후속 이메일은 타이머로 실행됩니다.
- 파트 B — 소유자 콘솔(하나의 앱, 세 가지 보기). PIN으로 보호되는 비공개 앱으로, 그룹 개업에서 세 개의 앱으로 나누는 기능을 통합합니다:
- 내 상담 — 예정/과거/취소된 상담, 클릭 시 전체 세부 정보, 과거 상담을 'No-Show'로 표시
- 가용성 — 주간 상담 시간(분할 요일 허용), 특정 일자 시간, 휴무, 신규 내담자 수용 on/off, 예약 설정(상담 빈도 상한, 최소 사전 통지 시간, 버퍼, 시간 증분) 설정 가능; 해결된 가용성과 예약 페이지가 계산하는 대로 다음 7일의 열린 시간대 확인
- 설정 및 도구 — 코드를 건드리지 않고 모든 이메일 템플릿과 예약 규칙 편집, 예약 통계 및 감사 추적 보기, 감사/예약 CSV 내보내기(관리 토큰 제외)
참조 구현: 하나의 스프레드시트와 귀하의 Google 캘린더를 기반으로 하는 두 개의 Google Apps Script 웹 앱. 타사 예약 서비스, 분석 도구, 추적기 없음.
솔로 에디션에서 의도적으로 제거된 기능(그룹 → 솔로)
- '캘린더 연결' 앱 없음. 그룹 개업에서 이 앱이 존재하는 이유는 각 제공자가 자신으로 로그인하여 자신의 캘린더를 진료소의 중앙 계정과 '이벤트 변경' 권한으로 공유하고, 캘린더 ID를 예약 시스템에 등록하기 위함입니다. 솔로 소유자는 스크립트 소유자이자 캘린더 소유자입니다. 예약 앱은 이미 귀하로 실행되며 귀하의 캘린더에 대한 소유자 액세스 권한을 가집니다. 공유할 것도 등록할 것도 없습니다. 설정은 다음과 같습니다: 구성 탭에 캘린더 ID를 입력(기본 캘린더의 ID는 귀하의 이메일 주소와 동일함 또는 동일한 Workspace 계정에 전용 '초기 상담' 캘린더를 만들고 해당 ID 사용)한 다음 내장된
checkSetup()을 실행하여accessRole=owner및freebusy=OK를 보고하는지 확인합니다. - 제공자 명단 워크북 및 명단 동기화 없음. 한 명의 의사 = 하나의 구성 행에 이름, 자격, 면허 주, 패널, 언어, 담당 연령대, 슬라이딩 스케일 여부, 소개 링크, 시간대, 캘린더 ID를 포함합니다. 동기화 작업, 다른 사람에게 제공자 ID 전달 없음.
- 제공자 매칭/라우팅 엔진 없음. 그룹 마법사는 내담자를 올바른 의사에게 라우팅합니다. 솔로 마법사는 귀하와의 적합성만 확인합니다: 잘못된 주, 수락하지 않는 패널, 담당하지 않는 연령대, 슬라이딩 스케일이 필요할 때 없는 경우 → 귀하의 연락처 이메일과 함께 명확한 부적합 메시지 표시, 막다른 길이 되지 않음.
- 다중 제공자 관련 기능 없음: 공유 명단에 제공자별 PIN 없음(구성 탭에 하나의 소유자 PIN, 해시됨), '대신 편집' 기능 없음, 제공자 필터 없음, 진료소 전체 휴무 없음(귀하의 휴무는 그냥 귀하의 휴무입니다).
에이전트에게 전달 (이 키트를 받는 동료를 위해)
이 키트는 플랫폼 중립적입니다: 일반 마크다운(오픈 에이전트 스킬 형식)이며 스킬 로딩 에이전트, 작업 공간을 가진 코딩 에이전트, 파일이 업로드된 채팅 전용 에이전트 등 모든 기능을 갖춘 AI 에이전트와 함께 작동합니다. 이 폴더의 README.md에는 플랫폼별 지침이 있고 PROMPT.md에는 복사하여 붙여넣을 수 있는 시작 프롬프트가 있습니다. 두 경로 모두 동일한 지점으로 이어집니다:
- 맨 위의 HIPAA 전제 조건이 충족되었는지 확인(Workspace + 서명된 BAA + 보안 강화). 충족되지 않은 경우 먼저 수행합니다.
- 아래 설정 인터뷰에 응답합니다. 에이전트는 구축 전에 한 번 질문해야 합니다.
- 에이전트가 두 앱을 구축 및 테스트하고,
references/test-checklist.md의 테스트 체크리스트를 테스트 예약과 함께 실행한 후에만 공개 링크를 새 예약 페이지로 전환합니다.
기존 예약 링크(있는 경우)는 테스트 체크리스트가 종단 간 통과할 때까지 대체 수단으로 유지합니다.
이 시스템을 구축하는 에이전트를 위한 지침(모든 플랫폼)
- 유사 시스템에 대한 기억이 아닌, 이 파일을 기반으로 작업하십시오. 코드를 작성하기 전에 이 파일과 모든 참조 자료를 읽으십시오. 참조 자료와 소유자의 실제 지침이 충돌하는 경우, 소유자의 지침이 우선하며 변경 사항은 기록됩니다.
- 귀하의 결과물은 파일 + 검증된 단계입니다. 도구가 무엇이든 상관없습니다. 각 프로젝트를 붙여넣기 가능한 파일(
Code.gs,Index.html, 해당되는 경우Manage.html,appsscript.json)로 생성하십시오. 소유자의 Google 계정 또는 Apps Script API/배포 경로에 직접 액세스할 수 있는 경우 배포할 수 있습니다. 단, 소유자의 승인을 받은 후에만 가능하며, 제공된 결과에서 확인해야 합니다. 해당 액세스 권한이 없는 경우(대부분의 채팅 에이전트는 그렇지 않음), 파일을 전달하고references/setup-and-deploy.md의 단계를 클릭별로 소유자에게 안내하십시오: Google 로그인, 범위 권한 부여 및 배포 작업은 소유자가 수행해야 하며, 이를 수행할 수 없는 에이전트는 배포했다고 암시하지 않고 솔직하게 말해야 합니다. - 프로덕션에서 사용하는 형태로 테스트하십시오. 스프레드시트/캘린더 계층을 스텁하고 출시된 클라이언트가 보내는 정확한 인수 형태로 모든 서버 함수를 호출하는 로컬 테스트 환경을 구축하십시오. 코드 변경 후 매번 실행하십시오. 마지막에만 실행하지 마십시오.
- 공급업체별 기능을 요구하지 마십시오. 여기의 모든 것은 Google Apps Script + Sheets + Calendar + Gmail + Markdown입니다. 플랫폼이 편의 기능(배포 통합, 파일 도구)을 제공하는 경우 사용할 수 있지만, 빌드가 이에 의존해서는 안 됩니다. 동일한 키트는 다른 에이전트를 사용하는 다음 소유자에게도 작동해야 합니다.
설정 인터뷰 (한 번 수집, 기록, 추측 금지)
- 전제 조건: Workspace 도메인, 모든 것을 소유할 계정(예: [email protected]), 서명된 BAA(날짜), 2단계 인증 활성화.
- 진료소: 진료소 이름, 내담자에게 표시될 이름 + 자격 증명, 진료소 연락처 이메일, 알림 이메일(동일할 수 있음), 웹사이트 URL, 개인정보 처리방침 URL.
- 캘린더: 기본 캘린더 또는 동일한 계정의 전용 상담 캘린더? 해당 ID를 구성 탭에 입력합니다. (권장: 전용 캘린더 — 상담 이벤트가 시각적으로 분리되고, 해당 캘린더의 가용 여부만 공유하여 기본 캘린더의 내용을 노출하지 않을 수 있습니다. 어떤 방식을 사용하든 앱은 가용 여부만 읽고 일반 상담 이벤트를 작성합니다.)
- 적합 프로필(마법사의 결제/자격 옵션을 결정하며, 구성 탭에서 생성되며 페이지에 하드코딩되지 않음): 면허를 보유한 주; 수락하는 보험 패널, EAP 및 기금(정확한 내담자 대상 이름); 자가 부담 및 슬라이딩 스케일(예/아니오 및 공개적으로 사용하는 최저 금액 표현); 치료를 제공하는 언어; 담당 대상(성인/청소년/아동/커플/가족); 미국 외 지역에 거주하는 내담자를 볼 것인지 여부(예: 상담은 무료이지만 지속적인 치료는 자가 부담/슬라이딩만 가능 — 마법사는 이에 따라 결제 옵션을 제한함).
- 예약 규칙(참조 시스템의 기본값 — 확인 또는 변경): 상담 시간 15분; 예약 기간 14일; 최소 사전 통지 12시간; 시간 증분 30분; 바쁜 이벤트 전후 버퍼 10분; 재예약/취소 마감 4시간; 리마인더 상담 24시간 전; 사후 상담 후속 이메일 상담 종료 5분 후; 내담자 이메일/전화당 하나의 활성 상담(중복 방지 켜짐).
- 시드할 가용성: 초기 주간 상담 시간 + 시간대, 첫날부터 실제 시간대가 있도록 함. (이후 콘솔에서 유지 관리하게 됩니다.)
- 이메일 문구: 확인, 리마인더 및 후속 템플릿(토큰 예:
{ClientFirstName},{EventDateTime},{ProviderName}); 후속 이메일이 가리키는 설문조사/다음 단계 링크; 발신자 이름/주소(귀하의 주소 또는 [email protected]과 같은 계정의 별칭 — 별칭은 추가 OAuth 범위가 필요함, 배포 참조 참조). - 브랜딩: 공개 페이지의 진료소 웹사이트 모양(글꼴, 텍스트 색상, 버튼/링크 강조 색상, 모서리 스타일). 공개 페이지는 플랫 웹사이트 스타일을 사용합니다. 포털 유리/오로라, Google 브랜딩, 기본 브라우저 대화상자 없음.
- 언어: 영어만 또는 이중 언어? 참조 시스템은 두 번째 전체 언어(번역된 질문 세트, 내담자가 예약한 언어로 이메일 전송)를 지원합니다. 해당 언어로 내담자에게 서비스를 제공하는 경우에만 추가하십시오.
- 개인정보 고지: 내담자가 동의해야 하는 짧은 예약 양식 개인정보 문구(수집되는 정보, 이메일이 응급 상황에 모니터링되지 않음, 미국 내 위기 상담 전화 988/911). 모든 예약은 동의 타임스탬프 + 고지 버전을 저장합니다. 문구가 변경될 때마다 버전 문자열을 업데이트하십시오.
구성 방식(한 문단)
두 앱 모두 귀하의 Workspace 계정 내에서 귀하(USER_DEPLOYING)로 실행됩니다. 예약 앱은 공개적이고 익명입니다: 방문자는 스프레드시트나 캘린더 세부 정보를 전혀 볼 수 없습니다. 가용성은 가용 여부만으로 계산됩니다. 두 방문자가 동일한 시간대를 예약할 수 없도록 스크립트 잠금 아래에서 예약이 이루어집니다. 예약은 예약 탭에 한 행을 쓰고, 귀하의 캘린더에 일반 제목의 이벤트("초기 상담 — ", 최소한의 설명, 내담자 참석자 없음)를 생성하며, 내담자에게 이메일을 보냅니다(확인 + .ics + 개인 관리 링크, 토큰은 SHA-256 해시로만 저장). 귀하에게는 최소한의 알림이 전송됩니다(제목에 내담자 이름 없음). 5분 타이머가 리마인더 및 후속 이메일을 보내고 데이터 보존 스윕을 실행합니다. 콘솔은 PIN으로 보호되며 동일한 워크북을 읽고 쓰며 전체 예약 세부 정보를 볼 수 있는 유일한 장소입니다. 전체 데이터 모델 및 우선 순위 규칙: references/architecture.md.
빌드 순서(순서 변경 금지)
- 워크북 + 예약 앱
references/booking-app-spec.md및references/setup-and-deploy.md에 따라 (시트 생성,setupSheet(),checkSetup(),setupTriggers()실행, 배포). - 콘솔 앱
references/console-app-spec.md에 따라 (PIN 게이트, 내 상담, 가용성, 설정 및 도구) 동일한 워크북에서. - 테스트
references/test-checklist.md로 — 실제 종단 간 테스트 예약, 이중 예약 시도, 이메일 링크를 통한 재예약/취소, 부적합 경로, 수동 리마인더/후속 이메일. - 라이브 전환: 예약 앱을 진료소 웹사이트의 예약 페이지에 삽입하고, 공개 링크를 교체하며, 실제 예약이 정상적으로 접수될 때까지 기존 링크를 대체 수단으로 유지합니다.
에이전트를 위한 엄격한 규칙 (비용이 많이 드는 교훈)
- 범위: 코드가
SpreadsheetApp.openById를 호출할 때마다 전체https://www.googleapis.com/auth/spreadsheets범위를 선언하십시오. 읽기 전용 범위는 이러한 모든 호출에서 오류를 발생시킵니다. 앱이 GmailApp 과 MailApp을 모두 사용하여 메일을 보내는 경우 둘 다gmail.send및script.send_mail을 선언하십시오(gmail.send만으로는 MailApp을 포함하지 않으며, 오류는 try/catch에 의해 삼켜져 메일이 자동으로 전송되지 않습니다). GmailApp을 통해 별칭으로 보내려면gmail.settings.basic도 필요합니다. 캘린더 기능을 사용하려면 매니페스트에서 캘린더 고급 서비스(v3)를 활성화해야 합니다. - 배포: 첫 번째 배포 후에는 항상 기존 배포를 새 버전으로 업데이트하십시오. 새 배포를 만들지 마십시오. 새 URL은 모든 삽입 및 링크를 손상시키고 이전 URL은 계속 이전 코드를 제공합니다. 배포된 콘텐츠를 다시 읽고 제공된 마크다운을 확인하십시오.
(원본 파일의 나머지 내용은 중요하지만 번역 요청에서 생략되었습니다. 전체 번역이 필요한 경우 원본 전체를 제공해 주십시오.)