Ajouter des services en ligne

Les services en ligne sont définis comme des services qui se déroulent entièrement en ligne via une plate-forme hébergée et qui ne nécessitent pas que le client soit présent en personne. Voici quelques exemples de services en ligne:

  • Cours de yoga en ligne via Zoom
  • Cours de maquillage en ligne via Google Meet
  • Estimation vidéo en plomberie en ligne via Skype

Critères d'éligibilité pour les services en ligne

Avant de commencer la mise en œuvre, veuillez consulter les Règles et bonnes pratiques relatives aux services en ligne.

Implémentation de services en ligne

Une intégration de services en ligne est un module complémentaire à l'intégration de bout en bout existante et nécessite certaines modifications au niveau de l'implémentation existante. De manière générale, les modifications suivantes sont apportées:

  • Flux : ajoutez type, VirtualSession, DirectMerchantPayment et CancellationPolicy (si ce n'est pas déjà fait) aux flux de services.
  • Serveur de réservation: ajoutez VirtualSessionInfo à la méthode CreateBooking et envoyez à l'utilisateur des e-mails contenant des informations de configuration virtuelles.
  • Mises à jour en temps réel (comportement existant) : gérez les modifications apportées à l'inventaire virtuel via la mise à jour de l'inventaire via la RTU (InventoryUpdate), les modifications apportées à la réservation via la RTU de BookingNotification et les modifications apportées au service via la RTU du service.

Flux

Flux services

Les champs suivants sont ajoutés au flux de services pour assurer la compatibilité avec les services en ligne.

Spécifications du flux de services

 enum ServiceType {
     SERVICE_TYPE_UNSPECIFIED = 0;
    // Service that provides dining reservation.
    SERVICE_TYPE_DINING_RESERVATION = 1;
    // Service that provides food ordering in general, could be either takeout
    // or delivery or both.
    SERVICE_TYPE_FOOD_ORDERING = 2;
    // Service that only provides food delivery.
    SERVICE_TYPE_FOOD_DELIVERY = 6;
    // Service that only provides food takeout.
    SERVICE_TYPE_FOOD_TAKEOUT = 7;

    // Service that provides appointments or classes. Recommended for (1) health
    // and fitness, (2) spa and beauty, and (3) financial consults and
    // evaluations services. Please see the supported service types:
    // https://developers.google.com/maps-booking/guides/end-to-end-integration/overview
    SERVICE_TYPE_APPOINTMENT = 5;
    // Service that provides appointment for an online class or session which
    // will be fully virtual. Must be set if enabling virtual service bookings.
    SERVICE_TYPE_ONLINE_APPOINTMENT = 8;
  }
// Information about virtual/online session. E.g. Online yoga class, virtual
// cooking class etc.
message VirtualSession {
  // Instructions on how this virtual class is set up. If the partner does not
  // include the video URL with the booking, then this text must include when
  // the video URL will be shared with the user. Eg. “Zoom url will be mailed
  // 30 minutes prior to the class”. (Recommended)
  // Only the folloiwng four tags are supported: <br>, <strong>, <em>, <i>.
  Text session_instructions = 1;

  // Requirements for the given virtual session. Eg. yoga mat,
  // cooking utensils etc. (Recommended)
  // Only the folloiwng four tags are supported: <br>, <strong>, <em>, <i>.
  Text session_requirements = 2;

  // Information about the virtual platform used in this session. (Required to
  // enable virtual services)
  message VirtualPlatformInfo {
    // Enum to indicate which virtual platform would be used by the merchant.
    enum Platform {
      PLATFORM_UNSPECIFIED = 0;
      // The merchant is flexible in which video platform they use.
      FLEXIBLE = 1;
      GOOGLE_HANGOUTS = 2;
      GOOGLE_MEET = 3;
      ZOOM = 4;
      SKYPE = 5;
      YOUTUBE = 6;
      // Should be set if the video platform used is different from the ones
      // mentioned here.
      OTHER = 7;
    }
    Platform platform = 1;
    // The name of the platform if the platform is set to OTHER. (Required if
    // platform is set to OTHER)
    Text other_platform_name = 2;
  }
  VirtualPlatformInfo virtual_platform_info = 3;

  // Set this as true if the virtual session is not live and is pre-recorded.
  // (Optional)
  bool is_session_prerecorded = 4;
}
// Information about how the user can pay directly to the merchant instead of
// pre-paying for the service via RwG.
message DirectMerchantPayment {
  // Users would be advised to pay only via the payment methods mentioned below.
  repeated Text payment_methods = 1;
}
// Cancellation policy for a service.
message CancellationPolicy {
  // Defines a single refund condition. Multiple refund conditions could be
  // used together to describe "refund steps" as various durations before the
  // service start time.
  message RefundCondition {
    // Duration in seconds before the start time, until when the customer can
    // receive a refund for part of the service's cost specified in
    // `refund_percent`.
    // When set to 0 (default), the service can be cancelled at any time.
    int64 min_duration_before_start_time_sec = 1;

    // The percent that can be refunded, as long as the service booking is
    // cancelled at least `min_duration_before_start_time` before the service
    // start time, in the range of [0, 100]. When set to 0 (default), the
    // service is not refundable. When set to 100 this service is fully
    // refundable.
    uint32 refund_percent = 2;
  }
  // Zero or more refund conditions applicable to the policy.
  repeated RefundCondition refund_condition = 1;
}

Exemple de flux de services

{
  "service": [
    {
      "merchant_id": "100",
      "service_id": "100-1",
      "type" : "SERVICE_TYPE_ONLINE_APPOINTMENT",
      "localized_service_name": {
        "value": "Makeup masterclass",
        "localized_value": [
          {
            "locale": "en",
            "value": "Makeup masterclass"
          }
        ]
      },
      "localized_description": {
        "value": "Learn how to do runway makeup from an award winning makeup artist.",
        "localized_value": [
          {
            "locale": "en",
            "value": "Learn how to do runway makeup from an award winning makeup artist."
          }
        ]
      },
      "virtual_session": {
        "session_instructions": {
          "value": "You must have access to a computer, and a solid internet connection. Class registration link will be sent to you 15 mins before the start of the class. The class link will be accessible 1 day after the class.  ",
          "localized_value": [
            {
              "locale": "en",
              "value": "You must have access to a computer, and a solid internet connection. Class registration link will be sent to you 15 mins before the start of the class. The class link will be accessible 1 day after the class.  "
            }
          ]
        },
        "session_requirements": {
          "value": "makeup brush, makeup palette, mirror",
          "localized_value": [
            {
              "locale": "en",
              "value": "makeup brush, makeup palette, mirror"
            }
          ]
        },
        "virtual_platform_info": {
          "platform": "OTHER",
          "other_platform_name": "Susan's hosted platform"
        }
      },
      "direct_merchant_payment": {
        "payment_methods": [
          {
            "value": "Venmo",
            "localized_value": [
              {
                "locale": "en",
                "value": "Venmo"
              }
            ]
          }
        ]
      },
      "price": {
        "price_micros": 75000000,
        "currency_code": "USD"
      },
      "rules": {
        "min_advance_booking": 0,
        "min_advance_online_canceling": 86400,
        "cancellation_policy": {
          "refund_condition": [
            {
              "min_duration_before_start_time_sec": 3600,
              "refund_percent": 100
            }
          ]
        }
      },
      "prepayment_type": "NOT_SUPPORTED",
      "tax_rate": {
        "micro_percent": 7750000
      }
    },
    {
      "merchant_id": "100",
      "service_id": "100-2",
      "type" : "SERVICE_TYPE_ONLINE_APPOINTMENT",
      "localized_service_name": {
        "value": "Advanced Vinyasa Yoga",
        "localized_value": [
          {
            "locale": "en",
            "value": "Advanced Vinyasa Yoga"
          }
        ]
      },
      "localized_description": {
        "value": "Learn the advanced techniques of vinyasa yoga taught by award winning yoga instructors.",
        "localized_value": [
          {
            "locale": "en",
            "value": "Learn the advanced techniques of vinyasa yoga taught by award winning yoga instructors."
          }
        ]
      },
      "virtual_session": {
        "session_instructions": {
          "value": "You must have access to a computer, and a solid internet connection. Class registration link will be included in an email from the merchant.",
          "localized_value": [
            {
              "locale": "en",
              "value": "You must have access to a computer, and a solid internet connection. Class registration link will be included in an email from the merchant."
            }
          ]
        },
        "session_requirements": {
          "value": "yoga mat, dumbbells",
          "localized_value": [
            {
              "locale": "en",
              "value": "yoga mat, dumbbells"
            }
          ]
        },
        "virtual_platform_info": {
          "platform": "ZOOM"
        }
      },
      "price": {
        "price_micros": 40000000,
        "currency_code": "USD"
      },
      "rules": {
        "min_advance_booking": 0,
        "min_advance_online_canceling": 86400,
        "cancellation_policy": {
          "refund_condition": [
            {
              "min_duration_before_start_time_sec": 86400,
              "refund_percent": 100
            },
            {
              "min_duration_before_start_time_sec": 3600,
              "refund_percent": 50
            }
          ]
        }
      },
      "prepayment_type": "REQUIRED",
      "tax_rate": {
        "micro_percent": 7750000
      },
      "require_credit_card": "REQUIRE_CREDIT_CARD_ALWAYS"
    }
  ]
}
  • Localized description (Description localisée) : la description doit indiquer clairement le service proposé. Veuillez consulter le guide des bonnes pratiques pour découvrir comment structurer au mieux le contenu de vos services.
  • Instructions concernant la session: ces instructions doivent décrire la configuration nécessaire et respecter les consignes énoncées dans le règlement.
    • Si l'URL de la vidéo et l'ID de réunion de la plate-forme ne sont pas créés automatiquement dans le cadre de la fonctionnalité CreateBooking (par exemple, si les détails ne sont pas envoyés via CreateBookingResponse), vous devez indiquer clairement dans session_instructions quand et de qui l'utilisateur doit s'attendre à recevoir les détails de la plate-forme.
  • Exigences concernant la session: les exigences concernant la session doivent décrire l'ensemble du matériel ou des équipements nécessaires dont un utilisateur a besoin pour participer efficacement à la classe. Vous pouvez également inclure des documents facultatifs dont l'utilisateur a besoin, mais veuillez les marquer comme facultatifs.
  • Plate-forme: la plate-forme doit indiquer la plate-forme que l'utilisateur utilisera pour accéder au service en ligne.
    • Si la plate-forme est déterminée ultérieurement par le marchand, définissez platform sur FLEXIBLE.
    • Si la plate-forme utilisée par le marchand ne figure pas dans la liste, définissez platform sur OTHER, puis spécifiez other_platform_name.
  • Conditions d'annulation : il est important de fournir des modalités d'annulation précises. Définissez CancellationPolicy si les remboursements et les annulations sont autorisés. Si elle n'est pas configurée, les remboursements ne sont pas autorisés.

Flux disponibilité

  • Total Spots: définissez la capacité totale des participants autorisés pour la plate-forme (veillez à soustraire le personnel).

Serveur de réservation

Facultatif: Si votre système crée un ID de réunion et une URL pour le compte de votre marchand, veuillez inclure VirtualSessionInfo dans votre CreateBookingResponse.

Spécification CreateBooking

message Booking {
// Information related to the virtual session which was booked.
message VirtualSessionInfo {
  // URL which was created for the virtual session. (optional)
  string session_url = 1;
  // The meeting id which was created for the virtual session. (optional)
  string meeting_id = 2;
  // Password required to access the session. (optional)
  string password = 3;
}

 VirtualSessionInfo virtual_session_info = X;
}

CreateBookingRequest

{
  "idempotency_token": "10000000000",
  "payment_information": {
    "prepayment_status": "PREPAYMENT_NOT_PROVIDED"
  },
  "slot": {
    "confirmation_mode": "CONFIRMATION_MODE_SYNCHRONOUS",
    "duration_sec": "3600",
    "merchant_id": "10001",
    "service_id": "10001-1",
    "start_sec": "1586829600"
  },
  "user_information": {
    "email": "john.doe@gmail.com",
    "family_name": "John",
    "given_name": "Doe",
    "telephone": "+123 456 7890",
    "user_id": "110291237"
  }
}

CreateBookingResponse

{
  "booking": {
    "bookingId": "abcdefg-12345",
    "slot": {
      "merchantId": "10001",
      "serviceId": "10001-1",
      "startSec": "1586804400",
      "durationSec": "3600"
    },
    "userInformation": {
      "userId": "110291237",
      "givenName": "John",
      "familyName": "Doe",
      "telephone": "+123 456 7890",
      "email": "john.doe@gmail.com"
    },
    "status": "CONFIRMED",
    "virtual_session_info": {
      "video_url": "meet.google.com/abcd-efg",
      "meeting_id": "abcd-efg",
      "password" : "somepassword"
    }
  }
}

actualités en temps réel

La logique existante de mise à jour de l'inventaire ou des réservations doit être conservée pour les réservations virtuelles.

  • InventoryUpdate RTU : Toute mise à jour apportée aux changements d'emplacements sur votre système ou sur le système Réserver avec Google doit déclencher une RTU d'InventoryUpdate afin de nous informer des modifications apportées aux emplacements.
  • BookingNotification RTU: Toute mise à jour des réservations (par exemple, modification de l'heure ou annulation) sur votre système ou dans le système Réserver avec Google doit déclencher une RTU (BookingNotification) pour nous informer des modifications apportées à une réservation.
    • Si un utilisateur n'envoie pas le paiement au marchand/partenaire, veuillez nous envoyer une RTU d'annulation. Un e-mail d'annulation sera envoyé par Réserver avec Google.
  • Service RTU: si vous mettez actuellement à jour des services via une RTU de service, veillez à inclure les champs appropriés pour le service en ligne.

Adresses e-mail

Par défaut, Réserver avec Google envoie les e-mails standards de confirmation, de modification et d'annulation de réservation lorsqu'un utilisateur effectue une transaction sur la plate-forme Réserver avec Google.

Les partenaires doivent également envoyer à l'utilisateur des informations sur la conférence, les détails du paiement et les modalités d'annulation dans des e-mails distincts. Vous pouvez également envoyer des e-mails de rappel avant le rendez-vous ou le cours. Veuillez consulter le document relatif aux règles pour vérifier que vous respectez les règles de messagerie applicables aux cours virtuels.