온라인 서비스 추가

온라인 서비스는 호스팅된 플랫폼을 통해 완전히 온라인으로 제공되는 서비스로, 고객이 직접 서비스에 참석할 필요가 없습니다. 온라인 서비스의 예는 다음과 같습니다.

  • Zoom을 통한 온라인 요가 수업
  • Google Meet을 통한 온라인 메이크업 마스터 클래스
  • Skype를 통한 온라인 배관 동영상 추정치

온라인 서비스 자격요건

구현을 시작하기 전에 온라인 서비스 정책 및 권장사항을 검토하세요.

온라인 서비스 구현

온라인 서비스 통합은 기존 엔드 투 엔드 통합의 부가기능이며 기존 구현을 일부 변경해야 합니다. 개략적인 변경사항은 다음과 같습니다.

  • 피드: type, VirtualSession, DirectMerchantPayment, CancellationPolicy(아직 추가되지 않은 경우)을 서비스 피드에 추가합니다.
  • 예약 서버: CreateBooking 메서드에 VirtualSessionInfo를 추가하고 사용자에게 가상 설정 정보가 포함된 이메일을 보냅니다.
  • 실시간 업데이트(기존 동작): InventoryUpdate RTU를 통한 가상 인벤토리 변경, BookingNotification RTU를 통한 예약 수정, 서비스 RTU를 통한 서비스 변경사항 처리

피드

서비스 피드

온라인 서비스를 지원하기 위해 다음 필드가 서비스 피드에 추가됩니다.

서비스 피드 사양

 enum ServiceType {
     SERVICE_TYPE_UNSPECIFIED = 0;
    // Service that provides dining reservation.
    SERVICE_TYPE_DINING_RESERVATION = 1;
    // Service that provides food ordering in general, could be either takeout
    // or delivery or both.
    SERVICE_TYPE_FOOD_ORDERING = 2;
    // Service that only provides food delivery.
    SERVICE_TYPE_FOOD_DELIVERY = 6;
    // Service that only provides food takeout.
    SERVICE_TYPE_FOOD_TAKEOUT = 7;

    // Service that provides appointments or classes. Recommended for (1) health
    // and fitness, (2) spa and beauty, and (3) financial consults and
    // evaluations services. Please see the supported service types:
    // https://developers.google.com/maps-booking/guides/end-to-end-integration/overview
    SERVICE_TYPE_APPOINTMENT = 5;
    // Service that provides appointment for an online class or session which
    // will be fully virtual. Must be set if enabling virtual service bookings.
    SERVICE_TYPE_ONLINE_APPOINTMENT = 8;
  }
// Information about virtual/online session. E.g. Online yoga class, virtual
// cooking class etc.
message VirtualSession {
  // Instructions on how this virtual class is set up. If the partner does not
  // include the video URL with the booking, then this text must include when
  // the video URL will be shared with the user. Eg. “Zoom url will be mailed
  // 30 minutes prior to the class”. (Recommended)
  // Only the folloiwng four tags are supported: <br>, <strong>, <em>, <i>.
  Text session_instructions = 1;

  // Requirements for the given virtual session. Eg. yoga mat,
  // cooking utensils etc. (Recommended)
  // Only the folloiwng four tags are supported: <br>, <strong>, <em>, <i>.
  Text session_requirements = 2;

  // Information about the virtual platform used in this session. (Required to
  // enable virtual services)
  message VirtualPlatformInfo {
    // Enum to indicate which virtual platform would be used by the merchant.
    enum Platform {
      PLATFORM_UNSPECIFIED = 0;
      // The merchant is flexible in which video platform they use.
      FLEXIBLE = 1;
      GOOGLE_HANGOUTS = 2;
      GOOGLE_MEET = 3;
      ZOOM = 4;
      SKYPE = 5;
      YOUTUBE = 6;
      // Should be set if the video platform used is different from the ones
      // mentioned here.
      OTHER = 7;
    }
    Platform platform = 1;
    // The name of the platform if the platform is set to OTHER. (Required if
    // platform is set to OTHER)
    Text other_platform_name = 2;
  }
  VirtualPlatformInfo virtual_platform_info = 3;

  // Set this as true if the virtual session is not live and is pre-recorded.
  // (Optional)
  bool is_session_prerecorded = 4;
}
// Information about how the user can pay directly to the merchant instead of
// pre-paying for the service via RwG.
message DirectMerchantPayment {
  // Users would be advised to pay only via the payment methods mentioned below.
  repeated Text payment_methods = 1;
}
// Cancellation policy for a service.
message CancellationPolicy {
  // Defines a single refund condition. Multiple refund conditions could be
  // used together to describe "refund steps" as various durations before the
  // service start time.
  message RefundCondition {
    // Duration in seconds before the start time, until when the customer can
    // receive a refund for part of the service's cost specified in
    // `refund_percent`.
    // When set to 0 (default), the service can be cancelled at any time.
    int64 min_duration_before_start_time_sec = 1;

    // The percent that can be refunded, as long as the service booking is
    // cancelled at least `min_duration_before_start_time` before the service
    // start time, in the range of [0, 100]. When set to 0 (default), the
    // service is not refundable. When set to 100 this service is fully
    // refundable.
    uint32 refund_percent = 2;
  }
  // Zero or more refund conditions applicable to the policy.
  repeated RefundCondition refund_condition = 1;
}

