1. Field
The present disclosure relates to status information, and in one particular example, to determining the status of a user based on availability and presence.
2. Related Art
In some conventional communication systems, a user may use a status indicator to convey the user's current status to other users of the communication system. This conventional status indicator may simply indicate whether the user is logged into the service or not logged into the service. Users may further manually select their status indicator from among a set of status options, such as active, inactive, hidden, and offline.
Extensible Messaging and Presence Protocol, otherwise known as XMPP, is an instant messaging protocol designed by the XMPP Standards Foundation. An XMPP-compliant service is an example of a conventional communication system that allows users to set their status indicator. For example, users using an XMPP-compliant client to connect to an XMPP server may directly set their status indicator. This same status indicator may be seen by all other users with access to view the status indicator of the user. In another example, the XMPP service can communicate the current status of a user in a chat session to a chat partner by indicating whether the user is active, composing a message, or not available.
While conventional communication systems may be used to provide information about the user's status, they provide no contextual information based on the user's presence and availability in a mode. Presence may represent the degree to which the user is engaged in a particular mode and availability may represent the degree to which the user is willing to be interrupted while engaged in that mode. Because successful and convenient communication between users often depends on the context of the users, these conventional communication systems do not provide optimal status information.
Systems and processes for determining a contextual status of a resource, such as a user, using a contextual presence framework are described. A plurality of modes may be associated with the resource, where each mode represents a context of the resource. A first presence value of the resource may be determined for a first mode of the plurality of modes. The first presence value may be a real number representing the extent to which the resource is engaged in the first mode. A first availability value of the resource may also be determined for the first mode. The first availability value may be a real number representing the extent to which the resource is willing to be interrupted in the first mode. The first presence value and the first availability value may be stored in memory and communicated to a receiving system, such as an agent. Availability values and presence values may also be determined for other modes of the resource. For example, the modes of the resource may include a Work mode, a Home mode, a Social mode, and a Mobile mode. A contextual presence status summary having a status summary availability value and a status summary presence value may also be determined based on, for example, a weighted average of the presence values and a weighted average of the availability values of the modes of the resource.
The present application can be best understood by reference to the following description taken in conjunction with the accompanying drawing figures, in which like parts may be referred to by like numerals.
The following description is presented to enable a person of ordinary skill in the art to make and use the various embodiments. Descriptions of specific devices, techniques, and applications are provided only as examples. Various modifications to the examples described herein will be readily apparent to those of ordinary skill in the art, and the general principles defined herein may be applied to other examples and applications without departing from the spirit and scope of the present technology. Thus, the disclosed technology is not intended to be limited to the examples described herein and shown, but is to be accorded the scope consistent with the claims.
Various embodiments are described below relating to systems and processes for determining a contextual status of a resource, such as a user, using a contextual presence framework. A plurality of modes may be associated with the resource, where each mode represents a context of the resource. A first presence value of the resource may be determined for a first mode of the plurality of modes. The first presence value may be a real number representing the extent to which the resource is engaged in the first mode. A first availability value of the resource may also be determined for the first mode. The first availability value may be a real number representing the extent to which the resource is willing to be interrupted in the first mode. The first presence value and the first availability value may be stored in memory and communicated to a receiving system, such as an agent. Availability values and presence values may also be determined for other modes of the resource. For example, the modes of the resource may include a Work mode, a Home mode, a Social mode, and a Mobile mode. A contextual presence status summary having a status summary availability value and a status summary presence value may also be determined based on, for example, a weighted average of the presence values and a weighted average of the availability values of the modes of the resource.
The notification coordinator service may play an audio file, vibrate the mobile device, visually display a message indicator 102, or perform a combination of these techniques to notify the user of the received message. In order to determine the notification technique, the notification coordinator service may request the user's mode 104, presence value 106, and availability value 108. Based on the results of the requested information, the notification coordinator service may determine that the notification should be suppressed until a later time. In other circumstances, the notification coordinator service may determine that the user should be notified and in what manner, thus interrupting the user. Importantly, the user's mode 104, presence value 106, and availability value 108 are illustrated in
A mode may represent a context in which a resource, such as the user previously described, is operating. A resource may be, for example, a conference meeting room, a printing device, a user, or the like. Presence represents whether the resource is engaged in a particular mode. In one example, presence value 106 may represent the degree to which the resource is engaged in the particular mode. In another example, presence value 106 may represent a confidence level that the resource is engaged in the particular mode. Availability value 108 may represent the degree to which the resource is willing to be interrupted while engaged in that particular mode. Using this information, the notification coordinator service may determine the appropriate technique for notifying the user of the received message.
Exemplary modes include a Home mode, a Work mode, a Social mode, a Mobile mode, and a Sleep mode. A Home mode may represent a resource engaging in domestic or household-related activities, such as performing house chores or purchasing groceries. A Work mode may represent a resource engaging in professional or work activities, such as working in the office or attending a meeting. A Social mode may represent a resource engaging in social activities, such as attending a birthday party or watching a performance at a theater with friends. A Mobile mode may represent a resource being in transit from one location to another, such as walking around town or sitting in a commuter train. A Sleep mode may represent a resource, such as a user, being engaged in a sleep-related activity, such as reading in bed or sleeping. One of ordinary skill in the art will recognize that many other modes are possible and that a resource may be engaged in more than one mode at a time.
Each mode is associated with a presence value and an availability value. For example, presence value 204 and availability value 206 may be associated with a Home mode 214 of a resource. Similarly, presence value 208 and availability value 210 may be associated with a Work mode 216 of the resource. Presence value 204 may represent the degree—or extent—to which the resource is engaged in the Home mode 214. Availability value 206 may represent the degree—or extent—to which the resource is willing to be interrupted while engaged in the Home mode 214. Similarly, presence value 208 may represent the degree to which the resource is engaged in the Work mode 216. Availability value 210 may represent the degree to which the resource is willing to be interrupted while engaged in the Work mode 216.
A status summary 212 of the resource may also be determined using the presence values 204, 208 and the availability values 206, 210. In one example, a status summary presence value 218 may be determined by selecting the larger of presence values 204, 208. Similarly, a status summary availability value 220 may be determined by selecting the larger of availability values 206, 210. In another example, confidence values 222, 224 may be associated with the availability value and presence value of each mode. A weighted average may be determined using the confidence values 222, 224, the presence values 204, 208, and the availability values 206, 210. Thus, the confidence value 222 of Home mode 214 may be used to weight the presence value 204 and the availability value 206 of Home mode 214. Similarly, the confidence value 224 of Work mode 216 may be used to weight the presence value 208 and the availability value 210 of Work mode 216. The weighted presence values may be combined to determine the status summary presence value 218. The weighted availability values may be combined to determine the status summary availability value 220.
In another embodiment, contextual presence determining system 324 determines the presence value and availability value of a resource, such as a user. Contextual presence determining system 324 may be connected to network 302 (e.g., the Internet or a LAN). Contextual presence determining system 324 may communicate with devices having contributing factors, such as portable communication device 312 having image sensor 314, direction sensor 316, audio sensor 318, and proximity sensor 320 using network 302. The portable communication device 312 may be, for example, a cellular phone of the user. Similarly, contextual presence determining system 324 may communicate with calendar server 304 having a calendar sensor 326, time server 306 having a time sensor 328, home computer server 308 having a home-computer-use sensor 330, and work computer server 310 having a work-computer-use sensor 332 using network 302. It should be appreciated that contextual presence determining system 324 may also be connected directly to the contributing factors. The contributing factors may provide transition information for one or more modes of the user. The transition information may make positive or negative contributions to the availability values of multiple modes of the user and positive or negative contributions to the presence values of multiple modes of the user.
The transition information contributed by one or more contributing factors may also include a validity period, which includes a time period, a start time, and/or an end time to specify the time period for which the transition information is valid. For example, calendar sensor 326 may provide a contributing factor that is only valid for the duration of a scheduled and accepted calendar meeting.
Importantly, a user may be “present” (presence value=100) in a mode, but “completely unavailable” (availability value=0) in that same mode. For example, a user may be at their job as a restaurant waiter, fully engaged in performing work-related tasks, such as taking a customer's meal order. This user may have a presence value of 100 for the Work mode, indicating the user is fully engaged in the Work mode. Simultaneously, the same user may have an availability value of 0 in the Work mode because the user is unwilling to be interrupted while they are engaging in the work-related tasks.
With respect to the discussion of
In one example, calendar server 304 of
Transitioncalendar(mode,availability,presence)=Transitioncalendar(Work,−50,+35)
The contribution of the transition information from the calendar server 304 to the availability value and the presence value in the Work mode of the user may be based on any number of factors, such as meeting schedules (as described above), the attendees of a meeting, the number of attendees of the meeting, or the like. For example, the transition information contribution for the availability of the user may be further reduced by an additional determined value if the user is meeting with the user's manager, rather than with a coworker of the same rank as the user. This may reflect the user being less willing to be interrupted during a meeting with such a senior member of the user's work, as compared to a meeting with less senior members.
Continuing the example, location sensor 322 of
Transitionlocation
Referring to
Transitioncalendar(mode,availability,presence)=Transitioncalendar(Home,−30,0)
Similarly, location sensor 322 may also contribute transition information for the Home mode to reflect the user's location. For example, location sensor 322 may contribute a value of 5 to the presence of the user in the Home mode, and a value of 0 to the availability of the user in the Home mode. The transition information contributed by the location sensor 322 for the Home mode, illustrated in
Transitionlocation
The combination of multiple transition information contributions by various contributing factors for a user may be used to determine the availability and presence of the user for one or more modes. In this example, the transition information contributions made by calendar server 304 and location sensor 322 may be combined for each of the Work and Home modes. For example, the presence contributions and the availability contributions from the calendar server 304 and the location sensor 322 may be summed for each of the Work and Home modes. This results in a presence value of 75 for the user in the Work mode and an availability value of −50 for the user in the Work mode. Similarly, this results in a presence value of 5 for the user in the Home mode and an availability value of −30 for the user in the Home mode. These may be described as:
Work Mode(availability,presence)=Work Mode(−50,+75)
Home Mode(availability,presence)=Home Mode(−30,+5)
At block 504, the contextual presence system may determine the modes associated with the status request. There may be any number of modes associated with a user. The modes may be default modes, custom modes, or a combination of the two. The default modes may be, for example, a Home mode, a Work mode, a Social mode, and a Mobile mode. One of ordinary skill in the art will recognize that many other modes are possible. Further, one or more of the default modes may be removed, and any number of custom modes may be added to meet the needs of a user.
While a user may be associated with any number of modes, the system may limit an agent's access to the status information associated with certain modes based on various attributes. For example, it may not be relevant to a user's coworkers whether the user is engaged in a Home mode, or in any mode other than a Work mode. Thus, a user may limit agents associated with coworkers to only access the user's status information with respect to the Work mode. In this case, when a status request is received from a coworker, the contextual presence system may determine that only the Work mode should be associated with the request. If the user grants access to coworkers to access any other modes, those modes may also be associated with the request.
In another example, the contextual presence system may associate a request with all available contextual presence information relating to all available modes associated with the user. This may be useful for displaying a complete view of the user's modes, presence values, and availability values, such as in an emergency situation or to a trusted agent.
At block 506, the contextual presence system may receive transition information for multiple modes from multiple contributing factors. In one example, the contextual presence system receives the transition information in response to requesting transition information from contributing factors. In another example, the contextual presence system receives the transition information on a predetermined time interval, e.g., every minute, hourly, daily, or the like. In yet another example, the contextual presence system receives the transition information in response to a change in the context of the user detected by the contributing factor.
At block 508, the contextual presence system may determine availability values and presence values for each of the modes associated with the request based on the transition information received from the contributing factors. Alternatively, the contextual presence system may determine availability values and presence values for all modes of the user, without regard to the modes associated with the request.
At block 510, the contextual presence system may store the determined availability values and presence values for each of the modes associated with the request in memory. The information may be stored, for example, in a database or in an array data structure. In one example, the contextual presence system may store all the determined availability values and presence values in memory.
At block 512, the contextual presence system may determine what results should be communicated. For example, the system may determine that the status request includes a request for separate presence values and availability values for each requested mode. In another example, the system may determine that the status request includes a request for presence values and availability values for particular modes. In yet another example, the system may determine that the requesting agent only has permission to access the presence value and availability value of a single mode. In yet another example, the system may determine that the requesting agent only has permission to access a status summary, which combines the availability values of multiple modes and the presence values of multiple modes.
At block 514, if the contextual presence system determines that presence values and availability values were requested for one or more modes and that the requesting agent has permission to access the values, the system may communicate these values to the agent. The values may be communicated via a network, such as the Internet or a LAN, via wired communication, or locally to a subsystem of the device executing the contextual presence system.
At block 516, if the contextual presence system determines that a status summary is requested or that the requesting agent only has permission to access a status summary, the system may determine the status summary values. In one example, a presence value of the status summary may be determined by calculating a weighted average of the presence values of several modes. An availability value of the status summary may be determined by calculating a weighted average of the availability values of the same modes. In another example, a presence value of the status summary may be determined by using the highest value (or lowest value) of the presence values of a set of modes. Similarly, an availability value of the status summary may be determined by using the lowest value (or highest value) of the presence values of a set of modes. The set of modes may be determined based on the modes requested by the agent, based on the modes the agent has access to view, or the like.
At block 518, the contextual presence system may store the determined presence value and availability value of the status summary in memory. The presence value and availability value of the status summary may be stored, for example, in a database or a data structure.
At block 520, the contextual presence system may communicate the status summary, including the presence value and the availability value of the status summary, to the agent. These values may be communicated via a network, such as the Internet or a LAN, via wired communication, or locally to a subsystem of the device executing the contextual presence system.
At block 602, the system receives a status summary request. A request may be interpreted as a request for a status summary for numerous reasons. In one example, the agent may explicitly request a status summary. In another example, the agent may be restricted from accessing details of particular modes, but may have access to a status summary based on the restricted modes. In another example, the agent may be limited to only accessing a status summary. In this circumstance, the system may interpret any status request as a status summary request. One of skill in the art will readily recognize that there are numerous other circumstances in which a request may be interpreted as a status summary request, rather than a request for the details of one or more modes.
At block 604, the system determines if there are any unprocessed modes. A mode is unprocessed if the mode is associated with a user, the mode should be incorporated into the status summary of the agent requesting the status summary, and the mode has not yet been included in the determination of the status summary. In other words, the system analyzes each valid mode that should be included in the status summary.
At block 606, if there is an unprocessed mode, the system selects the mode to be analyzed. At block 608, the system determines if there are any unprocessed transitions for the selected mode. A transition is unprocessed if the transition is associated with the mode and the transition has not yet been included in the calculation of the availability value and/or presence value of the mode. In other words, the system analyzes each valid transition that should be included in the availability value and presence value of the mode.
At block 610, if there is unprocessed transition information for the selected mode, the transition information is selected. At block 612, the availability value and the presence value of the selected mode are updated using the selected transition information. For example, the transition information may make a positive or negative contribution to the availability value of the selected mode and a positive or negative contribution to the presence value of the selected mode. Returning to block 608, the system determines if there is another unprocessed transition for the selected mode. Thus, the presence value and availability value for the selected mode is determined through this process.
At block 614, the presence value and availability value of the status summary is updated using the presence value and availability value of the selected mode. In one example, the status summary is a weighted average of the modes. The weighted average allows the presence values and the availability values of certain modes to make more significant contributions to the presence value and availability value of the status summary. This may be used, for example, when a user manually provides input about the user's presence value and/or availability value. In this case, the user's direct input can be weighted much higher than that of other contributing factors.
In another example, the status summary may be updated by setting the status summary to the presence value and availability value of the mode with the highest presence value. In yet another example, the status summary may be updated by setting the status summary to the highest presence value of all modes and the highest availability value of all modes. In another example, the status summary may be updated by setting the status summary to the highest presence value of all modes and the lowest availability value of all modes.
At block 616, the presence value and the availability value of the status summary are stored in memory when there are no more unprocessed modes. The information may be stored, for example, in a database or in an array data structure. At block 618, the system communicates the presence value and availability value of the status summary. For example, the presence value and availability value of the status summary may be communicated to the agent that requested the status summary.
One particular interface of API 704, ModeAvailabilityService, returns a map of ModeAvailabilities. A ModeAvailability is a data structure that may contain a mode identifier, a presence value associated with the mode, an availability value associated with the mode, and ad hoc properties. ModeAvailabilityService may return the map of ModeAvailabilities associated with a user identification (ID) in response to a status request. Such direct requests are referred to as “direct queries.” ModeAvailabilityService may also enable a listener to be called when a ModeAvailability is changed for a particular user ID. Such requests for callbacks are referred to as “listener callbacks.”
Ad hoc properties may include data such as geo coordinates, a URL, a textual status message, or the like. The geo coordinate may provide the approximate location of the resource. The URL may refer to an image of a resource, a website homepage of a resource, or the like. The textual status message may include details relating to the status of the resource.
For listener callback APIs, agents 716 may register an event of interest with the contextual presence framework 702 through API 704. In one example, an event of interest may be any change in a presence value or an availability value of a user for one or more modes. In another example, an event of interest may be an increased availability value or presence value of a user for a specified mode. In yet another example, an event of interest may be a decrease of at least a determined amount of the availability value or presence value of a user for a specified mode. When an event of interest occurs, the contextual presence framework 702 calls back the agent 716 that registered the event of interest. This push-based model does not require that the agent 716 repeatedly poll the contextual presence framework 702 in order to detect an event of interest.
The ModeAvailabilityService API may also return ModeAvailabilities based on time. For example, the values of the ModeAvailability data structure returned may be based on the current time, a specified past time, or a specified future time (projections).
Projections enable the ModeAvailabilityService API to provide expected future presence values and availability values. The values returned to the agents 716 may be accompanied by associated confidence values. The confidence values may be expressed as a percentage, with 100% representing a high confidence that the projected presence values and availability values will be correct. Similarly, the system may return a separate confidence value for each of a mode, a presence value of a mode, and an availability value of a mode. Some contributing factors may be excluded when determining projections, such as contributing factors that do not provide insight (or do not provide reliable insight) into expected future presence values and availability values.
Calendar service 710 is one example of a contributing factor that may be used for projections. Calendar service 710 may provide accurate information about where a particular resource or user is expected to be at future days and times based on scheduled or proposed meetings. Location service 712 is another example of a contributing factor that may be used for projections. Location service 712 may provide insight into where a resource or user may be heading based on the current location, speed of travel, and direction of the resource or user.
Network access service 714 is one example of a contributing factor that may contribute to a resource's current presence values and availability values, but may be excluded when determining projections. Network access service 714 may detect information about multiple data networks that a device currently has access to, such as Bluetooth networks, cellular networks, and LANs. Similarly, network access service 714 may detect information about the type of data traffic on the networks that the device is transmitting or receiving, such as the content of websites being accessed. For example, network access service 714 may contribute transition information to a Home mode when the user is accessing a wireless network at the user's home to view news-related websites. Network access service 714 may interpret this information as the user engaging in a household-related activity, and the user being willing to be interrupted based on the nature of the activity. In contrast, if network access service 714 is not able to provide information relating to a projection of the user's presence value or availability value in any mode, network access service 714 may be excluded when determining projections.
Agents 716 may be required to register with the contextual presence framework 702 before accessing any status information. The registration process may include an authorization process. The registration process allows the framework to return customized results based on the agent 716 making the direct query or callback request. Through the registration and authorization process, specific modes of a user may be shared or hidden from certain agents 716. Thus, when an agent 716 requests a status from the contextual presence framework 702, the agent 716 will only receive a response based on the modes that the user has shared with the agent 716.
For example, display coordinator agent 722 may be authorized to receive a presence value and an availability value for all modes associated with the user, as well as a description of the modes. In another example, notification coordinator agent 720 may be authorized to receive a presence value and an availability value for a subset of the modes associated with the user, and the descriptions of the modes. In yet another example, messaging application agent 718 may only be authorized to receive a consolidated availability value and a consolidated presence value. In this case, contextual presence framework 702 may return the consolidated availability value and the consolidated presence value without a description of any associated modes to messaging application agent 718. For example, the consolidated availability value may be the largest of all availability values of modes associated with the user. Similarly, the consolidated presence value may be the largest of all presence values of modes associated with the user.
Importantly, contextual presence framework 702 allows for any number of contributing factor services 708 to be configured on mobile communication devices or servers. Each contributing factor service 708 may analyze a particular facet of a user's availability and presence, and provide this information to the contextual presence framework 702 in the form of transition information via SPI 706.
The user associated with user account 802 has a presence value of 20 and an availability value of 25 for the Work mode 810. The user has a presence value of 35 and an availability value of 80 for the Home mode 812. The user has a presence value of 0 and an availability value of 0 for the Social mode 814. The user has a presence value of 75 and an availability value of −85 for the Mobile mode 816.
The sum of the presence values of all modes associated with a user does not need to add up to any specific value. For example, a user may be simultaneously fully engaged in two modes, for example a Home mode and a Mobile mode. The sum of the availability values of all modes associated with a user also does not need to add up to any specific value. For example, a user may be fully available in both a Work mode and in a Home mode.
At least some values based on the results of the above-described processes can be saved for subsequent use. Additionally, a non-transitory computer-readable medium can be used to store (e.g., tangibly embody) one or more computer programs for performing any one of the above-described processes by means of a computer. The computer program may be written, for example, in a general-purpose programming language (e.g., Pascal, C, C++, Java) or some specialized application-specific language.
Although only certain exemplary embodiments have been described in detail above, those skilled in the art will readily appreciate that many modifications are possible in the exemplary embodiments without materially departing from the novel teachings and advantages of this invention. For example, aspects of embodiments disclosed above can be combined in other combinations to form additional embodiments. Accordingly, all such modifications are intended to be included within the scope of this invention.