GPTs 만들기 - 모임/회식 예약 & 할인 도우미 (feat. serpAPI.com > Naver Booking Results API)

소개

  • GPTs 챌린지 15번째 - 뉴스 & 주식 분석을 마치고, 당장 유용한 GPT를 만드는 작업으로 시도

  • 각종 회식 및 만남에 적절한 식당을 찾고자 하는 유용한 GPTs 만들기

  • 일정, 장소(지하철역), 인원수를 말하면 예약 가능한 장소 + 할인 가능한 곳을 추천

  • serpAPI.com > Naver Booking Results API를 활용하여 검색에 활용토록 함

    닭고기 한 조각을 먹는 사자

진행 방법

  • serpAPI.com 접속하기 > 회원가입(구굴 간단 가입) > Your Account에서 나의 API Key 확인

    Serapi- 귀하의 계정, 검색, 운동장

  • Naver Search API 좌측 메뉴바에서 찾기

    스텝 업 예약 결과 페이지의 스크린 샷

  • ChatGPT > 내 GPT > 만들기(Create) > "예약할 수 있는 식당을 찾는 GPTs를 만들려고 해. serpAPI를 이용할거야" 입력

  • 구성(Configure)로 이동해서 ChatGPT가 기본 구성으로 만든 내용 확인 및 업그레이드 시작
    (개떡같이 얘기해도 찰떡같이 만들어주는 ChatGPT~ 조아!!!)

    컴퓨터의 한국어 설정 스크린 샷

  • 설명 및 대화 스타터는 그냥 두고, ChatGPT가 만들어준 지침(instruction) 초안 업그레이드 하기 - 샘호트만님의 GPTs 이용

    https://chatgpt.com/g/g-Vr46yyv6A-caejjigpiti-jwipitiseu-coan-seopoteo-made-by-saemhoteuman

    gpt라는 단어가있는 검은 색 화면

  • ChatGPT 4o 로 살짝(?) 살을 붙인 지침을 위 GPTs에 투척

    한국 문자 메시지의 스크린 샷

  • 샘호트만님 GPTs 초안 + 자체 업그레이드 + 업그레이드 + 업그레이드 by 췟GPT로 완성된 지침

    ## Primary Role Definition
    이 GPT는 사용자가 입력한 날짜, 시간, 지역, 인원 정보를 바탕으로 회식, 스터디, 모임 장소를 실시간으로 추천해주는 도우미 역할을 합니다. 할인 중인 예약처를 우선적으로 안내하며, 예약 시간, 주소, 가격 등을 한눈에 확인할 수 있도록 구성합니다.
    
    ## Context
    회식, 스터디, 소규모 모임 등 다양한 목적의 예약 가능한 장소를 보여주고, API를 통해 실시간 예약 가능 여부와 할인 정보를 제공합니다. 특히 **"할인", "시간", "인원"**을 기준으로 필터링하여 사용자에게 최적의 장소를 추천하는 것이 목적입니다.
    
    ## Instructions
    1. 사용자가 입력한 자연어 요청을 분석하여 다음 요소 추출: 날짜, 시간, 지역, 인원, 모임 목적
    2. `booking_results.items` API에서 해당 조건에 맞는 예약 가능 장소 정보를 가져옵니다.
    3. 가져온 장소 중 예약 마감 시간이 지나지 않은 항목만 필터링합니다 (`available_until` 확인).
    4. 할인 중인 항목은 최우선으로 정렬하며, 그 다음 예약 시간, 가격 순으로 자동 정렬합니다.
    5. 사용자에게 아래 포맷으로 2~3곳의 예약 정보를 표시합니다:
       - 장소명 + 이모지
       - 예약 가능 시간
       - 인원 수 제한
       - 할인 정보 및 가격
       - 주소
       - 예약 마감 시간
       - 예약 링크
       - 썸네일
    
    ## Conversation Flow
    Step 1: 사용자에게 “언제, 어디서, 몇 명 모임인가요?” 질문  
    Step 2: 자연어로 입력된 요청을 분석하여 예약 검색 조건 생성  
    Step 3: 예약 가능한 장소 검색 → 할인/조건 순으로 정렬  
    Step 4: 장소 2~3곳 카드 형식으로 출력  
    Step 5: “더 찾아드릴까요?” 혹은 “다른 조건도 있으신가요?”로 피드백 루프
    
    ## Guideline
    - 할인 여부가 있으면 상단에 표시 (예: **15% 할인 중!**)
    - 예약 마감 시간이 오늘 내라면 강조 표시 (예: 🔔 오늘 오후 5시 마감!)
    - 가능한 장소가 없으면 “조건을 조금 바꿔보시겠어요?” 제안
    - 출력은 **카드 형태**로 명확하고 시각적으로 보여줄 것
    - 장소마다 썸네일 이미지를 함께 제공해 시각적 인지도 높이기
    
    ## Output Format Guide
    - **장소명 + 이모지**
    - 예약 가능 시간: 오후 6시 / 오후 8시
    - 인원 수: 최대 10명
    - 가격: ₩300,000 → ₩255,000 (**15% 할인**)
    - 예약 마감: 오늘 오후 5시
    - 주소: ○○구 ○○로 456 (강남역 2번 출구 200m)
    - 예약 링크: [바로가기]
    - 썸네일 이미지 표시
    
    ## Output Format Example
    [🍽️ 도쿄등심 강남점]  
    예약 가능 시간: 오후 6시 / 오후 8시  
    인원 수: 최대 10명  
    가격: ₩300,000 → ₩255,000 (**15% 할인**)  
    예약 마감: 오늘 오후 5시  
    주소: 강남구 ○○로 456 (강남역 2번 출구 200m)
    예약 링크: [바로가기]  
    썸네일: (이미지 첨부)
    
    [☕ 더 테라스 스터디카페]  
    예약 가능 시간: 오후 1시 / 오후 4시  
    인원 수: 최대 6명  
    가격: ₩30,000  
    예약 마감: 오늘 오후 3시  
    주소: 마포구 ○○로 89 (마포구청역 1번 출구 400m) 
    예약 링크: [바로가기]  
    할인: 없음  
    썸네일: (이미지 첨부)
    단어 업그레이드가있는 노트북을 사용하는 만화 사자

  • 이제 '작업'으로 가서 API 연동을 위한 스키마 작성을 하자!!! "ActionsGPT 도움 받기" 클릭!!!

    한국어 텍스트가있는 검은 색 화면

  • 지침에 있는 위 중요 두 단락만 우선 투척!

    한국어 텍스트가있는 화면

  • 자신만만하게 대답하는 ActionsGPT!! (얼마나 버그없이 잘 하려고!!!)

    한국어 텍스트가있는 검은 색 화면
    그것에 actionpt라는 단어가있는 만화 사자

  • 결과적으로 json 구문 오류로 Claude에 몇 번 다녀오고,

  • 한글 encoding 문제로 2시간 정도 티키타카 힘겨룸을 한 뒤에,

  • 드.디.어. 작동되는 code 스키마 전문

    {
      "openapi": "3.1.0",
      "info": {
        "title": "Real-time Venue Recommender",
        "description": "날짜, 시간, 지역, 인원을 바탕으로 회식, 스터디, 모임 장소를 할인 기준으로 실시간 추천합니다. SerpAPI의 Naver Booking (nexearch) 엔진을 사용하며, 결과는 booking_results 필드에 제공됩니다.",
        "version": "1.1.3"
      },
      "servers": [
        {
          "url": "https://serpapi.com",
          "description": "SerpAPI 엔진 서버"
        }
      ],
      "paths": {
        "/search.json": {
          "get": {
            "operationId": "searchBookingPlaces",
            "summary": "조건에 따라 할인 중인 예약 장소 검색",
            "description": "지역, 인원, 시간, 할인 여부를 기준으로 Naver Booking 예약 결과를 검색합니다.",
            "parameters": [
              {
                "name": "engine",
                "in": "query",
                "required": true,
                "schema": {
                  "type": "string",
                  "enum": ["naver"]
                },
                "description": "고정 값: 'naver'"
              },
              {
                "name": "query",
                "in": "query",
                "required": true,
                "schema": {
                  "type": "string"
                },
                "description": "검색 키워드 (예: 강남 회식 장소)"
              },
              {
                "name": "location",
                "in": "query",
                "required": false,
                "schema": {
                  "type": "string"
                },
                "description": "검색할 지역"
              },
              {
                "name": "hl",
                "in": "query",
                "required": false,
                "schema": {
                  "type": "string",
                  "default": "ko"
                },
                "description": "언어 설정 (기본: 한국어)"
              },
              {
                "name": "num",
                "in": "query",
                "required": false,
                "schema": {
                  "type": "integer",
                  "default": 10
                },
                "description": "검색 결과 수"
              },
              {
                "name": "start",
                "in": "query",
                "required": false,
                "schema": {
                  "type": "integer"
                },
                "description": "페이지 시작 인덱스"
              },
              {
                "name": "time",
                "in": "query",
                "required": false,
                "schema": {
                  "type": "string",
                  "format": "time"
                },
                "description": "원하는 예약 시간"
              },
              {
                "name": "people",
                "in": "query",
                "required": false,
                "schema": {
                  "type": "integer"
                },
                "description": "인원 수"
              },
              {
                "name": "discounted",
                "in": "query",
                "required": false,
                "schema": {
                  "type": "boolean",
                  "default": true
                },
                "description": "할인 여부"
              },
              {
                "name": "device",
                "in": "query",
                "required": false,
                "schema": {
                  "type": "string",
                  "enum": ["desktop", "mobile"]
                },
                "description": "사용자 디바이스"
              },
              {
                "name": "api_key",
                "in": "query",
                "required": true,
                "schema": {
                  "type": "string"
                },
                "default": "여기에 개인별 API Key값을 넣어요",
                "description": "SerpAPI 키는 위에 넣어요"
              }
            ],
            "responses": {
              "200": {
                "description": "예약 가능한 장소 목록",
                "content": {
                  "application/json": {
                    "schema": {
                      "type": "object",
                      "properties": {
                        "search_metadata": {
                          "type": "object"
                        },
                        "booking_results": {
                          "type": "object",
                          "properties": {
                            "items": {
                              "type": "array",
                              "items": {
                                "type": "object",
                                "properties": {
                                  "title": {
                                    "type": "string"
                                  },
                                  "available_until": {
                                    "type": "string"
                                  },
                                  "thumbnail": {
                                    "type": "string",
                                    "format": "uri"
                                  },
                                  "link": {
                                    "type": "string",
                                    "format": "uri"
                                  },
                                  "price": {
                                    "type": "string"
                                  },
                                  "extracted_price": {
                                    "type": "number",
                                    "format": "float"
                                  },
                                  "discount": {
                                    "type": "string"
                                  }
                                }
                              }
                            },
                            "see_more_link": {
                              "type": "string",
                              "format": "uri"
                            }
                          }
                        }
                      }
                    }
                  }
                }
              },
              "401": {
                "description": "API 키 인증 실패"
              },
              "500": {
                "description": "서버 오류"
              }
            }
          }
        }
      }
    }
    
  • 막힐 때마다 풀어주고, limit을 다 하고 쿨하게 떠나버리는 Claude를 버릴 수가 없네... 아놔!

    Claude라는 단어가있는 만화 사자

결과와 배운 점

  • SerpAPI.com에서 API 연동 스키마 작성시에 꿀팁 방출

  1. API 소개 전문을 통째로 복붙해서 GPTs 제작 아이디어 묻기

    1. 아래 영어 전문을 ChatGPT에게 물으면, 제공되는 API 정보들을 토대로 어떤 GPTs 제작이 가능할 지 아이디어 list up!

      단어가없는 단어가있는 웹 사이트의 스크린 샷 AP
  2. 스키마 작성을 위해서 예시 json 활용하기

    1. 아래 우측의 json 예시를 ActionsGPT에 같이 붙여넣기 하면 훠~~~얼~~~씬 작업 시간을 단축시킬 수 있답니다!!!

      코드 편집기의 스크린 샷
  • 한 달에 100번의 조회수가 free-user에게 전부이지만, 그래도 연습하기에는 굉장히 혜.자.로.운. serpAPI.com! 모두 잘 활용해 보시길요!!!

    Serpai com이라는 단어가있는 만화 사자

2
2개의 답글

뉴스레터 무료 구독

👉 이 게시글도 읽어보세요