Синхронные бронирования определяются как бронирования, которые подтверждаются или отклоняются в режиме реального времени.
Асинхронные бронирования определяются как бронирования, которые продавец подтверждает или отклоняет позднее.
Резервирование указывается как синхронное или асинхронное на уровне доступности. Это также означает, что для данного продавца и услуги могут быть как синхронные, так и асинхронные слоты доступности.
Чтобы определить подходящую реализацию, сначала определите, к какой категории относится ваш инвентарь:
- Включение только синхронных бронирований : все продавцы и услуги подтверждаются мгновенно.
- Включение асинхронного бронирования . Некоторые или все продавцы и услуги требуют подтверждения продавца вручную.
Критерии асинхронного бронирования
- Изменение асинхронного бронирования в Центре действий не поддерживается.
- Продавцы должны иметь возможность принимать или отклонять бронирование через онлайн-систему партнера (например, хост-панель ресторана). Звонок продавцу от имени пользователя, чтобы определить, принимает или отклоняет ли продавец бронирование, не разрешен.
- Предложение продавца о новом времени бронирования не поддерживается. Запрос на бронирование должен быть принят или отклонен в исходном состоянии.
Включение только синхронного бронирования
Стандартная реализация по умолчанию использует синхронное резервирование. Дополнительную информацию можно найти в документации по сквозной интеграции Appointments.
Включение асинхронного бронирования
Если некоторые или все продавцы используют асинхронный процесс бронирования, необходимо внести следующие изменения:
Режим подтверждения: все представления слотов доступности теперь содержат поле
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
.
{
"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
}
]
}
{
"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
}
]
}
{
"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"
}
{
"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