There are many ways in which users communicate information with one another, including email, instant messaging, text messaging, telephones, over social networks, via blogs and microblogs (e.g., Twitter®) and so forth. Windows Live® is an example of a set of services and software products that among other aspects may be used for such communications, including via mobile device services and products.
When a user event occurs in a service such as Windows Live®, it would be desirable to notify an audience of users about the event. However, doing so is not as straightforward as sending a notification to everyone associated with that event. More particularly, each of these users may need to be notified in one or more ways, using any combination of methods prevalent on the Internet and/or mobile devices, such as e-mail, SMS, a website or some custom mechanism. Further, users are in different locales, and thus notifications may need to be appropriate for each locale. Additionally, web services and other web applications may need to be notified about the event.
At the same time, notifications of the event need to respect privacy and security settings for each user. Notifications also need to be delivered in a medium that is optimized for the market the user is in. For example, users in markets such as Japan want to receive notifications in the most optimized delivery channel, such as mobile e-mail.
What is needed is a platform that meets these needs, in a manner that is customizable and easily authored, while supporting different locales (markets). Such a platform also needs to be able to support new types of events and technologies as they evolve.
This Summary is provided to introduce a selection of representative concepts in a simplified form that are further described below in the Detailed Description. This Summary is not intended to identify key features or essential features of the claimed subject matter, nor is it intended to be used in any way that would limit the scope of the claimed subject matter.
Briefly, various aspects of the subject matter described herein are directed towards a notifications platform that routes notifications to endpoints of one or more recipients, in which a publisher and/or other mechanism designates the recipients, e.g., the potential recipients may be arbitrarily specified, such as chosen by the publisher and/or derived from the notification type, and so forth. Preference data of each recipient determines whether that publisher is able to send to that recipient, and if so, to which endpoint set (one or more endpoints) of that recipient. Data associated with a notification thus is used to identify the potential recipients, and the platform accesses a preference data store to determine whether each potential recipient is an actual recipient to be sent the notification. If so, for each actual recipient, the platform determines the endpoint or endpoints based upon the recipient's preferences, that will receive the notification, formats a notification payload appropriate for that endpoint and market, and sends the notification payload to that endpoint.
In one aspect, when the notification payload is sent to a recipient, the recipient may reply to an incoming notifications pipeline. The incoming notifications pipeline determines the notification associated with the reply, and processes the reply based upon the associated notification.
In one aspect, notification data identifies a publisher, a recipient set of one or more potential recipients for receiving a notification, type information, and possibly arbitrary data that describes the notification, e.g., the comment content of a comment notification. The notification data is processed, including accessing preference data for each potential recipient to determine, based upon the publisher and type information, whether the notification is allowed to be sent to that recipient. If so, the preference data and notification type is used to locate an endpoint set (one or more endpoints) to which the notification is able to be sent, e.g., the intersection of the recipient's preference data and the notification type's (scenario). For example, the type information may comprise a scenario for the notification data; the preference data locates one or more roles for the selected scenario, in which each role corresponds to an endpoint and includes information that identifies whether the publisher is allowed to publish to that endpoint. One or more conditions, such as a “quiet” time in which notifications are not to be sent, also may be present in the preference data and evaluated for determining whether the notification can be sent to a given endpoint. If one endpoint is not available, a fallback endpoint may be used, based upon recipient preferences
In one aspect, a notification directed to a recipient and an endpoint of that recipient is processed, to modify the notification for the recipient and/or the endpoint. A notifications template is selected based upon information associated with the notification and locale information associated with the recipient, and used to obtain layout properties for that notification. A UI template is determined based upon the endpoint, and used with the layout properties to obtain a notification payload that is then sent to the endpoint of the recipient. The UI template may be selected based upon the locale information.
Other advantages may become apparent from the following detailed description when taken in conjunction with the drawings.
The present invention is illustrated by way of example and not limited in the accompanying figures in which like reference numerals indicate similar elements and in which:
Various aspects of the technology described herein are generally directed towards a delivery platform for notifications, by which various software systems including web services and clients may originate and propagate a notification. As will be understood, the platform delivers the notifications in a performant and scalable manner, while respecting the privacy, security and other preferences of recipients (users and/or other applications) interested in receiving the notification. Further, the platform is configured to tailor the notification in a virtually unlimited variety of formats for different markets (locales).
It should be understood that any of the examples herein are non-limiting. As such, the present invention is not limited to any particular embodiments, aspects, concepts, structures, functionalities or examples described herein. Rather, any of the embodiments, aspects, concepts, structures, functionalities or examples described herein are non-limiting, and the present invention may be used in various ways that provide benefits and advantages in computing and data communication in general.
Another way to enter a notification into the platform is via a program or the like on a user (client) device that fires an event 106 received at the platform. If the event comprises a notification scenario as evaluated by block 108, such as when the user sends an email, text message, instant message, and/or other communication to one or more recipients, a notification corresponding to the event enters the client library 102. More specific examples of such events include when a user adds a comment to some content, tags a person in a photo, shares a document, sends a message, issues a friend invitation, and so forth.
The notifications platform thus provides clients and services with the ability to generate notifications from various programs and/or sources in a virtually unlimited variety of formats and protocols, including e-mail, SMS, REST, XML, HTML, social networking, microblog and so forth. As can be readily appreciated, other interfaces may be provided as entrypoints into the notifications platform, including as technology evolves.
In general, a notification comprises a piece of data directed towards informing a recipient about the event that created that notification. Examples of events include adding a comment to a Windows Live® activity or a photo, tagging a photo, creating a group, adding a blog post and so forth.
In one implementation, generally represented in
The application ID and Change Type are values assigned to the notification that indicate the specific type of the notification; (as described below, the scenario indicates the general type of the notification). These values form a notification taxonomy; different types of events generate notifications with platform-unique application IDs and Change Types. The following table provides some examples of notifications each with a AppID/Change Type (and scenario, described below):
The example values shown for App ID and Change Type are integers with no intrinsic significance herein other than that they are different for different types of notifications, and do not change during the lifetime of a service. App ID and Change Types are thus permanently assigned to a particular type of notification, and new numbers are provisioned when a new notification type is introduced to the platform. Note that there may be more than one instance of a platform (e.g., a test platform and a production platform), whereby there may be a different appid/change type duple or the like associated with a notification type in each instance.
Another part of the identifier (ID) 440 of a notification is the scenario property. While the AppID and Change Type pair provides a differentiator between notification types, this pair is specific to a notification type, and thus differentiates between a notification for a comment added to a photo and one for a comment added to an album, for example. However, there are times that these types benefit from being considered collectively to represent user preferences for the notifications with these types, which is what the scenario property accomplishes, namely that different notification types that need to share the same notifications settings have the same scenario. As can be seen, the scenario provides group categories for notification types. The scenario can be further categorized using a “category” attribute. This allows a set of notifications to share the same default settings, while each defining different sets of provisioned endpoints and UI (through per-category*scenario UI templates).
Each notification is published by someone, or on behalf of someone, identified in the notification as the publisher 441. An example publisher is a Windows Live® user with a PUID (Passport Unique ID) and CID (Contact ID).
Each notification is directed towards (intended for sending to) one or more recipients 442 identified in the notification. A recipient is typically a user, but can be any suitable entity, such as an e-mail address. As described below, a recipient may receive the notification via one or more endpoints based on preference data, and thus determining to which of those endpoints the notification is to be sent part of the notifications platform.
The field 443 represents a custom data specific to the event/notification and the circumstances that created the event. By way of example, a comment notification may contain text that says a comment has been made along with URLs to a comment page and a profile page of the person who made the comment. Some or all of a publisher's content, such as text and/or an image may be included in the custom data of a notification.
As described below with reference to templates, custom data is represented in a notification as a collection of template variables. Template variables are data structures designed to carry data in a typed format; text template variables carry strings, HLink template variables are used for URLs, and so on. Custom data is useful in presenting the notification in a rich and interesting way to a recipient, when it arrives at the recipient via e-mail, SMS or some other format. The data may be used in the content of an e-mail message.
Once the notification is created, it will be sent (blocks 120 and 121,
However, before sending, as also represented in
A notification may be flagged (e.g., via an opaque key exposed to the asynchronous queue) as being directed towards the asynchronous queue 115, as detected at block 114. As represented in
Whether queued or sent without queuing, block 119 provides the library 102 with an opportunity to update notification details before sending, such as to add a current timestamp, to modify the notification parameters to indicate it has been aggregated/collapsed, and so forth.
The preferences stage of the routing and delivery platform (RDP) 220 of
One determination that is made for each potential recipient is whether that recipient is actually interested in receiving the notification. More particularly, some people are not interested in receiving any notifications whatsoever. In other instances, recipients may elect to receive notifications from one publisher but not another, may only want certain types of notifications (e.g., “invites” but not “comments”), may want them delivered to a certain endpoint, may want them only during a certain time of day, and so forth. Such election information is recorded in the preferences data store.
Note that in one implementation, preferences are grouped by scenarios, e.g., a recipient may want to receive one publisher's invitations (invites), but not that same publisher's comments; (more granular elections may be used in alternative implementations, e.g., Application ID and/or Change Type may be used rather than (or in addition to) per-scenario elections). The RDP state 220 checks each recipient's preferences at block 222 to determine whether that potential recipient has elected to receive notifications from the publisher for the notification's particular scenario.
To this end, as generally represented in
To determine whether to notify recipient R1, a check preferences component 620 of RDP checks R1's address book and locates the notification service instance for the scenario described by the notification 650, which is “comment” (notification service instance 661) in the example of
The RDP component 620 determines which of the roles 663-665 in the notification service instance 661 have members that contain the publisher P, either by identity or by belonging to a group within a role. For example, in a Windows Live® environment, members that contain P may be the Passport Member P or compound roles (such as RoleMember/ServiceMember roles) that contain P as one member, e.g., the Friends role may contain P if P is a member of R1.
Using the resulting roles, if one or more roles are found, RDP uses the roles (e.g., by their names, as each role may be named for an endpoint for which it contains preferences) to determine the endpoint or endpoints for contacting the recipient R1. For example, if R1 permits P to contact R1 for comment notifications via E-mail, R1 has added P (or a group of people including P) to the “E-mail” Role 663 in the notifications service instance 661 for “comment.” In this way, the RDP component 620 constructs a list 669 of one or more endpoints for contacting R1. This list may be empty if R1 has not chosen to receive notifications from P, or at least not comment notifications in this example. The process is repeated for any other recipients, such as R2 and R3 in the example of
Note that the above model is an “include” type model in which the recipient includes users or groups from whom messages are permitted to be received. However, an “exclude” model may be convenient for certain users, in which anyone can send a notification, at least certain types of notifications, unless specifically excluded. Such an exclude model may be offered as well, although some spam filtering may be needed; an include model and an exclude model may be used together
Another aspect is a selection among multiple preferences. For example, instant messaging programs may detect whether a recipient is currently online (i.e., logged in for instant messages). If not, another endpoint is more appropriate for sending the notification. Thus, for example, a recipient may elect to receive a notification via instant message and SMS, but will only receive an instant message if online, and only SMS if offline; (it is alternatively possible to send to both endpoints if online). Alternatives are feasible, e.g., a recipient may elect to receive a notification via instant message, but if not online, then by email.
In the above model, the recipient specifies the preferences. However, a model in which the publisher has some input is an alternative. For example, in one possible alternative, a publisher may specify (e.g., for all notifications or per-notification) that if more than one endpoint is available, the notification be delivered in an order specified by the publisher, e.g., email if possible, then instant message if not, then SMS if neither, and so on. In such a model, each recipient may remain in charge of whether the publisher has the option to specify the order for that recipient.
Returning to
In addition to notification election based upon publishers and scenarios, certain preference data may indicate one or more conditions such as certain times to not receive notifications. This may be a single “quiet” time window, such as no notifications between 10:00 pm and 7:00 am, however more elaborate schemes are feasible, e.g., different times for weekdays versus weekends, different quiet rules for different publishers and/or scenarios, and so forth. Step 332 of
A publisher may also send notifications to a recipient outside the notifications platform, such as a third party social networking site. This is generally done to update the publisher's own information on such a site, for example, in which event a publisher is a recipient of the publisher's own notification. Thus, as used herein, the term “recipient” refers to any entity that receives a notification, including third party endpoints of the publisher that published the notification. Third-party endpoints of a recipient may also be contacted.
To send to such an outside entity, the notifications platform accesses the publisher's cached account information (e.g., username and credentials) for that entity, or obtains it as needed, and sends the notification to an activity publishing system or the like for publishing activities. In this way, for example, a publisher does not have to independently update his or her other sites and the like when performing some action that impacts them. The process works in reverse as well, e.g., other sites may be given access to the notifications platform so that a user only need perform some suitable action on a third party site, for example, to have a notification generated via the notifications platform. Note that the notifications platform includes a suitable mechanism to halt or drop a notification, so as to prevent an infinite looping of the update/notification between the third party entity and the notifications platform.
Another aspect of routing and delivery is preparing the data for the endpoints once the endpoints have been determined for each recipient. In one implementation, there are multiple sources of data, including the notification itself, particularly its custom data 443 (
More particularly, the notification provides the data that is specific to the particular situation that created the notification. For example, a comment notification contains the specific comment associated with the notification. However, the notification's custom data 443 is often very terse, precise and compact, because the notification contains only atomic pieces of information subsequently used for customization as described herein. For example, a comment notification may contain the first and last names and the profile URL of the publisher, however to look appropriate to a recipient reader, an e-mail message needs sentences or phrases that contained some or all of these pieces of information.
Thus, the custom data 443 may be extended to provide rich and extensive customizations, which is provided by a notifications templates service (block 334 of
The notification templates 772 contain mapping rules, referred to as layout styles, which translate the notification data 770 to the layout properties 774. Note that these templates may be per-designed and cached for efficiency. In one implementation, the RDP uses a notifications template REST API to obtain notification templates and get the layout properties for a particular notification. A notification template 772 exists for each type of notification, and is identified according to the AppID and Change Type of the notification, e.g., one notification template exists for each AppID-Change Type duple.
Below is an example of custom data for a notification described in template variables.
Notification templates 772 can create the following layout properties 774 for these variables; (not that this is an informational example and not necessarily an actual template):
The layout properties 774 are localizable, such that there is a set of layout properties (layout styles) for each locale/market.
In this manner, the notification data 770 needed for an endpoint is transformed into a layout property 774, including any data that remains unaltered. Moreover, each endpoint has its own set of localized layout properties. Because each endpoint may need a particular message with its own content, a collection of layout properties along with their definition based on template variables may exist for each endpoint in the notifications template.
Layout properties provide the variable data 884 for a notification, as represented in
UI Templates contain static data (usually text) and placeholders with names of the layout properties that need to be inserted. An example placeholder format is {LayoutPropertyName}. Note that as described above, UI templates are also localizable, and e.g., one UI template exists for each endpoint and each supported market within that endpoint.
Another aspect of the notifications platform is a reply capability of a recipient, such as to comment back, accept an invitation, set up a “friend” relationship, and so forth. To this end, when a recipient receives a notification, the recipient may contact an incoming notifications pipeline. For each endpoint, there is metadata that facilitates reply handling, and each endpoint may have its own reply-handling system.
For example, a reply to an email message may be sent to an email address (e.g., a Hotmail® address) that contains certain information that identifies the message as a notification reply. The message is then routed (e.g., by Hotmail®) to a web service or the like that makes an API call to the incoming notifications pipeline. From the metadata with the message, the pipeline may locate the notification to which this reply is associated, and, for example, return an email message to the sender as a reply in the same email thread. Other endpoints are handled similarly, e.g., SMS and instant messaging replies may likewise be routed back and re-associated with a notification/message thread, or take some action such as to call a URL to accept an invitation.
The invention is operational with numerous other general purpose or special purpose computing system environments or configurations. Examples of well-known computing systems, environments, and/or configurations that may be suitable for use with the invention include, but are not limited to: personal computers, server computers, hand-held or laptop devices, tablet devices, multiprocessor systems, microprocessor-based systems, set top boxes, programmable consumer electronics, network PCs, minicomputers, mainframe computers, distributed computing environments that include any of the above systems or devices, and the like.
The invention may be described in the general context of computer-executable instructions, such as program modules, being executed by a computer. Generally, program modules include routines, programs, objects, components, data structures, and so forth, which perform particular tasks or implement particular abstract data types. The invention may also be practiced in distributed computing environments where tasks are performed by remote processing devices that are linked through a communications network. In a distributed computing environment, program modules may be located in local and/or remote computer storage media including memory storage devices.
With reference to
The computer 1010 typically includes a variety of computer-readable media. Computer-readable media can be any available media that can be accessed by the computer 1010 and includes both volatile and nonvolatile media, and removable and non-removable media. By way of example, and not limitation, computer-readable media may comprise computer storage media and communication media. Computer storage media includes volatile and nonvolatile, removable and non-removable media implemented in any method or technology for storage of information such as computer-readable instructions, data structures, program modules or other data. Computer storage media includes, but is not limited to, RAM, ROM, EEPROM, flash memory or other memory technology, CD-ROM, digital versatile disks (DVD) or other optical disk storage, magnetic cassettes, magnetic tape, magnetic disk storage or other magnetic storage devices, or any other medium which can be used to store the desired information and which can accessed by the computer 1010. Communication media typically embodies computer-readable instructions, data structures, program modules or other data in a modulated data signal such as a carrier wave or other transport mechanism and includes any information delivery media. The term “modulated data signal” means a signal that has one or more of its characteristics set or changed in such a manner as to encode information in the signal. By way of example, and not limitation, communication media includes wired media such as a wired network or direct-wired connection, and wireless media such as acoustic, RF, infrared and other wireless media. Combinations of the any of the above may also be included within the scope of computer-readable media.
The system memory 1030 includes computer storage media in the form of volatile and/or nonvolatile memory such as read only memory (ROM) 1031 and random access memory (RAM) 1032. A basic input/output system 1033 (BIOS), containing the basic routines that help to transfer information between elements within computer 1010, such as during start-up, is typically stored in ROM 1031. RAM 1032 typically contains data and/or program modules that are immediately accessible to and/or presently being operated on by processing unit 1020. By way of example, and not limitation,
The computer 1010 may also include other removable/non-removable, volatile/nonvolatile computer storage media. By way of example only,
The drives and their associated computer storage media, described above and illustrated in
The computer 1010 may operate in a networked environment using logical connections to one or more remote computers, such as a remote computer 1080. The remote computer 1080 may be a personal computer, a server, a router, a network PC, a peer device or other common network node, and typically includes many or all of the elements described above relative to the computer 1010, although only a memory storage device 1081 has been illustrated in
When used in a LAN networking environment, the computer 1010 is connected to the LAN 1071 through a network interface or adapter 1070. When used in a WAN networking environment, the computer 1010 typically includes a modem 1072 or other means for establishing communications over the WAN 1073, such as the Internet. The modem 1072, which may be internal or external, may be connected to the system bus 1021 via the user input interface 1060 or other appropriate mechanism. A wireless networking component such as comprising an interface and antenna may be coupled through a suitable device such as an access point or peer computer to a WAN or LAN. In a networked environment, program modules depicted relative to the computer 1010, or portions thereof, may be stored in the remote memory storage device. By way of example, and not limitation,
An auxiliary subsystem 1099 (e.g., for auxiliary display of content) may be connected via the user interface 1060 to allow data such as program content, system status and event notifications to be provided to the user, even if the main portions of the computer system are in a low power state. The auxiliary subsystem 1099 may be connected to the modem 1072 and/or network interface 1070 to allow communication between these systems while the main processing unit 1020 is in a low power state.
While the invention is susceptible to various modifications and alternative constructions, certain illustrated embodiments thereof are shown in the drawings and have been described above in detail. It should be understood, however, that there is no intention to limit the invention to the specific forms disclosed, but on the contrary, the intention is to cover all modifications, alternative constructions, and equivalents falling within the spirit and scope of the invention.