예약 가능 일시 피드

약속 가능 시간 피드 만들기 및 업로드하기

상담 가능 시간 피드를 만들고 업로드할 때는 다음 안내를 따르세요.

  • 예약 가능 시간 데이터 파일의 경우 예약 가능 시간 피드에 설명된 사양을 따릅니다. 업로드마다 고유한 상담 가능 시간 데이터 파일 이름을 사용하는 것이 좋습니다. 파일 이름에 타임스탬프를 포함합니다(예: appointment availability_1633621547.json).
  • 파일 세트 설명자에서 name 필드를 appointment.availability로 설정합니다. 설명자 파일의 예시는 JSON 샘플을 참고하세요. 업로드마다 고유한 설명자 파일 이름을 사용하는 것이 좋습니다. 파일 이름에 타임스탬프를 포함합니다(예: appointment availability_1633621547.filesetdesc.json). 설명자 파일을 일반 SFTP 서버에 업로드해야 합니다.
  • 30분마다 일반 SFTP 서버에 피드를 전체 새로고침으로 업로드합니다.
  • SFTP 서버 세부정보는 파트너 포털의 구성 > 피드 섹션에서 확인할 수 있습니다.
  • 피드 서버 선택

    파트너 포털에서 피드 서버 선택하기
  • 파트너 포털의 피드 > 기록 섹션에서 피드 처리 상태를 확인합니다.

증분 피드 업로드

약속 이용 가능 여부는 증분 피드도 지원하므로 파트너는 피드 업로드를 사용하여 이용 가능 여부에 적용된 변경사항만 업로드할 수 있습니다.

증분 피드를 업로드하려면 피드의 가용성 슬롯 하나 이상 내에서 is_incremental: true를 설정하세요. 일부 피드의 is_incrementaltrue로 설정되어 있고 일부 피드의 is_incrementalfalse로 설정되어 있으면 시스템에서 모든 피드를 증분으로 취급합니다.

증분 업데이트는 다음 작업을 제공합니다.

변경사항 없음
변경사항이 없는 항목의 경우 가용성 ID를 포함하지 마세요.
이용 가능 여부 업데이트
하나의 예약 가능 시간을 업데이트하려면 수정이 필요한 특정 예약 가능 시간 항목 (동일한 availability_id)을 업로드하고 선택한 필드를 변경합니다.
참석 여부 삭제
재고 항목이 더 이상 제공되지 않거나 삭제해야 하는 경우 spots_available이 0으로 설정된 재고 (동일한 availability_id)를 업로드하면 시스템에서 자동으로 삭제합니다. 또한 판매자 / 엔티티의 모든 데이터를 삭제하려면 모든 예약 가능 시간 슬롯의 spots_available을 0으로 설정하세요. 그러면 예약 가능 시간에서 판매자 / 엔티티 자체가 삭제됩니다.
상담 가능 여부 추가
새 참석 가능 시간 슬롯의 경우 피드 업로드에 고유한 새 availability_id이 포함된 새 참석 가능 시간 항목을 포함합니다. 시스템은 일반 피드에 포함된 것과 동일하게 처리합니다.

정의

AppointmentAvailabilityFeed 정의

message AppointmentAvailabilityFeed {
  repeated AppointmentAvailability data = 1;
}

AppointmentAvailability 정의

// This represents the availability data for a bookable service provided by a
// merchant.
// For example, it can be a haircut/nail manicure service for a beauty salon or
// a massage service for a spa.
// The availability feed should be a list of this message.
message AppointmentAvailability {
  // An opaque string generated by the partner that identifies a service time
  // slot. Must be unique across all entities and service time slots.
  // Strongly recommended to only include URL-safe characters.
  // Required.
  string availability_id = 1;

  // An opaque string generated by the partner that identifies an Entity.
  // Must be unique across all entities.
  // Strongly recommended to only include URL-safe characters.
  // Required.
  string entity_id = 2;

  // An opaque string of ASCII characters from an aggregator partner which
  // uniquely identifies the Service (haircut, nail manicure, massage).
  // Strongly recommended to only include URL-safe characters.
  // Required.
  string service_id = 3;

  // The name of the service provider. For example, the name of the
  // hairdresser or the spa staff member.
  // Optional.
  string provider = 12;

  // Timestamp of when this availability slot starts in UTC.
  // Given in seconds since the unix epoch.
  // For example, 1735714800 seconds for 1 Jan 2025, 07:00:00 (UTC).
  // Required.
  int64 start_time_sec = 4;

  // The minimum number of minutes in advance before the start time that this
  // availability slot can be booked.
  // For example, if the start time is 10:00 AM and the min_advance_minutes is
  // 60, then the latest time this slot can be booked is 9:00 AM on the day of
  // the appointment.
  // If not set, it is assumed to be 0, meaning the slot can be booked at any
  // time before the start time.
  // Optional.
  int32 min_advance_minutes = 13;

  // Number of total spots and available spots of this booking availability.
  // Required.
  int32 spots_total = 5;
  // Required.
  int32 spots_available = 6;

  // The minimum number of spots that should be booked for this availability.
  // For example, a user has to book at least 2 spots for a time slot sometimes.
  // If set, spots_minimum_book should be less or equal to spots_available.
  // Optional.
  int32 spots_minimum_book = 7;

  // Link of this booking availability. Users will be redirected to partner
  // website to continue booking after clicking this link.
  // Required.
  string booking_link = 8;

  // Base price per person.
  // Required.
  google.type.Money base_price = 9;
  // Fee per person.
  // Required.
  google.type.Money fee_price = 10;

  // Whether the feed is incremental or not.
  // By default it is false, meaning the Availability feed will override the
  // previous data for the same entity_id.
  // If this is set to be true, the Availability feed will be proceeded as
  // incremental updates for the same entity_id.
  //    1) If it is a new availability_id, the entry is added.
  //    2) If it is an existing availability_id and the spots_available is 0,
  //       the entry is removed.
  //    3) If it is an existing availability_id and the spots_available is not
  //    0, the entry is updated.
  bool is_incremental = 11;
}

외부 프로토 참조:

골프 이용 가능 여부 피드 샘플

예약 가능 일시 피드

{
  "data": [
    {
      "availability_id": "availability_id_1",
      "entity_id": "entity_id_1",
      "service_id": "service_id_1",
      "start_time_sec": 1728257400,
      "spots_total": 4,
      "spots_available": 4,
      "spots_minimum_book": 2,
      "booking_link": "https://www.googleappointments.com/a_link_direct_to_booking_page",
      "base_price": {
        "currency_code": "USD",
        "units": 80,
        "nanos": 0
      },
      "fee_price": {
        "currency_code": "USD",
        "units": 1,
        "nanos": 750000000
      }
    },
    {
      "availability_id": "availability_id_2",
      "entity_id": "entity_id_2",
      "service_id": "service_id_2",
      "start_time_sec": 1728259200,
      "spots_total": 4,
      "spots_available": 4,
      "spots_minimum_book": 2,
      "booking_link": "https://googlegolfappointments.com/a_link_direct_to_booking_page",
      "base_price": {
        "currency_code": "USD",
        "units": 80,
        "nanos": 0
      },
      "fee_price" : {
        "currency_code": "USD",
        "units": 2,
        "nanos": 850000000
      }
    }
  ]
}

설명자 파일

{
  "generation_timestamp": 1663347730,
  "name": "appointment.availability",
  "data_file": [
    "appointment_availability_1663347730.json"
  ]
}