Синхронные бронирования определяются как бронирования, которые подтверждаются или отклоняются в режиме реального времени.
Асинхронные бронирования определяются как бронирования, которые продавец подтверждает или отклоняет позднее.
Резервирование указывается как синхронное или асинхронное на уровне доступности. Это также означает, что для данного продавца и услуги могут быть как синхронные, так и асинхронные слоты доступности.
Чтобы определить подходящую реализацию, сначала определите, к какой категории относится ваш инвентарь:
- Включение только синхронных бронирований : все продавцы и услуги подтверждаются мгновенно.
- Включение асинхронного бронирования . Некоторые или все продавцы и услуги требуют подтверждения продавца вручную.
Критерии асинхронного бронирования
- Изменение асинхронного бронирования в Центре действий не поддерживается.
- Продавцы должны иметь возможность принимать или отклонять бронирование через онлайн-систему партнера (например, хост-панель ресторана). Звонить продавцу от имени пользователя, чтобы определить, принимает или отклоняет ли продавец бронирование, запрещено .
- Предложение продавца о новом времени бронирования не поддерживается. Запрос на бронирование должен быть принят или отклонен в исходном состоянии.
Включение только синхронного бронирования
Стандартная реализация по умолчанию использует синхронное резервирование. Дополнительную информацию можно найти в документации по сквозной интеграции Reservations.
Включение асинхронного бронирования
Если некоторые или все продавцы используют асинхронный процесс бронирования, необходимо внести следующие изменения:
Режим подтверждения: все представления слотов доступности теперь содержат поле
confirmation_mode, которое описывает, как подтверждаются бронирования этого слота доступности. Укажите режимconfirmation_modeдля каждого слота доступности для следующего:- В фиде доступности параметр
confirmation_modeуказан на уровне доступности. - В методах API Сервера бронирования
confirmation_modeуказывается на уровне слота. - В методах API обновлений в реальном времени
confirmation_modeуказывается на уровне доступности.
- В фиде доступности параметр
- Статус бронирования. Все представления резервирований содержат поле
status, которое отображает состояние бронирования. Введены три новых асинхронных значения статуса:PENDING_CONFIRMATION,DECLINED_BY_MERCHANTиFAILED. Используйте эти новые значения статуса при обработке создания, отклонения и сбоев асинхронных бронирований. - Обновления бронирования. Обо всех асинхронных обновлениях статуса бронирований следует сообщать с помощью метода bookings.patch API уведомлений о бронировании.
На диаграмме ниже показано, как режим подтверждения и статус бронирования используются в типичном взаимодействии асинхронного бронирования.

- Фиды доступности были обновлены, и теперь указан режим подтверждения каждого слота доступности. Важно иметь эту информацию в ленте, чтобы мы могли объяснить пользователю асинхронный характер бронирования на ранних этапах процесса.
- При вызове
BatchAvailabilityLookupилиCheckAvailabilityмы передаем режим подтверждения и, в идеале, тот же режим подтверждения, который будет возвращен. Это гарантирует, что пользователю будут показаны соответствующие сообщения. - При вызове
CreateBookingмы передаем режим подтверждения, чтобы указать ожидаемый режим подтверждения. При отправке запроса на асинхронное бронирование бронирование возвращается со статусомPENDING_MERCHANT_CONFIRMATION. - Когда продавец принимает или отклоняет запрос на бронирование, статус бронирования обновляется с помощью метода bookings.patch API уведомления о бронировании в режиме реального времени. Если вы хотите автоматически отклонять заказы, на которые не ответили своевременно, сделайте это с помощью того же метода обновления в реальном времени.
Фиды доступности
В канале доступности укажите, является ли каждый слот синхронным или асинхронным. Для этого установите новое поле 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"
}
]
}Синхронизировать
{
"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"
}
]
}Асинхронность и синхронизация
{
"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-асинхронный
{
"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-Синхронизация
{
"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-асинхронный
{
"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-Синхронизация
{
"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"
}Создать бронирование
Обязательно верните правильный статус бронирования, используя доступные варианты ниже:
// 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" } }
Синхронизировать
{ "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" } }
ОбновлениеБронирование
В первоначальной версии async пользовательские изменения существующего бронирования не поддерживаются. Вместо этого пользователю следует отменить бронирование и создать новое бронирование.
Обновления в реальном времени
Для обновлений доступности в режиме реального времени следует указать confirmation_mode . Это касается следующих методов:
RTU инвентаризации (ReplaceServiceAvailability или BatchReplaceServiceAvailability)
Используя метод availability.replace (пакетный) или метод services.availability.replace , установите для confirmation_mode значение CONFIRMATION_MODE_ASYNCHRONOUS в разделе Availability
Асинхронный
{
"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"
}
]
}
]
}Синхронизировать
{
"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"
}
]
}
]
}Асинхронность и синхронизация
{
"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"
}
]
}
]
}API уведомлений о бронировании
Асинхронные обновления статуса бронирования следует выполнять с помощью метода bookings.patch API уведомлений о бронировании.
При обновлении статуса обязательно включите имя поля status в updateMask .
| Статус | Описание |
|---|---|
| ПОДТВЕРЖДЕННЫЙ | продавец подтвердил бронирование |
| НЕУСПЕШНЫЙ | партнер не смог подтвердить или отклонить бронирование у продавца |
| 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. Если для статуса установлено любое другое значение, 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"}
Уведомления по электронной почте
При асинхронном бронировании пользователям отправляется пять потенциальных электронных писем, связанных со статусом бронирования.
-
PENDING_MERCHANT_CONFIRMATION -
CONFIRMED -
DECLINED_BY_MERCHANT -
FAILED -
CANCELED