WO2017106655A1 - Selection of calendar-based, multiple event options - Google Patents
Selection of calendar-based, multiple event options Download PDFInfo
- Publication number
- WO2017106655A1 WO2017106655A1 PCT/US2016/067195 US2016067195W WO2017106655A1 WO 2017106655 A1 WO2017106655 A1 WO 2017106655A1 US 2016067195 W US2016067195 W US 2016067195W WO 2017106655 A1 WO2017106655 A1 WO 2017106655A1
- Authority
- WO
- WIPO (PCT)
- Prior art keywords
- event
- user
- results
- options
- api
- Prior art date
Links
- 238000000034 method Methods 0.000 claims abstract description 58
- 230000004044 response Effects 0.000 claims abstract description 18
- 230000005540 biological transmission Effects 0.000 claims description 6
- 238000010276 construction Methods 0.000 claims 3
- 239000000284 extract Substances 0.000 abstract description 6
- 238000004458 analytical method Methods 0.000 description 48
- 238000004891 communication Methods 0.000 description 24
- 230000010006 flight Effects 0.000 description 23
- 230000015654 memory Effects 0.000 description 22
- 230000006870 function Effects 0.000 description 13
- 235000021152 breakfast Nutrition 0.000 description 8
- 238000010586 diagram Methods 0.000 description 8
- 230000008901 benefit Effects 0.000 description 7
- 238000012545 processing Methods 0.000 description 7
- 238000012552 review Methods 0.000 description 7
- 230000004308 accommodation Effects 0.000 description 6
- 238000000605 extraction Methods 0.000 description 6
- 241000351238 Alinea Species 0.000 description 4
- 241001155433 Centrarchus macropterus Species 0.000 description 3
- 230000009471 action Effects 0.000 description 3
- 238000013500 data storage Methods 0.000 description 3
- 238000001514 detection method Methods 0.000 description 3
- 230000033001 locomotion Effects 0.000 description 3
- 238000007726 management method Methods 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 238000007792 addition Methods 0.000 description 2
- 238000001816 cooling Methods 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 230000008569 process Effects 0.000 description 2
- 230000001902 propagating effect Effects 0.000 description 2
- 230000000717 retained effect Effects 0.000 description 2
- RZVAJINKPMORJF-UHFFFAOYSA-N Acetaminophen Chemical compound CC(=O)NC1=CC=C(O)C=C1 RZVAJINKPMORJF-UHFFFAOYSA-N 0.000 description 1
- 230000003466 anti-cipated effect Effects 0.000 description 1
- 238000013473 artificial intelligence Methods 0.000 description 1
- 230000000386 athletic effect Effects 0.000 description 1
- 238000010418 babysitting Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 239000000969 carrier Substances 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 238000007865 diluting Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000007274 generation of a signal involved in cell-cell signaling Effects 0.000 description 1
- 230000036541 health Effects 0.000 description 1
- 238000002372 labelling Methods 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 230000007774 longterm Effects 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 235000012054 meals Nutrition 0.000 description 1
- 230000000737 periodic effect Effects 0.000 description 1
- 230000008054 signal transmission Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 239000000126 substance Substances 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000009182 swimming Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 230000001052 transient effect Effects 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q10/00—Administration; Management
- G06Q10/10—Office automation; Time management
- G06Q10/109—Time management, e.g. calendars, reminders, meetings or time accounting
- G06Q10/1093—Calendar-based scheduling for persons or groups
- G06Q10/1095—Meeting or appointment
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q50/00—Information and communication technology [ICT] specially adapted for implementation of business processes of specific business sectors, e.g. utilities or tourism
- G06Q50/40—Business processes related to the transportation industry
Definitions
- the subject matter disclosed herein generally relates to machines configured to the technical field of special-purpose machines that facilitate generation and provision of user interfaces (e.g., within webpages), including computerized variants of such special-purpose machines and improvements to such variants, and to the technologies by which such special-purpose machines become improved compared to other special-purpose machines that facilitate provisioning of user interfaces.
- the present disclosure addresses systems and methods to cause presentation of user interfaces providing automatically selected, multiple event options based extracted calendar data.
- An online service may allow a user of the online service to view multiple options for plans and make a selection from the multiple options based on manual user inputs.
- an airline may operate a webpage that provides an online reservation service from which a user may manually search for available flights (e.g., from San Francisco to New York) on a particular day and then select one of the available flights for reserving a seat thereon.
- a hotel may operate a webpage that provides an online reservation service from which the user may manually search for available hotel properties and room types (e.g., in New York) for a particular period of time (e.g., September 5 through September 9) and then select one of the available room types at an available hotel property for reserving.
- a restaurant may offer a webpage that provides an online reservation service from which the user may manually search for available table reservations (e.g., at a popular restaurant) within a particular range of times (e.g., 5:30 PM to 7:30 PM) on a particular date and then select one of the available table reservations for reserving.
- available table reservations e.g., at a popular restaurant
- a particular range of times e.g., 5:30 PM to 7:30 PM
- FIG. 1 is a network diagram illustrating a network environment suitable for automatic selection of calendar-based, multiple event options for
- FIG. 2 is a block diagram illustrating components of a suggestion server, according to some example embodiments.
- FIG. 3 is a block diagram illustrating calendar data accessed by the suggestion server, according to some example embodiments.
- FIG. 4 is a flowchart illustrating operations of a method for automatic selection and presentation of calendar-based, multiple event options, according to some example embodiments.
- FIG. 5 is a flowchart illustrating operations of a method for determining a trip type and in particular, a multiple event trip, according to some example embodiments.
- FIG. 6 is a flowchart illustrating operations of a method for sorting and ranking single trip, multiple event options.
- FIG. 7 is a block diagram illustrating components of a machine, according to some example embodiments, able to read instructions from a machine-readable medium and perform any one or more of the methodologies discussed herein.
- structures e.g., structural components, such as modules
- operations e.g., in a procedure, algorithm, or other function
- Example methods facilitate automatically selecting multiple event options based on calendar data, and generating and provisioning of user interfaces (e.g., within webpages) comprising these calendar-based, multiple event options for a single user (e.g., one customer or one traveler).
- Example systems e.g., special-purpose machines are configured to
- example embodiments provide mechanisms and logic that determines options to be presented on one or more user interfaces and causes the user interfaces to be presented to a user. More specifically, calendar-based, multiple event options presented on the user interfaces involves displaying suggested options derived from multiple events stored in a calendar of the user (e.g., a customer or a traveler). Accordingly, a suggestion server accesses (e.g., receives or retrieves) calendar data of the user, and extracts (e.g. parses) particular data from the calendar data (e.g., a location of each event or a time of each event).
- a suggestion server accesses (e.g., receives or retrieves) calendar data of the user, and extracts (e.g. parses) particular data from the calendar data (e.g., a location of each event or a time of each event).
- the extracted data is then made available to service providers (e.g., servers of the service providers), via an application program interface (API) request (e.g., an API call), for available options without guidance or further input from the user.
- service providers e.g., servers of the service providers
- API application program interface
- the options comprise travel options.
- the travel options may include special discounts, special inventories, or special extras (e.g., upgrades, free breakfast, parking, or meals included) based on (e.g., in response to) the extracted calendar data, user preferences, preferences of other similar users, or any suitable combination thereof.
- a user in San Francisco may be scheduled for a dinner in an expensive restaurant in downtown Chicago on Monday night and a meeting in Washington D.C. (DC) on Wednesday morning.
- the suggestion server is configured to access calendar data of the user that indicates these two calendared events and use at least some of the calendar data (also referred to as "extracted data") to construct a plurality of searches, via application program interface (API) requests (e.g., API calls), for available options (e.g., a high end hotel near the restaurant in Chicago, since the user is likely an affluent user based on the restaurant the user will be dining at).
- API application program interface
- the search can be automatically triggered by the suggestion server detecting that the calendared events are in a location a threshold distance from the user's home location (e.g., are out-of-town events), within a threshold time within each other, or within a threshold distance between each other, and particular options (e.g., hotel, flights) have not yet been booked (e.g., not present on the calendar of the user).
- a threshold distance from the user's home location e.g., are out-of-town events
- particular options e.g., hotel, flights
- the extracted data is shared with the service providers (e.g., servers of the service providers) at a specific level.
- the API request comprises fields for entry (or inclusion) of information for each calendared event by the suggestion server.
- the fields may include an event type field and a location field (e.g., latitude/longitude, neighborhood, or city) such that the service provider knows that the user will be in a particular location and performing some action (e.g., eating at a restaurant, going to a meeting, going to a sports event).
- the service provider provides options (e.g., hotel room options) in or near the particular locations of the calendared events.
- the options may comprise options from multiple service providers aggregated by the suggestion server.
- the suggestion server may make multiple API calls to servers of different service providers and aggregate a plurality of results from different service providers, and provide a user interface that comprises the plurality of results or a subset of the plurality of results (e.g., curated, top results).
- the suggestion server can use artificial intelligence, machine-learning, and data processing algorithms to determine a likely interest level of each user for a particular type or level of service (e.g., 5 star hotel versus a 3 star hotel). For example, if the suggestion server detects a user is going to a meeting in a fancy building in downtown Chicago (e.g., based on available information on neighborhood, zip code, star rating, owner, or tenant) and then going to a dinner in a fancy restaurant (e.g., based on reviews or star rating), the suggestion server infers that the user is probably on an expense account or likely affluent.
- a particular type or level of service e.g., 5 star hotel versus a 3 star hotel.
- the suggestion server can infer whether a particular user is likely extremely affluent, moderately affluent, a budget travel, and so forth based on the extracted data.
- a more affluent user is more likely to prefer, for example, luxury hotel options, business class flights options, and car service options.
- a user traveling to Disney World is more likely to be interested in hotels with family- friendly amenities.
- the suggestion server can proactively offer suggestions to the service providers as to a type or level of option to return in their results (e.g., 5 star hotels, first class airline seat, or family-friendly resort).
- the suggestion server takes the results and determines best options for the user. For example, the suggestion server connects with Hotel 1 and Hotel2. Hotel 1 has a sophisticated search system in which if Hotel 1 knows the last meeting time and location and that the user is affluent, the search system of Hotel 1 has logic to only return the nicest rooms and higher upgrades in their results. On the flip side, Hotel2 only connects using their standard API and returns general results that are not customized to the user.
- the suggestion server analyzes the search results and derives a result set that is relevant to the user (e.g., based on explicit and inferred preferences). For example, the search results are weighed, sorted, and ranked, and a top number of options are provided to the user. Alternatively, all search results can be provided with top options highlighted or otherwise differentiated. [0018]
- the suggestion server is configured to present this result set of options to the user (e.g., as suggestions for making a hotel reservation) in one or more user interfaces. For example, when the user visits a website associated with the suggestion server, the result set of options will be presented in one or more customized user interfaces. In other example embodiments, a notification or message is sent to the user providing the result set, or indicating that the result set is available for viewing on the website and providing a link to the website and the customized user interfaces.
- an “option” is a selection (e.g., choice, offering, alternative, menu item, or special deal) of potential interest to a user (e.g., as a user of an online service) in making or executing a travel plan (e.g., an itinerary).
- An option may be a "transportation option" pertinent to a transportation service or a vehicle. Examples of transportation options include travel by airplane, train, bus, trolley, ferry, ship, taxicab, rental car, car sharing service, or any suitable combination thereof.
- Transportation options may include transportation services (e.g., passenger service) provided by commercial carriers (e.g., airlines, car rental companies, or cruise operators), public transportation (e.g., city buses or regional trains), private operators (e.g., limousine services, charter airplanes, or charter helicopters), or any combination thereof.
- the transportation option specifies that the traveler walk, jog, hike, or ride a bicycle to a particular destination.
- An option may be an "accommodation option" pertinent to an accommodation (e.g., hospitality) service. Examples of accommodation options include stays in a hotel, motel, resort, hostel, bed-and-breakfast inn, boarding house, vacation rental, home sharing service, campground, or any suitable combination thereof.
- accommodation options include reservations at a restaurant, conference facility, health facility (e.g., spa, salon, or massage studio), athletic facility (e.g., gym, pool, or fitness center), or entertainment venue (e.g., theater, sports stadium, amusement park, or museum).
- health facility e.g., spa, salon, or massage studio
- athletic facility e.g., gym, pool, or fitness center
- entertainment venue e.g., theater, sports stadium, amusement park, or museum.
- an option may be both a transportation option and an accommodation option (e.g., a
- one or more of the methodologies described herein facilitate solving the technical problem of providing user interfaces presenting customized information from multiple service providers.
- the methodologies include accessing calendar data of a user.
- the logic also extracts data for a plurality of events from the calendar data and uses the extracted data to make a
- the events comprise, for example, an in-town event, a single out-of-town event, or a part of a trip that includes multiple events.
- the extracted data is used to construct an application program interface (API) request, whereby the extracted data is used as, or is associated with, one or more search criteria in the API request.
- the API request is transmitted to one or more service providers (e.g., to a server of each service provider), and results compatible with the events are received in response to the API request.
- the logic constructs a user interface comprising at least some options from the results and causes the user interface to be presented to a device of the user.
- one or more of the methodologies described herein may obviate a need for certain efforts or resources that otherwise would be involved in a user having to navigate to a plurality of service providers (e.g., the user is retained from navigating away from a website of an entity comprising the suggestion server) and performing numerous searches at each service provider in order to determine different options based on multiple events.
- resources used by one or more machines, databases, or devices e.g., within the environment
- Examples of such computing resources include processor cycles, network traffic, memory usage, data storage capacity, power consumption, network bandwidth, and cooling capacity.
- FIG. 1 is a network diagram illustrating a network environment 100 suitable for generating and presenting user interfaces comprising automatically selected calendar-based, multiple event options for a single user, according to some example embodiments.
- the network environment 100 includes a suggestion server 110, a calendar server 120, one or more provider servers 130a- 13 On (collectively referred to as provider server 130), and a user device 140, all communicatively coupled to each other via a network 150.
- the suggestion server 110 and the calendar server 120 may form all or part of a calendar service system that provides calendar-related services to one or more users (e.g., event scheduling or project management).
- the suggestion server 110 and the provider server 130 may form all or part of a travel service system that provides travel -related services to one or more users (e.g., merchandising of travel options or itinerary management).
- the suggestion server 110, the calendar server 120, and the provider server 130 form all or part of a combined system.
- the suggestion server 110 is described in more detail in connection with FIG. 2, and may be implemented in a computer system, as described below with respect to FIG. 7.
- the calendar server 120 functions as a data repository that stores calendar data of one or more users.
- the calendar server 120 is operated by a third-party calendar service (e.g., Google, Outlook, or Yahoo).
- a third-party calendar service e.g., Google, Outlook, or Yahoo.
- the provider server 130 functions as a data repository that stores travel data describing one or more options (e.g., travel options).
- the provider server 130 is operated by a third-party service provider (e.g., a travel agency, an airline, or a hotel management company).
- the provider server 130 is operated by a third-party service provider that provide services that are tangentially related to travel.
- the third party service provider may provide pet services (e.g., boarding services, pet walker), house sitting services, or babysitting services.
- the user 142 may be a human user (e.g., a human being), a machine user (e.g., a software program configured to interact with the user device 140), or any suitable combination thereof (e.g., a human assisted by a machine or a machine supervised by human).
- the user 142 is not part of the network environment 100, but is associated with the user device 140 and may be a user of the user device 140.
- the user device 140 may be, for example, a desktop computer, a tablet computer, or a smart phone belonging to the user 142.
- Any of the servers, databases, or devices (each also referred to as a
- machine shown in FIG. 1 may be implemented in a general-purpose computer modified (e.g., configured or programmed) by software to be a special-purpose computer to perform the functions described herein for that machine.
- a computer system able to implement any one or more of the methodologies described herein is discussed below with respect to FIG. 7.
- a "database” is a data storage resource and may store data structured as a text file, a table, a spreadsheet, a relational database, a triple store, a key- value store, or any suitable combination thereof.
- any two or more of the machines illustrated in FIG. 1 may be combined into a single machine, and the functions described herein for any single machine may be subdivided among multiple machines.
- the network 150 may be any network that enables communication between machines (e.g., the suggestion server 110 and the user device 140). Accordingly, the network 150 may be a wired network, a wireless network (e.g., a mobile network), or any suitable combination thereof. The network 150 may include one or more portions that constitute a private network, a public network (e.g., the Internet), or any suitable combination thereof.
- FIG. 2 is a block diagram illustrating components of the suggestion server 110, according to some example embodiments.
- the suggestion server 110 includes an access module 210, an extraction module 220, an analysis module 230, an interface module 240, a results module 250, and a
- the suggestion server 110 also includes (or is coupled to) a user profile database 270 that is configured to communicate with the other components of the suggestion server 110.
- a user profile database 270 that is configured to communicate with the other components of the suggestion server 110.
- Any one or more of the modules described herein may be implemented using hardware (e.g., a processor of a machine) or a combination of hardware and software. Moreover, any two or more of these modules may be combined into a single module, and the functions described herein for a single module may be subdivided among multiple modules.
- the access module 210 is configured to access calendar data of the user
- the access module 210 may access (e.g., receive or retrieve) the calendar data from the calendar server 120, for example, by using an API call.
- the suggestion server 110 locally stores the calendar data (e.g., in the user profile database 270), and the access module 210 accesses the calendar data from the suggestion server 110.
- the calendar data includes information describing one or more calendared events in the calendar of the user 142 (e.g., scheduled for the user 142).
- the calendar data indicates a period of time (e.g., first period of time) during which the user 142 is scheduled to participate in (e.g., attend) a calendared event along with a location for the calendared event.
- the calendar data may indicate that the user 142 is scheduled to attend a dinner at Alinea Restaurant in Chicago on Monday, September 5, from 7 PM to 9 PM Central Time.
- the extraction module 220 is configured to extract calendar data that is used to facilitate a search for options (e.g., travel options or menu options).
- the extraction module 220 parses the calendar data to determine date, time, location, or other (extracted) calendar data that is pertinent for facilitating a search. For example, the extraction module 220 extracts location data (e.g., Alinea Restaurant, Chicago) and time data (e.g., September 5 th , 7PM to 9PM).
- the extracted data is provided to the analysis module 230 for processing (discussed further below).
- the extracted data is provided to the interface module 240 and transmitted to service providers (e.g., provider servers 130) via an API call to initiate a search for travel options from the service providers.
- service providers e.g., provider servers 130
- the analysis module 230 is configured to determine whether the extracted data indicates one or more calendared events within a single trip or one or more calendared events within multiple trips. Accordingly, the analysis module 230 receives the extracted data and determines whether there are one or more calendared events identified from the extracted data, and if there are a plurality of calendared events, whether the plurality of calendared events are within a predetermined distance threshold and/or time threshold, or triggers (e.g., activates) a location trigger to constitute a single trip. For example, if a first calendared event is a meeting in Minneapolis and a second calendared event is dinner the next night in St. Paul, this would likely indicate a single trip with multiple events due to the location of the two events being within a
- predetermined minimum distance threshold e.g., less than 100 miles
- a predetermined time threshold e.g., within 2 days of each other or can be driven in under 3 hours.
- a first calendared event is the meeting in Minneapolis and a second calendared event is dinner three nights later in San Francisco (the user's home location)
- this indicates a single trip with a single event i.e., the meeting in Minneapolis
- the predetermined minimum distance threshold e.g., less than 100 miles
- a predetermined time threshold e.g., more than 2 days apart or cannot be driven in under 3 hours
- the second event i.e., the dinner
- the time threshold (e.g., based on time to drive or based on days apart), the distance threshold (e.g., based on distance between locations of calendared events or based on distance from user's home to locations of each calendared event), and the location trigger (e.g., based on one of the calendared events being in a location in between the home location and the other calendared event, based on the home location being in between the location of the two calendared event) may be based on empirical or historical data for the user 142 or for similar users of the suggestion server 110 as determined by the analysis module 230.
- the analysis module 230 uses a function of both time and distance to determine whether multiple calendared events constitute a single trip or multiple trips.
- two calendared events constitute a single trip if a sum of [a number of minutes of travel time between the locations of the calendared events] and [a distance between the locations of the calendared events in miles] is less than a pre- determined threshold X.
- X may vary as a function of the user's budget, self-declared preferences, or inferred preferences based on prior user behavior.
- multiplication, subtraction, division, exponentials, weighting, or other mathematical operations or combination of operations may be used instead of summation to determine whether two calendared events constitute a single trip.
- the analysis module 230 determines whether the first calendared event is in San Diego on December 1 st and the second calendared event is in Boston on January 23 rd and the user 142 lives in San Francisco. This determination is based on one or more of the time threshold (e.g., the calendared events are more than a month apart), home location of the user 142, a distance threshold (e.g., San Diego and
- the analysis module 230 can base the determination on empirical data from other users' calendars with similar demographics (e.g., other people have booked similar itineraries as separate trips).
- the time threshold e.g., the calendared events are 2 days apart, the distance can be driven in under 5 hours
- a location threshold e.g., NYC and DC are less than 300 miles apart
- home location of the user 142 e.g., home location more than 500 miles from each calendared event, home location not located between the two calendared events
- past travels by the user 142 e.g., people from the West Coast who have one meeting in one East Coast city and one meeting two days later in another East Coast city usually do both as part of one trip rather than two separate trips.
- the home location e.g., Philadelphia
- the analysis module 230 may conclude that the user 142 will make two trips and return home between the two trips (e.g., based on the home location being located in between the two calendared events).
- the analysis module 230 may be categorized by the analysis module 230 as a single trip with multiple events whereby the user travels to NYC and then London as one continuous trip (before flying back to San Francisco) but attends two different events (e.g., one in NYC and one in London) in some circumstances.
- the determination that it is a single trip is inferred by the analysis module 230, which determines that there simply does not exist any flights that would permit the user 142 to stop in San Francisco in between attending both the NYC and London events.
- the determination of whether multiple events constitute a single trip may be inferred by assumptions using the user's preferences or by an
- the analysis module 230 is also configured to analyze the extracted data to infer a level or type of service that may be applicable to the user 142.
- the analysis module 230 receives the name of the restaurant (e.g., Alinea) and determines that the restaurant is a high- end, expensive restaurant (e.g., based on information retrieved regarding the restaurant). Based on this determination, the analysis module 230 infers that the user 142 is likely very affluent, traveling on an expense account, or prefers a higher level of service. This determination may be used to customize search criteria for the travel options or used to rank results from the search. The inferred level or type of service for the user 142 may be stored in a profile of the user 142 in the user profile database 270.
- the name of the restaurant e.g., Alinea
- the analysis module 230 determines that the user 142 is likely very affluent, traveling on an expense account, or prefers a higher level of service. This determination may be used to customize search criteria for the travel options or used to rank results from the search.
- the inferred level or type of service for the user 142 may be stored in a profile of the
- the analysis module 230 is further configured to infer user preferences from past calendared events. For example, if the user has stayed at a Hilton Hotel for the last four trips, the analysis module 230 infers that the user prefers to stay at Hilton Hotels. In another example, if the user is new, the analysis module 230 can detect that the last five flights from their calendared events were on American Airlines, so the analysis module 230 infers that the user is loyal to American Airlines. As another example, if the analysis module 230 detects that the user 142 tends to "cut it close" and book flights that depart very shortly after a prior meeting, the analysis module 230 infers that flights that leave soon after meetings should be provided to the user even though most other customers would not want to see these flights.
- the analysis module 230 can detect that the user 142 tends to stay at hotels very close to meetings and infer that the user 142 likes to be within walking distance so as not to rent a car. Conversely, the analysis module 230 may detect that the user 142 tends to stay at hotels far from meetings and that the user 142 is therefore willing to rent a car if it will save money on hotels or if the user 142 can stay at a nicer hotel. Further still, if the user 142 takes frequent trips to a particular location (e.g., London), this information can be provided in the API call/request so that the service providers know to offer extra amenities to secure the user's long-term loyalty on future trips to that location.
- a particular location e.g., London
- these inferred user preferences may be used to group users having similar user preferences into a same travel group to create a virtual room block or virtual airline seat block.
- the inferred preferences for the user 142 may be stored in the profile of the user 142 in the user profile database 270.
- the interface module 240 is configured to communicate via an API with one or more provider servers 130.
- the interface module 240 provides some or all of the extracted data directly to the provider server 130 (e.g., in fields of an API request).
- the provider server 130 then performs a search of their inventory for options that match at least part of the extracted data.
- results of the search may be customized to a type or level of service that would appeal to the user 142 or to a user type of the user 142 (e.g., affluent traveler, budget traveler, business traveler, traveler with kids) and may include specific types of discounts, upgrades, or extra amenities that would appeal to the user 142.
- the suggestion server 110 (e.g., the analysis module 230) can provide suggestions to the provider server 130.
- the suggestion server 110 may indicate that the user 142, based on history of the user 142 or similar type of user, is most likely to pick an option if it includes free breakfast.
- the logic can be left to the provider server 130 to customize the results, or the suggestion server 110 can provide guidance to the provider server 130 and the provider server 130 can use the guidance.
- the results may be general results that any user of the provider server 130 may receive using a standard API of the provider server 130.
- the interface module 240 is configured to construct and transmit multiple API calls for options.
- Each of the API calls will include a different set of criterion/criteria. For example, suppose the user 142 from San Francisco has a meeting in NYC on Monday night and a meeting in DC on Wednesday morning.
- the interface module 240 makes multiple API calls to consider different scenarios. The different scenarios may include, for example: 1) The user 142 travels SFO-NYC on Monday, stays in NYC Monday and Tuesday nights, travels NYC -DC early Wednesday morning, and
- the user 142 travels SFO-NYC on Monday, stays in NYC Monday night, travels NYC -DC sometime Tuesday, stays in DC Tuesday night, and returns DC-SFO Wednesday afternoon;
- the interface module 240 may make one or more API calls for results so that the suggestion server 110 can determine whether it makes more sense for the user 142 to rent a car and drive the NYC- DC segment or to take a train (and on what day), to fly home, or to stay somewhere other than NYC or DC. Further still, the interface module 240 can, via the API call, solicit each of the different API partners (e.g., the service providers at the provider server 130) for their best offers/extra amenities in each of the above situations.
- the different API partners e.g., the service providers at the provider server 130
- the results module 250 is configured to determine best or optimal options to present to the user 142.
- the best options may be based on a combination of one or more factors such as cost, what the user 142 is getting (e.g., free breakfast, suite vs. room, free WiFi), customer reviews including customer reviews specific to this user's demographics, user preferences (e.g., from the user profile database 270), an inferred user type or level of service (e.g., from the analysis module 230 or user profile database 270), and commission levels for an owner of the suggestion server 110.
- factors such as cost, what the user 142 is getting (e.g., free breakfast, suite vs. room, free WiFi), customer reviews including customer reviews specific to this user's demographics, user preferences (e.g., from the user profile database 270), an inferred user type or level of service (e.g., from the analysis module 230 or user profile database 270), and commission levels for an owner of the suggestion server 110.
- the user preferences can be explicitly provided by the user 142 (e.g., user 142 previously filled out a form or user interface that indicates preferences for airlines, times for flights, hotels, or room types that is stored to the user profile database 270).
- the user preferences can also be inferred from past purchases or calendared events as discussed above with respect to the analysis module 230.
- the results module 250 comprises an algorithm that applies weights and scores to these factors. For example, if the calendar data indicates that the user 142 is attending an event with his two children, the results module 250 may weigh a stay at kid-friendly hotel with free video games and a highly rated swimming pool higher. As another example, if the calendar data indicates that the user 142 is attending an event with wealthy business clients, the results module 250 may weigh a stay at a high-end luxury hotel with sophisticated conference facilities higher. As a further example, if the calendar data indicates that the user 142 is attending an event with his wife near their wedding anniversary date, the result module 250 may weigh a stay at a romantic bed-and-breakfast inn near the event higher.
- the results module 250 assigns extra weight to a service provider or option that is providing something unique to the user 142 (e.g., lower rate than a public rate). Whether an option contains a unique aspect can be determined in several ways.
- the suggestion server 110 can directly query the provider server 130 if the provider server 130 is providing a unique benefit to the user 142.
- the suggestion server 110 e.g., the interface module 240
- a first API call is made via a special API to the provider server 130 that results in the customized search results for the user 142 being returned.
- a second API call is made using a standard API (e.g., available to the general public) of the provider server 130 that results in standard search result.
- the results module 250 compares the options from the two search results to determine whether and what the unique amenities or benefits are.
- the unique amenities and benefits may be weighted differently. For example, a free room upgrade may be weighted higher than free breakfast or free WiFi.
- the results module 250 comprises or accesses logic or stored data (e.g., weight table stored in memory) that indicates a weight to apply.
- the results module 250 can also determine if there is something unusual with the results that triggers further API calls for alternative options (e.g., an unexpected result based on empirical or historical data).
- alternative options e.g., an unexpected result based on empirical or historical data.
- the results module 250 triggers the interface module 240 to make another API call with this scenario.
- the results module 250 may trigger the interface module 240 to run scenarios to identify other options such as other cities for hotels the user 142 can stay in (e.g., stay in New Jersey instead of NYC), some other city closer to fly to, or other transportation options (e.g., renting a car, taking a train, or taking a bus) if flights are too expensive.
- These further API calls will result in more options that can be incorporated with the initial search results and presented to the user 142.
- the communications module 260 is configured to present the options to user.
- the communications module 260 may present the options by generating and displaying or causing the display of a user interface or webpage (e.g., of a travel option search service), a notification (e.g., a pop up window), a message (e.g., an e-mail message, instant message, or a text message), or any suitable combination thereof.
- the communication module 260 presents the options in a communication directed at the user 142, in a communication addressed to the user device 140, or both (e.g., for
- the communication may include a link to a user interface (e.g., provided by a website associated with the suggestion server 110) comprising the options to be presented to the user.
- a user interface e.g., provided by a website associated with the suggestion server 110
- the user profile database 270 stores user profile information of the user 142 for access by components of the suggestion server 110.
- the user profile information may include, for example, home location (e.g., home address, home airport), inferred and explicitly provided user preferences (e.g., prefers 5 star hotels, prefers high floors away from elevators, prefers business class seats, prefers driving instead of flying if a trip is less than 100 miles), service provider membership information (e.g., airline frequent flier number, hotel loyalty membership number), or inferred user type.
- FIG. 3 is a block diagram illustrating calendar data 300 (e.g., as accessed by the access module 210), according to some example embodiments.
- the calendar data 300 includes information describing one or more events.
- event data 310 describes a calendared event (e.g., a phone call, a business meeting, a multi-day conference, a week-long vacation, dinner reservations, or sports events).
- event data 330, 340, and 350 describe additional calendared events (e.g., each event having its own location).
- the calendar data 300 may be limited to events of a single user (e.g., user 142). According to various example embodiments, one or more of the following data structures may be omitted.
- the event data 310 includes one or more of a name 311 of an event (e.g., a title), a creator 312 of the event (e.g., the user 142 or an assistant thereof), a subject 313 of the event (e.g., a description or note), and a location 314 of the event (e.g., room number, floor number, venue name, address, city, state, country, cross streets, or global positioning system (GPS) coordinates).
- the event data 310 also includes a period of time 315 for the event.
- the period of time 315 may include a start time 316 (e.g., 10 AM), an end time 317 (e.g., 12 PM), a duration 318 (e.g., two hours), and a time zone 319 (e.g., Eastern Time).
- the period of time 315 includes multiple time zones (e.g., time zone 319).
- the event data 310 includes a nonphysical flag 320 (e.g., indicating that the event is a virtual or online event), an accepted flag 321 (e.g., indicating that the event has been accepted into the calendar of the user 142), a tentative flag 322 (e.g., indicating that the event is tentatively scheduled for the user 142), and a busy/available flag 323 (e.g., indicating whether the user 142 is busy or available for additional events during the period of time 315).
- the event data 310 includes information on one or more additional attendees.
- the event data 310 includes an "other" attendee 324 of the event (e.g., a name of another attendee) and a status 325 of the other attendee (e.g., whether the other attendee 324 is scheduled to attend the event).
- the other attendee 324 is a friend, family member, coworker, colleague, or a client of the user 142.
- multiple "other" attendees are specified in the event data 310.
- Each of the event data 330, 340, and 350 may include information similar to that described for the event data 310.
- FIG. 4 is a flowchart illustrating operations of a method 400 for automatic selection and presentation of calendar-based, multiple event options, according to some example embodiments.
- Operations in the method 400 may be performed by the suggestion server 110, using modules described above with respect to FIG. 2. Accordingly, the method 400 is described by way of example with reference to the suggestion server 110. However, it shall be appreciated that at least some of the operations of the method 400 may be deployed on various other hardware configurations or be performed by similar components residing elsewhere in the network environment 100. Therefore, the method 400 is not intended to be limited to the suggestion server 110.
- the access module 210 accesses the calendar data 300 (e.g., from the calendar server 120).
- the calendar data 300 is specific to the user 142.
- the calendar data 300 may indicate the period of time 315 (e.g., a first period of time) during which the user 142 is scheduled to participate in one or more calendared events (e.g., a business meeting).
- operation 410 is performed by invoking an application
- API programming interface
- the API may be invoked in response to the user 142 providing login credentials (e.g., username and password) to identify or authenticate himself to the suggestion server 110, to the calendar server 120, to the provider server 130, or any suitable combination thereof.
- operation 410 is performed by receiving the calendar data 300 from the calendar server 120.
- the calendar data 300 may be received from the calendar server 120 in response to a request submitted by the user 142 to the calendar server 120.
- the calendar data 300 may be received from the calendar server 120 as part of a data feed (e.g., a periodic or repeating download) arranged or authorized by the user 142.
- operation 410 is performed in response to a query submitted by the user 142 (e.g., via the user device 140) to the suggestion server 110 or another server associated with (e.g., linked to) the suggestion server 110, such as a server hosting a search engine.
- the user 142 may query the name of a city (e.g., San Francisco or New York City), and the access module 210 may access the calendar data 300 in response to the submission of the query (e.g., as detected by the suggestion server 1 10, the calendar server 120, the provider server 130, or any suitable combination thereof).
- the extraction module 220 extracts event data 310 from the calendar data.
- the extracted data is then used to facilitate a search for options.
- the extraction module 220 may extract event type or subject 313 (e.g., meeting, dinner), location 314 (e.g., Alinea, Chicago), and time data (e.g., start time 316, end time 317, duration 318).
- the extracted data may be for one or more events over a predetermined date range (e.g., 2 week period).
- the analysis module 230 determines a trip type for the user 142, and more particularly, that the user 142 has a single trip with multiple events. Accordingly, the analysis module 230 determines there are a plurality of calendared events identified by the extracted data, and that the plurality of calendared events are within a predetermined distance threshold and/or a predetermined time threshold and/or triggers a location trigger that results in a determination that there is only a single trip. Operation 430 will be discussed in more detail in connection with FIG. 5.
- the analysis module 230 analyzes the extracted data to infer a level of service and user type that may be applicable to the user 142. For example, if the analysis module 230 determines that the user 142 is having dinner at a high-end, expensive restaurant (e.g., based on information retrieved regarding the restaurant), the analysis module 230 may infer that the user 142 is likely very affluent, traveling on an expense account, or prefers a higher level of service or options. This determination may be used to customize search criteria, suggest amenities or other preferences for the travel options, or rank results from the search performed by the service provider(s). In some example embodiments, operation 440 may occur at any time given any calendared data and the results stored to the user profile database 270. As such, operation 440 may include accessing stored inferred level of service or user type information for the user 142 (e.g., from a user profile stored in the user profile database 270).
- the interface module 240 generates multiple API requests using the extracted data and makes multiple API calls to one or more provider servers 130.
- the interface module 240 may include user preferences or preferences of similar users in the API requests including an inferred or explicit level of service or an inferred or explicit user type.
- the API requests are automatically generated based on the determined trip type.
- the API request will include the extracted data for the single event.
- the API requests may include extracted data for the multiple events (e.g., at multiple locations).
- each of the API calls may include a different set of criteria for a different travel scenario, and the multiple API calls may cover all possible scenarios (e.g., travel scenarios) determined by the analysis module 230 and the interface module 240.
- the interface module 240 provides additional data to a special API of the service provider.
- the additional data can be just indicating to the special API that the user 142 is a member associated with the suggestion server 110 to providing more sophisticated information (e.g. indicating to the special API that the customer's last meeting of the day is at 9 PM on the Upper East Side of Manhattan).
- the interface module 240 can provide some or all of the extracted data, via a special API, to a provider server 130 that has logic to handle customized searches based on the extracted data.
- the provider server 130 is provided the location, time data, type or level of service for the user 142, and suggested options (e.g., this type of user prefers free breakfast), and is capable of returning customized results.
- the interface module 240 can include recommendations (within the API call) on what discounts or extra amenities the service provider should offer to maximize their likelihood of obtaining a booking.
- the interface module 240 suggests a threshold discount or extra amenities in the API call (e.g. "only give us results that are discounted at least 20%,” “only give us results that include free upgrades,” or "you're twice as likely to be booked if your discount is more than 20%") to motivate service providers to do so.
- the interface module 240 uses a standard API of a provider server 130 that does not have a special API and provides appropriate search criteria to the provider server 130 (e.g., general date and location information).
- the results module 250 receives the results for each of the multiple API calls.
- results of each search may be customized to the type or level of service that would appeal to the user 142 or to user type of the user 142 (e.g., affluent traveler or budget traveler) and may include specific types of discounts, upgrades, or extras that would appeal to the user 142, and can include options
- a service provider with a special API can return a different set of inventory or options versus a general API (e.g., 10 hotels on the Upper East Side rather than 10 hotels spread all around New York).
- the service provider returns the same inventory as with a standard API, but with discounts or other amenities (e.g., free upgrades, free breakfast) not available to the public at large.
- Service providers may be eager to offer discounts to segmented groups of customers (e.g.
- the results may be general results that any user would receive using the standard API of the service provider.
- the results module 250 sorts and ranks the results to determine the best or most optimal options to present to the user 142.
- the best options may be based on a combination of one or more factors such as, for example, cost, what the user 142 is getting (e.g., free breakfast, suite vs. room, free WiFi), customer reviews including customer reviews specific to this user's demographics, user preferences (e.g., from the user profile database 270), the inferred user type and level of service (e.g., from the analysis module 230), or commission levels for an owner of the suggestion server 110.
- the results module 250 uses an algorithm that applies weights and scores to these factors.
- the results module 250 assigns extra weight to a service provider or option that provides a unique benefit or aspect to the user 142 (e.g., lower rate than a public rate).
- results from the standard API call are cross-referenced against a pre-provided list of discounts or extras. For example, each week an airline may provide a list of how much discount flights provided by the suggestion server 110 can be offered as a function of the route or a particular type of user (e.g., affluent user, frequent flier). In another example, a hotel company provides a list of upgrades that can be provided for free to customers of the operator of the suggestion server 110 going to specific cities.
- the suggestion server 110 (e.g., the results module 250) can then automatically apply these discounts/upgrades to the standard search results if conditions/rules for these discounts/upgrades are satisfied. These discounts/upgrades can then be taken into consideration by the results module 250 in ranking the options.
- the operator of the suggestion server 110 can include their own discounts or extras.
- the suggestion server 110 may use models to estimate how likely a specific user would be to book at various prices for a hotel (e.g. based on other people whose calendars have had meetings in similar cities), and then apply discounts tailored to those prices on top of what the service providers offers.
- the suggestion server 110 may use models to estimate how likely a specific user would be to book at various prices for a hotel (e.g. based on other people whose calendars have had meetings in similar cities), and then apply discounts tailored to those prices on top of what the service providers offers.
- the suggestion server 110 can also offer customers extra discounts, for example, for purchasing flights and hotels together.
- the suggestion server 110 can also solicit extra-discounted inventory or extra-special offers, from the service providers, for users willing to book flights and hotels together.
- the analysis of the results also includes determining, by the results module 250, whether there is something unusual with the results, which may trigger further API calls for alternative options. Operation 470 will be discusses in more detail in connection with FIG. 6 below.
- the communications module 260 presents the options to the user 142.
- the communications module 260 may present the options by displaying or causing a display of a user interface such as a webpage (e.g., of a travel option search service), a notification (e.g., a pop up window), a message (e.g., an e-mail message, instant message, or a text message), or any suitable combination thereof. More than one means of presenting the results (e.g., user interface, notification, or message) can be used.
- the communication module 260 presents the options in a communication (e.g., a notification or message) directed at the user 142, in a communication addressed to the user device 140, or both.
- Such a communication may present the option among multiple travel options (e.g., for consideration by the user 142), or provide a link to a webpage or website where a user interface comprising the travel options is presented.
- the communications module 260 presents a top number of options (e.g., the top 3) as determined in operation 470.
- the communications module 260 present all the options along with recommendations of the best or more optimal
- example embodiments discuss the options as being travel options, example embodiments are not limited to travel service providers.
- the service provider can be any service provider that wants to know particular travel information for the user 142 and use that travel information to offer services.
- the service provider can be an entertainment venue (e.g., for a location that the user 142 will be at during a trip), a restaurant, a travel insurance company, house sitters, a pet boarding service, and so forth.
- FIG. 5 is a flowchart illustrating operations of a method (e.g., operation 430) for determining a trip type, according to some example embodiments.
- Operations in the method may be performed by the suggestion server 110, using one or more modules (e.g., the analysis module 230) described above with respect to FIG. 2. Accordingly, the method is described by way of example with reference to the suggestion server 110. However, it shall be appreciated that at least some of the operations of the method may be deployed on various other hardware configurations or be performed by similar components residing elsewhere in the network environment 100. Therefore, the method is not intended to be limited to the suggestion server 110.
- the analysis module 230 detects a first calendared event and corresponding location 314 and time from the extracted data. The analysis module 230 then access a home location for the user 142 in operation 520. The home location may be accessed from the user profile of the user 142 stored in the user profile database 270.
- the determination may be based on the location 314 transgressing a home location distance threshold (e.g., more than 100 miles from the home location) or a home location driving time threshold (e.g., more than 3 hours to drive from the home location).
- a home location distance threshold e.g., more than 100 miles from the home location
- a home location driving time threshold e.g., more than 3 hours to drive from the home location.
- the determination that the first event is an out-of-town event triggers a flag to be set by the analysis module 230 that indicates to the interface module 240 that an API request is to be generated.
- the analysis module 230 determines whether the extracted data indicates there is a second calendared event. In some example embodiments, the analysis module 230 determines whether there is a second calendared event within a predetermine time range of the first calendared event (e.g., within a week). If there is not a second calendared event, then the analysis module 230 concludes that the trip is a single trip with a single event in operation 550.
- the analysis module 230 determines whether the first and second calendared events are within one or more event thresholds or satisfies an event trigger (e.g., time threshold, distance threshold, location trigger). If the two events are within the event thresholds/triggers, then the analysis module 230 may conclude that the user 142 has a single trip with multiple events in operation 570. For example, if the location of the first event and the location of the second event are closer to each other than to the user's home and the events are less than a two days apart, the analysis module 230 concludes that the user 142 has a single trip with multiple events.
- an event trigger e.g., time threshold, distance threshold, location trigger
- the analysis module 230 may infer that there are two trips based on a location trigger being satisfied (e.g., home location between the two calendared events and the user will likely return home in between the two calendared events).
- the analysis module 230 determines that the two events are not within the time threshold or a distance threshold or does not satisfy a location trigger (e.g., home location between the two calendared events, location of one event in between home location and other event), or any combination of these thresholds/triggers, then the analysis module 230 infers that the user 142 has multiple trips in operations 580.
- a location trigger e.g., home location between the two calendared events, location of one event in between home location and other event
- the suggestion server 110 can suggest an add-on trip to an inferred trip. For example, if the user 142 who lives in New York has a calendared event (e.g., meeting) in San Francisco on a Friday, the suggestion server 110 may suggest a weekend extension add-on trip to Napa or Monterey or an extension to the San Francisco trip. As such, the interface module 240 constructs an API request for specific deals (e.g., obtain options) for dates corresponding to the weekend. Further still, in addition to suggesting an add-on trip, the suggestion server 110 may suggest add-on events (e.g., concerts or restaurants) that may be of interest to the user, for example, based on their preferences. In some example embodiments, the add-on trip can be included in the API request for bundled options.
- add-on trip can be included in the API request for bundled options.
- FIG. 6 is a flowchart illustrating operations of a method (operation 470) for analyzing the results obtained from the service provider(s).
- Operations in the method may be performed by the suggestion server 110, using one or more modules (e.g., the results module 250) described above with respect to FIG. 2. Accordingly, the method is described by way of example with reference to the suggestion server 110. However, it shall be appreciated that at least some of the operations of the method may be deployed on various other hardware configurations or be performed by similar components residing elsewhere in the network environment 100. Therefore, the method is not intended to be limited to the suggestion server 110.
- the initial results are compared to expected results.
- the suggestion server 110 has access to past results that serve as a basis for expected results.
- the results module 250 accesses a knowledge database that indicates whether there are usually non-stop flights between two destinations (e.g., usually non-stop flights from New York to San Francisco available).
- the suggestion server 110 has access to flight schedules and arrival information. Therefore if there are no seats available, for example, on non-stop flights today from New York to San Francisco, the results module 250 can infer that the flights are sold out or have been canceled (e.g., due to weather), rather than because there are no non-stop flights that exist between those two cities.
- an unusual result is detected. For example, if hotels are $1500/night in NYC and the expected (or normal) range for hotels in NYC is from $300-$600/night, the results module 250 determines that the hotel option is unusual.
- the results module 250 triggers the interface module
- the API call may include search criteria to fly the user 142 home or to look for hotel rooms in an alternative city.
- the API call may include search criteria to fly the user 142 to some other city closer to a location of the second calendared event (e.g., Baltimore) and have the user rent a car to travel the rest of the way.
- the results including results obtained from initial API calls are weighed and ranked to determine the best options.
- the best options may be based on a combination of one or more factors such as cost, what the user 142 is getting (e.g., free breakfast, suite vs. room, free WiFi), customer reviews including customer reviews specific to this user's demographics, user preferences (e.g., from the user profile database 270), the inferred user type and level of service (e.g., from the analysis module 230), and commission levels for an owner of the suggestion server 110.
- the results module 250 uses an algorithm that applies weights and scores to these factors.
- the results module 250 assigns extra weight to a service provider or option that provides a unique benefit or aspect to the user 142 (e.g., lower rate than a public rate).
- results from the standard API call are cross-referenced against a pre-provided list of discounts or extras. For example, each week an airline may provide a list of how much discount flights provided by the suggestion server 110 can be offered as a function of the route or a particular type of user (e.g., affluent user, frequent flier). In other examples, a hotel company provides a list of upgrades that can be provided for free to customers of the operator going to specific cities. The suggestion server 110 can then automatically apply these discounts/upgrades to the standard search results if conditions/rules are satisfied for the discounts/upgrades.
- the operator of the suggestion server 110 can include their own discounts or extras.
- the suggestion server 110 may use models to estimate how likely a specific user would be to book at various prices for a hotel (e.g. based on other people whose calendars have had meetings in similar cities), and then apply discounts tailored to those prices on top of what the service providers offers.
- the suggestion server 110 can also offer customers extra discounts, for example, for purchasing flights and hotels together.
- the suggestion server 110 can also solicit extra-discounted inventory or extra-special offers, from the service providers, for users willing to book flights and hotels together.
- the alternative options are incorporated with the weighed and ranked initial results for presentation to the user.
- the results module 250 may determine the top options for each of the three scenarios in the SF-NYC-DC-SF trip and include the alternative options as a fourth set of options.
- one or more of the methodologies described herein may facilitate communication of information about one or more options (e.g., travel options).
- one or more of the methodologies described herein may constitute all or part of a method (e.g., a method implemented using a machine) that automatically selects calendar-based, multiple event options, and generates and presents user interfaces of these available options determined to be compatible with the multiple events during a single trip.
- presentation of such options may be conveniently integrated with calendar information, which may facilitate the making of travel plans.
- one or more of the methodologies described herein may obviate a need for certain efforts or resources that otherwise would be involved in matching users (e.g., as potential consumers of options) with options that are likely to be of interest to those users. Efforts expended by a user in identifying an option may be reduced by one or more of the methodologies described herein.
- Computing resources used by one or more machines, databases, or devices may similarly be reduced. Examples of such computing resources include processor cycles, network traffic, memory usage, data storage capacity, power consumption, and cooling capacity.
- FIG. 7 illustrates components of a machine 700, according to some example embodiments, that is able to read instructions from a machine-readable medium (e.g., a machine-readable storage device, a non-transitory machine- readable storage medium, a computer-readable storage medium, or any suitable combination thereof) and perform any one or more of the methodologies discussed herein.
- a machine-readable medium e.g., a machine-readable storage device, a non-transitory machine- readable storage medium, a computer-readable storage medium, or any suitable combination thereof
- FIG. 7 shows a diagrammatic representation of the machine 700 in the example form of a computer device (e.g., a computer) and within which instructions 724 (e.g., software, a program, an application, an applet, an app, or other executable code) for causing the machine 700 to perform any one or more of the methodologies discussed herein may be executed, in whole or in part.
- instructions 724 e.g., software, a program, an application, an
- the instructions 724 may cause the machine 700 to execute the flow diagrams of FIGs. 4, 5, and 6.
- the instructions 724 can transform the general, non-programmed machine 700 into a particular machine (e.g., specially configured machine) programmed to carry out the described and illustrated functions in the manner described.
- the machine 700 operates as a standalone device or may be connected (e.g., networked) to other machines.
- the machine 700 may operate in the capacity of a server machine or a client machine in a server-client network environment, or as a peer machine in a peer-to-peer (or distributed) network environment.
- the machine 700 may be a server computer, a client computer, a personal computer (PC), a tablet computer, a laptop computer, a netbook, a set-top box (STB), a personal digital assistant (PDA), a cellular telephone, a smartphone, a web appliance, a network router, a network switch, a network bridge, or any machine capable of executing the instructions 724 (sequentially or otherwise) that specify actions to be taken by that machine.
- the term "machine” shall also be taken to include a collection of machines that individually or jointly execute the instructions 724 to perform any one or more of the methodologies discussed herein.
- the machine 700 includes a processor 702 (e.g., a central processing unit
- the processor 702 may contain microcircuits that are configurable, temporarily or permanently, by some or all of the instructions 724 such that the processor 702 is configurable to perform any one or more of the methodologies described herein, in whole or in part.
- a set of one or more microcircuits of the processor 702 may be configurable to execute one or more modules (e.g., software modules) described herein.
- the machine 700 may further include a graphics display 710 (e.g., a plasma display panel (PDP), a light emitting diode (LED) display, a liquid crystal display (LCD), a projector, or a cathode ray tube (CRT), or any other display capable of displaying graphics or video).
- a graphics display 710 e.g., a plasma display panel (PDP), a light emitting diode (LED) display, a liquid crystal display (LCD), a projector, or a cathode ray tube (CRT), or any other display capable of displaying graphics or video).
- PDP plasma display panel
- LED light emitting diode
- LCD liquid crystal display
- CRT cathode ray tube
- the machine 700 may also include an alphanumeric input device 712 (e.g., a keyboard), a cursor control device 714 (e.g., a mouse, a touchpad, a trackball, a joystick, a motion sensor, or other pointing instrument), a storage unit 716, a signal generation device 718 (e.g., a sound card, an amplifier, a speaker, a headphone jack, or any suitable combination thereof), and a network interface device 720.
- an alphanumeric input device 712 e.g., a keyboard
- a cursor control device 714 e.g., a mouse, a touchpad, a trackball, a joystick, a motion sensor, or other pointing instrument
- a storage unit 716 e.g., a storage unit 716
- a signal generation device 718 e.g., a sound card, an amplifier, a speaker, a headphone jack, or any suitable combination thereof
- the storage unit 716 includes a machine-readable medium 722 (e.g., a tangible machine-readable storage medium) on which is stored the instructions 724 (e.g., software) embodying any one or more of the methodologies or functions described herein.
- the instructions 724 may also reside, completely or at least partially, within the main memory 704, within the processor 702 (e.g., within the processor's cache memory), or both, before or during execution thereof by the machine 700. Accordingly, the main memory 704 and the processor 702 may be considered as machine-readable media (e.g., tangible and non-transitory machine-readable media).
- the instructions 724 may be transmitted or received over a network 726 (e.g., network 150) via the network interface device 720.
- the machine 700 may be a portable computing device and have one or more additional input components (e.g., sensors or gauges).
- additional input components e.g., sensors or gauges.
- input components include an image input component (e.g., one or more cameras), an audio input component (e.g., a microphone), a direction input component (e.g., a compass), a location input component (e.g., a global positioning system (GPS) receiver), an orientation component (e.g., a gyroscope), a motion detection component (e.g., one or more accelerometers), an altitude detection component (e.g., an altimeter), and a gas detection component (e.g., a gas sensor).
- GPS global positioning system
- the term “memory” refers to a machine-readable medium 722 able to store data temporarily or permanently and may be taken to include, but not be limited to, random-access memory (RAM), read-only memory (ROM), buffer memory, flash memory, and cache memory. While the machine- readable medium 722 is shown in an example embodiment to be a single medium, the term “machine-readable medium” should be taken to include a single medium or multiple media (e.g., a centralized or distributed database, or associated caches and servers) able to store instructions (e.g., instructions 724).
- machine-readable medium shall also be taken to include any medium, or combination of multiple media, that is capable of storing instructions (e.g., software) for execution by the machine (e.g., machine 700), such that the instructions, when executed by one or more processors of the machine (e.g., processor 702), cause the machine to perform any one or more of the instructions (e.g., software) for execution by the machine (e.g., machine 700), such that the instructions, when executed by one or more processors of the machine (e.g., processor 702), cause the machine to perform any one or more of the
- a “machine-readable medium” refers to a single storage apparatus or device, as well as cloud-based storage systems or storage networks that include multiple storage apparatus or devices.
- the term “machine-readable medium” shall accordingly be taken to include, but not be limited to, one or more data repositories in the form of a solid-state memory, an optical medium, a magnetic medium, or any suitable combination thereof.
- a “machine-readable medium” may also be referred to as a “machine-readable storage device” or a "hardware storage device.”
- the machine-readable medium 722 is non-transitory in that it does not embody a propagating or transitory signal.
- labeling the machine-readable medium 722 as "non-transitory" should not be construed to mean that the medium is incapable of movement - the medium should be considered as being transportable from one physical location to another.
- machine-readable medium 722 is tangible, the medium may be considered to be a tangible machine-readable storage device.
- the instructions 724 for execution by the machine 700 may be communicated by a carrier medium.
- a carrier medium include a storage medium (e.g., a non-transitory machine- readable storage medium, such as a solid-state memory, being physically moved from one place to another place) and a transient medium (e.g., a propagating signal that communicates the instructions 724)
- the instructions 724 may further be transmitted or received over a communications network 726 using a transmission medium via the network interface device 720 and utilizing any one of a number of well-known transfer protocols (e.g., HTTP).
- Examples of communication networks 726 include a local area network (LAN), a wide area network (WAN), the Internet, mobile telephone networks, plain old telephone service (POTS) networks, and wireless data networks (e.g., WiFi, LTE, and WiMAX networks).
- LAN local area network
- WAN wide area network
- POTS plain old telephone service
- wireless data networks e.g., WiFi, LTE, and WiMAX networks.
- transmission medium shall be taken to include any intangible medium that is capable of storing, encoding, or carrying instructions 724 for execution by the machine 700, and includes digital or analog communications signals or other intangible medium to facilitate communication of such software.
- Modules may constitute either software modules (e.g., code embodied on a machine-readable medium or in a transmission signal) or hardware modules.
- a "hardware module” is a tangible unit capable of performing certain operations and may be configured or arranged in a certain physical manner.
- one or more computer systems e.g., a standalone computer system, a client computer system, or a server computer system
- one or more hardware modules of a computer system e.g., a processor or a group of processors
- software e.g., an application or application portion
- a hardware module may be implemented mechanically, electronically, or any suitable combination thereof.
- a hardware module may include dedicated circuitry or logic that is permanently configured to perform certain operations.
- a hardware module may be a special-purpose processor, such as a field programmable gate array (FPGA) or an ASIC.
- FPGA field programmable gate array
- a hardware module may also include programmable logic or circuitry that is temporarily configured by software to perform certain operations.
- a hardware module may include software
- the term "hardware module” should be understood to encompass a tangible entity, be that an entity that is physically constructed, permanently configured (e.g., hardwired), or temporarily configured (e.g., programmed) to operate in a certain manner or to perform certain operations described herein.
- “hardware-implemented module” refers to a hardware module. Considering embodiments in which hardware modules are temporarily configured (e.g., programmed), each of the hardware modules need not be configured or instantiated at any one instance in time. For example, where the hardware modules comprise a general-purpose processor configured by software to become a special-purpose processor, the general-purpose processor may be configured as respectively different hardware modules at different times. Software may accordingly configure a processor, for example, to constitute a particular hardware module at one instance of time and to constitute a different hardware module at a different instance of time.
- Hardware modules can provide information to, and receive information from, other hardware modules. Accordingly, the described hardware modules may be regarded as being communicatively coupled. Where multiple hardware modules exist contemporaneously, communications may be achieved through signal transmission (e.g., over appropriate circuits and buses) between or among two or more of the hardware modules. In embodiments in which multiple hardware modules are configured or instantiated at different times,
- communications between such hardware modules may be achieved, for example, through the storage and retrieval of information in memory structures to which the multiple hardware modules have access.
- one hardware module may perform an operation and store the output of that operation in a memory device to which it is communicatively coupled.
- a further hardware module may then, at a later time, access the memory device to retrieve and process the stored output.
- Hardware modules may also initiate communications with input or output devices, and can operate on a resource (e.g., a collection of information).
- processors may be temporarily configured (e.g., by software) or permanently configured to perform the relevant operations. Whether temporarily or permanently configured, such processors may constitute processor-implemented modules that operate to perform one or more operations or functions described herein.
- processor-implemented module refers to a hardware module implemented using one or more processors.
- the methods described herein may be at least partially processor-implemented, a processor being an example of hardware.
- a processor being an example of hardware.
- the operations of a method may be performed by one or more processors or processor-implemented modules.
- the one or more processors may also operate to support performance of the relevant operations in a "cloud computing" environment or as a "software as a service” (SaaS).
- SaaS software as a service
- at least some of the operations may be performed by a group of computers (as examples of machines including processors), with these operations being accessible via a network (e.g., the Internet) and via one or more appropriate interfaces (e.g., an application program interface (API)).
- API application program interface
- the performance of certain of the operations may be distributed among the one or more processors, not only residing within a single machine, but deployed across a number of machines.
- the one or more processors or processor-implemented modules may be located in a single geographic location (e.g., within a home environment, an office environment, or a server farm). In other example embodiments, the one or more processors or processor-implemented modules may be distributed across a number of geographic locations.
- presenting may refer to actions or processes of a machine (e.g., a computer) that manipulates or transforms data represented as physical (e.g., electronic, magnetic, or optical) quantities within one or more memories (e.g., volatile memory, non-volatile memory, or any suitable combination thereof), registers, or other machine components that receive, store, transmit, or display information.
- memories e.g., volatile memory, non-volatile memory, or any suitable combination thereof
- registers e.g., volatile memory, non-volatile memory, or any suitable combination thereof
- the terms “a” or “an” are herein used, as is common in patent documents, to include one or more than one instance.
- the conjunction “or” refers to a non-exclusive “or,” unless specifically stated otherwise.
Landscapes
- Business, Economics & Management (AREA)
- Human Resources & Organizations (AREA)
- Engineering & Computer Science (AREA)
- Strategic Management (AREA)
- Entrepreneurship & Innovation (AREA)
- Operations Research (AREA)
- Economics (AREA)
- Marketing (AREA)
- Data Mining & Analysis (AREA)
- Quality & Reliability (AREA)
- Tourism & Hospitality (AREA)
- Physics & Mathematics (AREA)
- General Business, Economics & Management (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Information Transfer Between Computers (AREA)
Abstract
Example embodiments provide a system and method for automatically selecting calendar-based, multiple event options. The system accesses calendar data that indicates events that a user is scheduled to attend, and extracts data for the events from the calendar data. The system constructs a plurality of application program interface (API) requests by including the extracted data for the events as one or more search criteria in the API requests. The system transmits the API requests to a server of a service provider. In response, the system receives results from the server, which comprise options determined to be compatible with the events based on the one or more search criteria in the API request. The system causes presentation of at least some of the options from the results determined to be compatible with the events.
Description
SELECTION OF CALENDAR-BASED, MULTIPLE EVENT OPTIONS
CROSS REFERENCE TO RELATED APPLICATION
[0001] The present application claims the priority benefit of U.S. Provisional Patent Application Serial No. 62/269,797, filed on December 18, 2015 and entitled "Calendar-Based Single Customer, Multiple Events Travel Options." This application also claims the priority benefit of U.S. Patent Application Serial No. 15/288,317, filed October 7, 2016 and entitled "AUTOMATIC
SELECTION OF CALENDAR-BASED, MULTIPLE EVENT OPTIONS FOR PRESENTATION."
TECHNICAL FIELD
[0002] The subject matter disclosed herein generally relates to machines configured to the technical field of special-purpose machines that facilitate generation and provision of user interfaces (e.g., within webpages), including computerized variants of such special-purpose machines and improvements to such variants, and to the technologies by which such special-purpose machines become improved compared to other special-purpose machines that facilitate provisioning of user interfaces. Specifically, the present disclosure addresses systems and methods to cause presentation of user interfaces providing automatically selected, multiple event options based extracted calendar data.
BACKGROUND
[0003] An online service may allow a user of the online service to view multiple options for plans and make a selection from the multiple options based on manual user inputs. For example, an airline may operate a webpage that provides an online reservation service from which a user may manually search for available flights (e.g., from San Francisco to New York) on a particular day and then select one of the available flights for reserving a seat thereon. As
another example, a hotel may operate a webpage that provides an online reservation service from which the user may manually search for available hotel properties and room types (e.g., in New York) for a particular period of time (e.g., September 5 through September 9) and then select one of the available room types at an available hotel property for reserving. As a further example, a restaurant may offer a webpage that provides an online reservation service from which the user may manually search for available table reservations (e.g., at a popular restaurant) within a particular range of times (e.g., 5:30 PM to 7:30 PM) on a particular date and then select one of the available table reservations for reserving. In all of these instances, the user must be proactive in visiting different websites and entering search criteria in order to compare and select different types of options (e.g., flight, car, hotel, restaurant reservations).
BRIEF DESCRIPTION OF THE DRAWINGS
[0004] Some embodiments are illustrated by way of example and not limitation in the figures of the accompanying drawings.
[0005] FIG. 1 is a network diagram illustrating a network environment suitable for automatic selection of calendar-based, multiple event options for
presentation, according to some example embodiments.
[0006] FIG. 2 is a block diagram illustrating components of a suggestion server, according to some example embodiments.
[0007] FIG. 3 is a block diagram illustrating calendar data accessed by the suggestion server, according to some example embodiments.
[0008] FIG. 4 is a flowchart illustrating operations of a method for automatic selection and presentation of calendar-based, multiple event options, according to some example embodiments.
[0009] FIG. 5 is a flowchart illustrating operations of a method for determining a trip type and in particular, a multiple event trip, according to some example embodiments.
[0010] FIG. 6 is a flowchart illustrating operations of a method for sorting and ranking single trip, multiple event options.
[0011] FIG. 7 is a block diagram illustrating components of a machine, according to some example embodiments, able to read instructions from a machine-readable medium and perform any one or more of the methodologies discussed herein.
DETAILED DESCRIPTION
[0012] The description that follows describes systems, methods, techniques, instruction sequences, and computing machine program products that illustrate example embodiments of the present subject matter. In the following description, for purposes of explanation, numerous specific details are set forth in order to provide an understanding of various embodiments of the present subject matter. It will be evident, however, to those skilled in the art, that embodiments of the present subject matter may be practiced without some or other of these specific details. In general, well-known instruction instances, protocols, structures, and techniques have not been shown in detail. Examples merely typify possible variations. Unless explicitly stated otherwise, structures (e.g., structural components, such as modules) are optional and may be combined or subdivided, and operations (e.g., in a procedure, algorithm, or other function) may vary in sequence or be combined or subdivided.
[0013] Example methods (e.g., algorithms) facilitate automatically selecting multiple event options based on calendar data, and generating and provisioning of user interfaces (e.g., within webpages) comprising these calendar-based, multiple event options for a single user (e.g., one customer or one traveler). Example systems (e.g., special-purpose machines) are configured to
automatically select multiple event options based on calendar data, and generate and provision user interfaces comprising these calendar-based, multiple event options. In particular, example embodiments provide mechanisms and logic that determines options to be presented on one or more user interfaces and causes the user interfaces to be presented to a user. More specifically, calendar-based, multiple event options presented on the user interfaces involves displaying suggested options derived from multiple events stored in a calendar of the user (e.g., a customer or a traveler). Accordingly, a suggestion server accesses (e.g., receives or retrieves) calendar data of the user, and extracts (e.g. parses) particular data from the calendar data (e.g., a location of each event or a time of each event). A determination is made, from the extracted data, that multiple events (e.g., multiple out-of-town events) are calendared for the user. In response to this determination, the extracted data is then made available to service providers (e.g., servers of the service providers), via an application program interface (API) request (e.g., an API call), for available options without
guidance or further input from the user. In some embodiments, the options comprise travel options. The travel options may include special discounts, special inventories, or special extras (e.g., upgrades, free breakfast, parking, or meals included) based on (e.g., in response to) the extracted calendar data, user preferences, preferences of other similar users, or any suitable combination thereof.
[0014] As an example, a user in San Francisco may be scheduled for a dinner in an expensive restaurant in downtown Chicago on Monday night and a meeting in Washington D.C. (DC) on Wednesday morning. The suggestion server is configured to access calendar data of the user that indicates these two calendared events and use at least some of the calendar data (also referred to as "extracted data") to construct a plurality of searches, via application program interface (API) requests (e.g., API calls), for available options (e.g., a high end hotel near the restaurant in Chicago, since the user is likely an affluent user based on the restaurant the user will be dining at). The search can be automatically triggered by the suggestion server detecting that the calendared events are in a location a threshold distance from the user's home location (e.g., are out-of-town events), within a threshold time within each other, or within a threshold distance between each other, and particular options (e.g., hotel, flights) have not yet been booked (e.g., not present on the calendar of the user).
[0015] In one example embodiment, the extracted data is shared with the service providers (e.g., servers of the service providers) at a specific level. For example, the API request comprises fields for entry (or inclusion) of information for each calendared event by the suggestion server. The fields may include an event type field and a location field (e.g., latitude/longitude, neighborhood, or city) such that the service provider knows that the user will be in a particular location and performing some action (e.g., eating at a restaurant, going to a meeting, going to a sports event). In response, the service provider provides options (e.g., hotel room options) in or near the particular locations of the calendared events. The options may comprise options from multiple service providers aggregated by the suggestion server. As such, the suggestion server may make multiple API calls to servers of different service providers and aggregate a plurality of results from different service providers, and provide a user interface that comprises the
plurality of results or a subset of the plurality of results (e.g., curated, top results).
[0016] In an alternative example embodiment, the suggestion server can use artificial intelligence, machine-learning, and data processing algorithms to determine a likely interest level of each user for a particular type or level of service (e.g., 5 star hotel versus a 3 star hotel). For example, if the suggestion server detects a user is going to a meeting in a fancy building in downtown Chicago (e.g., based on available information on neighborhood, zip code, star rating, owner, or tenant) and then going to a dinner in a fancy restaurant (e.g., based on reviews or star rating), the suggestion server infers that the user is probably on an expense account or likely affluent. Thus, the suggestion server can infer whether a particular user is likely extremely affluent, moderately affluent, a budget travel, and so forth based on the extracted data. A more affluent user is more likely to prefer, for example, luxury hotel options, business class flights options, and car service options. As another example, a user traveling to Disney World is more likely to be interested in hotels with family- friendly amenities. Accordingly, the suggestion server can proactively offer suggestions to the service providers as to a type or level of option to return in their results (e.g., 5 star hotels, first class airline seat, or family-friendly resort).
[0017] Whether the service provider returns customized results (e.g., customized to the anticipated type or level of option preferred by the user) or general results (e.g., same results to any user running a general search), the suggestion server takes the results and determines best options for the user. For example, the suggestion server connects with Hotel 1 and Hotel2. Hotel 1 has a sophisticated search system in which if Hotel 1 knows the last meeting time and location and that the user is affluent, the search system of Hotel 1 has logic to only return the nicest rooms and higher upgrades in their results. On the flip side, Hotel2 only connects using their standard API and returns general results that are not customized to the user. The suggestion server analyzes the search results and derives a result set that is relevant to the user (e.g., based on explicit and inferred preferences). For example, the search results are weighed, sorted, and ranked, and a top number of options are provided to the user. Alternatively, all search results can be provided with top options highlighted or otherwise differentiated.
[0018] The suggestion server is configured to present this result set of options to the user (e.g., as suggestions for making a hotel reservation) in one or more user interfaces. For example, when the user visits a website associated with the suggestion server, the result set of options will be presented in one or more customized user interfaces. In other example embodiments, a notification or message is sent to the user providing the result set, or indicating that the result set is available for viewing on the website and providing a link to the website and the customized user interfaces.
[0019] As used herein, an "option" (e.g., travel option) is a selection (e.g., choice, offering, alternative, menu item, or special deal) of potential interest to a user (e.g., as a user of an online service) in making or executing a travel plan (e.g., an itinerary). An option may be a "transportation option" pertinent to a transportation service or a vehicle. Examples of transportation options include travel by airplane, train, bus, trolley, ferry, ship, taxicab, rental car, car sharing service, or any suitable combination thereof. Transportation options may include transportation services (e.g., passenger service) provided by commercial carriers (e.g., airlines, car rental companies, or cruise operators), public transportation (e.g., city buses or regional trains), private operators (e.g., limousine services, charter airplanes, or charter helicopters), or any combination thereof. In some example embodiments, the transportation option specifies that the traveler walk, jog, hike, or ride a bicycle to a particular destination. An option may be an "accommodation option" pertinent to an accommodation (e.g., hospitality) service. Examples of accommodation options include stays in a hotel, motel, resort, hostel, bed-and-breakfast inn, boarding house, vacation rental, home sharing service, campground, or any suitable combination thereof. Further examples of accommodation options include reservations at a restaurant, conference facility, health facility (e.g., spa, salon, or massage studio), athletic facility (e.g., gym, pool, or fitness center), or entertainment venue (e.g., theater, sports stadium, amusement park, or museum). In some situations, an option may be both a transportation option and an accommodation option (e.g., a
compartment in a passenger train, a cabin on a cruise ship, or a bed on an overnight airline flight). A further example of an option is trip insurance (e.g., an insurance policy for a set of transportation options, accommodation options, or both).
[0020] As a result, one or more of the methodologies described herein facilitate solving the technical problem of providing user interfaces presenting customized information from multiple service providers. The methodologies include accessing calendar data of a user. The logic also extracts data for a plurality of events from the calendar data and uses the extracted data to make a
determination as to whether the events comprise, for example, an in-town event, a single out-of-town event, or a part of a trip that includes multiple events.
Based on the determination, the extracted data is used to construct an application program interface (API) request, whereby the extracted data is used as, or is associated with, one or more search criteria in the API request. The API request is transmitted to one or more service providers (e.g., to a server of each service provider), and results compatible with the events are received in response to the API request. The logic constructs a user interface comprising at least some options from the results and causes the user interface to be presented to a device of the user. As such, one or more of the methodologies described herein may obviate a need for certain efforts or resources that otherwise would be involved in a user having to navigate to a plurality of service providers (e.g., the user is retained from navigating away from a website of an entity comprising the suggestion server) and performing numerous searches at each service provider in order to determine different options based on multiple events. As a result, resources used by one or more machines, databases, or devices (e.g., within the environment) may be reduced, and the user is retained at the website of the entity having the suggestion server. Examples of such computing resources include processor cycles, network traffic, memory usage, data storage capacity, power consumption, network bandwidth, and cooling capacity.
[0021] FIG. 1 is a network diagram illustrating a network environment 100 suitable for generating and presenting user interfaces comprising automatically selected calendar-based, multiple event options for a single user, according to some example embodiments. The network environment 100 includes a suggestion server 110, a calendar server 120, one or more provider servers 130a- 13 On (collectively referred to as provider server 130), and a user device 140, all communicatively coupled to each other via a network 150. In some example embodiments, the suggestion server 110 and the calendar server 120 may form all or part of a calendar service system that provides calendar-related services to
one or more users (e.g., event scheduling or project management). In certain example embodiments, the suggestion server 110 and the provider server 130 may form all or part of a travel service system that provides travel -related services to one or more users (e.g., merchandising of travel options or itinerary management). In various example embodiments, the suggestion server 110, the calendar server 120, and the provider server 130 form all or part of a combined system. The suggestion server 110 is described in more detail in connection with FIG. 2, and may be implemented in a computer system, as described below with respect to FIG. 7.
[0022] The calendar server 120 functions as a data repository that stores calendar data of one or more users. In some example embodiments, the calendar server 120 is operated by a third-party calendar service (e.g., Google, Outlook, or Yahoo).
[0023] The provider server 130 functions as a data repository that stores travel data describing one or more options (e.g., travel options). In certain example embodiments, the provider server 130 is operated by a third-party service provider (e.g., a travel agency, an airline, or a hotel management company). In some example embodiments, the provider server 130 is operated by a third-party service provider that provide services that are tangentially related to travel. For example, the third party service provider may provide pet services (e.g., boarding services, pet walker), house sitting services, or babysitting services.
[0024] Also shown in FIG. 1 is user 142. The user 142 may be a human user (e.g., a human being), a machine user (e.g., a software program configured to interact with the user device 140), or any suitable combination thereof (e.g., a human assisted by a machine or a machine supervised by human). The user 142 is not part of the network environment 100, but is associated with the user device 140 and may be a user of the user device 140. The user device 140 may be, for example, a desktop computer, a tablet computer, or a smart phone belonging to the user 142.
[0025] Any of the servers, databases, or devices (each also referred to as a
"machine") shown in FIG. 1 may be implemented in a general-purpose computer modified (e.g., configured or programmed) by software to be a special-purpose computer to perform the functions described herein for that machine. For example, a computer system able to implement any one or more of the
methodologies described herein is discussed below with respect to FIG. 7. As used herein, a "database" is a data storage resource and may store data structured as a text file, a table, a spreadsheet, a relational database, a triple store, a key- value store, or any suitable combination thereof. Moreover, any two or more of the machines illustrated in FIG. 1 may be combined into a single machine, and the functions described herein for any single machine may be subdivided among multiple machines.
[0026] The network 150 may be any network that enables communication between machines (e.g., the suggestion server 110 and the user device 140). Accordingly, the network 150 may be a wired network, a wireless network (e.g., a mobile network), or any suitable combination thereof. The network 150 may include one or more portions that constitute a private network, a public network (e.g., the Internet), or any suitable combination thereof.
[0027] FIG. 2 is a block diagram illustrating components of the suggestion server 110, according to some example embodiments. The suggestion server 110 includes an access module 210, an extraction module 220, an analysis module 230, an interface module 240, a results module 250, and a
communications module 260, all configured to communicate with each other (e.g., via a bus, shared memory, or a switch). The suggestion server 110 also includes (or is coupled to) a user profile database 270 that is configured to communicate with the other components of the suggestion server 110. Any one or more of the modules described herein may be implemented using hardware (e.g., a processor of a machine) or a combination of hardware and software. Moreover, any two or more of these modules may be combined into a single module, and the functions described herein for a single module may be subdivided among multiple modules.
[0028] The access module 210 is configured to access calendar data of the user
142 (e.g., a traveler, a potential traveler, a consumer of travel options, or a potential consumer of travel options). The access module 210 may access (e.g., receive or retrieve) the calendar data from the calendar server 120, for example, by using an API call. In some example embodiments, the suggestion server 110 locally stores the calendar data (e.g., in the user profile database 270), and the access module 210 accesses the calendar data from the suggestion server 110.
The calendar data includes information describing one or more calendared
events in the calendar of the user 142 (e.g., scheduled for the user 142).
Accordingly, the calendar data indicates a period of time (e.g., first period of time) during which the user 142 is scheduled to participate in (e.g., attend) a calendared event along with a location for the calendared event. For example, the calendar data may indicate that the user 142 is scheduled to attend a dinner at Alinea Restaurant in Chicago on Monday, September 5, from 7 PM to 9 PM Central Time.
[0029] The extraction module 220 is configured to extract calendar data that is used to facilitate a search for options (e.g., travel options or menu options). In example embodiments, the extraction module 220 parses the calendar data to determine date, time, location, or other (extracted) calendar data that is pertinent for facilitating a search. For example, the extraction module 220 extracts location data (e.g., Alinea Restaurant, Chicago) and time data (e.g., September 5th, 7PM to 9PM). In some example embodiments, the extracted data is provided to the analysis module 230 for processing (discussed further below). In some example embodiments, the extracted data is provided to the interface module 240 and transmitted to service providers (e.g., provider servers 130) via an API call to initiate a search for travel options from the service providers.
[0030] The analysis module 230 is configured to determine whether the extracted data indicates one or more calendared events within a single trip or one or more calendared events within multiple trips. Accordingly, the analysis module 230 receives the extracted data and determines whether there are one or more calendared events identified from the extracted data, and if there are a plurality of calendared events, whether the plurality of calendared events are within a predetermined distance threshold and/or time threshold, or triggers (e.g., activates) a location trigger to constitute a single trip. For example, if a first calendared event is a meeting in Minneapolis and a second calendared event is dinner the next night in St. Paul, this would likely indicate a single trip with multiple events due to the location of the two events being within a
predetermined minimum distance threshold (e.g., less than 100 miles) and within a predetermined time threshold (e.g., within 2 days of each other or can be driven in under 3 hours). In another example, if a first calendared event is the meeting in Minneapolis and a second calendared event is dinner three nights later in San Francisco (the user's home location), this indicates a single trip with
a single event (i.e., the meeting in Minneapolis) due to the location of the two events exceeding the predetermined minimum distance threshold (e.g., less than 100 miles), being outside of a predetermined time threshold (e.g., more than 2 days apart or cannot be driven in under 3 hours), and/or the second event (i.e., the dinner) being located in the user's home location. The time threshold (e.g., based on time to drive or based on days apart), the distance threshold (e.g., based on distance between locations of calendared events or based on distance from user's home to locations of each calendared event), and the location trigger (e.g., based on one of the calendared events being in a location in between the home location and the other calendared event, based on the home location being in between the location of the two calendared event) may be based on empirical or historical data for the user 142 or for similar users of the suggestion server 110 as determined by the analysis module 230.
[0031] In some example embodiments, the analysis module 230 uses a function of both time and distance to determine whether multiple calendared events constitute a single trip or multiple trips. In one example embodiment, two calendared events constitute a single trip if a sum of [a number of minutes of travel time between the locations of the calendared events] and [a distance between the locations of the calendared events in miles] is less than a pre- determined threshold X. In some cases, X may vary as a function of the user's budget, self-declared preferences, or inferred preferences based on prior user behavior. In other example embodiments, multiplication, subtraction, division, exponentials, weighting, or other mathematical operations or combination of operations may be used instead of summation to determine whether two calendared events constitute a single trip.
[0032] In another example, if the first calendared event is in San Diego on December 1st and the second calendared event is in Boston on January 23rd and the user 142 lives in San Francisco, this would likely be categorized by the analysis module 230 as multiple trips. This determination is based on one or more of the time threshold (e.g., the calendared events are more than a month apart), home location of the user 142, a distance threshold (e.g., San Diego and
Boston are more than 500 miles apart), or past travels by the user 142 (e.g., the user 142 typically books these trips separately). Further still, the analysis module 230 can base the determination on empirical data from other users'
calendars with similar demographics (e.g., other people have booked similar itineraries as separate trips).
[0033] In another example, if the first calendared event is in New York City (NYC) on December 1st and the second calendared event is in Washington D.C. (DC) on December 3rd and the user 142 lives in San Francisco, this would likely be categorized as a single trip with multiple events whereby the user travels to NYC and then to DC as one continuous trip (before flying back to San
Francisco) but attends two different events (e.g., one in NYC and one in DC) since it may not make sense for the user 142 to fly back and forth to the two events separately. This determination may be based on the time threshold (e.g., the calendared events are 2 days apart, the distance can be driven in under 5 hours), a location threshold (e.g., NYC and DC are less than 300 miles apart), home location of the user 142 (e.g., home location more than 500 miles from each calendared event, home location not located between the two calendared events), past travels by the user 142, and empirical data from other users' calendars (e.g., people from the West Coast who have one meeting in one East Coast city and one meeting two days later in another East Coast city usually do both as part of one trip rather than two separate trips). As an alternative example, if the user 142 lives in Philadelphia instead of San Francisco, the home location (e.g., Philadelphia) along with empirical data may cause the analysis module 230 to conclude that the user 142 will make two trips and return home between the two trips (e.g., based on the home location being located in between the two calendared events).
[0034] In another example, if the first calendared event is lunch in New York City (NYC) on December 1st and the second calendared event is dinner in
London on December 2nd and the user 142 lives in San Francisco, this may be categorized by the analysis module 230 as a single trip with multiple events whereby the user travels to NYC and then London as one continuous trip (before flying back to San Francisco) but attends two different events (e.g., one in NYC and one in London) in some circumstances. In this example, the determination that it is a single trip is inferred by the analysis module 230, which determines that there simply does not exist any flights that would permit the user 142 to stop in San Francisco in between attending both the NYC and London events. In other words, the determination of whether multiple events constitute a single trip
may be inferred by assumptions using the user's preferences or by an
understanding that travel schedules simply do not permit two events to be anything other than part of a single trip or, alternatively, multiple trips.
[0035] The analysis module 230 is also configured to analyze the extracted data to infer a level or type of service that may be applicable to the user 142.
Returning to one of the examples above, the analysis module 230 receives the name of the restaurant (e.g., Alinea) and determines that the restaurant is a high- end, expensive restaurant (e.g., based on information retrieved regarding the restaurant). Based on this determination, the analysis module 230 infers that the user 142 is likely very affluent, traveling on an expense account, or prefers a higher level of service. This determination may be used to customize search criteria for the travel options or used to rank results from the search. The inferred level or type of service for the user 142 may be stored in a profile of the user 142 in the user profile database 270.
[0036] The analysis module 230 is further configured to infer user preferences from past calendared events. For example, if the user has stayed at a Hilton Hotel for the last four trips, the analysis module 230 infers that the user prefers to stay at Hilton Hotels. In another example, if the user is new, the analysis module 230 can detect that the last five flights from their calendared events were on American Airlines, so the analysis module 230 infers that the user is loyal to American Airlines. As another example, if the analysis module 230 detects that the user 142 tends to "cut it close" and book flights that depart very shortly after a prior meeting, the analysis module 230 infers that flights that leave soon after meetings should be provided to the user even though most other customers would not want to see these flights. As a further example, the analysis module 230 can detect that the user 142 tends to stay at hotels very close to meetings and infer that the user 142 likes to be within walking distance so as not to rent a car. Conversely, the analysis module 230 may detect that the user 142 tends to stay at hotels far from meetings and that the user 142 is therefore willing to rent a car if it will save money on hotels or if the user 142 can stay at a nicer hotel. Further still, if the user 142 takes frequent trips to a particular location (e.g., London), this information can be provided in the API call/request so that the service providers know to offer extra amenities to secure the user's long-term loyalty on future trips to that location. In some cases, these inferred user preferences may
be used to group users having similar user preferences into a same travel group to create a virtual room block or virtual airline seat block. The inferred preferences for the user 142 may be stored in the profile of the user 142 in the user profile database 270.
[0037] The interface module 240 is configured to communicate via an API with one or more provider servers 130. In some example embodiments, the interface module 240 provides some or all of the extracted data directly to the provider server 130 (e.g., in fields of an API request). The provider server 130 then performs a search of their inventory for options that match at least part of the extracted data. Depending on the capability of the provider server 130, results of the search may be customized to a type or level of service that would appeal to the user 142 or to a user type of the user 142 (e.g., affluent traveler, budget traveler, business traveler, traveler with kids) and may include specific types of discounts, upgrades, or extra amenities that would appeal to the user 142.
Upgrades and extra amenities can be up to the service providers and their provider server 130 to provide, or the suggestion server 110 (e.g., the analysis module 230) can provide suggestions to the provider server 130. For example, the suggestion server 110 may indicate that the user 142, based on history of the user 142 or similar type of user, is most likely to pick an option if it includes free breakfast. As such, the logic can be left to the provider server 130 to customize the results, or the suggestion server 110 can provide guidance to the provider server 130 and the provider server 130 can use the guidance. For provider servers 130 that do not include sophisticated search systems, the results may be general results that any user of the provider server 130 may receive using a standard API of the provider server 130.
[0038] In some example embodiments where the trip is categorized as a single trip having multiple events (e.g., at multiple locations), the interface module 240 is configured to construct and transmit multiple API calls for options. Each of the API calls will include a different set of criterion/criteria. For example, suppose the user 142 from San Francisco has a meeting in NYC on Monday night and a meeting in DC on Wednesday morning. The interface module 240 makes multiple API calls to consider different scenarios. The different scenarios may include, for example:
1) The user 142 travels SFO-NYC on Monday, stays in NYC Monday and Tuesday nights, travels NYC -DC early Wednesday morning, and
returns DC-SFO Wednesday afternoon;
2) The user 142 travels SFO-NYC on Monday, stays in NYC Monday night, travels NYC -DC sometime Tuesday, stays in DC Tuesday night, and returns DC-SFO Wednesday afternoon; and
3) The user 142 travels SFO-NYC on Monday, travels NYC-DC late
Monday night, stays in DC Monday and Tuesday nights, and returns
DC-SFO Wednesday afternoon. [0039] In addition to the above scenarios, the interface module 240 may make one or more API calls for results so that the suggestion server 110 can determine whether it makes more sense for the user 142 to rent a car and drive the NYC- DC segment or to take a train (and on what day), to fly home, or to stay somewhere other than NYC or DC. Further still, the interface module 240 can, via the API call, solicit each of the different API partners (e.g., the service providers at the provider server 130) for their best offers/extra amenities in each of the above situations.
[0040] The results module 250 is configured to determine best or optimal options to present to the user 142. The best options may be based on a combination of one or more factors such as cost, what the user 142 is getting (e.g., free breakfast, suite vs. room, free WiFi), customer reviews including customer reviews specific to this user's demographics, user preferences (e.g., from the user profile database 270), an inferred user type or level of service (e.g., from the analysis module 230 or user profile database 270), and commission levels for an owner of the suggestion server 110. The user preferences can be explicitly provided by the user 142 (e.g., user 142 previously filled out a form or user interface that indicates preferences for airlines, times for flights, hotels, or room types that is stored to the user profile database 270). The user preferences can also be inferred from past purchases or calendared events as discussed above with respect to the analysis module 230.
[0041] In some example embodiments, the results module 250 comprises an algorithm that applies weights and scores to these factors. For example, if the calendar data indicates that the user 142 is attending an event with his two
children, the results module 250 may weigh a stay at kid-friendly hotel with free video games and a highly rated swimming pool higher. As another example, if the calendar data indicates that the user 142 is attending an event with wealthy business clients, the results module 250 may weigh a stay at a high-end luxury hotel with sophisticated conference facilities higher. As a further example, if the calendar data indicates that the user 142 is attending an event with his wife near their wedding anniversary date, the result module 250 may weigh a stay at a romantic bed-and-breakfast inn near the event higher.
[0042] In some example embodiments, the results module 250 assigns extra weight to a service provider or option that is providing something unique to the user 142 (e.g., lower rate than a public rate). Whether an option contains a unique aspect can be determined in several ways. For example, the suggestion server 110 can directly query the provider server 130 if the provider server 130 is providing a unique benefit to the user 142. Alternatively, the suggestion server 110 (e.g., the interface module 240) can perform multiple API calls for search results. A first API call is made via a special API to the provider server 130 that results in the customized search results for the user 142 being returned. A second API call is made using a standard API (e.g., available to the general public) of the provider server 130 that results in standard search result. The results module 250 then compares the options from the two search results to determine whether and what the unique amenities or benefits are. In some example embodiments, the unique amenities and benefits may be weighted differently. For example, a free room upgrade may be weighted higher than free breakfast or free WiFi. In some example embodiments, the results module 250 comprises or accesses logic or stored data (e.g., weight table stored in memory) that indicates a weight to apply.
[0043] The results module 250 can also determine if there is something unusual with the results that triggers further API calls for alternative options (e.g., an unexpected result based on empirical or historical data). In the SF-NYC-DC-SF example above, if there is a convention in NYC and D.C. on Tuesday and hotels are $1500/night, it may be cheaper to fly the user 142 home to San Francisco.
As such, the results module 250 triggers the interface module 240 to make another API call with this scenario. Alternatively, the results module 250 may trigger the interface module 240 to run scenarios to identify other options such
as other cities for hotels the user 142 can stay in (e.g., stay in New Jersey instead of NYC), some other city closer to fly to, or other transportation options (e.g., renting a car, taking a train, or taking a bus) if flights are too expensive. These further API calls will result in more options that can be incorporated with the initial search results and presented to the user 142.
[0044] The communications module 260 is configured to present the options to user. The communications module 260 may present the options by generating and displaying or causing the display of a user interface or webpage (e.g., of a travel option search service), a notification (e.g., a pop up window), a message (e.g., an e-mail message, instant message, or a text message), or any suitable combination thereof. In some example embodiments, the communication module 260 presents the options in a communication directed at the user 142, in a communication addressed to the user device 140, or both (e.g., for
consideration by the user 142). The communication (e.g., the notification or message) may include a link to a user interface (e.g., provided by a website associated with the suggestion server 110) comprising the options to be presented to the user.
[0045] The user profile database 270 stores user profile information of the user 142 for access by components of the suggestion server 110. The user profile information may include, for example, home location (e.g., home address, home airport), inferred and explicitly provided user preferences (e.g., prefers 5 star hotels, prefers high floors away from elevators, prefers business class seats, prefers driving instead of flying if a trip is less than 100 miles), service provider membership information (e.g., airline frequent flier number, hotel loyalty membership number), or inferred user type.
[0046] FIG. 3 is a block diagram illustrating calendar data 300 (e.g., as accessed by the access module 210), according to some example embodiments. The calendar data 300 includes information describing one or more events. As shown, event data 310 describes a calendared event (e.g., a phone call, a business meeting, a multi-day conference, a week-long vacation, dinner reservations, or sports events). Similarly, event data 330, 340, and 350 describe additional calendared events (e.g., each event having its own location). The calendar data 300 may be limited to events of a single user (e.g., user 142).
According to various example embodiments, one or more of the following data structures may be omitted.
[0047] The event data 310 includes one or more of a name 311 of an event (e.g., a title), a creator 312 of the event (e.g., the user 142 or an assistant thereof), a subject 313 of the event (e.g., a description or note), and a location 314 of the event (e.g., room number, floor number, venue name, address, city, state, country, cross streets, or global positioning system (GPS) coordinates). The event data 310 also includes a period of time 315 for the event. The period of time 315 may include a start time 316 (e.g., 10 AM), an end time 317 (e.g., 12 PM), a duration 318 (e.g., two hours), and a time zone 319 (e.g., Eastern Time). In some example embodiments, the period of time 315 includes multiple time zones (e.g., time zone 319). According to various example embodiments, the event data 310 includes a nonphysical flag 320 (e.g., indicating that the event is a virtual or online event), an accepted flag 321 (e.g., indicating that the event has been accepted into the calendar of the user 142), a tentative flag 322 (e.g., indicating that the event is tentatively scheduled for the user 142), and a busy/available flag 323 (e.g., indicating whether the user 142 is busy or available for additional events during the period of time 315). Moreover, in some example embodiments, the event data 310 includes information on one or more additional attendees. As shown, the event data 310 includes an "other" attendee 324 of the event (e.g., a name of another attendee) and a status 325 of the other attendee (e.g., whether the other attendee 324 is scheduled to attend the event). In various example embodiments, the other attendee 324 is a friend, family member, coworker, colleague, or a client of the user 142. In certain example embodiments, multiple "other" attendees are specified in the event data 310.
Each of the event data 330, 340, and 350 may include information similar to that described for the event data 310.
[0048] FIG. 4 is a flowchart illustrating operations of a method 400 for automatic selection and presentation of calendar-based, multiple event options, according to some example embodiments. Operations in the method 400 may be performed by the suggestion server 110, using modules described above with respect to FIG. 2. Accordingly, the method 400 is described by way of example with reference to the suggestion server 110. However, it shall be appreciated that at least some of the operations of the method 400 may be deployed on
various other hardware configurations or be performed by similar components residing elsewhere in the network environment 100. Therefore, the method 400 is not intended to be limited to the suggestion server 110.
[0049] In operation 410, the access module 210 accesses the calendar data 300 (e.g., from the calendar server 120). The calendar data 300 is specific to the user 142. Moreover, the calendar data 300 may indicate the period of time 315 (e.g., a first period of time) during which the user 142 is scheduled to participate in one or more calendared events (e.g., a business meeting). In some example embodiments, operation 410 is performed by invoking an application
programming interface (API) (e.g., a public API) provided by a third-party calendar service (e.g., Google®) to access the calendar data 300 of the third-party calendar service. For example, the API may be invoked in response to the user 142 providing login credentials (e.g., username and password) to identify or authenticate himself to the suggestion server 110, to the calendar server 120, to the provider server 130, or any suitable combination thereof. In certain example embodiments, operation 410 is performed by receiving the calendar data 300 from the calendar server 120. As an example, the calendar data 300 may be received from the calendar server 120 in response to a request submitted by the user 142 to the calendar server 120. As another example, the calendar data 300 may be received from the calendar server 120 as part of a data feed (e.g., a periodic or repeating download) arranged or authorized by the user 142.
According to some example embodiments, operation 410 is performed in response to a query submitted by the user 142 (e.g., via the user device 140) to the suggestion server 110 or another server associated with (e.g., linked to) the suggestion server 110, such as a server hosting a search engine. For example, the user 142 may query the name of a city (e.g., San Francisco or New York City), and the access module 210 may access the calendar data 300 in response to the submission of the query (e.g., as detected by the suggestion server 1 10, the calendar server 120, the provider server 130, or any suitable combination thereof).
[0050] In operation 420, the extraction module 220 extracts event data 310 from the calendar data. The extracted data is then used to facilitate a search for options. For example, the extraction module 220 may extract event type or subject 313 (e.g., meeting, dinner), location 314 (e.g., Alinea, Chicago), and
time data (e.g., start time 316, end time 317, duration 318). In some example embodiments, the extracted data may be for one or more events over a predetermined date range (e.g., 2 week period).
[0051] In operation 430, the analysis module 230 determines a trip type for the user 142, and more particularly, that the user 142 has a single trip with multiple events. Accordingly, the analysis module 230 determines there are a plurality of calendared events identified by the extracted data, and that the plurality of calendared events are within a predetermined distance threshold and/or a predetermined time threshold and/or triggers a location trigger that results in a determination that there is only a single trip. Operation 430 will be discussed in more detail in connection with FIG. 5.
[0052] In operation 440, the analysis module 230 analyzes the extracted data to infer a level of service and user type that may be applicable to the user 142. For example, if the analysis module 230 determines that the user 142 is having dinner at a high-end, expensive restaurant (e.g., based on information retrieved regarding the restaurant), the analysis module 230 may infer that the user 142 is likely very affluent, traveling on an expense account, or prefers a higher level of service or options. This determination may be used to customize search criteria, suggest amenities or other preferences for the travel options, or rank results from the search performed by the service provider(s). In some example embodiments, operation 440 may occur at any time given any calendared data and the results stored to the user profile database 270. As such, operation 440 may include accessing stored inferred level of service or user type information for the user 142 (e.g., from a user profile stored in the user profile database 270).
[0053] In operation 450, the interface module 240 generates multiple API requests using the extracted data and makes multiple API calls to one or more provider servers 130. The interface module 240 may include user preferences or preferences of similar users in the API requests including an inferred or explicit level of service or an inferred or explicit user type. In example embodiments, the API requests are automatically generated based on the determined trip type.
For example, if the trip type is a single event trip for only the user, the API request will include the extracted data for the single event. However, if the trip type is a single trip with multiple events, the API requests may include extracted data for the multiple events (e.g., at multiple locations). For example, each of
the API calls may include a different set of criteria for a different travel scenario, and the multiple API calls may cover all possible scenarios (e.g., travel scenarios) determined by the analysis module 230 and the interface module 240.
[0054] In some example embodiments, rather than simply calling the service provider's standard API, the interface module 240 provides additional data to a special API of the service provider. The additional data can be just indicating to the special API that the user 142 is a member associated with the suggestion server 110 to providing more sophisticated information (e.g. indicating to the special API that the customer's last meeting of the day is at 9 PM on the Upper East Side of Manhattan). As such, the interface module 240 can provide some or all of the extracted data, via a special API, to a provider server 130 that has logic to handle customized searches based on the extracted data. For example, the provider server 130 is provided the location, time data, type or level of service for the user 142, and suggested options (e.g., this type of user prefers free breakfast), and is capable of returning customized results.
[0055] In addition, the interface module 240 can include recommendations (within the API call) on what discounts or extra amenities the service provider should offer to maximize their likelihood of obtaining a booking. In some example embodiments, the interface module 240 suggests a threshold discount or extra amenities in the API call (e.g. "only give us results that are discounted at least 20%," "only give us results that include free upgrades," or "you're twice as likely to be booked if your discount is more than 20%") to motivate service providers to do so. Alternatively, the interface module 240 uses a standard API of a provider server 130 that does not have a special API and provides appropriate search criteria to the provider server 130 (e.g., general date and location information).
[0056] In operation 460, the results module 250 receives the results for each of the multiple API calls. Depending on the capability of the provider server 130, results of each search may be customized to the type or level of service that would appeal to the user 142 or to user type of the user 142 (e.g., affluent traveler or budget traveler) and may include specific types of discounts, upgrades, or extras that would appeal to the user 142, and can include options
(e.g., upgrades and extras) suggested by the suggestion server 110 (e.g., by the interface module 240 in the API request). For example, a service provider with a
special API can return a different set of inventory or options versus a general API (e.g., 10 hotels on the Upper East Side rather than 10 hotels spread all around New York). In another example, the service provider returns the same inventory as with a standard API, but with discounts or other amenities (e.g., free upgrades, free breakfast) not available to the public at large. Service providers may be eager to offer discounts to segmented groups of customers (e.g. mobile-only rates for customers dining at high-end restaurants before their stay), because it permits the service provider to price-discriminate or fill inventory the service provider would not have otherwise been able to sell without "diluting their brand" by offering public discounts. For service providers that do not have sophisticated search systems, the results may be general results that any user would receive using the standard API of the service provider.
[0057] In operation 470, the results module 250 sorts and ranks the results to determine the best or most optimal options to present to the user 142. The best options may be based on a combination of one or more factors such as, for example, cost, what the user 142 is getting (e.g., free breakfast, suite vs. room, free WiFi), customer reviews including customer reviews specific to this user's demographics, user preferences (e.g., from the user profile database 270), the inferred user type and level of service (e.g., from the analysis module 230), or commission levels for an owner of the suggestion server 110. In some example embodiments, the results module 250 uses an algorithm that applies weights and scores to these factors. In some example embodiments, the results module 250 assigns extra weight to a service provider or option that provides a unique benefit or aspect to the user 142 (e.g., lower rate than a public rate).
[0058] In some example embodiments, results from the standard API call are cross-referenced against a pre-provided list of discounts or extras. For example, each week an airline may provide a list of how much discount flights provided by the suggestion server 110 can be offered as a function of the route or a particular type of user (e.g., affluent user, frequent flier). In another example, a hotel company provides a list of upgrades that can be provided for free to customers of the operator of the suggestion server 110 going to specific cities.
The suggestion server 110 (e.g., the results module 250) can then automatically apply these discounts/upgrades to the standard search results if conditions/rules
for these discounts/upgrades are satisfied. These discounts/upgrades can then be taken into consideration by the results module 250 in ranking the options.
[0059] In yet some example embodiments, the operator of the suggestion server 110 can include their own discounts or extras. For example, the suggestion server 110 may use models to estimate how likely a specific user would be to book at various prices for a hotel (e.g. based on other people whose calendars have had meetings in similar cities), and then apply discounts tailored to those prices on top of what the service providers offers. In some example
embodiments, the suggestion server 110 can also offer customers extra discounts, for example, for purchasing flights and hotels together. The suggestion server 110 can also solicit extra-discounted inventory or extra-special offers, from the service providers, for users willing to book flights and hotels together.
[0060] The analysis of the results also includes determining, by the results module 250, whether there is something unusual with the results, which may trigger further API calls for alternative options. Operation 470 will be discusses in more detail in connection with FIG. 6 below.
[0061] In operation 480, the communications module 260 presents the options to the user 142. The communications module 260 may present the options by displaying or causing a display of a user interface such as a webpage (e.g., of a travel option search service), a notification (e.g., a pop up window), a message (e.g., an e-mail message, instant message, or a text message), or any suitable combination thereof. More than one means of presenting the results (e.g., user interface, notification, or message) can be used. In some example embodiments, the communication module 260 presents the options in a communication (e.g., a notification or message) directed at the user 142, in a communication addressed to the user device 140, or both. Such a communication may present the option among multiple travel options (e.g., for consideration by the user 142), or provide a link to a webpage or website where a user interface comprising the travel options is presented. In some example embodiments, the communications module 260 presents a top number of options (e.g., the top 3) as determined in operation 470. In other example embodiments, the communications module 260 present all the options along with recommendations of the best or more optimal
(e.g., best price, least amount of travel time) options.
[0062] While example embodiments discuss the options as being travel options, example embodiments are not limited to travel service providers. The service provider can be any service provider that wants to know particular travel information for the user 142 and use that travel information to offer services. For example, the service provider can be an entertainment venue (e.g., for a location that the user 142 will be at during a trip), a restaurant, a travel insurance company, house sitters, a pet boarding service, and so forth.
[0063] FIG. 5 is a flowchart illustrating operations of a method (e.g., operation 430) for determining a trip type, according to some example embodiments. Operations in the method may be performed by the suggestion server 110, using one or more modules (e.g., the analysis module 230) described above with respect to FIG. 2. Accordingly, the method is described by way of example with reference to the suggestion server 110. However, it shall be appreciated that at least some of the operations of the method may be deployed on various other hardware configurations or be performed by similar components residing elsewhere in the network environment 100. Therefore, the method is not intended to be limited to the suggestion server 110.
[0064] In operation 510, the analysis module 230 detects a first calendared event and corresponding location 314 and time from the extracted data. The analysis module 230 then access a home location for the user 142 in operation 520. The home location may be accessed from the user profile of the user 142 stored in the user profile database 270.
[0065] Based on a comparison of the event location 314 and the home location information by the analysis module 230, a determination is made in operation 530 that the first event is an out-of-town event. The determination may be based on the location 314 transgressing a home location distance threshold (e.g., more than 100 miles from the home location) or a home location driving time threshold (e.g., more than 3 hours to drive from the home location). In example embodiments, the determination that the first event is an out-of-town event triggers a flag to be set by the analysis module 230 that indicates to the interface module 240 that an API request is to be generated.
[0066] In operations 540, the analysis module 230 determines whether the extracted data indicates there is a second calendared event. In some example embodiments, the analysis module 230 determines whether there is a second
calendared event within a predetermine time range of the first calendared event (e.g., within a week). If there is not a second calendared event, then the analysis module 230 concludes that the trip is a single trip with a single event in operation 550.
[0067] However, if there is a second calendared event detected, then in operation 560, the analysis module 230 determines whether the first and second calendared events are within one or more event thresholds or satisfies an event trigger (e.g., time threshold, distance threshold, location trigger). If the two events are within the event thresholds/triggers, then the analysis module 230 may conclude that the user 142 has a single trip with multiple events in operation 570. For example, if the location of the first event and the location of the second event are closer to each other than to the user's home and the events are less than a two days apart, the analysis module 230 concludes that the user 142 has a single trip with multiple events. In another example, if the home location is between the two calendared events, the analysis module 230 may infer that there are two trips based on a location trigger being satisfied (e.g., home location between the two calendared events and the user will likely return home in between the two calendared events).
[0068] If in operation 560, the analysis module 230 determines that the two events are not within the time threshold or a distance threshold or does not satisfy a location trigger (e.g., home location between the two calendared events, location of one event in between home location and other event), or any combination of these thresholds/triggers, then the analysis module 230 infers that the user 142 has multiple trips in operations 580. Various methods for determining whether two calendared events constitute a single trip or multiple trips were discussed above with respect to FIG. 2. The type of trip may affect the type and number of API calls to make to the provider server in operation 450 of FIG. 4. Operations 540 and 560 may be repeated if more than two calendared events are detected.
[0069] As an extension of some example embodiments, the suggestion server
110 can suggest an add-on trip to an inferred trip. For example, if the user 142 who lives in New York has a calendared event (e.g., meeting) in San Francisco on a Friday, the suggestion server 110 may suggest a weekend extension add-on trip to Napa or Monterey or an extension to the San Francisco trip. As such, the
interface module 240 constructs an API request for specific deals (e.g., obtain options) for dates corresponding to the weekend. Further still, in addition to suggesting an add-on trip, the suggestion server 110 may suggest add-on events (e.g., concerts or restaurants) that may be of interest to the user, for example, based on their preferences. In some example embodiments, the add-on trip can be included in the API request for bundled options.
[0070] FIG. 6 is a flowchart illustrating operations of a method (operation 470) for analyzing the results obtained from the service provider(s). Operations in the method may be performed by the suggestion server 110, using one or more modules (e.g., the results module 250) described above with respect to FIG. 2. Accordingly, the method is described by way of example with reference to the suggestion server 110. However, it shall be appreciated that at least some of the operations of the method may be deployed on various other hardware configurations or be performed by similar components residing elsewhere in the network environment 100. Therefore, the method is not intended to be limited to the suggestion server 110.
[0071] In operation 610, the initial results are compared to expected results. In some example embodiments, the suggestion server 110 has access to past results that serve as a basis for expected results. For example, the results module 250 accesses a knowledge database that indicates whether there are usually non-stop flights between two destinations (e.g., usually non-stop flights from New York to San Francisco available). In other example embodiments, the suggestion server 110 has access to flight schedules and arrival information. Therefore if there are no seats available, for example, on non-stop flights today from New York to San Francisco, the results module 250 can infer that the flights are sold out or have been canceled (e.g., due to weather), rather than because there are no non-stop flights that exist between those two cities.
[0072] In operation 620, an unusual result is detected. For example, if hotels are $1500/night in NYC and the expected (or normal) range for hotels in NYC is from $300-$600/night, the results module 250 determines that the hotel option is unusual.
[0073] In operation 630, the results module 250 triggers the interface module
240 to make one or more further API calls for alternative scenarios to obtain alternative options. For example, instead of staying in NYC, the API call may
include search criteria to fly the user 142 home or to look for hotel rooms in an alternative city. In another example, if flights are unusually expensive from NYC to DC, the API call may include search criteria to fly the user 142 to some other city closer to a location of the second calendared event (e.g., Baltimore) and have the user rent a car to travel the rest of the way.
[0074] In operation 640, the results including results obtained from initial API calls are weighed and ranked to determine the best options. The best options may be based on a combination of one or more factors such as cost, what the user 142 is getting (e.g., free breakfast, suite vs. room, free WiFi), customer reviews including customer reviews specific to this user's demographics, user preferences (e.g., from the user profile database 270), the inferred user type and level of service (e.g., from the analysis module 230), and commission levels for an owner of the suggestion server 110. In some example embodiments, the results module 250 uses an algorithm that applies weights and scores to these factors. In some example embodiments, the results module 250 assigns extra weight to a service provider or option that provides a unique benefit or aspect to the user 142 (e.g., lower rate than a public rate).
[0075] In some example embodiments, results from the standard API call are cross-referenced against a pre-provided list of discounts or extras. For example, each week an airline may provide a list of how much discount flights provided by the suggestion server 110 can be offered as a function of the route or a particular type of user (e.g., affluent user, frequent flier). In other examples, a hotel company provides a list of upgrades that can be provided for free to customers of the operator going to specific cities. The suggestion server 110 can then automatically apply these discounts/upgrades to the standard search results if conditions/rules are satisfied for the discounts/upgrades. These
discounts/upgrades can then be taken into consideration by the results module 250 in ranking the travel options.
[0076] In yet some example embodiments, the operator of the suggestion server 110 can include their own discounts or extras. For example, the suggestion server 110 may use models to estimate how likely a specific user would be to book at various prices for a hotel (e.g. based on other people whose calendars have had meetings in similar cities), and then apply discounts tailored to those prices on top of what the service providers offers. In some example
embodiments, the suggestion server 110 can also offer customers extra discounts, for example, for purchasing flights and hotels together. The suggestion server 110 can also solicit extra-discounted inventory or extra-special offers, from the service providers, for users willing to book flights and hotels together.
[0077] In operation 650, the alternative options are incorporated with the weighed and ranked initial results for presentation to the user. For example, the results module 250 may determine the top options for each of the three scenarios in the SF-NYC-DC-SF trip and include the alternative options as a fourth set of options.
[0078] According to various example embodiments, one or more of the methodologies described herein may facilitate communication of information about one or more options (e.g., travel options). In particular, one or more of the methodologies described herein may constitute all or part of a method (e.g., a method implemented using a machine) that automatically selects calendar-based, multiple event options, and generates and presents user interfaces of these available options determined to be compatible with the multiple events during a single trip. Moreover, presentation of such options may be conveniently integrated with calendar information, which may facilitate the making of travel plans.
[0079] When these effects are considered in aggregate, one or more of the methodologies described herein may obviate a need for certain efforts or resources that otherwise would be involved in matching users (e.g., as potential consumers of options) with options that are likely to be of interest to those users. Efforts expended by a user in identifying an option may be reduced by one or more of the methodologies described herein. Computing resources used by one or more machines, databases, or devices (e.g., within the network environment 100) may similarly be reduced. Examples of such computing resources include processor cycles, network traffic, memory usage, data storage capacity, power consumption, and cooling capacity.
[0080] FIG. 7 illustrates components of a machine 700, according to some example embodiments, that is able to read instructions from a machine-readable medium (e.g., a machine-readable storage device, a non-transitory machine- readable storage medium, a computer-readable storage medium, or any suitable
combination thereof) and perform any one or more of the methodologies discussed herein. Specifically, FIG. 7 shows a diagrammatic representation of the machine 700 in the example form of a computer device (e.g., a computer) and within which instructions 724 (e.g., software, a program, an application, an applet, an app, or other executable code) for causing the machine 700 to perform any one or more of the methodologies discussed herein may be executed, in whole or in part.
[0081] For example, the instructions 724 may cause the machine 700 to execute the flow diagrams of FIGs. 4, 5, and 6. In one embodiment, the instructions 724 can transform the general, non-programmed machine 700 into a particular machine (e.g., specially configured machine) programmed to carry out the described and illustrated functions in the manner described.
[0082] In alternative embodiments, the machine 700 operates as a standalone device or may be connected (e.g., networked) to other machines. In a networked deployment, the machine 700 may operate in the capacity of a server machine or a client machine in a server-client network environment, or as a peer machine in a peer-to-peer (or distributed) network environment. The machine 700 may be a server computer, a client computer, a personal computer (PC), a tablet computer, a laptop computer, a netbook, a set-top box (STB), a personal digital assistant (PDA), a cellular telephone, a smartphone, a web appliance, a network router, a network switch, a network bridge, or any machine capable of executing the instructions 724 (sequentially or otherwise) that specify actions to be taken by that machine. Further, while only a single machine is illustrated, the term "machine" shall also be taken to include a collection of machines that individually or jointly execute the instructions 724 to perform any one or more of the methodologies discussed herein.
[0083] The machine 700 includes a processor 702 (e.g., a central processing unit
(CPU), a graphics processing unit (GPU), a digital signal processor (DSP), an application specific integrated circuit (ASIC), a radio-frequency integrated circuit (RFIC), or any suitable combination thereof), a main memory 704, and a static memory 706, which are configured to communicate with each other via a bus 708. The processor 702 may contain microcircuits that are configurable, temporarily or permanently, by some or all of the instructions 724 such that the processor 702 is configurable to perform any one or more of the methodologies
described herein, in whole or in part. For example, a set of one or more microcircuits of the processor 702 may be configurable to execute one or more modules (e.g., software modules) described herein.
[0084] The machine 700 may further include a graphics display 710 (e.g., a plasma display panel (PDP), a light emitting diode (LED) display, a liquid crystal display (LCD), a projector, or a cathode ray tube (CRT), or any other display capable of displaying graphics or video). The machine 700 may also include an alphanumeric input device 712 (e.g., a keyboard), a cursor control device 714 (e.g., a mouse, a touchpad, a trackball, a joystick, a motion sensor, or other pointing instrument), a storage unit 716, a signal generation device 718 (e.g., a sound card, an amplifier, a speaker, a headphone jack, or any suitable combination thereof), and a network interface device 720.
[0085] The storage unit 716 includes a machine-readable medium 722 (e.g., a tangible machine-readable storage medium) on which is stored the instructions 724 (e.g., software) embodying any one or more of the methodologies or functions described herein. The instructions 724 may also reside, completely or at least partially, within the main memory 704, within the processor 702 (e.g., within the processor's cache memory), or both, before or during execution thereof by the machine 700. Accordingly, the main memory 704 and the processor 702 may be considered as machine-readable media (e.g., tangible and non-transitory machine-readable media). The instructions 724 may be transmitted or received over a network 726 (e.g., network 150) via the network interface device 720.
[0086] In some example embodiments, the machine 700 may be a portable computing device and have one or more additional input components (e.g., sensors or gauges). Examples of such input components include an image input component (e.g., one or more cameras), an audio input component (e.g., a microphone), a direction input component (e.g., a compass), a location input component (e.g., a global positioning system (GPS) receiver), an orientation component (e.g., a gyroscope), a motion detection component (e.g., one or more accelerometers), an altitude detection component (e.g., an altimeter), and a gas detection component (e.g., a gas sensor). Inputs harvested by any one or more of these input components may be accessible and available for use by any of the modules described herein.
[0087] As used herein, the term "memory" refers to a machine-readable medium 722 able to store data temporarily or permanently and may be taken to include, but not be limited to, random-access memory (RAM), read-only memory (ROM), buffer memory, flash memory, and cache memory. While the machine- readable medium 722 is shown in an example embodiment to be a single medium, the term "machine-readable medium" should be taken to include a single medium or multiple media (e.g., a centralized or distributed database, or associated caches and servers) able to store instructions (e.g., instructions 724). The term "machine-readable medium" shall also be taken to include any medium, or combination of multiple media, that is capable of storing instructions (e.g., software) for execution by the machine (e.g., machine 700), such that the instructions, when executed by one or more processors of the machine (e.g., processor 702), cause the machine to perform any one or more of the
methodologies described herein. Accordingly, a "machine-readable medium" refers to a single storage apparatus or device, as well as cloud-based storage systems or storage networks that include multiple storage apparatus or devices. The term "machine-readable medium" shall accordingly be taken to include, but not be limited to, one or more data repositories in the form of a solid-state memory, an optical medium, a magnetic medium, or any suitable combination thereof. In some embodiments, a "machine-readable medium" may also be referred to as a "machine-readable storage device" or a "hardware storage device."
[0088] Furthermore, the machine-readable medium 722 is non-transitory in that it does not embody a propagating or transitory signal. However, labeling the machine-readable medium 722 as "non-transitory" should not be construed to mean that the medium is incapable of movement - the medium should be considered as being transportable from one physical location to another.
Additionally, since the machine-readable medium 722 is tangible, the medium may be considered to be a tangible machine-readable storage device.
[0089] In some example embodiments, the instructions 724 for execution by the machine 700 may be communicated by a carrier medium. Examples of such a carrier medium include a storage medium (e.g., a non-transitory machine- readable storage medium, such as a solid-state memory, being physically moved
from one place to another place) and a transient medium (e.g., a propagating signal that communicates the instructions 724)
[0090] The instructions 724 may further be transmitted or received over a communications network 726 using a transmission medium via the network interface device 720 and utilizing any one of a number of well-known transfer protocols (e.g., HTTP). Examples of communication networks 726 include a local area network (LAN), a wide area network (WAN), the Internet, mobile telephone networks, plain old telephone service (POTS) networks, and wireless data networks (e.g., WiFi, LTE, and WiMAX networks). The term
"transmission medium" shall be taken to include any intangible medium that is capable of storing, encoding, or carrying instructions 724 for execution by the machine 700, and includes digital or analog communications signals or other intangible medium to facilitate communication of such software.
[0091] Throughout this specification, plural instances may implement components, operations, or structures described as a single instance. Although individual operations of one or more methods are illustrated and described as separate operations, one or more of the individual operations may be performed concurrently, and nothing requires that the operations be performed in the order illustrated. Structures and functionality presented as separate components in example configurations may be implemented as a combined structure or component. Similarly, structures and functionality presented as a single component may be implemented as separate components. These and other variations, modifications, additions, and improvements fall within the scope of the subject matter herein.
[0092] Certain embodiments are described herein as including logic or a number of components, modules, or mechanisms. Modules may constitute either software modules (e.g., code embodied on a machine-readable medium or in a transmission signal) or hardware modules. A "hardware module" is a tangible unit capable of performing certain operations and may be configured or arranged in a certain physical manner. In various example embodiments, one or more computer systems (e.g., a standalone computer system, a client computer system, or a server computer system) or one or more hardware modules of a computer system (e.g., a processor or a group of processors) may be configured by
software (e.g., an application or application portion) as a hardware module that operates to perform certain operations as described herein.
[0093] In some embodiments, a hardware module may be implemented mechanically, electronically, or any suitable combination thereof. For example, a hardware module may include dedicated circuitry or logic that is permanently configured to perform certain operations. For example, a hardware module may be a special-purpose processor, such as a field programmable gate array (FPGA) or an ASIC. A hardware module may also include programmable logic or circuitry that is temporarily configured by software to perform certain operations. For example, a hardware module may include software
encompassed within a general-purpose processor or other programmable processor. It will be appreciated that the decision to implement a hardware module mechanically, in dedicated and permanently configured circuitry, or in temporarily configured circuitry (e.g., configured by software) may be driven by cost and time considerations.
[0094] Accordingly, the term "hardware module" should be understood to encompass a tangible entity, be that an entity that is physically constructed, permanently configured (e.g., hardwired), or temporarily configured (e.g., programmed) to operate in a certain manner or to perform certain operations described herein. As used herein, "hardware-implemented module" refers to a hardware module. Considering embodiments in which hardware modules are temporarily configured (e.g., programmed), each of the hardware modules need not be configured or instantiated at any one instance in time. For example, where the hardware modules comprise a general-purpose processor configured by software to become a special-purpose processor, the general-purpose processor may be configured as respectively different hardware modules at different times. Software may accordingly configure a processor, for example, to constitute a particular hardware module at one instance of time and to constitute a different hardware module at a different instance of time.
[0095] Hardware modules can provide information to, and receive information from, other hardware modules. Accordingly, the described hardware modules may be regarded as being communicatively coupled. Where multiple hardware modules exist contemporaneously, communications may be achieved through signal transmission (e.g., over appropriate circuits and buses) between or among
two or more of the hardware modules. In embodiments in which multiple hardware modules are configured or instantiated at different times,
communications between such hardware modules may be achieved, for example, through the storage and retrieval of information in memory structures to which the multiple hardware modules have access. For example, one hardware module may perform an operation and store the output of that operation in a memory device to which it is communicatively coupled. A further hardware module may then, at a later time, access the memory device to retrieve and process the stored output. Hardware modules may also initiate communications with input or output devices, and can operate on a resource (e.g., a collection of information).
[0096] The various operations of example methods described herein may be performed, at least partially, by one or more processors that are temporarily configured (e.g., by software) or permanently configured to perform the relevant operations. Whether temporarily or permanently configured, such processors may constitute processor-implemented modules that operate to perform one or more operations or functions described herein. As used herein, "processor- implemented module" refers to a hardware module implemented using one or more processors.
[0097] Similarly, the methods described herein may be at least partially processor-implemented, a processor being an example of hardware. For example, at least some of the operations of a method may be performed by one or more processors or processor-implemented modules. Moreover, the one or more processors may also operate to support performance of the relevant operations in a "cloud computing" environment or as a "software as a service" (SaaS). For example, at least some of the operations may be performed by a group of computers (as examples of machines including processors), with these operations being accessible via a network (e.g., the Internet) and via one or more appropriate interfaces (e.g., an application program interface (API)).
[0098] The performance of certain of the operations may be distributed among the one or more processors, not only residing within a single machine, but deployed across a number of machines. In some example embodiments, the one or more processors or processor-implemented modules may be located in a single geographic location (e.g., within a home environment, an office environment, or a server farm). In other example embodiments, the one or more
processors or processor-implemented modules may be distributed across a number of geographic locations.
[0099] Some portions of this specification are presented in terms of algorithms or symbolic representations of operations on data stored as bits or binary digital signals within a machine memory (e.g., a computer memory). These algorithms or symbolic representations are examples of techniques used by those of ordinary skill in the data processing arts to convey the substance of their work to others skilled in the art. As used herein, an "algorithm" is a self-consistent sequence of operations or similar processing leading to a desired result. In this context, algorithms and operations involve physical manipulation of physical quantities. Typically, but not necessarily, such quantities may take the form of electrical, magnetic, or optical signals capable of being stored, accessed, transferred, combined, compared, or otherwise manipulated by a machine. It is convenient at times, principally for reasons of common usage, to refer to such signals using words such as "data," "content," "bits," "values," "elements," "symbols," "characters," "terms," "numbers," "numerals," or the like. These words, however, are merely convenient labels and are to be associated with appropriate physical quantities.
[00100] Unless specifically stated otherwise, discussions herein using words such as "processing," "computing," "calculating," "determining,"
"presenting," "displaying," or the like may refer to actions or processes of a machine (e.g., a computer) that manipulates or transforms data represented as physical (e.g., electronic, magnetic, or optical) quantities within one or more memories (e.g., volatile memory, non-volatile memory, or any suitable combination thereof), registers, or other machine components that receive, store, transmit, or display information. Furthermore, unless specifically stated otherwise, the terms "a" or "an" are herein used, as is common in patent documents, to include one or more than one instance. Finally, as used herein, the conjunction "or" refers to a non-exclusive "or," unless specifically stated otherwise.
[00101] Although an overview of the present subject matter has been described with reference to specific example embodiments, various
modifications and changes may be made to these embodiments without departing from the broader scope of embodiments of the present invention. For
example, various embodiments or features thereof may be mixed and matched or made optional by a person of ordinary skill in the art. Such embodiments of the present subject matter may be referred to herein, individually or collectively, by the term "invention" merely for convenience and without intending to voluntarily limit the scope of this application to any single invention or present concept if more than one is, in fact, disclosed.
[00102] The embodiments illustrated herein are believed to be described in sufficient detail to enable those skilled in the art to practice the teachings disclosed. Other embodiments may be used and derived therefrom, such that structural and logical substitutions and changes may be made without departing from the scope of this disclosure. The Detailed Description, therefore, is not to be taken in a limiting sense, and the scope of various embodiments is defined only by the appended claims, along with the full range of equivalents to which such claims are entitled.
[00103] Moreover, plural instances may be provided for resources, operations, or structures described herein as a single instance. Additionally, boundaries between various resources, operations, modules, engines, and data stores are somewhat arbitrary, and particular operations are illustrated in a context of specific illustrative configurations. Other allocations of functionality are envisioned and may fall within a scope of various embodiments of the present invention. In general, structures and functionality presented as separate resources in the example configurations may be implemented as a combined structure or resource. Similarly, structures and functionality presented as a single resource may be implemented as separate resources. These and other variations, modifications, additions, and improvements fall within a scope of embodiments of the present invention as represented by the appended claims. The specification and drawings are, accordingly, to be regarded in an illustrative rather than a restrictive sense.
Claims
1. A method comprising:
accessing calendar data of a user, the calendar data indicating a first event and a second event both of which the user is scheduled to attend;
extracting, from the calendar data, data that describes the first event and the second event;
determining, from the extracted data, that the first event and the second event occur within a single trip;
in response to the determining, automatically constructing, using a hardware processor, a plurality of application program interface (API) requests, the automatically constructing comprising including the extracted data as one or more search criteria in the API requests, each of the plurality of API requests triggering a search for a different set of search criteria for different scenarios involving the first event and the second event;
transmitting, over a network, the plurality of API requests to a server of a service provider;
in response to the transmitting, receiving results from the server of the service provider, the results comprising options determined to be compatible with both the first event and the second event based on the one or more search criteria in the API request; and
causing presentation of at least some of the options from the results determined to be compatible with both the first event and the second event.
2. The method of claim 1, further comprising:
detecting that the results comprise unusual results, the detecting including comparing the results to expected results; and
triggering construction and transmission of a further API request for alternative results in response to the detecting the unusual results.
3. The method of claim 1, further comprising inferring preferences for the user from past or current data for events extracted from the calendar data of the user, the inferred preferences being included as a search criteria in one or more of the API requests.
4. The method of claim 1, wherein the causing presentation comprises: generating a user interface comprising at least some of the options from the results; and
causing the user interface to be displayed on a device of the user.
5. The method of claim 1, wherein the causing presentation comprises transmitting a notification or a message to a device of the user, the notification or message providing a link to access a user interface comprising at least some of the options from the results.
6. The method of claim 1, wherein the determining that the first event and the second event occur within a single trip comprises determining that the first event and the second event are within a predetermined time threshold.
7. The method of claim 1, wherein the determining that the first event and the second event occur within a single trip comprises determining that the first event and the second event are within a predetermined distance threshold.
8. The method of claim 1, wherein the determining that the first event and the second event occur within a single trip comprises determining that the first event and the second event activates a location trigger associated with a home location.
9. A hardware storage device storing instructions that, when executed by one or more processors of a machine, cause the machine to perform operations comprising:
accessing calendar data of a user, the calendar data indicating a first event and a second event both of which the user is scheduled to attend;
extracting, from the calendar data, data that describes the first event and the second event;
determining, from the extracted data, that the first event and the second event occur within a single trip;
in response to the determining, automatically constructing a plurality of application program interface (API) requests, the automatically constructing comprising including the extracted data as one or more search criteria in the API requests, each of the plurality of API requests triggering a search for a different set of search criteria for different scenarios involving the first event and the second event;
transmitting, over a network, the plurality of API requests to a server of a service provider;
in response to the transmitting, receiving results from the server of the service provider, the results comprising options determined to be compatible with both the first event and the second event based on the one or more search criteria in the API request; and
causing presentation of at least some of the options from the results determined to be compatible with both the first event and the second event.
10. The hardware storage device of claim 9, wherein the operations further comprise:
detecting that the results comprise unusual results, the detecting including comparing the results to expected results; and
triggering construction and transmission of a further API request for alternative results in response to the detecting the unusual results.
11. The hardware storage device of claim 9, wherein the operations further comprise inferring preferences for the user from past or current data for events extracted from the calendar data of the user, the inferred preferences being included as a search criteria in one or more of the API requests.
12. The hardware storage device of claim 9, wherein the determining that the first event and the second event occur within a single trip comprises determining that the first event and the second event are within a predetermined time threshold.
13. The hardware storage device of claim 9, wherein the determining that the first event and the second event occur within a single trip comprises determining that the first event and the second event are within a predetermined distance threshold.
14. The hardware storage device of claim 9, wherein the determining that the first event and the second event occur within a single trip comprises determining that the first event and the second event activates a location trigger associated with a home location.
15. A system compri sing :
one or more hardware processors; and
a storage device storing instructions that, when executed by the one or more hardware processors, causes the one or more hardware processors to perform operations comprising:
accessing calendar data of a user, the calendar data indicating a first event and a second event both of which the user is scheduled to attend;
extracting, from the calendar data, data that describes the first event and the second event;
determining, from the extracted data, that the first event and the second event occur within a single trip;
in response to the determining, automatically constructing a plurality of application program interface (API) requests, the automatically constructing comprising including the extracted data as one or more search criteria in the API requests, each of the plurality of API requests triggering a search for a different set of search criteria for different scenarios involving the first event and the second event;
transmitting, over a network, the plurality of API requests to a server of a service provider;
in response to the transmitting, receiving results from the server of the service provider, the results comprising options determined to be compatible with both the first event and the second event based on the one or more search criteria in the API request; and
causing presentation of at least some of the options from the results determined to be compatible with both the first event and the second event.
16. The system of claim 15, wherein the operations further comprise:
detecting that the results comprise unusual results, the detecting including comparing the results to expected results; and
triggering construction and transmission of a further API request for alternative results in response to the detecting the unusual results.
17. The system of claim 15, wherein the operations further comprise inferring preferences for the user from past or current data for events extracted from the calendar data of the user, the inferred preferences being included as a search criteria in one or more of the API requests.
18. The system of claim 15, wherein the determining that the first event and the second event occur within a single trip comprises determining that the first event and the second event are within a predetermined time threshold.
19. The system of claim 15, wherein the determining that the first event and the second event occur within a single trip comprises determining that the first event and the second event are within a predetermined distance threshold.
20. The system of claim 15, wherein the determining that the first event and the second event occur within a single trip comprises determining that the first event and the second event activates a location trigger associated with a home location.
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
EP16876777.0A EP3391298A4 (en) | 2015-12-18 | 2016-12-16 | Selection of calendar-based, multiple event options |
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201562269797P | 2015-12-18 | 2015-12-18 | |
US62/269,797 | 2015-12-18 | ||
US15/288,317 | 2016-10-07 | ||
US15/288,317 US20170178081A1 (en) | 2015-12-18 | 2016-10-07 | Automatic selection of calendar-based, multiple event options for presentation |
Publications (1)
Publication Number | Publication Date |
---|---|
WO2017106655A1 true WO2017106655A1 (en) | 2017-06-22 |
Family
ID=59057619
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
PCT/US2016/067195 WO2017106655A1 (en) | 2015-12-18 | 2016-12-16 | Selection of calendar-based, multiple event options |
Country Status (3)
Country | Link |
---|---|
US (1) | US20170178081A1 (en) |
EP (1) | EP3391298A4 (en) |
WO (1) | WO2017106655A1 (en) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10382568B2 (en) * | 2015-12-18 | 2019-08-13 | Hipmunk, Inc. | Display of calendar-based single user, single event travel options |
US20180308065A1 (en) * | 2017-04-19 | 2018-10-25 | Microsoft Technology Licensing, Llc | Automatically presenting one or more calendars based on user behavior |
US11392896B2 (en) * | 2017-06-02 | 2022-07-19 | Apple Inc. | Event extraction systems and methods |
US11669921B2 (en) * | 2019-12-16 | 2023-06-06 | Included Health, Inc. | Systems and methods for travel optimization |
US20230140427A1 (en) * | 2021-11-04 | 2023-05-04 | Copilot Travel, Inc. | Systems and methods to efficiently integrate processing service requests into a webpage |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130029696A1 (en) * | 2009-09-22 | 2013-01-31 | Telenav, Inc. | Location based system with contextual locator and method of operation thereof |
US20140058884A1 (en) * | 2011-08-16 | 2014-02-27 | Hipmunk, Inc. | Presenting a travel option |
US20140114571A1 (en) * | 2006-12-29 | 2014-04-24 | Facebook, Inc. | Meeting notification and modification service |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060106655A1 (en) * | 2003-08-05 | 2006-05-18 | Ladislav Lettovsky | System and method for coordinating travel itineraries |
-
2016
- 2016-10-07 US US15/288,317 patent/US20170178081A1/en not_active Abandoned
- 2016-12-16 WO PCT/US2016/067195 patent/WO2017106655A1/en active Application Filing
- 2016-12-16 EP EP16876777.0A patent/EP3391298A4/en not_active Ceased
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140114571A1 (en) * | 2006-12-29 | 2014-04-24 | Facebook, Inc. | Meeting notification and modification service |
US20130029696A1 (en) * | 2009-09-22 | 2013-01-31 | Telenav, Inc. | Location based system with contextual locator and method of operation thereof |
US20140058884A1 (en) * | 2011-08-16 | 2014-02-27 | Hipmunk, Inc. | Presenting a travel option |
Non-Patent Citations (1)
Title |
---|
See also references of EP3391298A4 * |
Also Published As
Publication number | Publication date |
---|---|
EP3391298A1 (en) | 2018-10-24 |
US20170178081A1 (en) | 2017-06-22 |
EP3391298A4 (en) | 2019-05-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10382568B2 (en) | Display of calendar-based single user, single event travel options | |
US20170178259A1 (en) | Automatic selection of calendar-based, multiple user options | |
US8972429B2 (en) | Calendar-based suggestion of a travel option | |
US9672468B2 (en) | System and method for providing intelligent location information | |
US20190340544A1 (en) | Trip planning and implementation | |
US9488487B2 (en) | Route detection in a trip-oriented message data communications system | |
JP2022508822A (en) | Systems and methods for personalized ground transportation | |
JP6862755B2 (en) | Methods and systems for life event-based travel planning | |
US20170178081A1 (en) | Automatic selection of calendar-based, multiple event options for presentation | |
US20150073841A1 (en) | Method and system for facilitating vacation planning and management | |
US10972424B2 (en) | Inferring preferences from message metadata and conversations | |
US20180276572A1 (en) | Providing travel related content for transportation by multiple vehicles | |
US20230236033A1 (en) | Method for Generating Personalized Transportation Plans Comprising a Plurality of Route Components Combining Multiple Modes of Transportation | |
US20140278601A1 (en) | Group travel opportunity recommendations and reservations based on shared interests | |
US20180276578A1 (en) | Providing travel related content to modify travel itineraries | |
US20220019946A1 (en) | Systems and methods for generating and updating travel itineraries | |
US20180276573A1 (en) | Providing travel related content customized for users | |
US20200258010A1 (en) | Systems and methods for multi-destination travel planning using calendar entries | |
US20180101869A1 (en) | Method and information system for enhanced traveler experience during travel | |
WO2017025798A2 (en) | System and method for increasing utilization of capacity limited and perishable events | |
WO2014072931A1 (en) | Device, system, and method of sharing social network information | |
US20170178258A1 (en) | Automatic selection of calendar-based, multiple trip options for presentation | |
Al Tair et al. | Architecture for context-aware pro-active recommender system | |
US20220092483A1 (en) | Customer experience generator with shareable profile and autopay |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
121 | Ep: the epo has been informed by wipo that ep was designated in this application |
Ref document number: 16876777 Country of ref document: EP Kind code of ref document: A1 |
|
NENP | Non-entry into the national phase |
Ref country code: DE |
|
WWE | Wipo information: entry into national phase |
Ref document number: 2016876777 Country of ref document: EP |