Ajouter des services en ligne (obsolète)

Les services en ligne sont définis comme des services entièrement proposés 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 avec Zoom
  • Master class en ligne de maquillage avec Google Meet
  • Devis vidéo de plomberie en ligne via Skype

Critères d'éligibilité aux services en ligne

Avant de commencer l'implémentation, consultez les Règles et bonnes pratiques pour les services en ligne.

Mise en œuvre de services en ligne

L'intégration des services en ligne est un module complémentaire de l'intégration de bout en bout existante des rendez-vous. Elle nécessite de modifier une 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 services.
  • Serveur de réservation: ajoutez VirtualSessionInfo à la méthode CreateBooking et envoyez des e-mails contenant des informations de configuration virtuelles à l'utilisateur.
  • Mises à jour en temps réel (comportement existant): gérez les modifications apportées à l'inventaire virtuel via InventoryUpdate, les modifications apportées à la réservation via la RTU BookingNotification et les modifications apportées au service via la RTU du service

Flux

Flux services

Les champs suivants sont ajoutés au flux services pour prendre en charge 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/actions-center/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"
    }
  ]
}
  • Description localisée: la description doit indiquer clairement l'objet du service. Consultez 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 toutes les configurations nécessaires et respecter les consignes énoncées dans le Règlement.
    • Si l'URL de la vidéo de la plate-forme et l'ID de réunion ne sont pas créés automatiquement lors de la création de la réservation (par exemple, les détails ne sont pas envoyés via CreateBookingResponse), vous devez indiquer clairement dans session_instructions quand et de la part de qui l'utilisateur doit s'attendre à recevoir les informations sur les plates-formes.
  • Conditions requises pour la session: les exigences concernant la session doivent décrire tous les équipements ou supports nécessaires dont l'utilisateur a besoin pour participer efficacement au cours. Vous pouvez également inclure des supports facultatifs dont l'utilisateur peut avoir 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 doit être déterminée par le marchand ultérieurement, 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 et spécifiez other_platform_name.
  • Conditions d'annulation: il est important que vos modalités d'annulation soient exactes. Définissez CancellationPolicy si les remboursements et les annulations sont autorisés. Si ce champ n'est pas défini, les remboursements ne sont pas autorisés.

Flux disponibilité

  • Spots Total (Total des emplacements) : définissez cette valeur sur la capacité totale de participants autorisée 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 des modifications apportées aux emplacements sur votre système ou dans le système Actions Center doit déclencher une RTU InventoryUpdate afin de nous informer des modifications apportées aux emplacements.
  • BookingNotification RTU: toute mise à jour d'une réservation (par exemple, modification de l'horaire ou annulation) sur votre système ou dans le système Actions Center doit déclencher une RTU BookingNotification afin de 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. Le Centre d'actions vous enverra un e-mail d'annulation.
  • Service RTU: si vous mettez actuellement à jour des services via une mise à jour en temps réel d'un service, veillez à inclure les champs de service en ligne appropriés si vous effectuez la mise à jour pour un service en ligne.

Adresses e-mail

Par défaut, le Centre d'actions envoie les e-mails standards de confirmation, de modification et d'annulation de la réservation lorsqu'un utilisateur effectue une transaction sur la plate-forme Actions Center.

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