Ajouter des réservations asynchrones

<ph type="x-smartling-placeholder">

Les réservations synchrones sont définies comme des réservations confirmées ou refusées. en temps réel.

Les réservations asynchrones sont définies comme des réservations confirmées par le marchand diminue ultérieurement.

Une réservation est spécifiée comme étant synchrone ou asynchrone au selon le niveau de disponibilité. Cela signifie également que, pour un marchand et un service donnés, il peut y avoir des créneaux de disponibilité synchrones et asynchrones.

Pour déterminer l'implémentation appropriée, commencez par identifier la catégorie de votre inventaire:

Critères applicables aux réservations asynchrones

  • La modification d'une réservation asynchrone dans le centre d'actions n'est pas compatibles.
  • Les marchands doivent pouvoir accepter ou refuser la réservation depuis la le système en ligne du partenaire (panneau hôte du restaurant, par exemple). En appelant la méthode le marchand pour le compte de l'utilisateur afin de déterminer s'il accepte ou refuse une réservation n'est pas autorisé.
  • Le système ne permet pas que le marchand propose une nouvelle heure de réservation. La demande de réservation doit être acceptée ou refusée dans son état d'origine.

Activer uniquement des réservations synchrones

La mise en œuvre standard utilise par défaut les réservations synchrones. Veuillez consulter la documentation sur l'intégration de bout en bout de Réservations pour plus d'informations.

Activer la réservation asynchrone

Si certains ou l'ensemble des marchands utilisent un processus de réservation asynchrone, le les modifications suivantes doivent être apportées:

  • Mode confirmation:toutes les représentations des créneaux de disponibilité sont désormais affichées. contient un champ confirmation_mode décrivant comment les réservations de ce créneau de disponibilité sont confirmées. Spécifiez le paramètre confirmation_mode de chaque créneau de disponibilité pour suivantes:

    • Dans le flux disponibilité, confirmation_mode est spécifié au niveau de niveau de disponibilité
    • Dans les méthodes de l'API Booking Server, confirmation_mode est spécifié à au niveau de l'emplacement
    • Dans les méthodes de l'API Real-Time Updates, confirmation_mode est spécifié. au niveau de la disponibilité
  • État de la réservation:toutes les représentations des réservations contiennent un Champ status représentant l'état de la réservation. Trois Ajout de nouvelles valeurs d'état asynchrones: PENDING_CONFIRMATION, DECLINED_BY_MERCHANT et FAILED. Utilisez ces nouvelles valeurs d'état lorsque traiter les créations, les refus et les échecs de réservations asynchrones.
  • Informations sur les réservations:toutes les mises à jour asynchrones de l'état de la les réservations doivent être enregistrées via bookings.patch.

Le diagramme ci-dessous montre comment le mode de confirmation et l'état de la réservation sont utilisés. lors d'une interaction de réservation asynchrone classique.

<ph type="x-smartling-placeholder">
</ph> Figure 1: Flux de réservation asynchrone
Figure 1:Processus de réservation asynchrone
    .
  1. Les flux disponibilité ont été mis à jour de sorte que chaque créneau de disponibilité mode de confirmation est spécifié. Il est important d'avoir ces informations dans le flux afin que nous puissions expliquer la nature asynchrone de la réservation à l’utilisateur dès le début du flux.
  2. Quand ? BatchAvailabilityLookup ou CheckAvailability nous transmettons le mode de confirmation et, idéalement, le même mode de confirmation renvoyé. Cela permet de s'assurer que l'utilisateur verra le message approprié.
  3. Quand ? CreateBooking nous transmettons le mode de confirmation indiquer le mode de confirmation anticipé. Lorsque la réservation asynchrone envoyée, la réservation est renvoyée avec l'état PENDING_MERCHANT_CONFIRMATION
  4. Lorsque le marchand accepte ou refuse une demande de réservation, la réservation le statut est mis à jour via la mise à jour en temps réel de l'API Booking Notification bookings.patch. Si vous souhaitez refuser automatiquement les réservations rapidement, grâce à la même mise à jour .

Flux de disponibilité

Dans le flux disponibilité, indiquez si chaque créneau est synchrone ou asynchrone. Pour ce faire, définissez le nouveau confirmation_mode .

<ph type="x-smartling-placeholder">
// 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;
}

Bien que le mode de confirmation soit considéré comme synchrone si aucun mode n'est il est fortement recommandé de spécifier explicitement un mode, car pour éviter toute confusion éventuelle liée à des omissions accidentelles.

Asynchrone

{
  "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"
    }
  ]
}

Synchrone

{
  "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"
    }
  ]
}

Asynchrone et synchrone

{
  "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"
    }

  ]
}

Serveur de réservation

BatchAvailabilityLookup ou CheckAvailability

Dans BatchAvailabilityLookupResponse (BAL) ou CheckAvailabilityResponse (CA), renvoie le même confirmation_mode que celui spécifié dans et transmis via le flux de disponibilité BatchAvailabilityLookupRequest ou 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

Assurez-vous de renvoyer le bon état de la réservation à l'aide de la colonne options ci-dessous:

// 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;
}

Dans CreateBookingResponse, renvoie la valeur confirmation_mode actuelle pour le créneau horaire agrégé de la réservation fourni dans la requête CreateBookingRequest. De plus, si la réservation est asynchrone, définissez status sur PENDING_MERCHANT_CONFIRMATION. Assurez-vous que confirmation_mode correspond à l'utilisateur et à l'environnement de réservation Google s'engage à ne pas induire en erreur l'utilisateur.

Asynchrone

{
  "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

Dans la version initiale d'async, les modifications apportées par les utilisateurs à une réservation existante ne sont pas acceptés. À la place, l'utilisateur doit annuler la réservation et créer un nouvelle réservation.

Real-Time Updates (Mises à jour en temps réel)

Pour mettre à jour en temps réel les disponibilités, confirmation_mode doit être spécifié. Cela s'applique aux méthodes suivantes :

RTU Inventory (ReplaceServiceAvailability ou BatchReplaceServiceAvailability)

En utilisant Méthode availability.replace (par lot) ou la méthode services.availability.replace, définissez confirmation_mode sur CONFIRMATION_MODE_ASYNCHRONOUS dans le Availability

Asynchrone

{
  "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"
        }
      ]
    }
  ]
}

Synchrone

{
  "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"
        }
      ]
    }
  ]
}

Asynchrone et synchrone

{
  "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 Booking Notification

Les mises à jour asynchrones de l'état d'une réservation doivent être effectuées via la page de réservation bookings.patch de l'API Notification.

Lorsque vous mettez à jour l'état, veillez à inclure le nom du champ status dans updateMask

État Description
CONFIRMED Le marchand a confirmé la réservation.
FAILED Le partenaire n'a pas pu confirmer ou refuser la réservation auprès du marchand.
DECLINED_BY_MERCHANT Le marchand a refusé la réservation.
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"}

En cas d'échec de la réservation, définissez l'état de la réservation sur FAILED. spécifiez la valeur "booking_failure". Si l'état est défini sur un autre état, booking_failure est ignoré.

<ph type="x-smartling-placeholder">
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"}

Notifications par e-mail

Pour les réservations asynchrones, il existe cinq e-mails potentiels liés au l'état de la réservation envoyé aux utilisateurs.

<ph type="x-smartling-placeholder"> <ph type="x-smartling-placeholder">
    </ph>
  • PENDING_MERCHANT_CONFIRMATION
  • CONFIRMED
  • DECLINED_BY_MERCHANT
  • FAILED
  • CANCELED