הוספת שירותים באינטרנט (הוצאו משימוש)

שירותים אונליין מוגדרים כשירותים שניתנים לגמרי באינטרנט באמצעות פלטפורמה מתארחת, ולא לחייב את הלקוח להשתתף בשירות. פנים-אל-פנים. דוגמאות לשירותים אונליין:

  • שיעור יוגה אונליין באמצעות Zoom
  • כיתת אומן לאיפור אונליין באמצעות Google Meet
  • הצעת סרטון בנושא אינסטלציה באינטרנט דרך Skype

דרישות הסף לשימוש בשירותים אונליין

לפני התחלת ההטמעה, יש לעיין המדיניות והשיטות המומלצות בנושא שירותים אונליין.

הטמעת שירותים אונליין

שילוב שירותים אונליין הוא תוספת לתוכנית 'פגישה מקצה לקצה' הקיימת ומחייבים שינויים מסוימים בהטמעה קיימת. ככלל, השינויים הבאים כוללים:

  • פידים: מוסיפים את type, VirtualSession , DirectMerchantPayment, CancellationPolicy (אם עדיין לא נוסף) אל הפידים של השירותים
  • שרת הזמנות: מוסיפים את VirtualSessionInfo למתודה של CreateBooking, שליחת אימיילים עם פרטי הגדרה וירטואליים למשתמש
  • עדכונים בזמן אמת (התנהגות קיימת): טיפול בשינויים של מלאי וירטואלי דרך InventoryUpdate RTU, שינויים הזמנה דרך ה-RTU של ההזמנה, ושינויים בשירות דרך RTU של השירות

פידים

פיד שירותים

כדי לתמוך אונליין, השדות הבאים מתווספים לפיד השירותים שירותים שונים.

מפרטים של פיד שירותים

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

דוגמה של פיד שירותים

{
  "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"
    }
  ]
}
  • תיאור מותאם לשוק המקומי: התיאור צריך להיות ברור ומובן לגבי השירות. אפשר לקרוא מדריך שיטות מומלצות לבנייה של מבנה השירותים תוכן.
  • הוראות לסשן: ההוראות בנוגע לסשנים צריכות לתאר את כל את ההגדרה הדרושה ולעמוד בהנחיות המפורטות המדיניות.
    • אם לא נוצרים אוטומטית כתובת URL של סרטון בפלטפורמה ומזהה הפגישה כחלק מה-CreateBooking (למשל, הפרטים לא נשלחים דרך CreateBookingResponse), עליך לציין בבירור session_instructions מתי וממי מי המשתמש צריך לצפות שהפרטים על הפלטפורמות יישלחו אליו.
  • דרישות לגבי הסשן: הדרישות בנוגע לסשנים צריכות לתאר את כל הציוד או החומרים הנדרשים שהמשתמש צריך להשתתף בהם את הכיתה בצורה אפקטיבית. באפשרותך לכלול גם חומרים אופציונליים שהמשתמש יכול יש צורך, אבל יש לסמן אותם כאופציונליים.
  • פלטפורמה: הפלטפורמה צריכה לציין את הפלטפורמה שהמשתמש צריכים להשתמש בהם כדי לגשת לשירות המקוון.
    • אם המוכר יקבע את הפלטפורמה בשלב מאוחר יותר, מגדירים את הערך FLEXIBLE בשדה platform.
    • אם הפלטפורמה שבה המוכר משתמש לא מופיעה ברשימה, צריך להגדיר platform עד OTHER, ומציינים other_platform_name.
  • מדיניות ביטולים: חשוב שהביטול יהיה מדויק . הגדרת CancellationPolicy אם החזרים כספיים וביטולים מותרות. אם לא מוגדרת הנחת ברירת מחדל, לא ניתן לבצע החזרים כספיים מותר.

פיד זמינות

  • סה"כ נקודות: קביעת הקיבולת הכוללת של המשתתפים מותר לפלטפורמה (חשוב להקפיד לנטרל את מספר העובדים)

שרת הזמנות

אופציונלי: אם המערכת שלכם יוצרת מזהה פגישה וכתובת URL מטעם מוכר, יש לכלול את VirtualSessionInfo כחלק CreateBookingResponse.

המפרט של CreateBook

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 [(datapol.semantic_type) = ST_ACCOUNT_CREDENTIAL];
}


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

עדכונים בזמן אמת

צריך לשמור על הלוגיקה הקיימת של עדכון המלאי או ההזמנות להזמנות וירטואליות.

  • InventoryUpdate RTU: עדכונים שחלים על מיקומי מודעות משתנים או על מערכת מרכז הפעולות, צריכים להפעיל InventoryUpdate RTU יודיעו לנו על שינויים במשבצות.
  • BookingNotification RTU: עדכונים בהזמנות (למשל, שינוי זמן או ביטולים) במערכת שלך או מערכת Actions Center צריכה להפעיל RTU של BookingNotification כדי להודיע על כך בנוגע לשינויים בהזמנה.
    • אם המשתמש לא שולח את התשלום למוכר/לשותף, שולחים לנו RTU לביטול. הודעת ביטול תישלח על ידי מרכז הפעולות.
  • RTU של שירות: אם אתם מעדכנים כרגע שירותים באמצעות שירות ב-RTU, יש לכלול את שדות השירות אונליין המתאימים אם לעדכון לשירות אונליין.

אימיילים

כברירת מחדל, מרכז הפעולות ישלח את אישור ההזמנה הרגיל, הודעות אימייל לגבי שינויים וביטולים כשמשתמש מבצע עסקה בפלטפורמת Actions Center.

בנוסף, השותפים צריכים לשלוח את הפרטים של שיחת הוועידה, פרטי התשלום ופרטי מדיניות הביטולים בהודעות אימייל נפרדות למשתמש. לחלופין, תוכלו לשלוח תזכורות באימייל לפני הפגישה או השיעור. כדאי לעיין מסמך המדיניות כדי לוודא למדיניות האימייל של הכיתות הווירטואליות.