This invention relates to computer systems and, more particularly, to platforms for interactions between users and software applications.
In many contexts, users interact electronically with software applications over a network. For example, many organizations interact with users as they sell or promote products or their organization over a network, such as the WorldWide Web. To assist in establishing a WorldWide Web site, numerous systems currently exist for creating and running web sites. These systems often permit users to receive personalized experiences as they visit the web site, depending on profile attributes of a particular user. These attributes may relate both to characteristics of the user (e.g., gender, age, or income) and the user's prior interactions with the web site (e.g., specific pages viewed or products purchased).
Web servers often can track where individuals have gone on a web site, can modify a user's profile based on the user's activity, and can modify the content that a user sees or the messages that a user receives based on the user's profile.
However, existing systems do not provide a satisfactory mechanism for planning and establishing a series of interactions between users and the web site or for handling interactions from both an individual and a group perspective. Planning and establishing interactions becomes particularly difficult where the interactions may take place over an extended time period or occur over diverse communication channels, such as the WorldWide Web, email, telephones, and wireless devices.
According to the present invention, a method and system for establishing interactions between users (both individually and as a group) and a web site (or other network-based software) is provided. A set or series of interactions (a “scenario”) can be created, which may involve multiple user sessions. The system permits a single mechanism to be used to describe events, actions, and conditions for both individuals and a group. One portion of a scenario may apply to the group, while another portion applies to individuals.
A scenario describes a kind of non-deterministic process, in which multiple branches of the scenario can be executed in parallel. At any given time, many users may be participating in the same scenario, either in synchrony as a group or independently of each other. The events, actions, and conditions used to describe the scenario can be extensible. The scenario also can be defined in terms of time, by linking events, actions, and conditions with when they occur (e.g., at a certain time or day, or during a specified period, or after a specified wait). In one embodiment, the scenario is modeled as a deterministic state machine.
A scenario can be analogized to a channel or pipe, through which users flow. In the flow, event elements (or events) generally prevent a user from proceeding further through the scenario until the event occurs. Condition elements generally control which users will proceed further. Action elements generally carry out some action, which typically is relative to the user. The pipe can fork, in which case users flow down multiple branches, until they rejoin at the end of the fork. Different kinds of forks can be used. In a regular fork, the user leaves the fork as soon as he or she reaches the join point at the end of the fork, via one of the paths. In a synchronized fork, the user leaves the fork when he or she has proceeded through each of the paths to arrive at the join point. Alternatively, a fork could require some number (but not necessarily all) of the paths to be completed before the user leaves the fork.
An example portion of a scenario is shown in
Users meeting the “Young” condition 130 continue down upper branch 125, where the scenario waits for event 145 (“Visits a page in folder/products/bikes/”). That is, to continue down this path the user must visit a page that is listed in the bikes folder. Following event 145 is action element 150 (“Give Promotion promotions: 25% off BMX bikes”). Thus, if a user in upper branch 125 visits the specified page from event 145, that user will receive a promotion for 25% off a BMX bike. Users meeting the “Women” condition 140 continue down lower branch 135, where the scenario waits for event 155 (“Views an item from ProductCatalog named Clothing”). That is, to continue down this path the user must view a clothing item from the product catalog. Following event 155 is action element 160 (“Give Promotion promotions: 20% off order”). Thus, if a user in lower branch 135 views the specified item from event 155, that user will receive a promotion for 20% off his or her order.
After action elements 150 and 160, the paths rejoin at point 170, where the scenario could continue with more elements or could end.
If the fork is a regular fork, then once a user reaches the end of any branch (in this example, the user receives promotion 150 or promotion 160), the user exits the fork (at point 170). However, if the fork is a synchronized fork, then the user would not proceed past the exit of the fork until he or she had proceeded to the end of each of the branches. In one embodiment, by default a fork is a regular fork.
An example of a synchronized fork is shown in
In one embodiment, in order to keep track of where in a scenario the users are, the system uses a state machine, where each user preferably is always in exactly one state and proceeds along a single path through the state machine. A state machine corresponding to the portion of a scenario shown in
In
From state 240, users who view a listed clothing item (corresponding to event 155) are given the 20% off promotion (at point 243) and proceed to state 250. Users who view a specified bike page (corresponding to event 145) are given the 25% off bike promotion (at point 246) and proceed to state 250.
Similarly, from state 260, users who visit the specified bike page (corresponding to event 145) are given the bike promotion (at point 265) and proceed to state 270. From state 280, users who view a listed clothing item (corresponding to event 155) are given the 20% off promotion (at point 285) and proceed to state 290.
Preferably, a scenario (or, where appropriate, a discrete segment within a scenario) is transformed into a state machine through a looping transformation process, as shown in
When one or more wait elements are reached, one or more new state machine states are created. First, any appropriate intermediate states are created (step 550), to segregate users who are waiting in different paths or combinations of paths through the scenario. Users may wait in different paths or combinations of paths due to encountering the various filter conditions along the paths. Generally, intermediate states will be created if the process encountered more than one wait element. After creating any intermediate states, waiting states are created where the state machine will wait for the events to occur (step 560). In addition, the transformation process creates the corresponding transitions out of each waiting state for each qualifying event (step 570). Once the new waiting states have been created, the transformation process removes the scenario elements prior to and including the wait elements from the scenario (step 580), then loops again as long as the scenario has not been entirely processed (step 590). For a subsequent loop, the transformation process keeps track of the scenario path or combination of scenario paths that is active for each wait state.
Using the example from
The elements that have been processed are then removed from the scenario. In the third pass through the loop, the transformation process encounters the action elements in the two branches of the fork, and adds those actions to the state machine transitions. Thus, the 20% off promotion is added (items 243 and 285) to the two transitions based on viewing a clothing item (from states 240 and 280, respectively), and the bike promotion is added (items 246 and 265) to the two transitions based on viewing a specified bike (from states 240 and 260, respectively). The transformation process also adds states 250, 270, and 290 at the ends of the transitions.
Preferably, the state of each user is stored along with the user's profile information in a profile repository. This permits the retrieval of per-user scenario information and allows the state of each user in each scenario to be stored persistently. Thus, the state can be retrieved across multiple user sessions across multiple communication channels, and even if the system must be restarted.
In addition to per-user state, a scenario may have a collective state—that is, a state associated with all of the users or a group of users. Conditions and, in many cases, events and actions can apply both at an individual level and at a collective level. Thus, in general the same condition, event, and action elements can be used in both individual and collective parts of a scenario.
In the example shown in
A state machine corresponding to the portion of the scenario shown in
In this example, a collective state is maintained through state 430. Up through state 430, the scenario does not mention or distinguish users at all. After state 430, when the email has been sent to specified (women) users, individual instances of objects are created to hold each user's state as the users proceed through the rest of the scenario. The collective portions of the scenario are represented, in
In part, the use of a collective scenario can provide an optimization. By using a collective scenario, the system does not need to create individual scenario instances for each user. In the example shown in
Collective instances (objects that hold the collective state) also can make the scenarios work better. For example, the example shown in
Collective instances can apply to users in general or to a specific list of users (such as, the users who received a specific email). With a specific list, a user may be removed from the list when an individual instance is created for that user, unless the scenario allows for multiple instances for an individual user. With a collective instance that applies to users in general and in which a user cannot be in the collective instance and have an individual instance, the system can determine which users are not in the collective instance by reviewing the individual instances.
Preferably, when an event occurs in an individual scenario, the system executes each transition action from the current state for which the action's filter is satisfied. After all of the actions are executed, the state machine transitions to a target state.
If the target state is intermediate, the system looks for a condition on an outgoing transition that is satisfied for that instance. If such a filter is found, the system takes the corresponding transition out of the intermediate state. Otherwise, the instance can proceed no further through the state machine.
If the target state is a waiting state, the system looks for an outgoing transition that is triggered by a timer event (such as, “in 1 second”). For each such transition, a persistent timer is created such that, at its completion, it will fire the timer event.
In a preferred embodiment, an event in a collective scenario operates similarly, unless an action requires the creation or evaluation of individual instances to handle the transition. If so, the system preferably aborts the collective transition and creates individual instances, as described below.
At times, transitions may be taken by a batch of individual scenarios at once. Preferably, in such a case, the transitions are carried out in batches. For example, an email may be sent more efficiently to a batch of individuals using a single SMTP connection, rather than opening and closing a new connection for each individual.
In a preferred embodiment, events can be recurring. For example, a user may qualify for a certain promotion each time he or she purchases a certain type of item. Or, once a user purchases a certain item, that user may then qualify for a promotion on the first day of every month. With a recurring event (such as a new promotion on the first day of every month), a new scenario instance is created (by, in effect, cloning the original instance). The new instance handles the transition to a new state, leaving the original instance able to create additional new instances if the event recurs.
Similarly, when an individual instance must be created from a scenario in a collective state, a new individual instance of the scenario may be created, leaving the collective instance able to create further individual instances.
Preferably, an individual event (an event specific to an individual user) is part of a single transaction. If an error occurs while handling the event, the transaction is rolled back, and the affected scenario instance (or instances) revert back to their prior state. However, a global event (an event that applies or potentially applies to all users) may involve too many scenario instances to be handled as a single transaction. Thus, a global event preferably is spread across several transactions. Preferably, these transactions are structured to allow for a recovery in the case where the system goes down in the midst of handling a global event. In a preferred embodiment, as shown in
Similarly, if a transition from a collective instance to individual instances will cause a sufficiently large number of individual instances to be created (as, for example, with the scenario described in
Generally, time events can be based on a specific time (such as “on Sep. 1, 2000”) or a relative time (such as, “in 1 second,” “next Friday,” or “in 1 month”). The time events can occur just once or can be recurring (such as, “each Monday” or “on the 1.sup.st of each month”). Also, time events can specify a range, such as “between Mar. 1, 2001 and Apr. 1, 2001,” “between Monday and Friday,” or “between 12:00 p.m. and 1:00 p.m.”).
In a preferred embodiment, events are treated as objects, with attributes that can be referenced by other elements. For example, an event such as “visits a page in folder/products/bikes/” may refer to a number of different pages. The particular page visited is an attribute of the event object, and could be referenced by another element. For example, after the event, a subsequent element may be an action to change the user's profile attribute of “last page visited” to the particular page.
In addition to branching based on particular conditions or events, a branch also can be made using a random number. Preferably, with a random event, the system picks a random number, and the value determines the branch that is taken according to specified percentages. Thus, for example, as shown in
The particular conditions, events, and actions described above are merely exemplary. Conditions generally are based on user profile information, although other information could be used. Events generally are based on user actions (such as visiting a web page, purchasing a particular product, designating a purchased item as a gift, modifying an order, registering with a web site, or logging in or out of a web site), time, or system-based events (such as the system being started or a particular item is out of stock), although any type of event could be used. Actions generally relate to the user (such as, sending an email, providing a promotion, or updating information about the user) but could involve any other action that the system could take. In one embodiment, the set of elements can be extended while the system is running. Alternatively, it may be necessary to restart the system after adding elements.
Preferably, the scenarios system is implemented with computer software. In a preferred embodiment, the software is written in Java, however other software languages could be used. Preferably, the system operates in a cluster of servers. One server operates as a global scenario server and is responsible for starting and stopping the scenarios, and handling global and timer events. The other servers operate as individual scenario servers, with each one being responsible for handling individual events for the users whose sessions it maintains. Optionally, the global server also has user sessions on it and acts also as an individual server. Preferably, to avoid conflicts, only one scenario server is permitted to update a scenario instance (that is, its state) at a time.
The scenarios functionality may be provided as a separate module or integrated as part of an e-business platform, such as the Dynamo suite from Art Technology Group of Cambridge, Mass. The scenarios system may be provided on any suitable storage device, such as a CD-ROM or magnetic disk (hard disk or floppy), or may be transferred electronically (such as over the Internet).
While there have been shown and described examples of the present invention, it will be readily apparent to those skilled in the art that various changes and modifications may be made therein without departing from the scope of the invention as defined by the appended claims. Accordingly, the invention is limited only by the following claims and equivalents thereto.
This is a divisional application of U.S. patent application Ser. No. 09/919,500, filed on Jul. 31, 2011, the disclosure of which is hereby incorporated by reference.
Number | Date | Country | |
---|---|---|---|
Parent | 09919500 | Jul 2001 | US |
Child | 13367574 | US |