US 7702798 B2
A facility is described for providing contextual information automatically. In various embodiments, the facility receives an indication to start a conversation, automatically determines an identification for an item indicated by the indication, encodes the identification in a message, and sends the message so that a recipient of the message can locate the item. The facility can include a responder component and an initiator component. The initiator component can receive an identification for contextual information and an identification of the responder, initiate a conversation with the responder's computing device, and automatically encode the received indication of the contextual information in a message that it sends to the responder component so that the responder component can cause a link to the contextual information to be provided that, when selected, causes an application executing on the responder's computing device to load the contextual information. In various embodiments, the facility receives a message containing an indication of contextual information, decodes the indication to determine an identifier for the contextual information, and provides a command for loading the contextual information.
1. A computer-readable medium storing computer-executable instructions that, when executed, cause a computer system to perform a method of providing contextual information automatically, the method comprising:
receiving a Session Initiation Protocol message initiating an instant message conversation, the message containing an indication of contextual information in a header field of the message, the indication automatically added to the message when a first user initiates the conversation in association with the indicated contextual information;
decoding the indication to determine an identifier for the contextual information; and
providing a command to a second user for loading the contextual information indicated by the received message.
2. The computer-readable medium of
3. The computer-readable medium of
This application is a continuation-in-part of U.S. patent application Ser. No. 11/190,489 entitled “AUGMENTING A CALL WITH CONTEXT,” filed on Jul. 26, 2005, issued as U.S. Pat. No. 7,623,643 Nov. 24, 2009, which application is hereby incorporated by reference in its entirety.
People can use various “modalities” when conversing with others. Examples of modalities include electronic mail (“e-mail”), instant messaging, voice conferencing or messaging, video conferencing or messaging, facsimile (“fax”), web pages, web logs (“blogs”), Internet newsgroups, and so forth. In fact, a conversation may employ multiple modalities. As an example, user A may request information from user B via an e-mail message. User B may then respond to the request by telephoning user A, such as by using a device that communicates by employing Voice over Internet Protocol (“VoIP”).
People sometimes provide contextual information, such as a common reference, so that the conversation can flow smoothly. During an oral exchange, for example, a person may remind another person about a conversation the two previously had. Users generally provide the common reference explicitly when using some electronic modalities (e.g., e-mail). As an example, when a sender sends an e-mail to a recipient, the recipient can reply to the message via e-mail. In such a case, the common reference can be the subject the sender identified in the e-mail message and the original text the sender typed into the e-mail message. The recipient's e-mail system may include the subject and this original text in the response.
Contextual information is conventionally not available to users when they use multiple modalities in a conversation. As a result, when users employ multiple modalities during a conversation, they may need to reestablish the common reference before beginning a meaningful dialog. As an example, when responding by telephone, user B may need to remind user A, who sends many e-mail messages, that user A previously sent an e-mail message to user B requesting information. User B may then proceed to provide the requested information orally by telephone. Users may even need to reestablish the common reference when they use a single modality, such as when using a modality that does not involve e-mail. When the responding user does not provide contextual information, the user initiating the conversation may find it difficult to recall what the conversation is about. This is especially true when one of the users carries on multiple conversations nearly simultaneously, such as via e-mail.
In some modalities, users must provide contextual information explicitly, such as by typing the information. As an example, when user A desires to discuss the contents of a document or a database record in an application with user B, user A must inform user B how to locate the document or database or provide some other indicative information so that user B has sufficient information to begin a meaningful conversation.
A facility is described that provides contextual information automatically, such as when an instant messaging conversation starts. The facility can provide contextual information during both multi-modal and single-modal conversations. When a user (“initiator”) initiates a conversation with another user (“responder”) by selecting a command that is associated with an application corresponding to a document or other item about which the initiator desires to converse, an initiator component can transmit one or more properties to a responder component. The properties can include indications of contextual information and an identification of conversation participants (e.g., initiator and responders). When the responder component receives the message, it may interpret the properties to establish the contextual information. The contextual information can include a topic for the conversation and an identifier for the conversation. When the responder's computing device starts an application that enables the conversation to occur, the application can provide the established contextual information to the responder or enable the responder to access the contextual information. Thus, a user who initiates a conversation can cause the facility to provide contextual information automatically so that users can quickly correlate conversations, such as over time or when using different modalities.
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 as an aid in determining the scope of the claimed subject matter.
A facility is described that provides contextual information automatically, such as when an instant messaging conversation starts. In various embodiments, the facility provides contextual information during both multi-modal and single-modal conversations. When a user (“initiator”) initiates a conversation with another user (“responder”) by selecting a command that is associated with an application corresponding to a document or other item about which the initiator desires to converse, an initiator component can transmit one or more properties to a responder component. The properties can include indications of contextual information and an identification of conversation participants (e.g., responders). The initiator component operates on the initiator's computing device and the responder component operates on the responder's computing device. The initiator component and responder component can be integrated with applications or can operate independently. The initiator component may send the properties in a message associated with a data communications protocol, such as within a Session Initiation Protocol message. When the responder component receives the message, it may interpret the properties the message contains to establish the contextual information. The contextual information can include a topic for the conversation, an identifier for the conversation, and an indication of other contextual information such as an associated document or other item. When the responder's computing device starts an application that enables the conversation to occur (“conversation application”), the conversation application can provide the established contextual information to the responder. As examples, the application can provide a subject or topic and a link (e.g., a URL) that, when selected, opens a document or other item associated with the conversation that the initiator referenced when initiating the conversation. Thus, a user who initiates a conversation can cause the facility to provide contextual information automatically so that users can quickly correlate conversations, such as over time or when using different modalities.
Turning now to the figures,
The computer 100 typically includes a variety of computer-readable media that are operable with the storage unit 106. Computer-readable media can be any available media that can be accessed by the computer 100 and include both volatile and nonvolatile media and removable and nonremovable media.
The computer 100 may operate in a networked environment using logical connections to one or more remote computers. A remote computer 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 in relation to the computer 100. A logical connection can be made via a local area network (LAN) or a wide area network (WAN), but may also include other networks. Such networking environments are commonplace in homes, offices, enterprisewide computer networks, intranets, and the Internet. The computer 100 can be connected to a network through the network interface 108, such as to a wired or wireless network.
The computer 100 is only one example of a suitable computing environment and is not intended to suggest any limitation as to the scope of use or functionality of the facility. Neither should the computing system environment be interpreted as having any dependency or requirement relating to any one or a combination of the illustrated components.
The facility 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 facility include, but are not limited to, personal computers, server computers, handheld or laptop devices, cellular telephones, 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 facility may be described in the general context of computer-executable instructions, such as program modules, that are executed by a computer. Generally, program modules include routines, programs, objects, components, data structures, and so forth that perform particular tasks or implement particular abstract data types. The facility may also be employed 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.
While various functionalities and data are shown in
The techniques 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, etc., 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.
In some embodiments, the user can select a command 310 to reply with an instant message that includes contextual information. When selected, the command may cause a user interface associated with an instant messaging application to appear. An example of such a user interface appears in
The title region can provide a title associated with the conversation. As an example, the title region can indicate a subject associated with the e-mail message that was selected when the user started the instant messaging conversation.
The contextual information link region can provide a link to contextual information. When the responder selects the displayed link, the facility may provide contextual information. As an example, the facility may display the associated e-mail message, document, or so forth. In some embodiments, the facility may search for associated contextual information. As an example, the facility may provide a token or other identifier associated with the document or e-mail message that was selected when the initiator began the conversation. A component on the initiator's computing device (e.g., initiator component) could send this token or other identifier in a message. A component on the responder's computing device (e.g., responder component) can provide the identifier to the instant messaging application. The instant messaging application may provide a link or other command that the responder can select. This link may also be sent in the message the responder component received. Alternatively, the link may be determined based on the received token or identifier. When the responder selects the displayed link or other command, a component on the responder's computing device (e.g., responder component) could search the responder's computing device or other device that is connected to a network for a document or e-mail message corresponding to the token or identifier. As an example, the component on the responder's computing device could search the local message store, server message store, or other device for the corresponding document or e-mail message. Upon locating this document or e-mail message, the component on the responder's computing device could cause the responder's computing device to display the located document or e-mail message.
The message region displays messages the initiator or responder types and sends as instant messages. In some embodiments, the information displayed in the contextual information link region can be displayed in the message region. In such cases the facility may or may not also display the information in the contextual information link region. The responder can select the link or command either in the contextual information link region or in the message region.
A user can employ the edit region to type information that can be sent to another user as an instant message. In various embodiments, the user can also provide images, audio information, or other media types.
The user can employ commands indicated in the command region to, e.g., send an instant message, add attachments or information, set options, and so forth.
The menu 302 in
In various embodiments, the display diagrams can be reorganized. As examples, regions can be moved, functionality can be added or removed, etc. These changes can be made without deviating from the functionality described herein.
The responder computing device 704 can include one or more applications, such as applications 812 and 814. Some of these applications may include an API, such as API 815 that is associated with application 814. This API may provide features similar to API 809. As an example, API 815 may enable another component to control application 814. The responder computing device may also have a responder component 816 and an associated API component 817. In various embodiments, the responder component can receive contextual information from the initiator component. Upon doing so, the responder component may search for information, such as by employing API 815 to locate information and provide the located information to the user. As an example, the responder component may receive contextual information from the initiator component that indicates a particular e-mail thread. The responder component could then employ an API associated with MICROSOFT OUTLOOK to locate the last e-mail message of the thread and display the located e-mail message.
In some embodiments, applications or other components may use API 817 to control the responder component or to receive information from the responder component.
Initiator and responder computing devices 702 and 704, respectively, may employ a network 706 to communicate with one another. The network may be an intranet, the Internet, or some combination of these or other networks.
At block 904, the routine collects various properties. Examples of properties it can collect can include conversation identifiers, subject strings, and other properties that could uniquely identify a particular item or document, such as a Uniform Resource Locator (“URL”). As another example, when using MICROSOFT's Messaging API (commonly referred to as “MAPI”), the routine may collect PR_CONVERSATION_TOPIC and PR_CONVERSATION_INDEX properties. The PR_CONVERSATION_TOPIC generally identifies the subject string provided in an e-mail message by the user that first sent the e-mail message. Even when subsequent recipients change the subject string when responding, the PR_CONVERSATION_TOPIC property's value may not change. However, the subject and PR_CONVERSATION_TOPIC may not uniquely identify an e-mail message or thread.
The PR_CONVERSATION_INDEX property generally uniquely identifies messages in a thread. As an example, a first message in an e-mail thread is provided a PR_CONVERSATION_INDEX value that uniquely identifies the message. In some embodiments, the value is a binary value having six bytes and a sixteen-byte globally unique identifier (“GUID”). The PR_CONVERSATION_INDEX value for a subsequent response contains the PR_CONVERSATION_INDEX value of the first message and an appended additional value. As an example, five bytes may be appended to the PR_CONVERSATION_INDEX of the first message, resulting in a 27-byte value. Further responses append values to either the PR_CONVERSATION_INDEX value of the first message or a subsequent response, depending on which message is being responded to. By analyzing the PR_CONVERSATION_INDEX value of messages, it is possible to determine the position of each message in a thread of messages. As examples, it is possible to determine the first, last, or a particular message in a thread.
Various e-mail servers and client applications employ MAPI and this message identification scheme, including MICROSOFT EXCHANGE and MICROSOFT OUTLOOK, which are server and client application products, respectively. Thus, when an initiator begins a conversation from MICROSOFT OUTLOOK, such as by indicating to start a conversation relating to an identified e-mail message, the initiator component may collect the PR_CONVERSATION_INDEX property for sending to the responder's computing device. The initiator component may send a URL as a property identifying a document which the initiator indicates to start a conversation about. The properties can also include an indication of participants that are to be invited to the conversation. As an example, the initiator may indicate that a sender of an e-mail message is to be invited to the conversation. Alternatively, the initiator may indicate that several people are to be invited to the conversation, such as all recipients of an e-mail message.
At block 906, the routine invokes a start_conversation subroutine to start the conversation and provides one or more of the collected properties to the subroutine. The start_conversation subroutine is described in further detail below in relation to
At block 908, the routine returns.
At block 1004, the routine receives properties, such as properties provided by the application when it invoked the begin_conversation routine. In this routine and other routines described herein, the properties can be received as parameters that are provided when the routine is invoked. In various embodiments, the properties can include an indication of one or more participants (e.g., responders), identification of contextual information, and a conversation identifier. In some embodiments, a property may indicate the importance of a conversation. When a conversation is marked as having more importance than another conversation, the facility may provide additional resources to the more important conversation so that conversation message throughput can be enhanced.
At block 1006, the routine launches a conversation application. As an example, the routine may launch MICROSOFT OFFICE COMMUNICATOR, which is a conversation application that enables users to communicate in real time using text, images, audio/video, and other modalities. This conversation application also integrates instant messaging and telephone (e.g., using VoIP) functionality so that, for example, a user can initiate a telephone call using a computing device or work on a document jointly with other users while simultaneously speaking with them.
At block 1008, the routine creates a message. In various embodiments, the message may indicate to its recipients to start a conversation, such as by inviting a recipient to a conversation. As an example, the message can be a SIP INVITE message. An INVITE message is employed by SIP systems to indicate that one entity is inviting another entity to a conversation.
At block 1010, the routine encodes one or more of the properties it received at block 1004 into the message it has created. As an example, the routine may provide an identifier relating to the conversation in the message, such as a message's PR_CONVERSATION_INDEX or a URL. In some embodiments, the initiator component may also encode a PR_ENTRY_ID property that uniquely identifies a particular e-mail message or other item that the initiator desires to converse about. As an example, when the initiator starts a VoIP conversation from a particular e-mail message, the initiator component may encode that e-mail message's unique identifier as the PR_ENTRY_ID property.
At block 1012, the routine sends the message to participants indicated in the received properties.
At block 1014 the routine returns.
At block 1104, the routine receives a message. As an example, the routine may receive a message that was sent by the initiator component. The message may be a SIP INVITE message, which is an invitation to begin a conversation.
At block 1106, the routine determines whether this is the first message in a conversation. The routine can determine whether this is the first message in the conversation by either keeping track of messages in a conversation or by checking a property of the message, such as whether the message is a SIP INVITE message. If it is the first message in a conversation, the routine continues at block 1107. Otherwise, the routine continues at block 1110.
At block 1107, the routine starts a conversation application. As an example, the routine starts MICROSOFT OFFICE COMMUNICATOR. This conversation application was described in further detail above.
At block 1108, the routine determines whether the message contains properties for contextual information. As an example, the routine determines whether the message contains a property indicating a conversation identifier, such as a PR_CONVERSATION_INDEX property, URL, etc. If the message contains properties for contextual information, the routine continues at block 1112. Otherwise, the routine continues at block 1110.
At block 1110, the routine processes the received message in a normal fashion. As an example, when the message is not a first message in a conversation or does not contain properties for contextual information, the routine processes the message normally, such as by providing text in a text window associated with the conversation application, playing audio on a speaker or headset, etc.
At block 1112, the routine decodes the properties the received message contains. As an example, the routine identifies a portion of the message that indicates a PR_CONVERSATION_INDEX property, URL, etc.
At block 1113, the routine optionally locates the indicated contextual information. As an example, if the decoded property includes a PR_CONVERSATION_INDEX property, the routine may request MICROSOFT OUTLOOK (or other e-mail component) to locate an e-mail message corresponding to the PR_CONVERSATION_INDEX value, such as a first e-mail in the thread, last e-mail in the thread, or a particular e-mail message. As another example, if the decoded property includes a URL, the routine may locate a document or other item corresponding to the URL.
At block 1114, the routine provides the contextual information to the participant. As an example, the routine may provide the text in a text window associated with the conversation application. Alternatively, the routine may render audio or display a document to the user. In such a case, the routine may launch the application (e.g., e-mail client or Internet browser application) corresponding to the located item or document and provide an indication of the located item or document to the launched application. In various embodiments, the routine may add a link or other button in the launched application (e.g., conversation application) instead of displaying or otherwise rendering the document or item. As an example, the routine may provide a link or button in a window of the conversation application so that when the responder selects the link or button, the application corresponding to the located item or document is launched.
At block 1116, the routine returns.
At block 1204, the routine collects properties. As an example, the routine can collect properties that the third-party application provides to identify the conversation. As an example, the routine can collect an identifier for the record or entry that the initiator has selected.
At block 1206, the routine invokes a start_collaboration subroutine and provides an identifier, such as a GUID and other properties to the subroutine. The start_collaboration subroutine is described in further detail below in relation to
At block 1208, the routine returns.
At block 1304, the routine can receive a GUID and other properties. The GUID and other properties can identify the conversation, an item or record associated with the application, participants with whom to initiate the conversation, and so forth.
At block 1306, the routine determines whether the GUID indicates a registered application or component. As an example, the routine determines whether the GUID is registered in a registry. If the GUID is registered, the routine continues at block 1310. Otherwise, the routine continues at block 1308 where it returns an error.
At block 1310, the routine determines a path to the application or component. As an example, a registry key associated with the GUID may indicate a path to the component or application. The path indicates a location where the component can be found. Thus, the path can be a URL, a folder location, a fully qualified identification of a component using a Universal Naming Convention (also referred to as “UNC”) and so forth.
At block 1312, the routine launches the component or application indicated by the path determined at block 1310.
At block 1314, the routine provides one or more of the properties it received at block 1304 to the component that it launched at block 1312. As an example, it may provide an indication of a record or item corresponding to the conversation and a conversation identifier.
At block 1316, the routine invites the participants. As an example, the routine may cause a conversation application to invite the participants. When inviting the participants, the routine may provide the GUID and/or one or more of the properties it received at block 1304.
At block 1318, the routine returns a result to the component that invoked the routine. As an example, the routine may indicate whether the application or components successfully launched, participants were invited, or so forth.
At block 1404, the routine starts a conversation application. As an example, the routine can start MICROSOFT OFFICE COMMUNICATOR.
At block 1406, the routine receives a GUID and one or more properties. As an example, the routine receives the properties in an invitation message, such as a SIP INVITE message. The properties can indicate identifiers for a conversation, record or item, and so forth.
At block 1408, the routine determines whether the GUID is registered. As an example, the routine may determine whether the GUID is registered by checking a registry of registered components. If the GUID is registered, the routine continues at block 1410. Otherwise, the routine continues at block 1416, where it returns.
At block 1410, the routine retrieves a path associated with the GUID. As an example, a registry key associated with the GUID may provide a path at which a component is located.
At block 1412, the routine launches the component indicated by the retrieved path. In some embodiments, the component may be an application that is associated with the GUID and that corresponds to the application that caused the invitation message to be sent.
At block 1414, the routine provides one or more of the properties it received at block 1406 to the launched component. As an example, the routine may invoke an API provided by the component and provide one or more of the properties to a method of the API. The launched component or application may then load or display the indicated record or item.
At block 1416, the routine returns.
Those skilled in the art will appreciate that the logic shown in the flow diagrams and discussed above may be altered in various ways. For example, the order of the logic may be rearranged, substeps may be performed in parallel or otherwise, shown logic may be omitted, or other logic may be included, etc.
The facility can be employed with various types of components and applications, including e-mail, web sites, third-party applications, and other applications. The facility was described above as functioning with an e-mail system. Descriptions for using the facility with other application types will now be provided.
When the facility is employed with a web page or other document, the document or the application used to view the document (e.g., a word processor such as MICROSOFT WORD or a web site collaboration tool such as MICROSOFT SHAREPOINT) can be adapted for use with the facility. As an example, an ACTIVEX control, Java applet, script object, or other component can be added to a web page that, when invoked, could invoke a method of the initiator component's API to begin a conversation. This component could determine a unique identifier for the web page (e.g., by checking a URL property using a document object model) and provide the unique identifier for the web page to the initiator component. As another example, a word processor or other application can be modified to employ the facility in a manner similar to third-party applications. Alternatively, document types that support executable extensions, such as via MICROSOFT's “Smart Tags” technology, can employ the executable extensions to interact with the initiator component's API. When invoking the initiator component's API, the components used with web pages or documents can provide a responder's identification, unique identification for the web page or document, and other attributes to establish contextual information.
In some embodiments, these applications may employ the same properties as the MAPI properties described above. In various embodiments, the properties can be provided using an extensible markup language (“XML”), in binary form, in text form, or in other forms that can be communicated between computing devices using a data communications protocol.
In various embodiments, the initiator receives or sends the following properties: PR_CONVERSATION_TOPIC, PR_CONVERSATION_INDEX, PR_ENTRYID, and PR_CONVERSATION_DATA. PR_CONVERSATION_TOPIC, PR_CONVERSATION_INDEX, and PR_ENTRY_ID were discussed above. PR_CONVERSATION_DATA can be used to send additional data, such as a URL that is encoded using XML. This property can also be used to extend the facility. As an example, third-party applications may send additional data in this property that the facility itself may ignore. In some embodiments, the third-party applications can employ the PR_CONVERSATION_DATA property to send a unique identifier for a record or document. Some applications may send a subset of these properties. As an example, the facility may employ only the PR_CONVERSATION_TOPIC, PR_CONVERSATION_INDEX, and PR_ENTRY_ID properties when adapted for use with MICROSOFT OUTLOOK.
The MAPI property names can be renamed to any other property names. As examples, PR_CONVERSATION_TOPIC and PR_CONVERSATION_INDEX can be renamed to MS-CONVERSATION-SUBJECT and MS-CONVERSATION-ID properties in SIP messages, such as in header fields of SIP INVITE messages.
It will be appreciated by those skilled in the art that the above-described facility may be straightforwardly adapted or extended in various ways. As an example, the initiator and responder computing devices may be the same computing device. As another example, various messaging protocols and applications can be employed with the facility. Although the subject matter has been described in language specific to structural features and/or methodological acts, it is to be understood that the subject matter defined in the appended claims is not necessarily limited to the specific features or acts described above. Rather, the specific features and acts described above are disclosed as example forms of implementing the claims. Accordingly, the invention is not limited except as by the appended claims.