Construction of global internet message threads

Methods, systems, and devices supporting global message threads are described. A thread server may receive a communication message associated with a first set of user identifiers (e.g., the author and recipients of the message) and may extract a thread identifier from the message. The thread identifier may associate the message with one or more additional messages (e.g., from the same thread of messages), where the one or more additional messages may be associated with different user identifiers. The thread server may upsert the received communication message to a stored set of messages associated with a root indicating the thread identifier. If the thread server receives a query indicating the thread identifier from a user, the thread server may retrieve all of the messages associated with the thread identifier from persistent memory based on the query, including messages that are not associated with the user identifier for the querying user.

FIELD OF TECHNOLOGY

The present disclosure relates generally to database systems and data processing, and more specifically to construction of global internet message threads.

BACKGROUND

Some cloud platforms may support user activity events such as emails, meeting invitations, or other messages. Cloud platform users may be part of a group, and some activity events for each user may be presented to that user in a thread. For example, a user may view the messages (e.g., emails) exchanged between a first group of users and a second group of users if the user is included on the messages (e.g., as an author or recipient of the message). However, the user may not view the messages on which the user is not included. For example, a user—such as a group manager—may not be included on a message (e.g., as either the author or a recipient) and accordingly may not view the message, as the thread view for the user may be specific to that user's message inbox. Accordingly, the user may miss important information contained in messages that are exchanged between the first group of users and the second group of users but do not include the user. Additionally, analysis of the messages by the user may be inaccurate due to the user-specific message view.

DETAILED DESCRIPTION

Some cloud platforms may use group (e.g., global) threads to organize (e.g., store, display, etc.) messages. A thread may include messages (e.g., emails, calendar invites, instant messages, text messages, etc.) that are associated with users (e.g., senders, such as the author of the message; recipients, such as users in a recipient list or carbon copied (CC′d) on the message; etc.). In some examples, a first set of messages associated with a thread may be visible to a user, while a second set of messages associated with the thread may not be visible to the user. For example, a message associated with the thread may not be associated with the user (e.g., the user may be removed from the recipients list), and the message may accordingly not be visible to the user (e.g., in an inbox for the user). A message that is not visible to the user may cause the user to miss important information (e.g., a customer purchase) and/or engage in redundant work (e.g., send a duplicate message to a customer). In some cases, a message (e.g., an email) may be interpreted (e.g., classified). Interpreting a message without context may lead to an incorrect or inaccurate interpretation. In some examples, incorrectly or inaccurately interpreting a message may negatively affect individuals and/or organizations. For example, a first user may ask a customer if the customer is satisfied, and a second user may ask the same customer if the customer is not satisfied. The customer may reply to both the first and the second users with a short response message (e.g., “yes” or “no”), which may lead to an incorrect or inaccurate interpretation of the response message (e.g., as the same natural language text in the response messages may have drastically different meanings).

A message threading system may implement global (e.g., group) message threads to organize messages. Global message threads may improve system efficiency, reduce redundant work, improve message interpretation, or a combination thereof. A communication message may be received at a server, and the communication message may include a set of user identifiers. The set of user identifiers may be associated with transmitting the communication message (e.g., a message sender) or receiving the communication message (e.g., a message recipient). A thread identifier may be extracted from the communication message, and the thread identifier may be used in storing the communication message in persistent memory (e.g., a database, a solid state drive, a hard disk drive, etc.). In some examples, the communication message and/or metadata associated with the communication message may be stored in a data structure (e.g., a tree), and the thread identifier may indicate a tree root (e.g., a root node) associated with the message. If a tree root corresponding to the thread identifier is not identified in the persistent memory, a new tree may be created with a root that corresponds to the thread identifier. If a tree root corresponding to the thread identifier is identified, the communication message may be associated with (e.g., inserted into or upserted to) the tree. In some examples, one or more additional communication messages may be stored with the communication message. For example, the one or more additional communication messages may also be associated with the thread identifier, and the threading system may store the communication message with the one or more additional communication messages based on their common thread identifier (e.g., as part of the same data structure).

