온라인 서비스 추가 (지원 중단됨)

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

  • 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/actions-center/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를 통해 전송되지 않음) session_instructions에서 사용자에게 플랫폼 세부정보가 전송될 누구를 통해 전송되는지 명확하게 설명해야 합니다.
  • 세션 요구사항: 세션 요구사항은 사용자가 수업에 효과적으로 참여하는 데 필요한 모든 필수 장비나 자료를 설명해야 합니다. 사용자에게 필요할 수 있는 선택적 자료를 포함할 수도 있지만 선택사항으로 표시하세요.
  • 플랫폼: 플랫폼은 사용자가 온라인 서비스에 액세스하는 데 사용할 플랫폼을 나타내야 합니다.
    • 나중에 판매자가 플랫폼을 결정하는 경우 platformFLEXIBLE로 설정합니다.
    • 판매자가 사용 중인 플랫폼이 목록에 없으면 platformOTHER로 설정하고 other_platform_name을 지정합니다.
  • 취소 정책: 정확한 취소 정책이 있어야 합니다. 환불 및 취소가 허용되면 CancellationPolicy를 설정합니다. 설정하지 않으면 환불이 허용되지 않는다는 기본 가정이 적용됩니다.

이용 가능 여부 피드

  • 스팟 합계: 플랫폼에 허용되는 총 참여자 수로 설정합니다 (스태프는 빼야 함).

예약 서버

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

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: 시스템 또는 작업 센터 시스템의 슬롯 변경사항을 업데이트하면 InventoryUpdate RTU를 실행하여 슬롯 변경사항을 Google에 알려야 합니다.
  • BookingNotification RTU: 시스템 또는 작업 센터 시스템에서 예약 업데이트(예: 시간 수정 또는 취소)는 BookingNotification RTU를 실행하여 예약 변경사항을 Google에 알려야 합니다.
    • 사용자가 판매자/파트너에 결제 금액을 제출하지 않으면 취소 RTU를 Google에 전송하세요. Actions Center에서 취소 이메일이 전송됩니다.
  • 서비스 RTU: 현재 서비스 RTU를 통해 서비스를 업데이트하는 경우 온라인 서비스 업데이트 시 적절한 온라인 서비스 필드를 포함해야 합니다.

이메일

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

파트너는 회의 세부정보, 결제 세부정보, 취소 정책 정보를 별도의 이메일로 사용자에게 전송해야 합니다. 원하는 경우 약속이나 수업 전에 리마인더 이메일을 보낼 수 있습니다. 정책 문서를 참조하여 가상 수업에 관한 이메일 정책을 준수하세요.