Deals feed

DealsFeed Definition

message DealsFeed {
  FeedMetadata metadata = 1;
  repeated deals.Deal deal = 2;
}

Deal Definition

// Definition of deals provided by merchants for their services.
message Deal {
  // An opaque string from an aggregator partner which uniquely identifies a
  // merchant. (required)
  // This merchant_id should match with the merchant_ids sent as part of
  // Merchant feed/Real Time Update (RTU).
  string merchant_id = 1;

  // If true, the deal is applicable to all services provided by the aggregator
  // partner. Otherwise, please list applicable services in the servide_id field
  // below.
  bool apply_to_all_services = 5;

  // An opaque string from an aggregator partner to identify a service of the
  // merchant where this deal applies.
  // Required if apply_to_all_services is set to false. This service_id, if
  // present, should match with the service_id sent as part of Service feed/RTU.
  repeated string service_id = 2;

  // An opaque string from an aggregator partner to uniquely identify a deal for
  // merchant and service above. (required)
  string deal_id = 3;


  // One sentence unstructured deals details (eg. 10% off food and
  // drink). (required)
  Text title = 6;

  // Url associated with the deal. It should point to the webpage where this
  // deal is present in the most detailed way.
  string url = 7;

  // The image to be shown with the deal. The url should point directly to a
  // specific image, which almost always ends with jpg, gif, png, or bmp, rather
  // than pointing to an entire index or website.
  // The image should be at least 250 pixels in both width and height.
  string image_url = 8;

  // The specific deal's Terms and Conditions displayed to user when the deal is
  // being booked through Reserve with Google.
  Terms terms = 9;

  // True if the deal is only redeemable only by a restricted group of users
  // (eg: paid members, certain credit card holders, etc.).
  bool restricted_to_certain_users = 10;

  // Valid_period and valid_time_of_week fields are used to specify the regular
  // availability of the deal. Valid_period represents the overarching date
  // range when the deal is valid, whereas valid_time_of_week fields represent
  // the recurring weekly schedule.
  // Then, valid_time_exception fields are used to represent special
  // schdule for times where the deal has alternative availability than the
  // regular schedule, such as special availability schedule during holidays.
  // To illustrate the relationship among these fields, we consider
  //   a time T is valid if and only if
  //      T is in valid_period AND
  //      ((T is in valid_time_of_week AND
  //        (valid_time_exception is not specified OR
  //         T is NOT in valid_time_exception)) OR
  //       T is in valid_time_exception)

  // TimeRange message is used to represent the overarching valid period of the
  // deal. It is a closed-open time range in seconds of UTC time since Unix
  // epoch. It should have the second of the date when the deal starts to be
  // valid as the start, and the second of the date when the deal starts to be
  // invalid as the end. Example: To specify that the deal is valid for the
  // entire year of 2019,
  //   valid_period { begin_sec: 1546300800 end_sec: 1577836800 }
  //
  // Note that because the valid period is closed-open, the end second is not
  // considered as within the valid period of this deal.
  // (required)
  TimeRange valid_period = 11;

  // This message stores the start and end time of a continuous valid time
  // interval of the deal at a given day of the week. It is used to
  // specify the recurrence availability of the deal on a weekly basis.
  // This time interval is a closed-open interval, i.e. [start, end)
  message ValidTimeOfWeek {
    // The day of week where the following valid time applies. (required)
    enum DayOfWeek {
      DAY_OF_WEEK_UNSPECIFIED = 0;
      MON = 1;
      TUE = 2;
      WED = 3;
      THU = 4;
      FRI = 5;
      SAT = 6;
      SUN = 7;
    }
    DayOfWeek day_of_week = 1;
    // Start time (inclusive) of this deal valid time interval, using seconds
    // from Midnight, in merchant's local timezone. Must be in the range
    // [0,86400). (required)
    int64 start = 2;
    // End time (exclusive) of this deal valid time interval, using seconds from
    // Midnight, in merchant's local timezone. Must be in the range (0,86400].
    // (required)
    int64 end = 3;
  }
  // The valid time of the deal in merchant's local timezone, specified with
  // multiple continuous time intervals using the message above. For example, if
  // a deal is valid on Mondays from 11:30-13:00 plus 16:00-20:00, and on
  // Tuesdays from 12:00-23:00, you can specify the valid hours as follows:
  //   valid_time_of_week { day_of_week: MON start: 41400 end: 46800 }
  //   valid_time_of_week { day_of_week: MON start: 57600 end: 72000 }
  //   valid_time_of_week { day_of_week: TUE start: 43200 end: 82800 }
  //
  // Note that it is a close-open interval. It means that the deal would be
  // available for all booking slots whose start time is from, for example,
  // Monday 11:30 up to the last starting time before 13:00, but the deal would
  // not be available for the slot starting at Monday 13:00.
  //
  // If valid_time_of_week is not present, we consider the deal to be valid at
  // all time within the valid_period time range specified above.
  repeated ValidTimeOfWeek valid_time_of_week = 12;

  // This message represents the time periods when the deal has alternative
  // availability schedule than the regular one, such as special schedule during
  // holidays.
  message ValidTimeException {
    // The overarching time range of the exception in the same format
    // as the regular valid_period field above. It is a closed-open interval
    // specifying when the expectional_time_of_week below would apply, replacing
    // the regular valid_time_of_week schedule. (required)
    TimeRange exceptional_period = 1;
    // The weekly availability schedule to be applied for the time range
    // specified in the exceptional period above. It should be in the same
    // format as the regular valid_time_of_week field above. If not present, all
    // times within the exceptional_period will be considered as valid for the
    // deal.
    repeated ValidTimeOfWeek exceptional_time_of_week = 2;
  }
  // Exceptions to the regular recurring valid_time_of_week availability
  // schedule. If set, any regular valid_time_of_week within this
  // exceptional_period are ignored and replaced by the exceptional_time_of_week
  // specified.
  repeated ValidTimeException valid_time_exception = 13;

  // A number from 1-100 indicating the priority of the deal under the specified
  // merchant and service. 1 is the most important and 100 is the least
  // important. Deals with smaller priority numbers will be shown before deals
  // with larger priority numbers when they are equally available.
  int64 priority = 14;
}

Text Definition

// A possibly-localized text payload. Some Text fields may contain marked-up
// content.
message Text {
  // Text value in an unknown locale. Required if and only if `localized_value`
  // is empty. The locale for this value may depend on the partner or service
  // provider -- it should not be assumed to be any specific language.
  string value = 1;

  // Per-locale text values. Optional.
  repeated LocalizedString localized_value = 2;
}

TimeRange Definition

// A closed-open time range, i.e. [begin_sec, end_sec)
message TimeRange {
  // Seconds of UTC time since Unix epoch (required)
  int64 begin_sec = 1;
  // Seconds of UTC time since Unix epoch (required)
  int64 end_sec = 2;
}

Terms Definition

// A set of rules and guidelines that are displayed to the
// user in order to make a booking through Reserve with Google.
message Terms {
  // The URL to the Terms and Conditions. (optional)
  string url = 1;

  // The text to be displayed to the user.
  // Use localized_text below for new integrations.
  string text = 2;

  // The localized text to be displayed to the user. (required)
  Text localized_text = 3;
}