동기식 예약은 확인되거나 거부된 예약으로 정의됩니다. 있습니다.
비동기식 예약은 판매자가 확인하거나 나중에 거부될 수 있습니다
예약은 가용성 수준입니다 이는 또한 특정 판매자나 서비스에 대해 동기 및 비동기 가용성 슬롯이 둘 다 있을 수 있습니다
적절한 구현을 결정하려면 먼저 인벤토리 유형:
- 동기식 예약만 사용 설정: 모든 판매자와 서비스가 즉시 확인됩니다.
- 비동기식 예약 사용 설정: 일부 또는 모든 판매자 및 서비스에 판매자 설명서가 필요합니다. 확인.
비동기식 예약 기준
- Actions Center에서 비동기 예약을 수정하는 것은 아닙니다. 지원됩니다.
- 판매자는 파트너의 온라인 시스템 (예: 식당의 호스트 패널) 호출 판매자를 대리하여 해당 판매자가 수락하거나 예약을 거부하는 것은 허용되지 않습니다.
- 판매자가 새 예약 시간을 제안할 수 없습니다. 이 예약 요청은 원래 상태에서 수락 또는 거부되어야 합니다.
동기식 예약만 사용 설정
표준 구현은 동기식 예약으로 기본 설정됩니다. 자세한 내용은 약속 엔드 투 엔드 통합 문서를 참고하세요.
비동기 예약 사용 설정
일부 또는 모든 판매자가 비동기식 예약 절차를 사용하는 경우 다음과 같이 변경해야 합니다.
-
확인 모드: 이제 모든 이용 가능 시간대 표현 예약 방식을 설명하는
confirmation_mode
필드가 포함됩니다. 확인할 수 있습니다 각 이용 가능 시간대의confirmation_mode
있습니다.- 이용 가능 여부 피드에서
confirmation_mode
는 가용성 수준 - Booking Server API 메서드에서
confirmation_mode
은 슬롯 수준 - Real-Time Updates API 메서드에서
confirmation_mode
가 지정됩니다. 가용성 수준에서
- 이용 가능 여부 피드에서
- 예약 상태: 예약의 모든 표현에는
예약 상태를 나타내는
status
필드입니다. 3개 새로운 비동기 상태 값(PENDING_CONFIRMATION
)이 도입되었습니다.DECLINED_BY_MERCHANT
,FAILED
다음과 같은 경우 이 새 상태 값을 사용합니다. 비동기식 예약 생성, 거부, 실패 처리 - 예약 업데이트: 예약 상태에 대한 모든 비동기식 업데이트는 예약은 Booking Notification API의 bookings.patch 메서드로 전달하세요.
아래 다이어그램은 확인 모드와 예약 상태가 사용되는 방식을 보여줍니다. 일반적인 비동기식 예약 상호작용에서 이를 처리할 수 있습니다
<ph type="x-smartling-placeholder">![그림 1: 비동기 예약 흐름](https://google-developers.gonglchuangl.net/static/actions-center/images/enabling_async_1.png?authuser=0&hl=ko)
- 이용 가능 여부 피드가 업데이트되어 각 이용 가능 시간대의 지정할 수 있습니다. 이 정보를 예약의 비동기식 특성을 초기 단계에 사용자에게 제공할 수 있습니다
- 날짜
BatchAvailabilityLookup
드림 또는CheckAvailability
호출되면 확인 모드가 전달되며 이상적으로 동일한 확인 모드가 반환합니다. 이렇게 하면 사용자에게 적절한 메시지가 표시됩니다. - 날짜
CreateBooking
드림 호출되면 확인 모드를 전달하여 예상되는 확인 모드를 나타냅니다. 비동기식 예약이 요청이 제출되면 예약이 상태와 함께 반환됩니다.PENDING_MERCHANT_CONFIRMATION
- 판매자가 예약 요청을 수락하거나 거부하면 예약은 상태는 실시간 업데이트 Booking Notification API의 bookings.patch 메서드로 전달하세요. 다음 경우에 해당하지 않는 예약을 자동으로 거부하려는 경우 응답해야 하므로 동일한 실시간 업데이트를 통해 메서드를 사용하여 축소하도록 요청합니다.
이용 가능 여부 피드
이용 가능 여부 피드에서 각 시간대가 동기식인지 또는
비동기식으로 진행됩니다. 이렇게 하려면 새 confirmation_mode
를 설정합니다.
필드를 확인합니다.
// Mode by which bookings for an availability slot are confirmed. enum ConfirmationMode { // The confirmation mode was not specified. // Synchronous confirmation will be assumed. CONFIRMATION_MODE_UNSPECIFIED = 0; // Bookings for this availability will be confirmed synchronously. CONFIRMATION_MODE_SYNCHRONOUS = 1; // Bookings for this availability will be confirmed asynchronously. CONFIRMATION_MODE_ASYNCHRONOUS = 2; }
어떤 모드도 동기식인 것으로 가정하지만 명시적으로 모드를 지정하는 것이 좋습니다. 실수로 인한 누락에 대한 혼란을 없앱니다.
비동기식
{ "availability": [ { "merchant_id": "10001", "service_id": "1000", "spots_open": 3, "spots_total": 3, "duration_sec": 3600, "start_sec": 1535806800, "resources": { "party_size": 4 }, "confirmation_mode": "CONFIRMATION_MODE_ASYNCHRONOUS" } ] }
Sync
{ "availability": [ { "merchant_id": "10001", "service_id": "1000", "spots_open": 3, "spots_total": 3, "duration_sec": 3600, "start_sec": 1535806800, "resources": { "party_size": 4 }, "confirmation_mode": "CONFIRMATION_MODE_SYNCHRONOUS" } ] }
Async 및 Sync
{ "availability": [ { "merchant_id": "10001", "service_id": "1000", "spots_open": 3, "spots_total": 3, "duration_sec": 3600, "start_sec": 1535806800, "resources": { "party_size": 4 }, "confirmation_mode": "CONFIRMATION_MODE_SYNCHRONOUS" }, { "merchant_id": "10002", "service_id": "1000", "spots_open": 4, "spots_total": 4, "duration_sec": 3600, "start_sec": 1535806800, "resources": { "party_size": 2 }, "confirmation_mode": "CONFIRMATION_MODE_ASYNCHRONOUS" } ] }
예약 서버
BatchAvailabilityLookup 또는 CheckAvailability
BatchAvailabilityLookupResponse
(BAL)
또는
CheckAvailabilityResponse
(CA)의 경우confirmation_mode
피드하고
BatchAvailabilityLookupRequest
또는
CheckAvailabilityRequest
BAL-Async
{ "slot_time_availability": [ { "slot_time": { "duration_sec": "3600", "resource_ids": { "party_size": 3 }, "service_id": "1000", "start_sec": "1546458300", "confirmation_mode": "CONFIRMATION_MODE_ASYNCHRONOUS" }, "available": true } ] }
BAL-Sync
{ "slot_time_availability": [ { "slot_time": { "duration_sec": "3600", "resource_ids": { "party_size": 3 }, "service_id": "1000", "start_sec": "1546458300", "confirmation_mode": "CONFIRMATION_MODE_SYNCHRONOUS" }, "available": true } ] }
CA-Async
{ "slot": { "duration_sec": "3600", "merchant_id": "317652", "resources": { "party_size": 3 }, "service_id": "1000", "start_sec": "1546458300", "confirmation_mode": "CONFIRMATION_MODE_ASYNCHRONOUS" }, "count_available": 1, "duration_requirement": "DO_NOT_SHOW_DURATION" }
CA-Sync
{ "slot": { "duration_sec": "3600", "merchant_id": "317652", "resources": { "party_size": 3 }, "service_id": "1000", "start_sec": "1546458300", "confirmation_mode": "CONFIRMATION_MODE_SYNCHRONOUS" }, "count_available": 1, "duration_requirement": "DO_NOT_SHOW_DURATION" }
CreateBooking
사용 가능한 아래 옵션을 참조하세요.
// Status of a booking. // // Updating booking status does not change the status of the associated payment. // Prepayment status updates should be done using the PrepaymentStatus enum. enum BookingStatus { // Not specified. BOOKING_STATUS_UNSPECIFIED = 0; // Booking has been confirmed CONFIRMED = 1; // Booking is awaiting confirmation by the merchant before it can transition // into CONFIRMED status. Only applicable to non-payments Dining or // Beauty verticals. PENDING_MERCHANT_CONFIRMATION = 2; // Booking has been canceled on behalf of the user. // The merchant can still trigger a manual refund. CANCELED = 3; // User did not show for the appointment NO_SHOW = 4; // User did not show for the appointment in violation of the cancellation // policy. NO_SHOW_PENALIZED = 5; // Booking could not be completed by the async backend due to a failure. FAILED = 6; // Booking was asynchronously declined by the merchant. Only applicable to // non-payments Dining or Beauty verticals. DECLINED_BY_MERCHANT = 7; }
CreateBookingResponse
에서
제공된 예약의 집계된 시간대에 대한 현재 confirmation_mode
를 반환합니다.
(CreateBookingRequest에서) 또한 예약이 비동기식인 경우
status
를 PENDING_MERCHANT_CONFIRMATION
로 설정합니다. 다음을 확인하세요.
confirmation_mode
는 사용자와 예약이
Google은 사용자에게 혼란을 주지 않기를 바랍니다.
비동기식
{ "booking": { "slot": { "duration_sec": "3600", "merchant_id": "100001", "resources": { "party_size": 2 }, "service_id": "1000", "start_sec": "1546647234", "confirmation_mode": "CONFIRMATION_MODE_ASYNCHRONOUS" }, "user_information": { "email": "johnsmith@gmail.com", "family_name": "John", "given_name": "Smith", "telephone": "+1 800-123-4567", "user_id": "2017492857928759285" }, "payment_information": { "prepayment_status": "PREPAYMENT_NOT_PROVIDED" }, "status": "PENDING_MERCHANT_CONFIRMATION" } }
Sync
{ "booking": { "slot": { "duration_sec": "3600", "merchant_id": "100001", "resources": { "party_size": 2 }, "service_id": "1000", "start_sec": "1546647234", "confirmation_mode": "CONFIRMATION_MODE_SYNCHRONOUS" }, "user_information": { "email": "johnsmith@gmail.com", "family_name": "John", "given_name": "Smith", "telephone": "+1 800-123-4567", "user_id": "2017492857928759285" }, "payment_information": { "prepayment_status": "PREPAYMENT_NOT_PROVIDED" }, "status": "CONFIRMED" } }
UpdateBooking
async의 초기 출시에서 사용자가 기존 예약을 수정함 지원되지 않습니다. 대신 사용자가 예약을 취소하고 새 예약
실시간 업데이트
이용 가능 여부 실시간 업데이트는 confirmation_mode
에서 확인하세요.
지정해야 합니다. 이는 다음 메서드에 적용됩니다.
인벤토리 RTU (ReplaceServiceAvailability 또는 BatchReplaceServiceAvailability)
사용
availability.replace
(일괄) 메서드
또는
services.availability.replace
메서드,
Availability
에서 confirmation_mode
를 CONFIRMATION_MODE_ASYNCHRONOUS
로 설정
비동기식
{ "extendedServiceAvailability": [ { "merchantId": "1001", "serviceId": "12310", "startTimeRestrict": "2014-10-02T15:01:23.045123456Z", "endTimeRestrict": "2014-10-02T19:01:23.045123456Z", "availability": [ { "startTime": "2014-10-02T15:30:00.00Z", "duration": "3600s", "spotsOpen": "0", "spotsTotal": "2", "availabilityTag": "1000001", "confirmation_mode": "CONFIRMATION_MODE_ASYNCHRONOUS" } ] } ] }
Sync
{ "extendedServiceAvailability": [ { "merchantId": "1001", "serviceId": "12310", "startTimeRestrict": "2014-10-02T15:01:23.045123456Z", "endTimeRestrict": "2014-10-02T19:01:23.045123456Z", "availability": [ { "startTime": "2014-10-02T15:30:00.00Z", "duration": "3600s", "spotsOpen": "0", "spotsTotal": "2", "availabilityTag": "1000001", "confirmation_mode": "CONFIRMATION_MODE_SYNCHRONOUS" } ] } ] }
Async 및 Sync
{ "extendedServiceAvailability": [ { "merchantId": "1001", "serviceId": "12310", "startTimeRestrict": "2014-10-02T15:01:23.045123456Z", "endTimeRestrict": "2014-10-02T19:01:23.045123456Z", "availability": [ { "startTime": "2014-10-02T15:30:00.00Z", "duration": "3600s", "spotsOpen": "0", "spotsTotal": "2", "availabilityTag": "1000001", "confirmation_mode": "CONFIRMATION_MODE_ASYNCHRONOUS" }, { "startTime": "2014-10-03T11:00:00.00Z", "duration": "5400s", "spotsOpen": "1", "spotsTotal": "1", "availabilityTag": "1000002", "confirmation_mode": "CONFIRMATION_MODE_SYNCHRONOUS" } ] } ] }
Booking Notification API
예약 상태는 예약을 통해 비동기식으로 업데이트되어야 합니다. Notification API bookings.patch 메서드를 사용합니다.
상태를 업데이트할 때 status
필드 이름을 포함해야 합니다.
updateMask
입니다.
상태 | 설명 |
---|---|
CONFIRMED | 판매자가 예약을 확인함 |
FAILED | 파트너가 판매자와 예약을 확인하거나 거부할 수 없음 |
DECLINED_BY_MERCHANT | 판매자가 예약을 거부함 |
Request: PATCH https://mapsbooking.googleapis.com/v1alpha/notification/partners/<PARTNER_ID>/bookings/<BOOKING_ID>?updateMask=status Body: {"name":"partners/<PARTNER_ID>/bookings/<BOOKING_ID>", "status":"DECLINED_BY_MERCHANT"}
예약이 실패한 경우 예약 상태를 FAILED
로 설정합니다.
예약_실패를 지정합니다. 상태가 그 외 다른 값으로 설정된 경우
booking_failure
는 무시됩니다.
Request: PATCH https://mapsbooking.googleapis.com/v1alpha/notification/partners/<PARTNER_ID>/bookings/<BOOKING_ID>?updateMask=status&booking_failure.cause="SLOT_UNAVAILABLE" Body: {"name":"partners/<PARTNER_ID>/bookings/<BOOKING_ID>", "status":"FAILED"}
이메일 알림
비동기식 예약의 경우 사용자에게 전송된 예약의 상태입니다.
<ph type="x-smartling-placeholder"> <ph type="x-smartling-placeholder">- </ph>
PENDING_MERCHANT_CONFIRMATION
CONFIRMED
DECLINED_BY_MERCHANT
FAILED
CANCELED