5월의 경우 날짜가 1일부터 31일까지 있으므로, 판단 노드에서 사용자가 입력한 숫자가 1~31 범위에 해당하는지 확인합니다.
만약 사용자가 300과 같이 범위를 벗어나는 숫자를 적었다면, 제대로 된 날짜를 다시 입력하라고 안내하도록 연결해 두었습니다. 유효한 날짜를 입력해야 다음 단계인 시간 선택 단계로 넘어가게 됩니다.
TIP: 판단 노드 활용하기
식당 예약 봇의 경우는 1~31 사이의 숫자만 입력하는 판단을 하도록 설정하였지만, 다른 형식의 판단도 가능합니다. 예를 들어 오프라인 행사에 참여한 사람에게만 사전에 비밀번호를 알려준 다음에, 나중에 챗봇으로 접속해 비밀번호를 입력해야만 다음 단계로 진행할 수 있도록 설정할 수 있습니다.
자바스크립트 정규식 비교를 활용하면 좀 더 복잡한 판단 노드도 만들 수 있습니다.
01000000000과 같이 전화번호를 제대로 입력했는지 확인하려면: ^01(?:0|1|[6-9])(?:\d{3}|\d{4})\d{4}$
YYYYMMDD와 같이 8자리 생년월일 형식을 입력하도록 하려면: ^(19[0-9][0-9]|20\d{2})(0[0-9]|1[0-2])(0[1-9]|[1-2][0-9]|3[0-1])$
날짜를 정했다면 그 날짜에 예약 가능한 슬롯이 있는지 확인해야 합니다. 예약은 17시부터 20시까지 총 4개 슬롯으로 정해두었는데, 다른 사람이 이미 예약을 했다면 해당 슬롯은 더이상 예약이 불가능합니다. 예를 들어서 20일에 17시부터 20시까지 모든 슬롯이 예약이 찼다면 예약이 불가능하다고 안내를 해줘야 합니다.
이를 위해 HTTP 메시지 노드와 판단 노드를 활용합니다. HTTP 메시지 노드로 GET 메소드를 활용해 해당 날짜에 예약 가능한 슬롯의 개수를 세어 그 개수가 0이라면 예약 불가를, 1보다 크다면 어떤 시간을 선택할지 안내해 줍니다.
예약이 가능한 날짜를 골랐다면 선택 가능한 시간대를 보여줘야 합니다. HTTP 선택 노드 GET 메소드를 활용하여 서버에서 실시간으로 예약 가능한 슬롯만 조회하여 노출합니다.
④ 예약자 정보 받기: 입력 노드
날짜와 시간까지 선택했다면 이제 예약자 정보를 받습니다. 이름과 전화번호를 입력하는 노드를 연결해 주었으며, 위에서 소개한 판단 노드 정규식 팁을 활용해 전화번호 유효성 판단 검증까지 연결해 두었습니다.
⑤ 예약 정보 서버에 기록하기: HTTP 메시지 노드
이제 취합한 모든 정보를 서버에 기록할 차례입니다. POST 메소드로 설정한 후, 사용자가 선택한 날짜인 ${desiredDate.data}, 시간인 ${selectAvailableTime.value}, 이름인 ${customerName.data}, 전화번호인 ${customerPhoneNumber.data}가 입력되도록 Body에 입력합니다.
PART 2: 예약 조회 및 취소하기
예약을 조회할 때에는 입력 노드와 HTTP 메시지 노드, 판단 노드가 하나의 묶음으로 작동합니다. 입력 노드에서는 고객이 자신의 정보를 입력하고, HTTP 노드는 해당 정보를 서버와 통신해 조회하고, 판단 노드는 조회한 결과에 따라 결과가 있는지 없는지를 판단해 다음에 어떤 노드로 갈지 정해줍니다.
① 이름 조회하기: HTTP 메시지 노드 & 판단 노드
입력 노드로 이름을 받은 후, HTTP 메시지 노드를 활용해서 해당 이름을 조회합니다. 이름 값의 변수인 ${reservedCustomerName.data}를 조회하면 서버와 통신하여 “count” 값을 출력받게 됩니다. 입력한 이름으로 조회되는 데이터가 있다면 “count”에 숫자가 1 또는 그 이상(동명이인이 예약했다면 2 이상), 조회가 안 될 경우 “count”가 0이라고 노출될 것입니다.
이 “count” 값의 결과에 따라 조회 결과를 판단합니다. HTTP 메시지 노드에서 통신 결과로 불러온 ${checkCustomerName.count}가 0 초과일 경우 해당 이름으로 예약이 존재한다는 의미입니다. 따라서 다음 단계인 전화번호 확인 단계로 이어줍니다. 반면 ${checkCustomerName.count} 값이 0이거나 아예 값이 없다면 입력한 이름으로 예약된 데이터가 없다는 의미입니다. 이러한 사용자에게는 다시 이름을 확인하라고 연결해 줍니다.
② 전화번호 조회하기: HTTP 메시지 노드 & 판단 노드
동명이인이 있을 수 있으므로, 이름만으로는 예약 확인이 어렵습니다. 따라서 추가로 전화번호까지 입력하도록 하였습니다. 이때 입력받은 변수는 ${reservedPhoneNumber.data}입니다.
HTTP 메시지 노드로 앞서 입력받은 이름인 ${reservedCustomerName.data}와 방금 입력받은 전화번호 ${reservedPhoneNumber.data} 둘 다 충족하는 데이터가 있는지 조회합니다. 예약 데이터가 있다면 왼쪽과 같이 “booking”이라는 값이 노출될 것이고, 없다면 오른쪽 그림과 같이 “target”까지만 노출될 것입니다.
③ 조회 결과 보여주기: 메시지 노드
위 ②번에서 HTTP 메시지 노드에서 조회한 결과를 메시지 노드로 보여줍니다. HTTP 메시지 노드에서 “booking” 값 하위에 있던 항목이 의미하는 것은 아래와 같습니다.
month: 예약한 달 정보 / ${checkPhoneNumber.booking.month}로 출력
date: 예약한 날짜 정보 / ${checkPhoneNumber.booking.date}로 출력
hour: 예약 시간 정보 / ${checkPhoneNumber.booking.hour}로 출력
id: id는 해당 예약의 고유한 값입니다. 추후에 예약을 취소할 때 사용합니다.
name과 phone은 이미 사용자가 정보를 입력했기 때문에 사용하지 않습니다.
④ 예약 삭제하기: HTTP 메시지 노드
위 과정으로 예약을 성공적으로 조회했다면, 해당 예약을 그대로 유지할지 취소할지 선택할 수 있습니다.
이번 HTTP 메시지 노드에서는 서버와 통신에서 삭제 요청을 해야하기 때문에 메소드로 DELETE를 사용합니다. URL이라는 텍스트 아래의 드롭다운에서 DELETE를 선택해 줍니다.
앞의 ② 전화번호 조회하기에서 booking 값을 불러올 때 “id”라는 항목이 있었습니다. 삭제할 때에는 이 id 값을 사용합니다.
따라서 Params에 Key로 id를, value에 변수인 ${checkPhoneNumber.booking.id}를 넣어주면 사용자가 조회한 항목을 삭제하게 됩니다.
어떤가요? 이번 예시에서는 다양한 방법으로 HTTP 노드를 활용하고, 서버에서 가져온 데이터를 다시 판단 노드와 결합해 구성해 보았습니다. 이번 식당 예약 봇 예시는 구성이 조금 복잡해서 개발자가 아니라면 이해하기 조금 어려울 수도 있습니다.
HTTP 노드 활용 방법에 대해 좀 더 자세한 설명이 필요하다면, 이전에 소개해 드렸던 휴가 조회 봇 🏖️, 음료 주문 봇 ☕️ 콘텐츠를 읽어보시면 도움이 될 거에요.