예약 시스템을 만드는 방법 (그리고 왜 캘린더는 쉬운 부분일 뿐인지)
예약 시스템에는 네 가지 정보가 필요하다, 무엇을 예약하는지, 누가 그것을 처리하는지, 어떤 시간대에, 그리고 각 예약이 얼마나 걸리는지. 지속 시간은 거의 항상 빠뜨리는 항목이고, 바로 이것 때문에 일정이 겹치게 된다.
히메나는 탐피코에서 물리치료 클리닉을 혼자 운영한다. 그녀의 하루에는 세 가지 다른 일이 섞여 있다: 한 시간이 걸리는 초기 평가, 40분짜리 후속 세션, 그리고 25분이면 끝나는 기기 치료.
이 모든 걸 WhatsApp으로 예약받는다. 2주에 한 번씩 똑같은 일이 벌어진다: 11시에 초기 평가를 받으러 온 신규 환자가 도착했는데, 이미 11시 30분에 다른 세션을 약속해 둔 상태다. 누군가는 대기실에서 40분을 기다리거나, 아니면 그냥 돌아가 버린다.
히메나에게 필요한 건 더 예쁜 캘린더가 아니다. 필요한 건 초기 평가가 후속 세션과 같은 시간 틀에 들어갈 수 없다는 걸 아는 일정표다. 이 글에서 다룰 내용이 바로 그것이다: 시간이 맞아떨어지는 예약 시스템을 만드는 방법, 그리고 거의 모두가 빠뜨리는 그 한 가지 정보.
예약 시스템이란 무엇이고, 문의 양식과는 어떻게 다를까?
예약 시스템은 고객이 선택할 수 있는 시간을 결정하고, 그 시간을 그 고객을 위해 확보해 두는 시스템이다. 실제로 비어 있는 시간대를 보여주고, 누군가 그중 하나를 선택하면 다른 사람에게는 그 시간대가 더 이상 보이지 않는다.
문의 양식은 그런 일을 전혀 하지 않는다. “목요일 오후가 좋겠어요”라는 메시지를 받아서 당신이 답장할 수 있도록 받은함에 넣어둘 뿐이다. 그건 요청이지, 예약이 아니다.
둘 다 저마다 쓰임이 있다, 다른 상황에 맞게. 매번 시간을 협의한다면—먼저 사안을 보고 그다음 얼마나 걸릴지 결정한다면—양식으로 충분하다. 반면 자신이 하는 일마다 시간이 얼마나 걸리는지 미리 알고 있다면, 그때는 캘린더가 더 유리하다. 시간을 맞추기 위해 주고받는 메시지 하나하나가 이제는 비용으로 청산되지 않는 시간이기 때문이다.
작동하게 만드는 네 가지 정보
온라인 일정표는 어디에 구축하든 정확히 네 가지가 필요하다:
- 무엇을 예약하는지. 당신의 서비스들: 초기 평가, 후속 세션, 기기 치료.
- 누가 또는 무엇이 그것을 처리하는지. 이를 ‘리소스’라고 부른다: 당신 자신, 각 스타일리스트, 각 의자, 각 진료실, 각 코트. 누군가 예약하면 점유되는 대상이다.
- 어떤 시간대에. 당신의 평소 주간 운영 시간: 월요일부터 금요일은 9시부터 2시, 4시부터 7시까지, 토요일은 9시부터 1시까지.
- 각 예약이 얼마나 걸리는지. 초기 평가는 60분. 후속 세션은 40분. 기기 치료는 25분.
처음 세 가지는 거의 항상 채워진다. 네 번째가 사람들이 빠뜨리는 항목이고, 바로 그게 모든 걸 망가뜨린다.
캘린더가 있는데도 왜 예약이 겹칠까?
지속 시간이 두 군데에 쓰여 있고, 그 둘이 서로 다른 말을 하기 때문이다.
당신은 사이트에 “초기 평가 — 60분”이라고 텍스트로 적어 두었다, 가격 옆에 보여주면 좋으니까. 그런데 캘린더 설정에서는 시간대가 30분 단위로 나뉘어 있다, 기본값이 그렇게 나왔기 때문이다. 고객은 60분을 읽고, 30분짜리 블록을 선택하고, 캘린더는 그 30분을 그대로 받아들인다.
누구도 실수한 게 아니다. 숫자가 두 개 있는데, 캘린더는 그중 하나만 따를 뿐이다.
그래서 Proyecta에서 이 기능을 설계할 때, 지속 시간은 서비스가 아니라 리소스에 귀속되도록 했다. 서비스에 캘린더가 있는 경우, 존재하는 유일한 지속 시간은 리소스의 지속 시간이며, 바로 이 숫자가 시간대를 나눈다. 서비스 항목에 따로 채워 넣을 수 있는 두 번째 “지속 시간” 필드는 일부러 없다: 거기에 적힌 숫자는 캘린더가 제공하는 그 시간대와 모순을 일으킬 뿐이다.
변경하기 전까지는 기본값이 예약당 60분이며, 서비스별로 가용성(Disponibilidad) 화면에서 바꾸면 된다. 대기실이 가득 차는 상황을 막아주는 바로 그 단계는 이것이다: 화면에 들어가서 후속 세션에 40, 기기 치료에 25를 입력하는 것, 딱 한 번만 하면 된다.
그리고 같은 시간대에 두 사람이 들어가지 못하게 막는 쪽은 당신이 설정할 필요가 없다: 엔진이 단일 작업으로 그 시간을 확보하기 때문에, 두 사람이 동시에 전송 버튼을 눌러도 둘 다 11시를 차지할 수는 없다.
문을 열지 않는 날은 어떻게 막아둘까?
예외(excepciones)로 처리한다, 주간 운영 시간과는 별개로.
평소 운영 시간은 규칙이다: 화요일은 9시부터 2시까지. 예외는 9월 16일, 연휴 때 떠나는 날, 교육을 받으러 가는 오전 같은 것이다. 그 날을 표시해 두면 그날은 시간대 제공을 멈추고, 평소 운영 시간은 전혀 건드리지 않으며 월요일에 다시 되돌릴 필요도 없다.
가장 작은 부분이지만 가장 고맙게 느껴지는 기능이다. 하루를 닫는 유일한 방법이 전체 운영 시간을 지우는 것뿐이라면, 언젠가는 반드시 다시 설정하는 걸 잊게 된다.
고객이 보는 것과 당신이 보는 것
환자는 당신의 사이트에 들어가서, 서비스를 선택하고, 실제로 비어 있는 시간을 확인한 뒤 하나를 예약한다. 서비스에 가격이 있으면 그 자리에서 결제하고, 가격이 없으면 예약이 바로 확정된다, 무료로. 예약을 가능하게 하려고 무언가에 반드시 가격을 매길 필요는 없다.
이후에는 계정 페이지가 남아서, 앞으로의 예약을 확인하고 당신에게 메시지를 보내지 않고도 취소할 수 있다. 예약이 확정되면, 확인 메시지에 이미 취소하거나 일정을 변경하는 방법이 포함되어 있다.
당신 쪽에는 화면이 두 개 있고, 이 둘을 혼동하지 않는 게 중요하다. **가용성(Disponibilidad)**은 구조를 설정하는 곳이다: 각 서비스의 리소스, 주간 운영 시간, 예외, 그리고 각 예약의 지속 시간. **예약 목록(Reservas)**은 매일매일의 일정표로, 누가 몇 시에 오는지 확인하는 곳이다. 첫 번째는 다시 열 일이 거의 없다. 두 번째는 매일 아침 열게 된다.
서비스에 운영 시간을 설정하지 않으면 어떻게 될까?
그러면 그 서비스에는 캘린더가 없고, 문의 양식처럼 작동한다: 요청이 들어오고 당신이 답장한다.
이게 많은 사람이 겪는 “시간대가 안 뜬다”는 문제의 이유다. 고장 난 게 아니다: 그 서비스에는 운영 시간을 가진 리소스가 설정된 적이 없어서, 할 수 있는 유일하게 정직한 일을 하는 것뿐이다. 즉, 가용성을 지어내는 대신 메시지를 받아두는 것이다.
이건 의도적으로 활용할 수도 있다. 히메나는 두 서비스에만 캘린더를 두고, 하나—이동 시간이 어디로 가느냐에 따라 달라지는 출장 치료—는 요청 방식으로 남겨두었다. 당신의 사업 전체가 반드시 시간 블록에 맞아야 하는 건 아니다.
이번 주 안에 준비하는 방법
설명만 하면 바로 작동한다. 말 그대로, 이렇게 써 보라:
“탐피코에 있는 제 물리치료 클리닉을 위한 페이지를 만들어 주세요. 온라인으로 예약 가능한 서비스 세 가지: 60분짜리 초기 평가(700페소), 40분짜리 후속 세션, 25분짜리 기기 치료. 저는 월요일부터 금요일 9시부터 2시, 4시부터 7시까지, 토요일은 9시부터 1시까지 진료합니다. 출장 치료는 요청 방식으로만 받고 싶어요.”
여기서 바로 공개된 페이지가 나온다, 캘린더와 당신의 예약 목록, 그리고 WhatsApp으로 보낼 수 있는 링크까지 함께. 누구에게든 전달하기 전에 두 가지를 확인하라: 각 서비스의 지속 시간이 실제로 걸리는 시간과 맞는지, 그리고 운영 시간이 지난해 것이 아니라 이번 주 것인지.
그리고 무엇을 구축하기 전에, 거의 항상 당신이 넣으려던 숫자를 바꿔놓는 5분짜리 작업을 해보라: 지난주 일정표를 열어서, 적혀 있던 시간만큼 걸리지 않은 예약을 모두 표시해 보라. 세 개 이상 나온다면, 거기에 당신의 문제가 있는 것이고, 그건 캘린더 탓이 아니었다.
당신의 사업으로 직접 확인해 보고 싶다면, proyecta.dev에서 설명하고 바로 공개해 보라.