Users of computing devices (e.g., laptops, cellular phones, and personal digital assistants) often need to communicate in real time. A common form of real-time communication is provided by instant messaging services. An instant messaging service allows participants at endpoints to send messages and have them received within a second or two by the other participants in a conversation. The receiving participants can then send responsive messages to the other participants in a similar manner. To be effective, a real-time conversation relies on the participants' becoming aware of, reviewing, and responding to received messages very quickly. This quick response is in contrast to conventional electronic mail systems in which the recipients of electronic mail messages respond to messages at their convenience.
When an initiating participant wants to start a real-time conversation, that participant needs to know whether the intended participants are available to respond in real time to a message. If not, then communication via conventional electronic mail, voice mail, or some other mechanism may be more appropriate. For example, if the computers of the intended participants are currently powered off, then a real-time conversation may not be possible. Moreover, if their computers are currently powered on, but the intended participants are away from their computers, a real-time conversation is also not possible. The initiating participant would like to know the availability of the intended participants so that an appropriate decision on the form of communication can be made.
Presence services provide this availability information. The availability status of an entity such as a computer system or a user associated with that computer system is referred to as “presence information.” Presence information identifies the current “presence state” of the user. Users make their presence information available to a presence service so that other users can decide how best to communicate with them. For example, the presence information may indicate whether a user is logged on (“online”) with an instant messaging server or is logged off (“offline”). Presence information may also provide more-detailed information about the availability of the user. For example, even though a user is online, that user may be away from their computer in a meeting. In such a case, the presence state may indicate “online” and “in a meeting.”
Presence services may also store a buddy list for each user of the presence service that stores a list of participants with whom the user shares a close relationship, such as family, coworkers, and friends. Some real-time communication systems allow communications to be received from participants that are not in a user's buddy list. For example, a user may receive a telephone call from a conversation participant that the user does not know through a telephone device coupled with real-time communication software running on the user's computer system. If the user wants to have a subsequent conversation with the conversation participant, the user may not know the conversation participant's contact information. Even when a user wants to have a subsequent conversation with a conversation participant in the user's buddy list, the user may still have difficulty finding contact information for the desired conversation participant. For example, the user's buddy list may be so large that it is difficult for the user to find the desired conversation participant without sifting through hundreds of buddy list members. The user may also have many buddy list members with similar names, such as those having a last name of Smith, making it difficult for the user to quickly find a conversation participant with whom the user communicated earlier.
A method and system for tracking recent real-time conversation participants, or contacts, of a user is provided. The real-time communication system receives an indication of a conversation between a user and a conversation participant and adds the conversation participant to a list of the user's recent contacts. The real-time communication system displays the list of recent contacts to the user to select from when the user initiates a real-time conversation.
This Summary is provided to introduce a selection of 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 to limit the scope of the claimed subject matter.
A method and system for tracking recent real-time conversation participants, or contacts, of a user is provided. The real-time communication system receives an indication of a conversation between a user and a conversation participant. For example, the conversation participant may have initiated an instant messaging conversation with the user, and the real-time communication system is notified at the start of the conversation. Then, the real-time communication system adds the conversation participant to a list of the user's recent contacts. The real-time communication system maintains the contact information (e.g., email address, phone number, etc.) for conversation participants. Before adding a conversation participant to the list of recent contacts, the real-time communication system may determine whether the conversation participant is already on the list by having recently participated in a conversation with the user. For example, the user and conversation participant may have had an instant messaging conversation earlier in the day. The real-time communication system may display the list of recent contacts to the user the next time the user initiates a real-time conversation. The list of recent contacts may also be always displayed. In this way, the user is able to easily find contacts with whom the user has recently communicated, regardless of whether the contacts are members of the user's buddy list.
In some embodiments, the real-time communication system tracks recent contacts that have participated in a conversation with the user through any of multiple modes of communication. For example, a real-time communication system may allow a user to communicate with conversation participants through instant messaging, voice over IP (VoIP), video chat, audio chat, or other mode of communication. The real-time communication system maintains a list of conversation participants with whom the user has communicated through any of these modes of communication. The user can then easily find the conversation participant for subsequent communications regardless of the mode of communication used for the original communication. The real-time communication system may also store an indication of the mode of communication used for previous communications with other information about the recent contact. This allows the user, for example, to contact the conversation participant through the same mode of communication in the future.
In some embodiments, the real-time communication system receives an indication of both incoming and outgoing communications. A conversation between a user and a receiving participant can be initiated in many ways. For example, the conversation participant may send an instant message to the user, or the user may send an instant message to the conversation participant. Similarly, the user may call the conversation participant using voice over IP, or the conversation participant may initiate a video chat with the user. Regardless of how the initial conversation was initiated, the real-time communication system identifies the conversation participant and adds the conversation participant to the list of recent contacts. Although outgoing communications are usually to a conversation participant that the user already knows (e.g., a contact in the user's buddy list), incoming communications may be from an unknown user for which the user does not already have contact information. By tracking incoming communications, the real-time communication system allows the user to initiate subsequent real-time communications with conversation participants that would otherwise be difficult to contact.
In some embodiments, the real-time communication system limits the recent contacts list to a certain number of contacts. For example, the recent contacts list may be limited to a predetermined number of contacts (e.g., 10). The real-time communication system may also use a first-in, first-out (FIFO) or other similar algorithm to remove contacts from the recent contacts list to maintain the number of contacts below the limit. For example, if the recent contacts list is limited to 10 contacts, then when an 11th contact is added to the list, the first contact may be removed from the list to make room for the 11th contact. The real-time communication system may determine the contact limit dynamically, such as by observing how many conversation participants the user has in a certain period of time, or may also allow the user to configure the limit.
In some embodiments, the real-time communication system may track the frequency with which each conversation participant is contacted. For example, the real-time communication system may increment a count each time a conversation occurs between the user and each conversation participant. The real-time communication system can use this information to prevent a contact that is contacted very frequently from being removed from the recent contacts list. For example, if several new conversation participants with whom the user has only had one conversation are added to the recent contacts list, a previous member of the list may need to be removed. However, if the member to be removed is a frequent contact, then it may be more desirable to remove the oldest, less frequently contacted list member. The real-time communication system uses the stored frequency of contact information to make this kind of determination.
In some embodiments, the real-time communication system may limit the number of conversation participants added in a single conversation. Many conversations consist of multiple participants. For example, the real-time communication system may support conference calls between many conversation participants at a time. The user may not know all of the conversation participants or want all of the conversation participants added to the recent contacts list. In addition, the list may be limited in size as discussed above, and the user may not want the current list members to be removed by a single call having more participants than the list size. Therefore, the real-time communication system may only add a limited number of conversation participants to the recent contacts list, or may not add any conversation participant from a multiple participant conversation to the recent contacts list. Alternatively, the real-time communication system may add all conversation participants to the list, regardless of the size of the conversation.
In some embodiments, the real-time communication system may determine whether a conversation participant can be contacted in the future before adding the conversation participant to the list. For example, the user may receive a call from a conversation participant for which the real-time communication system cannot obtain the calling number. A user cannot subsequently contact such a conversation participant anyway, so the real-time communication may not add the conversation participant to the recent contacts list. Similarly, the user may make a call to a conversation participant through a desk phone, without using the real-time communication system, in such a way that the real-time communication system cannot determine the number that the user called. Here, too, the real-time communication system avoids adding the conversation participant to the recent contacts list because the conversation participant cannot be contacted in the future due to the lack of contact information known by the real-time conversation system.
In some embodiments, the real-time communication system sorts the recent contacts list before the list is displayed to the user. For example, the list may be sorted according to the time each conversation participant was added to the list, or by the time of the last contact with each conversation participant. Alternatively, the list may be sorted using other information such as the online status of each conversation participant. For example, the user may want to see online contacts higher in the list than offline contacts. Alternatively, the list may be sorted alphabetically or based on other attributes of the conversation participants.
In some embodiments, the real-time communication system dynamically determines attributes of users to sort the list of recent contacts based on. For example, the real-time communication system may dynamically build a group of users currently using a particular application, such as a development environment or a word processing application. The real-time communication system can sort the list of recent contacts based on this attribute. This may allow the user to find coworkers working on the same type of work, or allow a technical support representative to determine which users are using a help application and may need additional technical support.
In some embodiments, the real-time communication system is implemented as an add-on component to existing real-time communication software. For example, the real-time communication software may provide an event application programming interface (API) through which the add-on component can register an event handler to be notified of new conversations and the conversation participants. The add-on component may also provide a recent contacts list by using an API that allows the add-on component to modify the user interface of the real-time communication software. Alternatively, the add-on component may provide a separate user interface for displaying information about recent contacts.
In some embodiments, the real-time communication system transfers users from the recent contacts list to a user's buddy list. For example, a user may request that a frequent contact on the recent contacts list be added to the user's buddy list. The system may also automatically determine that a frequent contact should be added to the user's buddy list based on frequency of contact, relationship with other conversation participants on the user's buddy list, or other criteria.
The real-time communication system will now be described with reference to figures illustrating some embodiments of the functionality described above.
The computing device on which the system is implemented may include a central processing unit, memory, input devices (e.g., keyboard and pointing devices), output devices (e.g., display devices), and storage devices (e.g., disk drives). The memory and storage devices are computer-readable media that may be encoded with computer-executable instructions that implement the system, which means a computer-readable medium that contains the instructions. In addition, the data structures and message structures may be stored or transmitted via a data transmission medium, such as a signal on a communication link. Various communication links may be used, such as the Internet, a local area network, a wide area network, a point-to-point dial-up connection, a cell phone network, and so on.
Embodiments of the system may be implemented in various operating environments that include personal computers, server computers, hand-held or laptop devices, multiprocessor systems, microprocessor-based systems, programmable consumer electronics, digital cameras, network PCs, minicomputers, mainframe computers, distributed computing environments that include any of the above systems or devices, and so on. The computer systems may be cell phones, personal digital assistants, smart phones, personal computers, programmable consumer electronics, digital cameras, and so on.
The system may be described in the general context of computer-executable instructions, such as program modules, executed by one or more computers or other devices. Generally, program modules include routines, programs, objects, components, data structures, and so on that perform particular tasks or implement particular abstract data types. Typically, the functionality of the program modules may be combined or distributed as desired in various embodiments.
From the foregoing, it will be appreciated that specific embodiments of the real-time communication system have been described herein for purposes of illustration, but that various modifications may be made without deviating from the spirit and scope of the invention. For example, although real-time communication has been described in conjunction with the invention, other modes of communication, such as email, are also compatible with the teachings herein. Accordingly, the invention is not limited except as by the appended claims.