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

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

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

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

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

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

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

  • פידים: להוסיף את type, VirtualSession, DirectMerchantPayment ואת CancellationPolicy (אם עדיין לא נוספו) לפידים של השירותים
  • שרת הזמנות: הוספת VirtualSessionInfo לשיטה CreateBooking, שליחת אימיילים עם מידע על הגדרה וירטואלית למשתמש
  • עדכונים בזמן אמת (התנהגות קיימת): טיפול בשינויים במלאי הווירטואלי באמצעות InventoryUpdate RTU, שינויים בהזמנה דרך BookingNotification 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 מתי וממי המשתמשים אמורים לצפות שפרטי הפלטפורמה יישלחו אליהם.
  • דרישות ברמת הסשן: צריך לתאר את כל הציוד או החומרים הנדרשים שהמשתמשים צריכים כדי להשתתף בשיעור ביעילות. ניתן גם לכלול חומרים אופציונליים שהמשתמש יצטרך, אבל לסמן אותם כאופציונליים.
  • פלטפורמה: הפלטפורמה צריכה לציין את הפלטפורמה שבה המשתמש ישתמש כדי לגשת לשירות אונליין.
    • אם הפלטפורמה תיקבע על ידי המוכר במועד מאוחר יותר, מגדירים את platform לערך FLEXIBLE.
    • אם הפלטפורמה שבה המוכר משתמש לא מופיעה ברשימה, צריך להגדיר את הערך של platform לערך OTHER ולציין את הערך other_platform_name.
  • מדיניות ביטולים: חשוב להציג מדיניות ביטולים מדויקת. יש להגדיר CancellationPolicy אם מותר לבצע החזרים כספיים וביטולים. אם לא מגדירים את ההנחה, ברירת המחדל היא שאסור לבצע החזרים כספיים.

פיד זמינות

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

שרת הזמנות

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

יצירת מפרט להזמנות

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

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

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

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

אימיילים

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

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