서비스 피드 예시

{
  "service": [
    {
      "merchant_id": "100",
      "service_id": "100-1",
      "type" : "SERVICE_TYPE_ONLINE_APPOINTMENT",
      "localized_service_name": {
        "value": "Makeup masterclass",
        "localized_value": [
          {
            "locale": "en",
            "value": "Makeup masterclass"
          }
        ]
      },
      "localized_description": {
        "value": "Learn how to do runway makeup from an award winning makeup artist.",
        "localized_value": [
          {
            "locale": "en",
            "value": "Learn how to do runway makeup from an award winning makeup artist."
          }
        ]
      },
      "virtual_session": {
        "session_instructions": {
          "value": "You must have access to a computer, and a solid internet connection. Class registration link will be sent to you 15 mins before the start of the class. The class link will be accessible 1 day after the class.  ",
          "localized_value": [
            {
              "locale": "en",
              "value": "You must have access to a computer, and a solid internet connection. Class registration link will be sent to you 15 mins before the start of the class. The class link will be accessible 1 day after the class.  "
            }
          ]
        },
        "session_requirements": {
          "value": "makeup brush, makeup palette, mirror",
          "localized_value": [
            {
              "locale": "en",
              "value": "makeup brush, makeup palette, mirror"
            }
          ]
        },
        "virtual_platform_info": {
          "platform": "OTHER",
          "other_platform_name": "Susan's hosted platform"
        }
      },
      "direct_merchant_payment": {
        "payment_methods": [
          {
            "value": "Venmo",
            "localized_value": [
              {
                "locale": "en",
                "value": "Venmo"
              }
            ]
          }
        ]
      },
      "price": {
        "price_micros": 75000000,
        "currency_code": "USD"
      },
      "rules": {
        "min_advance_booking": 0,
        "min_advance_online_canceling": 86400,
        "cancellation_policy": {
          "refund_condition": [
            {
              "min_duration_before_start_time_sec": 3600,
              "refund_percent": 100
            }
          ]
        }
      },
      "prepayment_type": "NOT_SUPPORTED",
      "tax_rate": {
        "micro_percent": 7750000
      }
    },
    {
      "merchant_id": "100",
      "service_id": "100-2",
      "type" : "SERVICE_TYPE_ONLINE_APPOINTMENT",
      "localized_service_name": {
        "value": "Advanced Vinyasa Yoga",
        "localized_value": [
          {
            "locale": "en",
            "value": "Advanced Vinyasa Yoga"
          }
        ]
      },
      "localized_description": {
        "value": "Learn the advanced techniques of vinyasa yoga taught by award winning yoga instructors.",
        "localized_value": [
          {
            "locale": "en",
            "value": "Learn the advanced techniques of vinyasa yoga taught by award winning yoga instructors."
          }
        ]
      },
      "virtual_session": {
        "session_instructions": {
          "value": "You must have access to a computer, and a solid internet connection. Class registration link will be included in an email from the merchant.",
          "localized_value": [
            {
              "locale": "en",
              "value": "You must have access to a computer, and a solid internet connection. Class registration link will be included in an email from the merchant."
            }
          ]
        },
        "session_requirements": {
          "value": "yoga mat, dumbbells",
          "localized_value": [
            {
              "locale": "en",
              "value": "yoga mat, dumbbells"
            }
          ]
        },
        "virtual_platform_info": {
          "platform": "ZOOM"
        }
      },
      "price": {
        "price_micros": 40000000,
        "currency_code": "USD"
      },
      "rules": {
        "min_advance_booking": 0,
        "min_advance_online_canceling": 86400,
        "cancellation_policy": {
          "refund_condition": [
            {
              "min_duration_before_start_time_sec": 86400,
              "refund_percent": 100
            },
            {
              "min_duration_before_start_time_sec": 3600,
              "refund_percent": 50
            }
          ]
        }
      },
      "prepayment_type": "REQUIRED",
      "tax_rate": {
        "micro_percent": 7750000
      },
      "require_credit_card": "REQUIRE_CREDIT_CARD_ALWAYS"
    }
  ]
}
  • 현지화된 설명: 서비스에 관한 정보를 명확하게 설명해야 합니다. 서비스 콘텐츠를 가장 효과적으로 구조화하는 방법은 권장사항 가이드를 참고하세요.
  • 세션 안내: 세션 안내는 필요한 모든 설정을 설명하고 정책에 설명된 안내를 충족해야 합니다.
    • 플랫폼 동영상 URL 및 회의 ID가 CreateBooking의 일부로 자동으로 생성되지 않는 경우 (예: 세부정보가 CreateBookingResponse를 통해 전송되지 않음) 사용자에게 언제 플랫폼 세부정보가 전송될지 예상해야 하는 언제누가인지를 분명히 밝혀야 합니다.
  • 세션 요구사항: 세션 요구사항은 사용자가 수업에 효과적으로 참여하는 데 필요한 모든 필요한 장비 또는 자료를 설명해야 합니다. 사용자에게 필요할 수도 있는 선택적인 자료를 포함할 수 있지만 이를 선택사항으로 표시하세요.
  • 플랫폼: 플랫폼은 사용자가 온라인 서비스에 액세스하는 데 사용할 플랫폼을 나타내야 합니다.
    • 나중에 판매자가 플랫폼을 결정하는 경우 platformFLEXIBLE로 설정합니다.
    • 판매자가 사용 중인 플랫폼이 목록에 없는 경우 platformOTHER로 설정하고 other_platform_name을 지정합니다.
  • 취소 정책: 정확한 취소 정책이 있어야 합니다. 환불 및 취소가 허용되는 경우 CancellationPolicy를 설정합니다. 설정되지 않은 경우의 기본 가정은 환불이 허용되지 않는 것입니다.