In some cases, a global message thread may be constructed and/or displayed based on one or more thread identifiers. For example, a query message may be received (e.g., from a user device), and the query message may indicate a thread identifier. In some cases, a data structure may be identified based on the thread identifier. Data (e.g., a communication message, communication message metadata, etc.) may be retrieved from persistent memory based on the thread identifier. In some cases, global message threads and/or the storage of communication messages associated with global message threads may improve system efficiency. For example, a user may efficiently retrieve all communication messages associated with a thread identifier, regardless of whether the user is included on the communication messages (e.g., whether the user is the author or a recipient of any particular message in the thread). Additionally or alternatively, storing communication messages in a graph (e.g., a tree) may support efficient graph operations (e.g., insert, delete, search, iterate, etc.). In some examples, the storage of communication messages in a tree with a root that is associated with a thread identifier may provide logarithmic run-time search complexity (e.g., O(log(n)) with respect to the number of messages stored in the tree. In some additional or alternative cases, global message threads and/or the way in which communication messages are stored may improve message interpretations. For example, storing communication messages based on a thread identifier may provide message context in a comprehensive and efficient manner.

Aspects of the disclosure are initially described in the context of an environment supporting an on-demand database service. Aspects of the disclosure are further described with respect to a message storing system, a user device including a user interface, a threading platform, a message context derivation system, and a process flow. Aspects of the disclosure are further illustrated by and described with reference to apparatus diagrams, system diagrams, and flowcharts that relate to construction of global internet message threads.

FIG. 1illustrates an example of a system100for persistent storage of global communication message information that supports construction of global internet message threads in accordance with aspects of the present disclosure. The system100includes cloud clients105, contacts110, cloud platform115, and data center120. Cloud platform115may be an example of a public or private cloud network. A cloud client105may access cloud platform115over network connection135. The network may implement transfer control protocol and internet protocol (TCP/IP), such as the Internet, or may implement other network protocols. A cloud client105may be an example of a user device, such as a server (e.g., cloud client105-a), a smartphone (e.g., cloud client105-b), or a laptop (e.g., cloud client105-c). In other examples, a cloud client105may be a desktop computer, a tablet, a sensor, or another computing device or system capable of generating, analyzing, transmitting, or receiving communications. In some examples, a cloud client105may be operated by a user that is part of a business, an enterprise, a non-profit, a startup, or any other organization type.

Contacts110may interact with the cloud client105in person or via phone, email, web, text messages, mail, or any other appropriate form of interaction (e.g., interactions130-a,130-b,130-c, and130-d). The interaction130may be a business-to-business (B2B) interaction or a business-to-consumer (B2C) interaction. A contact110may also be referred to as a customer, a potential customer, a lead, a client, or some other suitable terminology. In some cases, the contact110may be an example of a user device, such as a server (e.g., contact110-a), a laptop (e.g., contact110-b), a smartphone (e.g., contact110-c), or a sensor (e.g., contact110-d). In other cases, the contact110may be another computing system. In some cases, the contact110may be operated by a user or group of users. The user or group of users may be associated with a business, a manufacturer, or any other appropriate organization.

Data center120may include multiple servers. The multiple servers may be used for data storage, management, and processing. Data center120may receive data from cloud platform115via connection140, or directly from the cloud client105or an interaction130between a contact110and the cloud client105. Data center120may utilize multiple redundancies for security purposes. In some cases, the data stored at data center120may be backed up by copies of the data at a different data center (not pictured).

Subsystem125may include cloud clients105, cloud platform115, and data center120. In some cases, data processing may occur at any of the components of subsystem125, or at a combination of these components. In some cases, servers may perform the data processing. The servers may be a cloud client105or located at data center120.

The system100may support the construction of global internet message threads. In some cases, the data center120may include multiple databases, servers, or other types of systems. For example, the data center120may include a thread server and/or a data store. In some cases, the thread server may support the construction of global internet message threads. The cloud platform115or a thread server of subsystem125may store communication messages in a data store (e.g., in persistent memory). The thread server may receive a query message from a user device (e.g., a cloud client105or a contact110) and may additionally or alternatively retrieve one or more communication messages from a data store. The construction of global internet message threads may support improved message storing, viewing, and interpretation.

In some other system, some messages associated with a thread may not be associated with a particular user, even if other messages associated with the thread are associated with the user. For example, the user may be removed from the recipients list for one or more messages of the thread, and the user correspondingly may not view the messages. In some cases, not viewing the messages may cause the user to miss important information (e.g., a customer purchase) and/or to engage in redundant work (e.g., send a duplicate message to a customer). In some cases, a message (e.g., an email) may be interpreted (e.g., classified). Interpreting a message without context may lead to an incorrect or inaccurate interpretation. In some examples, incorrectly or inaccurately interpreting a message may negatively affect individuals and/or organizations. For example, analyzing the contents of a message independent of its context may lead to inaccurate analysis results.

In contrast, the system100may implement the construction of global internet message threads, which may improve system efficiency, reduce redundant work, and improve message interpretation. A thread server of subsystem125may improve system efficiency by storing messages in a global thread. For example, the thread server may extract or otherwise identify a thread identifier associated with one or more messages and may store the one or more messages based on the thread identifier. A user device (e.g., a contact110) may present a global thread (e.g., visually, audibly, tactilely, etc.) and thereby reduce redundant work. For example, the user device may provide a user with a global view of a message thread, enabling the user to quickly identify completed work or tasks that are associated with the thread. A thread server of subsystem125may improve message interpretation by providing and/or considering a global message context (e.g., scope). For example, the thread server may consider messages that are associated with different groups of users when interpreting (e.g., classifying using natural language processing (NLP) or other artificial intelligence (AI) techniques) a message, and thereby improve the interpretation of the message.

The construction of global internet message threads may support global views of communications across a team of users. For example, users of computing and cloud platforms may work within teams, and the users may communicate with groups of end users (e.g., customers). In some cases, users may desire a team (e.g., global) perspective of communications associated with a group of end users. The team perspective may provide users with team-level information in a quick and reliable manner. For example, a user may receive a notification or indication that an end user replied to a message that was sent to the end user by a different team user. The user may view information association with the message in a global thread view, allowing the user to quickly and accurately respond to an end user reply in response to the message (e.g., even if the user does not send or receive the message or the end user reply).

FIG. 2illustrates an example of a message storing system200that supports construction of global internet message threads in accordance with aspects of the present disclosure. The message storing system200includes a thread server205, a user device210, and a data store215. The message storing system200may implement aspects of a system100as described with reference toFIG. 1. For example, a thread server205and/or a data store215may be an examples or components of a data center120. A user device210may implement aspects of subsystem125as described with reference toFIG. 1.

The thread server205may represent aspects of an application server, communication server, data processing server, database server, cloud-based server, server cluster, virtual machine, container, or some similar data processing device or system. The thread server205may communicate with other devices such as the data store215and/or the user device210. The thread server205may receive a communication message220that includes a first set of user identifiers associated with transmitting (e.g., sending) and/or receiving the communication message220. In some cases, the communication message220may be received from a user device (e.g., a user device210), a server (e.g., a mail server), or some similar device or system. For example, the message storing system200may receive a stream of communication messages220in real-time (or pseudo-real-time) from multiple sources and the thread server205may process the stream of communication messages220in real-time (or pseudo-real-time). For example, the thread server205may extract a thread identifier from a communication message220.

In some implementations, the thread server205may extract a thread identifier from metadata (e.g., header information) associated with the communication message220. Additionally or alternatively, the thread server205may determine a thread identifier associated with the communication message220based on an automated analysis (e.g., a machine-learned or user-declared analysis) of data and/or metadata associated with the communication message220. The thread identifier may associate the communication message220with one or more additional communication messages stored in persistent memory (e.g., a data store215). For example, the communication message220and the one or more additional communication messages may all be part of a same group of messages descending from a same original message (e.g., along any chain of responses in the thread). In some cases, the one or more additional communication messages may include a second set of user identifiers associated with transmitting and/or receiving at least one of the one or more additional communication messages. The second set of user identifiers may be different from the first set of user identifiers.

The communication message220and the thread identifier may be stored in persistent memory (e.g., a data store215). For example, the thread server205may store the thread identifier and communication message220or an indication of the communication message220in persistent memory. In some cases, the thread server205may identify a data structure (e.g., a graph) and/or a location (e.g., a root node) associated with the thread identifier and may store the communication message220in the identified data structure and/or location. Using the thread identifier to identify a data structure and/or a location may improve system performance. For example, identifying a root node based on a thread identifier may provide a constant run-time complexity for identifying a data structure for storing or retrieving the communication message220.

FIG. 3illustrates an example of a user device305including a user interface310that supports construction of global internet message threads in accordance with aspects of the present disclosure. In some cases, the user interface310may provide multiple data views. For example, user interface310-amay display thread315-a, sub-threads320-aand320-b(which may be referred to as “fibers” of the thread), and messages330-a,330-b,330-c,330-d, and330-e(e.g., communication messages, such as emails, calendar invites, social media posts, forum posts, voice calls, short message service (SMS) text messages, or the like). User interface310-bmay display thread315-b, condensed thread325(which may be referred to as a collapsed thread, a condensed fiber, or a “fibor”), and the messages330-a,330-b,330-c,330-d, and330-e. In some cases, thread315-aand thread315-bmay correspond to the same thread, but may be displayed differently on user interface310-aand user interface310-b. However, it is to be understood that the user interfaces310represent an example user interface, and other user interface configurations are supported by the techniques and processes described herein.

The user interfaces310may support global threads with reference toFIGS. 1 and 2. In some cases, a user may view and interact with a user interface310and gain an understanding of a thread315and the messages330associated with the thread. For example, thread315-aand thread315-bmay correspond to different visualizations of the same thread containing the same messages330(e.g., communication messages, such as internet messages in an internet message format). In some cases, a user may view user interface310-ato inspect the interactions between different groups of users in the thread315-a. For example, the user may view user interface310-aand observe sub-thread320-aand sub-thread320-b. In some examples, multiple sub-threads may indicate that one or more messages330have different user identifiers associated with the one or more messages300. As illustrated by the structure of thread315-a(e.g., two sub-threads320, message330-cand message330-dboth stemming from message330-b, etc.) in user interface310-a, the same set of users is included on messages330-aand330-b, but different sets of users are included on messages330-cand330-d. However, both messages330-cand330-dwere sent in reply to message330-b. The structure of a thread may provide useful information to a user, such as what types of messages create a split in a thread, what types of messages end a thread, which groups of users communicate most frequently, etc.

In some cases, a user may view user interface310-bto obtain a temporal global view of thread315-b. User interface310-bmay display the messages330in chronological order, regardless of whether the messages330are associated with the same user identifiers. For example, one or more user identifiers associated with message330-cmay be different than one or more user identifiers associated with message330-d, but these messages330may be displayed in order based on message330-cbeing associated with an earlier timestamp than message330-d(i.e., the sub-threads320-aand320-bare interleaved in the condensed thread325). The user interface310may improve a user experience by displaying messages330-a,330-b,330-c,330-d, and330-eto a user even if the user is not associated with all of the messages330in the thread. For example, a user operating the user device305may not send or receive message330-c. In an inbox for the user (e.g., an email inbox), the user may not be able to view message330-c. In such cases, the user may perform redundant work and send a duplicate message (e.g., containing the same content as message330-c) based on not seeing message330-cand its context within the thread. However, by displaying a global view of the thread in the user interface310, rather than displaying a user-specific view, the user device305may mitigate user inefficiencies and improve the user experience.

The user interface310may additionally support privacy rules or policies which may improve user experience. In some examples, a user may opt-out, not opt-in, or otherwise be excluded from a global message thread. For example, the user may be associated with message330-d, and the user may opt out of the global message thread. An indication of message330-dmay be displayed via user interface310(e.g., based on metadata for the message330-dor messages in response to message330-d), but the contents of message330-dand/or metadata associated with message330-dmay be removed, blurred, not persisted, or otherwise obfuscated to ensure the privacy of the user. Therefore, the user interface310may improve user experience through the support or enforcement of privacy policies.

The contents displayed in the user interface310may be generated based on a local application, a backend application, a web-based application, or some combination thereof. In some cases, the user device310may query a database (e.g., persisting information for the global thread in memory) for the messages330associated with a thread. Based on the messages330being stored in the database with an association to the thread identifier, the database may efficiently identify all of the messages330associated with the thread and may return these messages330in response to the query. This data structure (e.g., including thread identifier-based roots and message-based trees) may support low latency querying of messages330for a thread. Additionally, if a new message330is received at the database or a thread server corresponding to a thread currently being displayed in the user interface310, the database or thread server may automatically push the new message330for display in the user interface310. This automatic updating may support a real-time view of messages330in a thread, allowing a user to quickly identify new messages330even if the user is not included as the sender or a recipient of the new messages330.

FIG. 4illustrates an example of a threading platform400that supports construction of global internet message threads in accordance with aspects of the present disclosure. The threading platform400includes a shared activity store405, an onboarding component410, a storage layer415, a service layer425, and real-time microservices440, which may be examples or components of one or more servers and/or cloud platforms as described with reference toFIGS. 1 and 2. The software threading platform400includes a user device430and messages435. The user device430and/or messages435may be examples of or associated with cloud clients105or contacts110as described with reference toFIG. 1.

In some cases, the threading platform400may support the onboarding of a group and/or user. Group onboarding may support batch processing. For example, a policy, procedure, or law (e.g., the general data protection regulation (GDPR)) related to data associated with the group may change, and batch processing may support the rapid alteration and/or verification of the data associated with the group. In some examples, the data associated with the group may be stored in in shared activity store405. The onboarding component410may read the data and/or store the data in the storage layer415. The onboarding component410and/or the storage layer415may, in some examples, alter (e.g., obfuscate, encrypt, anonymize, etc.) the data in support of the policy, procedure or law.

In a particular example, a group (e.g., a tenant of a multi-tenant database system) may activate global threading. Prior to activation, communication messages stored for the group may not be stored with associations to any particular thread. The onboarding component410may perform bulk processing to retrieve the communication messages (e.g., from the shared activity store405) and identify thread identifiers for each of the communication messages. The onboarding component450may perform batch processing450(e.g., based on available processing resources, as a background process, etc.) to reduce the overhead associated with activating global threading for previously stored communication messages. In some cases, information associated with the data (e.g., contexts, interpretations, insights, etc.) may be stored in thread insight store420with associations to the relevant thread identifier. The onboarding component410may batch processes, jobs, or queries to support the efficient processing and access to data associated with the storage layer415. The threading platform400may additionally or alternatively support offline data processing to improve system efficiently and user experience. Once onboarding is complete (e.g., all historical communication messages for the group are stored with associations to the relevant thread identifiers) or during onboarding, the threading platform400may handle new communication messages using real-time streaming455.

The threading platform400may support a rapid (e.g., real-time or pseudo real-time) message stream processing using a real-time microservice440. Message stream processing may support on-the-fly thread-based storage and message context interpretation. For example, messages435may be processed by the real-time microservice440as the messages435enter or exit the threading platform400(e.g., as the messages435are transmitted or received). The real-time microservice440may improve user experience by providing real-time message notifications, reminders, or insights. The real-time microservice440may additionally or alternatively provide redundancy within the threading platform400. For example, the real-time microservices440may be configured to provide a desired level of redundancy, thereby preventing a single point of failure and lowering the risk of failure and/or errors associated with the threading platform400(e.g., failing to store communication messages435, failing to identify a relevant thread identifier, etc.).

A user device430may request (e.g., query) the service layer425. For example, a user device430may transmit a query message to the service layer425, and the query message may indicate a thread identifier. The query message may additionally or alternatively be associated with one or more communications messages, and the service layer425may provide a response to the user device430. In some examples, the response may include information related to the thread identifier. For example, the service layer425may query the storage layer415based on the thread identifier and/or the query message. The storage layer415may provide the service layer425with a communication message and/or communication message insights in response to the query. For example, the threading platform400may compute insights445for a thread based on one or more of the communication messages associated with the same thread identifier. The service layer425may provide one or more communication messages and/or the insights associated with the one or more communication messages to the user device430(e.g., via an API, such as a Cl API, a timeline API, or any other form of API).

In some cases, the threading platform400may support stateful global message threads. For example, the storage layer415or thread insight store420may contain data associated with global message threads that may correspond to the state of a global message thread. In some examples, the storage layer415may update the data (e.g., the state) associated with a global message thread in a dynamic fashion. The state of a global message thread may provide thread context that may be used in message and/or thread interpretation. In some examples, the state of the global message thread may be based on an NLP analysis of one or more communication messages stored with an association to the thread.

Based on the onboarding component410and the real-time microservice440, the threading platform400may support real-time, historical, and onboarding implementations. The threading platform400may also support querying of timeline-based information for threads. For example, the threading platform400may support efficiently querying an entire thread out of the persistent memory, counts of messages in a thread, counts of insights associated with a thread, a leading edge (e.g., a most recent message) of a thread, a collapsed view of the thread, the different sub-threads of a thread, or any combination thereof.

FIG. 5illustrates an example of a message context derivation system500that supports construction of global internet message threads in accordance with aspects of the present disclosure. The message context derivation system500includes a number of user devices505and a thread server510, which may be examples or components of one or more servers and/or cloud platforms as described with reference toFIGS. 1 through 4. For example, the user devices505may be examples of or associated with cloud clients105, contacts110, a user device210, a user device305, or a user device430, and the thread server510may be an example or component of a data center120, a cloud platform115, a thread server205, or a threading platform400.

The thread server510may represent aspects of an application server, communication server, data processing server, database server, cloud-based server, server cluster, virtual machine, container, or some similar data processing device or system. The thread server510may communicate with other devices such as user device505-aand/or user device505-b. The thread server may receive a number of messages515. In some examples, the messages515may be associated with a thread identifier, and messages515may be associated with a different set of user identifiers than other messages515. For example, message515-amay be sent from a first user to a second user, message515-bmay be sent from the second user to the first user in reply to message515-a, and message515-cmay be sent from the first user to a third user in reply to message515-a. In some cases, the thread server510may perform a message analysis520to determine context for one or more messages. For example, the thread server510may receive messages515-a,515-b, and515-cand may determine the chronology of the received messages. In some examples, the determined chronology may be based on metadata associated with the messages (e.g., a timestamp indicating a message transmission time). The thread server510may additionally or alternatively determine that messages515-a,515-b, and515-care associated with the same thread identifier. In some examples, the thread server510may determine that the messages are associated with the same thread identifier based on metadata (e.g., a header value) associated with the messages. Determining information (e.g., message context, message chronology, message thread identifiers, etc.) based on metadata associated with messages may support real-time or pseudo real-time processing of messages.

In some cases, the thread server510may interpret (e.g., classify) one or more messages515based on context associated with the one or more messages. For example, the thread server510may interpret message515-cbased on the determined chronological context for the messages (e.g., in which message515-cwas transmitted after messages515-band515-a). In some additional or alternative cases, the thread server may interpret or re-interpret message515-bbased on the determined chronological context (e.g., in which message515-bwas transmitted before message515-cand after message515-a). Interpreting messages with their chronological contexts may provide more accurate insights into the messages. For example, the thread server510may determine which messages and what types of messages are likely to receive a positive reply. In some cases, a global message thread may support broader message contexts than a system implementing user-specific message threads (e.g., an email inbox, where user-specific messages are displayed). For example, a global message thread context (e.g., a group-level scope, a group thread, a global thread, etc.) may provide a more insightful context than a user message thread context.

The message analysis520may identify messages (e.g., emails) that meet or exceed a risk threshold associated with an organizational group. For example, the organizational group may be associated with a risk threshold that corresponds to the flagging of messages (e.g., emails) sent to a user outside the organizational group. In some cases, messages sent from a user associated with the organizational group and/or an email account associated with the organizational group may be flagged. In some cases, a context related to the organizational group may be used to determine whether an email should be flagged. In some additional or alternative cases, the organizational group as well as or instead of the message may be flagged when the identified message exceeds or meets the risk threshold. Message and/or group flagging may reduce organizational risk.

In some cases, the message context derivation system500may support the creation and/or storing of data that may be used in a machine-learning model. For example, the thread server510may track data (e.g., message chronology, thread outcome, a number of messages sent in association with a message thread, etc.) associated with a global message thread. In some cases, the data associated with the global message thread may correspond to data features and/or data labels. For example, the outcome of a global message thread may correspond to a data label, and the context of a message may correspond to the features of a global message thread. Data features and data labels may be used in a machine-learning model to generate and/or improve system predictions, suggestions, notifications, warnings, or any combinations thereof.

In a specific example, the thread server510may analyze the global thread for messages515-a,515-b, and515-c. For example, the thread server510may implement one or more rules (e.g., user-defined or machine-learned rules) to determine a scope for context-based analysis525. The thread server510may receive message515-cand may perform message analysis520to classify message515-c. In some cases, the thread server510may analyze all messages515in a thread to determine the context for message515-c. In other cases, the thread server510may analyze all messages515in a sub-thread of the thread to determine the context for message515-c. In yet other cases, the thread server510may implement an N−1 context for context-based analysis525, where a new message is analyzed in the context of its parent message (e.g., message515-cis analyzed in the context of message515-a). Additionally or alternatively, message515-amay be analyzed—or re-analyzed—in the context of message515-c(and, in some cases, in the context of one or more other messages515in the thread). In some examples, the context-based analysis525may be performed across sub-threads. For example, message515-cmay be analyzed in the context of other messages that are in reply to message515-a, such as message515-b. While the context-based analysis rules described herein provide some example rules, it is to be understood that other rules are possible and supported according to the described techniques.

The message analysis520may involve metadata analysis, NLP analysis, or some combination thereof. The text of the messages515may be analyzed (e.g., using keyword extraction or other NLP techniques) to determine insights about the messages515or classifications of the messages515. The message context derivation system500may integrate a labeling system for labeling messages515, sub-threads, or threads based on the message analysis520. These labels may be stored in persistent memory or determined on-the-fly for message, sub-thread, or thread analysis. For example, the message analysis520may determine stateful thread insights that may be iterative and/or change over time. For example, a thread may be labeled with a particular state based on NLP of the messages515in the thread, where states could include “open,” “closed,” “requested,” “delivered,” “accepted,” or some combination of these or other defined states. By labeling at the thread-level, as opposed to the message-level, the thread server510may establish conversational context that applies to more than singular emails. Additionally or alternatively, speech act labels applied to a thread may uncover patterns in business communications beyond singular emails. For example, the thread server510may perform speech act tagging, vectorization, and clustering (e.g., using a K-means algorithm) to determine clustered states of threads following speech act patterns. In some cases, the thread server510may generate thread summaries based on analysis of multiple (e.g., all) messages515in a thread.

An example of message-level labeling may involve determining if a message515includes an objection (e.g., an objection expressing a barrier preventing a sale). Performing the NLP analysis on multiple messages in a thread (e.g., rather than just the message of interest) may improve the accuracy of objection identification for the message of interest. In some cases, the message analysis520may involve machine-learned algorithms for deriving insights from message. For example, the thread server510may receive data points reflecting the objection taxonomy for an organization's messages, apply machine-learning (e.g., weakly supervised learning), and build a model that identifies an objection based on a new message and the new message's parent message. By including the context of other messages515within the thread for analyzing a target message515, the message analysis520may enrich the information used for classifying the text of the target message515.

FIG. 6illustrates an example of a process flow600that supports construction of global internet message threads in accordance with aspects of the present disclosure. The process flow600includes a thread server605, a user device610, and persistent memory615. These may be examples of the corresponding devices described with reference toFIGS. 1 through 5. The thread server605may construct global internet message threads that are stored in persistent memory615and displayed at the user device610. Alternative examples of the following may be implemented, where some steps are performed in a different order than described or are not performed at all. In some cases, steps may include additional features not mentioned below, or further steps may be added.

At620, the thread server605may receive a communication message that includes a first set of user identifiers associated with transmitting the communication message, receiving the communication message, or both. For example, the first set of user identifiers may correspond to the author of the communication message and each of the recipients of the communication message. In some cases, the communication message may be received from the user device610. At625, the thread server625may extract a thread identifier from the communication message. In some cases, the thread identifier may associate the communication message with one or more additional communication messages stored in persistent memory615(e.g., at a database system, a data store, a data lake, a cloud-based storage system, etc.). For example, the thread identifier may indicate that both the communication message and the one or more additional communication messages are part of a global message thread. The one or more additional communication messages may include a second of user identifiers associated with transmitting at least one of the one or more additional commutation messages, receiving at least one of the one or more additional communication messages, or both. For example, the communication message may be associated with a set of users that is different than a set of users associated with the one or more additional communication messages.

Extracting the thread identifier may involve parsing the communication message or metadata for the communication message. For example, the communication message may be an example of an internet message (e.g., an email, a calendar invite, etc.) in an internet message format (e.g., Request for Comments (RFC) 2822 internet message format). The parser may parse the internet message header to determine a references header field (e.g., a left-anchored first message identifier in the references header). This parsed value may correspond to the thread identifier for the communication message. In other cases, extracting the thread identifier may involve an NLP analysis of the communication message or a machine-learned analysis of the communication message (e.g., determining threads based on similar authors, recipients, subject lines, headers, etc.).

At630, the thread server605may store the communication message and the thread identifier with an indication of the communication message in persistent memory615. For example, the thread server605may store the communication message in a data structure (e.g., a tree) that is associated with the thread identifier. At635, the thread server605may receive a query message from the user device610that indicates the thread identifier. This query message may be associated with a user identifier of the second set of user identifiers. However, the first set of user identifiers may not include this user identifier. For example, the user identifier may correspond to a user that is neither a recipient nor a sender of the communication message (although the user may be a sender or recipient of one or more other messages in the global message thread).

At640, the thread server605may retrieve the communication message and the one or more additional commutation messages from the persistent memory615. In some cases, the communication message and the one or more additional communication messages may be retrieved based on the query message indicating the thread identifier. For example, the thread server605may retrieve the communication messages that are associated with the thread. In some examples, the thread server605may retrieve all the communication messages that are associated with the thread identifier (e.g., a global thread identifier). For example, the thread server605may retrieve the communication message for the querying user even though the querying user is neither a recipient nor a sender of the communication message. Storing and/or retrieving communication messages based on a global thread identifier may reduce query latency, improve message retrieval speed, and allow for users across a team to view a thread of messages at a global-level, rather than a user-level. While email providers may store and display user-specific views of messages based on privacy constraints, the thread server605may support storing and displaying team-specific views of messages for improved collaboration, coordination, and insights.

FIG. 7shows a block diagram700of an apparatus705that supports construction of global internet message threads in accordance with aspects of the present disclosure. The apparatus705may include an input module710, a thread manager715, and an output module735. The apparatus705may also include a processor. Each of these components may be in communication with one another (e.g., via one or more buses). In some cases, the apparatus705may be an example of a user terminal, a database server, or a system containing multiple computing devices.

The thread manager715may include a message component720, a thread identifier component725, and a query component730. The thread manager715may be an example of aspects of the thread manager805or910described with reference toFIGS. 8 and 9.

The message component720may receive a communication message including a first set of user identifiers associated with transmitting the communication message, receiving the communication message, or both. The thread identifier component725may extract a thread identifier from the communication message, where the thread identifier associates the communication message with one or more additional communication messages stored in persistent memory, the one or more additional communication messages including a second set of user identifiers associated with transmitting at least one of the one or more additional communication messages, receiving at least one of the one or more additional communication messages, or both.

The message component720may store, in the persistent memory, the communication message and the thread identifier with an indication of the communication message. The query component730may receive, from a user device associated with a user identifier of the second set of user identifiers, a query message indicating the thread identifier, where the first set of user identifiers does not include the user identifier. The message component720may retrieve, from the persistent memory and in response to the query message, the communication message and the one or more additional communication messages based on the query message indicating the thread identifier.

The output module735may manage output signals for the apparatus705. For example, the output module735may receive signals from other components of the apparatus705, such as the thread manager715, and may transmit these signals to other components or devices. In some specific examples, the output module735may transmit output signals for display in a user interface, for storage in a database or data store, for further processing at a server or server cluster, or for any other processes at any number of devices or systems. In some cases, the output module735may be a component of an I/O controller915as described with reference toFIG. 9.

FIG. 8shows a block diagram800of a thread manager805that supports construction of global internet message threads in accordance with aspects of the present disclosure. The thread manager805may be an example of aspects of a thread manager715or a thread manager910described herein. The thread manager805may include a message component810, a thread identifier component815, a query component820, a header analysis component825, an existing root storage component830, a new root storage component835, a classification component840, a sub-thread component845, and a user identifier component850. Each of these modules may communicate, directly or indirectly, with one another (e.g., via one or more buses).

The message component810may receive a communication message including a first set of user identifiers associated with transmitting the communication message, receiving the communication message, or both. In some cases, the first set of user identifiers includes an author of the communication message and each recipient of the communication message.

The thread identifier component815may extract a thread identifier from the communication message, where the thread identifier associates the communication message with one or more additional communication messages stored in persistent memory, the one or more additional communication messages including a second set of user identifiers associated with transmitting at least one of the one or more additional communication messages, receiving at least one of the one or more additional communication messages, or both.

The message component810may store, in the persistent memory, the communication message and the thread identifier with an indication of the communication message. The query component820may receive, from a user device associated with a user identifier of the second set of user identifiers, a query message indicating the thread identifier, where the first set of user identifiers does not include the user identifier. The message component810may retrieve, from the persistent memory and in response to the query message, the communication message and the one or more additional communication messages based on the query message indicating the thread identifier. The user identifier component850may identify the first set of user identifiers. In some cases, the first set of user identifiers is a subset of the second set of user identifiers.

In some cases, extracting the thread identifier from the communication message involves the header analysis component825parsing a header of the communication message into one or more header fields. In some examples, the header analysis component825may determine the thread identifier based on a header field of the one or more header fields. For example, the communication message may be an internet message in an internet message format and the header field may be a references header field.

In some cases, storing the communication message and the thread identifier with an indication of the communication message may involve the existing root storage component830identifying, in the persistent memory, a stored set of communication messages associated with a root including the thread identifier, where the stored set of communication messages includes the one or more additional communication messages. In some examples, the existing root storage component830may upsert the communication message to the stored set of communication messages based on the thread identifier and the identifying.

The new root storage component835may receive an additional communication message. In some examples, the new root storage component835may extract an additional thread identifier from the additional communication message and may identify that the persistent memory does not include a root including the additional thread identifier. The new root storage component835may create a new root including the additional thread identifier based on the identifying and may store, in the persistent memory, the additional communication message associated with the new root.

In some examples, the thread identifier component815may retrieve a batch of communication messages from the persistent memory. In some examples, the thread identifier component815may extract one or more thread identifiers for the batch of communication messages and may store, in the persistent memory, the one or more thread identifiers, where each thread identifier of the one or more thread identifiers is stored with an indication of at least one communication message of the batch of communication messages based on the extracting.

In some examples, the message component810may order the communication message and the one or more additional communication messages according to a set of timestamps for the communication message and the one or more additional communication messages based on the retrieving. The classification component840may perform an NLP function on a set of communication messages of the communication message and the one or more additional communication messages based on the ordering. In some examples, the classification component840may determine a classification of the communication message based on performing the NLP function.

In some examples, the classification component840may update an additional classification of at least one communication message of the one or more additional communication messages based on performing the NLP function. In some examples, the classification component840may store, in the persistent memory, the classification of the communication message. Additionally or alternatively, the classification component840may transmit, to the user device in response to the query message, the classification of the communication message. In some examples, the message component810may select the set of communication messages for performing the NLP function based on the ordering, a sub-thread corresponding to the thread identifier, a proximity threshold to the communication message, or a combination thereof.

The sub-thread component845may determine a set of sub-threads corresponding to the thread identifier based on the ordering and a set of different sets of user identifiers associated with different communication messages of the communication message and the one or more additional communication messages. In some examples, the sub-thread component845may transmit, for display in a user interface of the user device in response to the query message, an indication of the set of sub-threads corresponding to the thread identifier. In some examples, the message component810may transmit, for display in a user interface of the user device in response to the query message, an indication of the communication message and the one or more additional communication messages based on the ordering.

In some examples, the message component810may perform an NLP function on the communication message and the one or more additional communication messages based on the retrieving. In some examples, the message component810may generate a summary message associated with the thread identifier based on performing the NLP function and may transmit, for display in a user interface of the user device in response to the query message, the summary message.

FIG. 9shows a diagram of a system900including a device905that supports construction of global internet message threads in accordance with aspects of the present disclosure. The device905may be an example of or include the components of an application server or an apparatus705as described herein. The device905may include components for bi-directional data communications including components for transmitting and receiving communications, including a thread manager910, an I/O controller915, a database controller920, memory925, a processor930, and a database935. These components may be in electronic communication via one or more buses (e.g., bus940).

The thread manager910may be an example of a thread manager715or805as described herein. For example, the thread manager910may perform any of the methods or processes described above with reference toFIGS. 7 and 8. In some cases, the thread manager910may be implemented in hardware, software executed by a processor, firmware, or any combination thereof.

The database controller920may manage data storage and processing in a database935. In some cases, a user may interact with the database controller920. In other cases, the database controller920may operate automatically without user interaction. The database935may be an example of a single database, a distributed database, multiple distributed databases, a data store, a data lake, or an emergency backup database.

Memory925may include random-access memory (RAM) and read-only memory (ROM). The memory925may store computer-readable, computer-executable software including instructions that, when executed, cause the processor to perform various functions described herein. In some cases, the memory925may contain, among other things, a basic I/O system (BIOS) which may control basic hardware or software operation such as the interaction with peripheral components or devices.

FIG. 10shows a flowchart illustrating a method1000that supports construction of global internet message threads in accordance with aspects of the present disclosure. The operations of method1000may be implemented by an application server or its components as described herein. For example, the operations of method1000may be performed by a thread manager as described with reference toFIGS. 7 through 9. In some examples, an application server may execute a set of instructions to control the functional elements of the application server to perform the functions described below. Additionally or alternatively, an application server may perform aspects of the functions described below using special-purpose hardware.

At1005, the application server may receive a communication message including a first set of user identifiers associated with transmitting the communication message, receiving the communication message, or both. The operations of1005may be performed according to the methods described herein. In some examples, aspects of the operations of1005may be performed by a message component as described with reference toFIGS. 7 through 9.

At1010, the application server may extract a thread identifier from the communication message, where the thread identifier associates the communication message with one or more additional communication messages stored in persistent memory, the one or more additional communication messages including a second set of user identifiers associated with transmitting at least one of the one or more additional communication messages, receiving at least one of the one or more additional communication messages, or both. The operations of1010may be performed according to the methods described herein. In some examples, aspects of the operations of1010may be performed by a thread identifier component as described with reference toFIGS. 7 through 9.

At1015, the application server may store, in the persistent memory, the communication message and the thread identifier with an indication of the communication message. The operations of1015may be performed according to the methods described herein. In some examples, aspects of the operations of1015may be performed by a message component as described with reference toFIGS. 7 through 9.

At1020, the application server may receive, from a user device associated with a user identifier of the second set of user identifiers, a query message indicating the thread identifier, where the first set of user identifiers does not include the user identifier. The operations of1020may be performed according to the methods described herein. In some examples, aspects of the operations of1020may be performed by a query component as described with reference toFIGS. 7 through 9.

At1025, the application server may retrieve, from the persistent memory and in response to the query message, the communication message and the one or more additional communication messages based on the query message indicating the thread identifier. The operations of1025may be performed according to the methods described herein. In some examples, aspects of the operations of1025may be performed by a message component as described with reference toFIGS. 7 through 9.

FIG. 11shows a flowchart illustrating a method1100that supports construction of global internet message threads in accordance with aspects of the present disclosure. The operations of method1100may be implemented by an application server or its components as described herein. For example, the operations of method1100may be performed by a thread manager as described with reference toFIGS. 7 through 9. In some examples, an application server may execute a set of instructions to control the functional elements of the application server to perform the functions described below. Additionally or alternatively, an application server may perform aspects of the functions described below using special-purpose hardware.

At1105, the application server may receive a communication message including a first set of user identifiers associated with transmitting the communication message, receiving the communication message, or both. The operations of1105may be performed according to the methods described herein. In some examples, aspects of the operations of1105may be performed by a message component as described with reference toFIGS. 7 through 9.

At1110, the application server may extract a thread identifier from the communication message, where the thread identifier associates the communication message with one or more additional communication messages stored in persistent memory, the one or more additional communication messages including a second set of user identifiers associated with transmitting at least one of the one or more additional communication messages, receiving at least one of the one or more additional communication messages, or both. The operations of1110may be performed according to the methods described herein. In some examples, aspects of the operations of1110may be performed by a thread identifier component as described with reference toFIGS. 7 through 9.

For example, extracting the thread identifier may involve, at1115, the application server parsing a header of the communication message into one or more header fields. The operations of1115may be performed according to the methods described herein. In some examples, aspects of the operations of1115may be performed by a header analysis component as described with reference toFIGS. 7 through 9.

Additionally, extracting the thread identifier may involve, at1120, the application server determining the thread identifier based on a header field of the one or more header fields. The operations of1120may be performed according to the methods described herein. In some examples, aspects of the operations of1120may be performed by a header analysis component as described with reference toFIGS. 7 through 9.

At1125, the application server may store, in the persistent memory, the communication message and the thread identifier with an indication of the communication message. The operations of1125may be performed according to the methods described herein. In some examples, aspects of the operations of1125may be performed by a message component as described with reference toFIGS. 7 through 9.

At1130, the application server may receive, from a user device associated with a user identifier of the second set of user identifiers, a query message indicating the thread identifier, where the first set of user identifiers does not include the user identifier. The operations of1130may be performed according to the methods described herein. In some examples, aspects of the operations of1130may be performed by a query component as described with reference toFIGS. 7 through 9.

At1135, the application server may retrieve, from the persistent memory and in response to the query message, the communication message and the one or more additional communication messages based on the query message indicating the thread identifier. The operations of1135may be performed according to the methods described herein. In some examples, aspects of the operations of1135may be performed by a message component as described with reference toFIGS. 7 through 9.

FIG. 12shows a flowchart illustrating a method1200that supports construction of global internet message threads in accordance with aspects of the present disclosure. The operations of method1200may be implemented by an application server or its components as described herein. For example, the operations of method1200may be performed by a thread manager as described with reference toFIGS. 7 through 9. In some examples, an application server may execute a set of instructions to control the functional elements of the application server to perform the functions described below. Additionally or alternatively, an application server may perform aspects of the functions described below using special-purpose hardware.

At1205, the application server may receive a communication message including a first set of user identifiers associated with transmitting the communication message, receiving the communication message, or both. The operations of1205may be performed according to the methods described herein. In some examples, aspects of the operations of1205may be performed by a message component as described with reference toFIGS. 7 through 9.

At1210, the application server may extract a thread identifier from the communication message, where the thread identifier associates the communication message with one or more additional communication messages stored in persistent memory, the one or more additional communication messages including a second set of user identifiers associated with transmitting at least one of the one or more additional communication messages, receiving at least one of the one or more additional communication messages, or both. The operations of1210may be performed according to the methods described herein. In some examples, aspects of the operations of1210may be performed by a thread identifier component as described with reference toFIGS. 7 through 9.

At1215, the application server may store, in the persistent memory, the communication message and the thread identifier with an indication of the communication message. The operations of1215may be performed according to the methods described herein. In some examples, aspects of the operations of1215may be performed by a message component as described with reference toFIGS. 7 through 9.

For example, storing the communication message in the persistent memory may involve, at1220, the application server identifying, in the persistent memory, a stored set of communication messages associated with a root including the thread identifier, where the stored set of communication messages includes the one or more additional communication messages. The operations of1220may be performed according to the methods described herein. In some examples, aspects of the operations of1220may be performed by a storage component as described with reference toFIGS. 7 through 9.

Additionally, storing the communication message in the persistent memory may involve, at1225, the application server upserting the communication message to the stored set of communication messages based on the thread identifier and the identifying. The operations of1225may be performed according to the methods described herein. In some examples, aspects of the operations of1225may be performed by a storage component as described with reference toFIGS. 7 through 9.

At1230, the application server may receive, from a user device associated with a user identifier of the second set of user identifiers, a query message indicating the thread identifier, where the first set of user identifiers does not include the user identifier. The operations of1230may be performed according to the methods described herein. In some examples, aspects of the operations of1230may be performed by a query component as described with reference toFIGS. 7 through 9.

At1235, the application server may retrieve, from the persistent memory and in response to the query message, the communication message and the one or more additional communication messages based on the query message indicating the thread identifier. The operations of1235may be performed according to the methods described herein. In some examples, aspects of the operations of1235may be performed by a message component as described with reference toFIGS. 7 through 9.

A method for persistent storage of global communication message information is described. The method may include receiving a communication message including a first set of user identifiers associated with transmitting the communication message, receiving the communication message, or both; extracting a thread identifier from the communication message, where the thread identifier associates the communication message with one or more additional communication messages stored in persistent memory, the one or more additional communication messages including a second set of user identifiers associated with transmitting at least one of the one or more additional communication messages, receiving at least one of the one or more additional communication messages, or both; storing, in the persistent memory, the communication message and the thread identifier with an indication of the communication message; receiving, from a user device associated with a user identifier of the second set of user identifiers, a query message indicating the thread identifier, where the first set of user identifiers does not include the user identifier; and retrieving, from the persistent memory and in response to the query message, the communication message and the one or more additional communication messages based on the query message indicating the thread identifier.

An apparatus for persistent storage of global communication message information is described. The apparatus may include a processor, memory coupled with the processor, and instructions stored in the memory. The instructions may be executable by the processor to cause the apparatus to receive a communication message including a first set of user identifiers associated with transmitting the communication message, receiving the communication message, or both; extract a thread identifier from the communication message, where the thread identifier associates the communication message with one or more additional communication messages stored in persistent memory, the one or more additional communication messages including a second set of user identifiers associated with transmitting at least one of the one or more additional communication messages, receiving at least one of the one or more additional communication messages, or both; store, in the persistent memory, the communication message and the thread identifier with an indication of the communication message; receive, from a user device associated with a user identifier of the second set of user identifiers, a query message indicating the thread identifier, where the first set of user identifiers does not include the user identifier; and retrieve, from the persistent memory and in response to the query message, the communication message and the one or more additional communication messages based on the query message indicating the thread identifier.

Another apparatus for persistent storage of global communication message information is described. The apparatus may include means for receiving a communication message including a first set of user identifiers associated with transmitting the communication message, receiving the communication message, or both; means for extracting a thread identifier from the communication message, where the thread identifier associates the communication message with one or more additional communication messages stored in persistent memory, the one or more additional communication messages including a second set of user identifiers associated with transmitting at least one of the one or more additional communication messages, receiving at least one of the one or more additional communication messages, or both; means for storing, in the persistent memory, the communication message and the thread identifier with an indication of the communication message; means for receiving, from a user device associated with a user identifier of the second set of user identifiers, a query message indicating the thread identifier, where the first set of user identifiers does not include the user identifier; and means for retrieving, from the persistent memory and in response to the query message, the communication message and the one or more additional communication messages based on the query message indicating the thread identifier.

A non-transitory computer-readable medium storing code for persistent storage of global communication message information is described. The code may include instructions executable by a processor to receive a communication message including a first set of user identifiers associated with transmitting the communication message, receiving the communication message, or both; extract a thread identifier from the communication message, where the thread identifier associates the communication message with one or more additional communication messages stored in persistent memory, the one or more additional communication messages including a second set of user identifiers associated with transmitting at least one of the one or more additional communication messages, receiving at least one of the one or more additional communication messages, or both; store, in the persistent memory, the communication message and the thread identifier with an indication of the communication message; receive, from a user device associated with a user identifier of the second set of user identifiers, a query message indicating the thread identifier, where the first set of user identifiers does not include the user identifier; and retrieve, from the persistent memory and in response to the query message, the communication message and the one or more additional communication messages based on the query message indicating the thread identifier.

In some examples of the method, apparatuses, and non-transitory computer-readable medium described herein, extracting the thread identifier from the communication message may include operations, features, means, or instructions for parsing a header of the communication message into one or more header fields and determining the thread identifier based on a header field of the one or more header fields.

In some examples of the method, apparatuses, and non-transitory computer-readable medium described herein, the communication message includes an internet message in an internet message format, and the header field includes a references header field.

In some examples of the method, apparatuses, and non-transitory computer-readable medium described herein, storing the communication message and the thread identifier with an indication of the communication message may include operations, features, means, or instructions for identifying, in the persistent memory, a stored set of communication messages associated with a root including the thread identifier, where the stored set of communication messages includes the one or more additional communication messages, and upserting the communication message to the stored set of communication messages based on the thread identifier and the identifying.

Some examples of the method, apparatuses, and non-transitory computer-readable medium described herein may further include operations, features, means, or instructions for receiving an additional communication message, extracting an additional thread identifier from the additional communication message, identifying that the persistent memory does not include a root including the additional thread identifier, creating a new root including the additional thread identifier based on the identifying, and storing, in the persistent memory, the additional communication message associated with the new root.

Some examples of the method, apparatuses, and non-transitory computer-readable medium described herein may further include operations, features, means, or instructions for retrieving a batch of communication messages from the persistent memory, extracting one or more thread identifiers for the batch of communication messages, and storing, in the persistent memory, the one or more thread identifiers, where each thread identifier of the one or more thread identifiers may be stored with an indication of at least one communication message of the batch of communication messages based on the extracting.

Some examples of the method, apparatuses, and non-transitory computer-readable medium described herein may further include operations, features, means, or instructions for ordering the communication message and the one or more additional communication messages according to a set of timestamps for the communication message and the one or more additional communication messages based on the retrieving.

Some examples of the method, apparatuses, and non-transitory computer-readable medium described herein may further include operations, features, means, or instructions for performing an NLP function on a set of communication messages of the communication message and the one or more additional communication messages based on the ordering and determining a classification of the communication message based on performing the NLP function.

Some examples of the method, apparatuses, and non-transitory computer-readable medium described herein may further include operations, features, means, or instructions for updating an additional classification of at least one communication message of the one or more additional communication messages based on performing the NLP function.

Some examples of the method, apparatuses, and non-transitory computer-readable medium described herein may further include operations, features, means, or instructions for storing, in the persistent memory, the classification of the communication message.

Some examples of the method, apparatuses, and non-transitory computer-readable medium described herein may further include operations, features, means, or instructions for transmitting, to the user device in response to the query message, the classification of the communication message.

Some examples of the method, apparatuses, and non-transitory computer-readable medium described herein may further include operations, features, means, or instructions for selecting the set of communication messages for performing the NLP function based on the ordering, a sub-thread corresponding to the thread identifier, a proximity threshold to the communication message, or a combination thereof.

Some examples of the method, apparatuses, and non-transitory computer-readable medium described herein may further include operations, features, means, or instructions for determining a set of sub-threads corresponding to the thread identifier based on the ordering and a set of different sets of user identifiers associated with different communication messages of the communication message and the one or more additional communication messages.

Some examples of the method, apparatuses, and non-transitory computer-readable medium described herein may further include operations, features, means, or instructions for transmitting, for display in a user interface of the user device in response to the query message, an indication of the set of sub-threads corresponding to the thread identifier.

Some examples of the method, apparatuses, and non-transitory computer-readable medium described herein may further include operations, features, means, or instructions for transmitting, for display in a user interface of the user device in response to the query message, an indication of the communication message and the one or more additional communication messages based on the ordering.

Some examples of the method, apparatuses, and non-transitory computer-readable medium described herein may further include operations, features, means, or instructions for performing an NLP function on the communication message and the one or more additional communication messages based on the retrieving, generating a summary message associated with the thread identifier based on performing the NLP function, and transmitting, for display in a user interface of the user device in response to the query message, the summary message.

In some examples of the method, apparatuses, and non-transitory computer-readable medium described herein, the first set of user identifiers includes an author of the communication message and each recipient of the communication message.

In some examples of the method, apparatuses, and non-transitory computer-readable medium described herein, the first set of user identifiers is a subset of the second set of user identifiers.