Aggiungi prenotazioni asincrone

Per prenotazioni sincrone si intendono le prenotazioni confermate o rifiutate in tempo reale.

Per prenotazioni asincrone si intendono le prenotazioni che il commerciante conferma o rifiuta in un secondo momento.

Una prenotazione viene specificata come sincrona o asincrona la disponibilità del servizio. Ciò significa anche che, per un determinato commerciante o servizio, potrebbero esserci slot di disponibilità sia sincroni che asincroni.

Per determinare l'implementazione appropriata, identifica innanzitutto la categoria il tuo inventario rientra in:

Criteri di prenotazione asincroni

  • La modifica di una prenotazione asincrona nel Centro azioni non supportati.
  • I commercianti devono essere in grado di accettare o rifiutare la prenotazione tramite sistema online del partner (ad esempio, pannello host per il ristorante). Chiamata a commerciante per conto dell'utente per stabilire se il commerciante accetta o rifiuta una prenotazione non è consentito.
  • La proposta del commerciante di un nuovo orario di prenotazione non è supportata. La la richiesta di prenotazione deve essere accettata o rifiutata nello stato originale.

Abilitazione solo delle prenotazioni sincrone

L'implementazione standard prevede per impostazione predefinita le prenotazioni sincrone. Consulta la documentazione dell'integrazione end-to-end degli appuntamenti per ulteriori informazioni.

Attivazione della prenotazione asincrona

Se alcuni o tutti i commercianti utilizzano un flusso di prenotazione asincrono, devi apportare le seguenti modifiche:

  • Modalità di conferma: ora tutte le rappresentazioni degli slot di disponibilità contengono un campo confirmation_mode che descrive il modo in cui le prenotazioni di quello spazio di disponibilità sono confermati. Specifica confirmation_mode di ogni slot di disponibilità per seguenti:

    • Nel feed di disponibilità, confirmation_mode è specificato livello di disponibilità
    • Nei metodi dell'API Booking Server, il valore confirmation_mode è specificato il livello dell'area
    • Nei metodi dell'API Real-Time Updates, è specificato confirmation_mode a livello di disponibilità
  • Stato della prenotazione: tutte le rappresentazioni di prenotazioni contengono un Campo status che rappresenta lo stato della prenotazione. Tre. sono stati introdotti nuovi valori di stato asincroni: PENDING_CONFIRMATION, DECLINED_BY_MERCHANT e FAILED. Utilizza questi nuovi valori di stato quando elaborare creazioni, rifiuti ed errori nelle prenotazioni asincrone.
  • Aggiornamenti delle prenotazioni: tutti gli aggiornamenti asincroni allo stato del le prenotazioni devono essere segnalate tramite l'API Booking Notification bookings.patch.

Il diagramma seguente mostra come vengono utilizzati la modalità di conferma e lo stato della prenotazione in una tipica interazione di prenotazione asincrona.

Figura 1: flusso di prenotazione asincrono
Figura 1: flusso di prenotazione asincrono
  1. I feed di disponibilità sono stati aggiornati in modo che ogni slot di disponibilità la modalità di conferma specificata. È importante avere queste informazioni del feed per spiegare la natura asincrona della prenotazione all'utente nelle prime fasi del flusso.
  2. Quando BatchAvailabilityLookup o CheckAvailability viene passata la modalità di conferma e idealmente la stessa modalità restituito. Ciò garantisce che all'utente vengano mostrati i messaggi appropriati.
  3. Quando CreateBooking passiamo la modalità di conferma indicare la modalità di conferma prevista. Quando la prenotazione asincrona inviata, la prenotazione viene restituita con lo stato PENDING_MERCHANT_CONFIRMATION.
  4. Quando il commerciante accetta o rifiuta una richiesta di prenotazione, quest'ultima lo stato viene aggiornato tramite l'API di aggiornamento in tempo reale di Booking Notification bookings.patch. Se vuoi rifiutare automaticamente le prenotazioni che non sono ha risposto tempestivamente, tramite lo stesso aggiornamento in tempo reale .

Feed di disponibilità

Nel feed della disponibilità, specifica se ogni area è sincrona o asincrone. Per farlo, imposta il nuovo 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;
}

Anche se si presume che la modalità di conferma sia sincrona se non è specificato, ti consigliamo vivamente di specificare esplicitamente una modalità poiché che elimina la confusione sulle omissioni accidentali.

Asinc

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

Sincronizza

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

Asinc e sincronizzazione

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

  ]
}

Server di prenotazione

BatchavailabilityLookup o Checkavailability

Nella BatchAvailabilityLookupResponse (BAL) o CheckAvailabilityResponse (CA), restituisce lo stesso confirmation_mode specificato in disponibilità e trasmessa tramite BatchAvailabilityLookupRequest o 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
    }
  ]
}

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

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

CreateBooking

Assicurati di restituire lo stato corretto della prenotazione utilizzando le opzioni disponibili seguenti:

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

In CreateBookingResponse, restituisce il valore confirmation_mode corrente per lo spazio aggregato della prenotazione fornito in CreateBookingRequest. Inoltre, quando la prenotazione è asincrona, imposta status su PENDING_MERCHANT_CONFIRMATION. Assicurati confirmation_mode è la descrizione dell'utente e quella di Prenota con Google si aspetta di evitare di confondere l'utente.

Asinc

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

Sincronizza

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

Nella release iniziale del processo asincrono, le modifiche dell'utente a una prenotazione esistente non sono supportati. Deve invece annullare la prenotazione e creare una nuova prenotazione.

Aggiornamenti in tempo reale

Per aggiornamenti in tempo reale sulle disponibilità, confirmation_mode è necessario specificare. Ciò si applica ai seguenti metodi:

RTU dell'inventario (SostituisciServiceDisponibilità o BatchSostituisciServiceDisponibilità)

Utilizzo Metodo availability.replace (batch) o il metodo services.availability.replace, imposta confirmation_mode su CONFIRMATION_MODE_ASYNCHRONOUS in Availability

Asinc

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

Sincronizza

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

Asinc e sincronizzazione

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

Gli aggiornamenti asincroni dello stato di una prenotazione devono essere effettuati tramite la scheda Metodo bookings.patch dell'API Notification

Quando aggiorni lo stato, assicurati di includere il nome del campo status nella updateMask.

Stato Descrizione
CONFERMATA il commerciante ha confermato la prenotazione
ERRORE il partner non è riuscito a confermare o rifiutare la prenotazione con il commerciante
DECLINED_BY_MERCHANT il commerciante ha rifiutato la prenotazione
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"}

In caso di errore di prenotazione, imposta lo stato della prenotazione su FAILED e che specifica il valore di Book_failure. Se lo stato è impostato su un altro valore, booking_failure viene ignorato.

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

Notifiche email

Per le prenotazioni asincrone, esistono cinque potenziali email relative ai della prenotazione inviate agli utenti.

  • PENDING_MERCHANT_CONFIRMATION
  • CONFIRMED
  • DECLINED_BY_MERCHANT
  • FAILED
  • CANCELED