이용 가능 여부 피드

  • 스팟 합계: 플랫폼에 허용되는 총 참가자 수로 설정합니다 (직원을 제외해야 함).

예약 서버

선택사항: 시스템에서 판매자를 대신하여 회의 ID와 URL을 생성하는 경우 VirtualSessionInfoCreateBookingResponse의 일부로 포함하세요.

CreateBooking 사양

message Booking {
// Information related to the virtual session which was booked.
message VirtualSessionInfo {
  // URL which was created for the virtual session. (optional)
  string session_url = 1;
  // The meeting id which was created for the virtual session. (optional)
  string meeting_id = 2;
  // Password required to access the session. (optional)
  string password = 3;
}

 VirtualSessionInfo virtual_session_info = X;
}

CreateBookingRequest

{
  "idempotency_token": "10000000000",
  "payment_information": {
    "prepayment_status": "PREPAYMENT_NOT_PROVIDED"
  },
  "slot": {
    "confirmation_mode": "CONFIRMATION_MODE_SYNCHRONOUS",
    "duration_sec": "3600",
    "merchant_id": "10001",
    "service_id": "10001-1",
    "start_sec": "1586829600"
  },
  "user_information": {
    "email": "john.doe@gmail.com",
    "family_name": "John",
    "given_name": "Doe",
    "telephone": "+123 456 7890",
    "user_id": "110291237"
  }
}

CreateBookingResponse

{
  "booking": {
    "bookingId": "abcdefg-12345",
    "slot": {
      "merchantId": "10001",
      "serviceId": "10001-1",
      "startSec": "1586804400",
      "durationSec": "3600"
    },
    "userInformation": {
      "userId": "110291237",
      "givenName": "John",
      "familyName": "Doe",
      "telephone": "+123 456 7890",
      "email": "john.doe@gmail.com"
    },
    "status": "CONFIRMED",
    "virtual_session_info": {
      "video_url": "meet.google.com/abcd-efg",
      "meeting_id": "abcd-efg",
      "password" : "somepassword"
    }
  }
}

실시간 업데이트

인벤토리 또는 예약을 업데이트하는 기존 로직은 가상 예약을 유지해야 합니다.

  • InventoryUpdate RTU: 시스템이나 Google 예약 시스템에서 슬롯 변경사항을 업데이트하면 InventoryUpdate RTU를 실행하여 슬롯 변경사항을 알려야 합니다.
  • BookingNotification RTU: 시스템이나 Google 예약 시스템의 예약 변경(예: 시간 변경 또는 취소)이 발생하면 BookingNotification RTU를 실행하여 예약 변경사항을 Google에 알려야 합니다.
    • 사용자가 판매자/파트너에 결제를 제출하지 않으면 취소 RTU를 Google에 전송합니다. Google 예약에서 취소 이메일을 전송합니다.
  • 서비스 RTU: 현재 서비스 RTU를 통해 서비스를 업데이트하는 경우 온라인 서비스를 업데이트할 때 적절한 온라인 서비스 필드를 포함해야 합니다.

이메일

기본적으로 Google 예약에서는 사용자가 Google 예약 플랫폼에서 거래할 때 표준 예약 확인, 수정 및 취소 이메일을 전송합니다.

파트너는 사용자에게 회의 세부정보, 결제 세부정보, 취소 정책 정보를 별도의 이메일로 추가적으로 보내야 합니다. 원하는 경우 약속이나 수업 전에 리마인더 이메일을 보낼 수 있습니다. 가상 클래스의 이메일 정책을 준수하는지 확인하려면 정책 문서를 참조하세요.