TECHNIQUES FOR MESSAGING BOT APP INTERACTIONS

Techniques for messaging bots with interactions within a messaging app are described. In one embodiment, an apparatus may comprise a user interface component operative to receive a messaging bot invocation in a message thread display on a client device; invoke a messaging bot interaction user interface on the client device in combination with the message thread display in response to the messaging bot invocation; receive a messaging bot interaction command via the messaging bot interaction user interface; and display a messaging bot interaction response in the message thread display; and a client messaging component operative to transmit the messaging bot interaction command from the client device to a messaging system; and receive the messaging bot interaction response from the messaging system at the client device. Other embodiments are described and claimed.

BACKGROUND

Users may interact with each other in a messaging system, sending messages back and forth to each other in a text-based conversation between two or more users. A user may have a user account associated with them in the messaging system, the user account providing an online identity for the user, a destination for messages directed to the user, and generally coordinating the user's access to and use of the messaging system. A user may access the messaging system from a variety of endpoints, including mobile devices (e.g., cellphones), desktop computers, web browsers, specialized messaging clients, etc.

SUMMARY

Various embodiments are generally directed to techniques for messaging bots. Some embodiments are particularly directed to techniques for messaging bots with interactions within a messaging app. Some embodiments are particularly directed to techniques for messaging bots using rich communication over a messaging system.

In one embodiment, for example, an apparatus may comprise a user interface component operative to receive a messaging bot invocation in a message thread display on a client device; invoke a messaging bot interaction user interface on the client device in combination with the message thread display in response to the messaging bot invocation; receive a messaging bot interaction command via the messaging bot interaction user interface; and display a messaging bot interaction response in the message thread display; and a client messaging component operative to transmit the messaging bot interaction command from the client device to a messaging system; and receive the messaging bot interaction response from the messaging system at the client device. Other embodiments are described and claimed.

In another embodiment, for example, an apparatus may comprise a messaging component operative to receive a message from a client device; and add the message to a message queue; a message queue monitoring component operative to monitor the message queue; detect that the message indicates messaging bot invocation; and submit the message to a bot framework component based on detecting that the message indicates messaging bot invocation; and the bot framework component operative to determine a messaging bot associated with the message; and submit the message to the messaging bot. Other embodiments are described and claimed.

In an embodiment according to the invention a computer-implemented method comprises:

receiving a message from a client device;

adding the message to a message queue;

monitoring the message queue;

detecting that the message indicates messaging bot invocation; and

submitting the message to a bot framework component based on detecting that the message indicates messaging bot invocation;

determining a messaging bot associated with the message; and

submitting the message to the messaging bot.

In an embodiment according to the invention, a computer-implemented method, comprises:receiving, at a messaging server, a mail server, and/or at a messaging component of a client front-end server of a messaging system, a message from a client device;adding the message to a message queue;monitoring, by a message queue monitoring component of a worker server of the messaging system , the message queue,;detecting that the message indicates messaging bot invocation,wherein the message queue monitoring component is configured to examine each entry within the message queue and to detect that the message indicates a messaging bot invocation; andsubmitting, by the message queue monitoring component, the message or a notification that a message with a messaging bot invocation was detected, such as an identifier for the message, to a bot framework component based on detecting that the message indicates messaging bot invocation;by the bot framework component:determining a messaging bot associated with the message; and

submitting the message to the messaging bot.

In an embodiment according to the invention, wherein the message may comprise a text content portion, a method may comprise:

detecting a bot invocation symbol in the text content portion of the message; and

detecting that the message indicates messaging bot invocation based on detecting the bot invocation symbol.

In an embodiment according to the invention, wherein the message may comprise a text content portion, a method may comprise:detecting a bot invocation symbol in the text content portion of the message; anddetecting that the message indicates messaging bot invocation based on detecting the bot invocation symbol, and/orwherein the message including information for a bot is flagged by a sender client device in that a metadata portion of the message is flagged with a bot invocation flag, andwherein the message monitoring component is configured to detect that the message indicates messaging bot invocation based on detecting the bot invocation flag.

In an embodiment according to the invention, a method may comprise:

receiving a messaging bot response to the message; and

inserting the messaging bot response in the message queue.

In an embodiment according to the invention, a method may comprise:receiving a messaging bot response to the message; andinserting the messaging bot response in the message queue, and optionally transmitting the messaging bot response to the client device for display on a display of a messaging client.

In an embodiment according to the invention, wherein the message may be associated with a message thread, the messaging bot response inserted in the message queue may be marked for display in the message thread.

In an embodiment according to the invention, wherein the message may be associated with a message thread, the messaging bot response inserted in the message queue may be marked for display in the message thread, wherein, optionally, the message bot is permitted to add messages to the message queue in response to a message sent out by the user to the message bot, the message bot further optionally may be authorized to send a single response to the message and/or authorized for a limited period of time in response to the message.

In an embodiment according to the invention, wherein the message may comprise a text portion, the text portion comprising a bot alias text segment, further may comprise:

receiving an alias initial portion of the bot alias text segment;

matching the alias initial portion against a bot alias registry to determine one or more predicted bot alias text segments, the one or more predicted bot alias text segments comprising the bot alias text segment; and

transmitting the one or more predicted bot alias text segments to the client device.

In an embodiment according to the invention, wherein the message may comprising a text portion, the text portion comprising a bot command text segment, further may comprise, optionally by the bot framework component:

receiving a command initial portion of the bot command text segment;

submitting the command initial portion to the messaging bot;

receiving one or more predicted bot command text segments from the messaging bot, the one or more predicted bot command text segments comprising the bot command text segment; and

transmitting the one or more predicted bot command text segment to the client device.

In an embodiment according to the invention, wherein the message may be associated with a message thread, the message comprising a bot subscription command, further may comprise:

subscribing the message thread to the messaging bot in response to the bot subscription command;

receiving a broadcast message from the messaging bot;

determining a plurality of subscriber threads for the broadcast message based on the messaging bot, the plurality of subscriber threads comprising the message thread;

dividing the plurality of subscriber threads into a plurality of subscriber thread chunks;

assigning each of the plurality of subscriber threads chunks to a broadcast worker of a plurality of broadcast workers; and

adding the broadcast message to a plurality of message queues based on the plurality of subscriber threads chunks by the plurality of broadcast workers, the plurality of message queues comprising the message queue.

In an embodiment according to the invention, an apparatus, comprises:

a processor circuit on a device;

a messaging component operative on the processor circuit to receive a message from a client device; and add the message to a message queue;

a message queue monitoring component operative to monitor the message queue; detect that the message indicates messaging bot invocation; and submit the message to a bot framework component based on detecting that the message indicates messaging bot invocation; and

the bot framework component operative to determine a messaging bot associated with the message; and submit the message to the messaging bot.

In an embodiment according to the invention, an apparatus, wherein the message comprises a text content portion, further may comprising:

the message queue monitoring component operative to detect a bot invocation symbol in the text content portion of the message; and detect that the message indicates messaging bot invocation based on detecting the bot invocation symbol.

In an embodiment according to the invention, an apparatus further may comprise:

the bot framework component operative to receive a messaging bot response to the message; and insert the messaging bot response in the message queue.

In an embodiment according to the invention, an apparatus, wherein the message may be associated with a message thread, the messaging bot response may be inserted in the message queue marked for display in the message thread.

In an embodiment according to the invention, an apparatus, wherein the message may comprising a text portion, the text portion comprising a bot alias text segment, further may comprise:

the bot framework component operative to receive an alias initial portion of the bot alias text segment; match the alias initial portion against a bot alias registry to determine one or more predicted bot alias text segments, the one or more predicted bot alias text segments comprising the bot alias text segment; and transmit the one or more predicted bot alias text segments to the client device.

In an embodiment according to the invention, an apparatus, wherein the message may comprise a text portion, the text portion comprising a bot command text segment, further may comprise:

the bot framework component operative to receive a command initial portion of the bot command text segment; submit the command initial portion to the messaging bot; receive one or more predicted bot command text segments from the messaging bot, the one or more predicted bot command text segments comprising the bot command text segment; and transmit the one or more predicted bot command text segment to the client device.

In an embodiment according to the invention, an apparatus, wherein the message may be associated with a message thread, the message comprising a bot subscription command, further may comprise:

the bot framework component operative to subscribe the message thread to the messaging bot in response to the bot subscription command;

a broadcast component operative to receive a broadcast message from the messaging bot; determine a plurality of subscriber threads for the broadcast message based on the messaging bot, the plurality of subscriber threads comprising the message thread; divide the plurality of subscriber threads into a plurality of subscriber thread chunks; and assign each of the plurality of subscriber threads chunks to a broadcast worker of a plurality of broadcast workers; and

the plurality of broadcast workers operative to add the broadcast message to a plurality of message queues based on the plurality of subscriber threads chunks, the plurality of message queues comprising the message queue.

In an embodiment according to the invention, at least one computer-readable storage medium may comprise instructions that, when executed, may cause a system to:

receive a message from a client device;

add the message to a message queue;

monitor the message queue;

detect that the message indicates messaging bot invocation; and

submit the message to a bot framework component based on detecting that the message indicates messaging bot invocation;

determine a messaging bot associated with the message; and

submit the message to the messaging bot.

In an embodiment according to the invention, a computer-readable storage medium, wherein the message may comprise a text content portion, may comprise further instructions that, when executed, cause a system to:

detect a bot invocation symbol in the text content portion of the message; and

detect that the message indicates messaging bot invocation based on detecting the bot invocation symbol.

In an embodiment according to the invention, a computer-readable storage medium, wherein the message may be associated with a message thread, may comprise further instructions that, when executed, may cause a system to:

receive a messaging bot response to the message; and

insert the messaging bot response in the message queue marked for display in the message thread.

In an embodiment according to the invention, a computer-readable storage medium, wherein the message may comprise a text portion, the text portion comprising a bot alias text segment, may comprise further instructions that, when executed, may cause a system to:

receive an alias initial portion of the bot alias text segment;

match the alias initial portion against a bot alias registry to determine one or more predicted bot alias text segments, the one or more predicted bot alias text segments comprising the bot alias text segment; and

transmit the one or more predicted bot alias text segments to the client device.

In an embodiment according to the invention, a computer-readable storage medium, wherein the message may comprise a text portion, the text portion may comprise a bot command text segment, comprising further instructions that, when executed, may cause a system to:

receive a command initial portion of the bot command text segment;

submit the command initial portion to the messaging bot;

receive one or more predicted bot command text segments from the messaging bot, the one or more predicted bot command text segments comprising the bot command text segment; and

transmit the one or more predicted bot command text segment to the client device.

In an embodiment according to the invention, a computer-readable storage medium, wherein the message may be associated with a message thread, the message comprising a bot subscription command, may comprising further instructions that, when executed, may cause a system to:

subscribe the message thread to the messaging bot in response to the bot subscription command;

receive a broadcast message from the messaging bot;

determine a plurality of subscriber threads for the broadcast message based on the messaging bot, the plurality of subscriber threads comprising the message thread;

divide the plurality of subscriber threads into a plurality of subscriber thread chunks;

assign each of the plurality of subscriber threads chunks to a broadcast worker of a plurality of broadcast workers; and

add the broadcast message to a plurality of message queues based on the plurality of subscriber threads chunks by the plurality of broadcast workers, the plurality of message queues comprising the message queue.

In a further embodiment according to the invention, one or more computer-readable non-transitory storage media embody software that is operable when executed to perform a method according to the invention or any of the above mentioned embodiments.

In a further embodiment according to the invention, a system comprises: one or more processors; and at least one memory coupled to the processors and comprising instructions executable by the processors, the processors operable when executing the instructions to perform a method according to the invention or any of the above mentioned embodiments.

In a further embodiment according to the invention, a computer program product, preferably comprising a computer-readable non-transitory storage media, is operable when executed on a data processing system to perform a method according to the invention or any of the above mentioned embodiments.

DETAILED DESCRIPTION

Network-connected computing devices can provide their users with an unprecedented ability to engage in interpersonal communication. People may engage in messaging interactions with their friends, family, coworkers, and other associates. A user's message exchanges with their contacts may each be maintained within a distinct message thread.

These network-connected computing devices can also provide their users with access to network-accessible services. For instance, transportation services, dining services, entertainment services, and other services may use web sites, web application, client applications, or other network-accessibility techniques to empower people to use their client devices to engage with their services. In some cases, such as some entertainment or media services, the service can be both arranged and delivered via the client devices. For example, music may be purchased via a client device and delivered to the client device for playback. In other cases, such as with transportation, dining, and in-peson entertainment, the service can be arranged via the client devices, but is performed external to the client device. For example, a ride-sharing service may be arranged via a client device but performed through a vehicle and driver providing ride sharing to the user.

In some cases, the use of a network-accessible service may relate to more than one person. Particularly where a user's access to the service is a client device that they also use for messaging, a user may benefit from sharing their engagement with the network-accessible service in the messaging client with the others to whom the service relates. As such, message threads may act as hubs for a user's online social relationship with their contacts, with the message threads incorporating services requested, monitored, or engaged with via the same client used for messaging.

To aid a user in interacting with a service via a messaging context, services may be represented as messaging bots within a messaging system. A messaging bot may be a fully or partially automated front-end to a network-accessible service that can be represented as a participant within a message thread. In some cases, a messaging bot may be corresponded with in a message thread that explicitly includes the messaging bot, such as a one-on-one message thread between a particular user and the messaging bot. In other cases, a messaging bot may be corresponded with in a message thread in which the messaging bot is not a regular participant, the messaging bot a temporary participant in the message thread for the purposes of interacting with the service. The messaging bot may be included as a temporary participant in any other thread, whether a one-on-one thread between two users or a group thread between multiple users.

As such, a user may engage with network services within the familiar experience of a messaging client. Further, by using a messaging client, a user may engage with network services within a messaging context so as to allow the inclusion of other people. In some cases, this may simply inform the other people as to the services, such as letting friends or family know about transportation details. In other cases, this may empower the performance of services for multiple people, such as where dinner, a ride, entertainment, or other service is arranged for the use of multiple people. As a result, the embodiments can improve the experience of using network-accessible services and can extend the reach of network-accessible services to the user of a messaging system.

It is worthy to note that “a” and “b” and “c” and similar designators as used herein are intended to be variables representing any positive integer. Thus, for example, if an implementation sets a value for a=5, then a complete set of components122illustrated as components122-1through122-a may include components122-1,122-2,122-3,122-4and122-5. The embodiments are not limited in this context.

FIG. 1illustrates a block diagram for a messaging system100. In one embodiment, the messaging system100may comprise a computer-implemented system having software applications comprising one or more components. Although the messaging system100shown inFIG. 1has a limited number of elements in a certain topology, it may be appreciated that the messaging system100may include more or less elements in alternate topologies as desired for a given implementation.

The messaging servers110may comprise one or more messaging servers operated by a messaging platform as part of the messaging system100. A messaging server may comprise an Internet-accessible server, with the network120connecting the various devices of the messaging system100comprising, at least in part, the Internet.

A user may own and operate a smartphone device150. The smartphone device150may comprise an iPhone® device, an Android® device, a Blackberry® device, or any other mobile computing device conforming to a smartphone form. The smartphone device150may be a cellular device capable of connecting to a network120via a cell system130using cellular signals135. In some embodiments and in some cases the smartphone device150may additionally or alternatively use Wi-Fi or other networking technologies to connect to the network120. The smartphone device150may execute a messaging client, web browser, or other local application to access the messaging servers110.

The same user may own and operate a tablet device160. The tablet device150may comprise an iPad® device, an Android® tablet device, a Kindle Fire® device, or any other mobile computing device conforming to a tablet form. The tablet device160may be a Wi-Fi device capable of connecting to a network120via a Wi-Fi access point140using Wi-Fi signals145. In some embodiments and in some cases the tablet device160may additionally or alternatively use cellular or other networking technologies to connect to the network120. The tablet device160may execute a messaging client, web browser, or other local application to access the messaging servers110.

The same user may own and operate a personal computer device180. The personal computer device180may comprise a Mac OS® device, Windows® device, Linux® device, or other computer device running another operating system. The personal computer device180may be an Ethernet device capable of connecting to a network120via an Ethernet connection. In some embodiments and in some cases the personal computer device180may additionally or alternatively use cellular, Wi-Fi, or other networking technologies to the network120. The personal computer device180may execute a messaging client, web browser170, or other local application to access the messaging servers110.

A messaging client may be a dedicated messaging client. A dedicated messaging client may be specifically associated with a messaging provider administering the messaging platform including the messaging servers110. A dedicated messaging client may be a general client operative to work with a plurality of different messaging providers including the messaging provider administering the messaging platform including the messaging servers110.

The messaging client may be a component of an application providing additional functionality. For example, a social networking service may provide a social networking application for use on a mobile device for accessing and using the social networking service. The social networking service may include messaging functionality such as may be provided by messaging servers110. It will be appreciated that the messaging servers110may be one component of a computing device for the social networking service, with the computing device providing additional functionality of the social networking service. Similarly, the social networking application may provide both messaging functionality and additional social networking functionality.

In some cases a messaging endpoint may retain state between user sessions and in some cases a messaging endpoint may relinquish state between user session. A messaging endpoint may use a local store to retain the current state of a message inbox. This local store may be saved in persistent storage such that the state may be retrieved between one session and the next, including situations in which, for example, a local application is quit or otherwise removed from memory or a device is powered off and on again. Alternatively, a messaging endpoint may use a memory cache to retain the current state of a message inbox but refrain from committing the state of the message inbox to persistent storage.

A messaging endpoint that retains the state of a message inbox may comprise a dedicated messaging application or a messaging utility integrated into another local application, such as a social networking application. A messaging endpoint that relinquishes state of a message inbox may comprise messaging access implemented within a web browser. In one embodiment, a web browser, such as web browser170executing on personal computer device180, may execute HTML5 code that interacts with the messaging server to present messaging functionality to a user.

A user may send and receive messages from a plurality of devices, including the smartphone device150, tablet device160, and personal computer device180. The user may use a first messaging application on the smartphone device150, a second messaging application on the tablet device160, and the web browser170on the personal computer device180. The first and second messaging applications may comprise installations of the same application on both devices. The first and second messaging applications may comprise a smartphone-specific and a tablet-specific version of a common application. The first and second messaging application may comprise distinct applications.

The user may benefit from having their message inbox kept consistent between their devices. A user may use their smartphone device150on the cell system130while away from their home, sending and receiving messages via the cells system130. The user may stop by a coffee shop, or other location offering Wi-Fi, and connect their tablet device160to a Wi-Fi access point140. The tablet device160may retrieve its existing known state for the message inbox and receive updates that have happened since the last occasion on which the tablet device160had access to a network, including any messages sent by the smartphone device150and that may have been received by the user while operating the smartphone device150. The user may then return home and access their message inbox using a web browser170on a personal computer device180. The web browser170may receive a snapshot of the current state of the message inbox from the messaging servers110due to it not maintaining or otherwise not having access to an existing state for the message inbox. The web browser170may then retrieve incremental updates for any new changes to the state of the message inbox so long as it maintains a user session with the messaging servers110, discarding its known state for the message inbox at the end of the session, such as when the web browser170is closed by the user. Without limitation, an update may correspond to the addition of a message to a mailbox, a deletion of a message from a mailbox, and a read receipt.

A messaging system100may operate by defining a messaging inbox as comprising a plurality of messages, wherein each message is an individual transaction of communication between two or more participants. A mail server may operate by maintaining a message index for the messaging inbox. Mail servers may receive messages and store the messages in mail archives from which messages may be retrieved through reference to the message index. Mail clients may connect to the mail servers and retrieve messages that have been added to their mail archive since their last update. The mail clients may receive a mail index from the mail archive indicating what messages are stored in the mail archive. The mail clients may compare the mail archive to their current inbox in order to determine what messages they are missing, which they then request from the mail archive. The mail clients may make changes to their inbox, which results in mail inbox instructions being transmitted to the mail archives instructing the mail archives in modifications to make to the representation of their mail inbox on the mail archives.

Messaging interactions mediated by a messaging system may be organized into shared spaces known as message threads. A message thread may collect together the messages shared between a particular group of users. Messages sent individually between a pair of users may be collected into a one-on-one message thread uniquely associated with the private messaging between the pair of users. Messages sent between a group of three or more users may not be uniquely defined by their membership, but instead by, in some embodiments, an identifier uniquely identifying the group thread. Membership in a group thread may, in some embodiments, vary over time, adding and/or losing members.

The messaging system100may use knowledge generated from interactions in between users. The messaging system100may comprise a component of a social-networking system and may use knowledge generated from the broader interactions of the social-networking system. As such, to protect the privacy of the users of the messaging system100and the larger social-networking system, messaging system100may include an authorization server (or other suitable component(s)) that allows users to opt in to or opt out of having their actions logged by the messaging system100or shared with other systems (e.g., third-party systems), for example, by setting appropriate privacy settings. A privacy setting of a user may determine what information associated with the user may be logged, how information associated with the user may be logged, when information associated with the user may be logged, who may log information associated with the user, whom information associated with the user may be shared with, and for what purposes information associated with the user may be logged or shared. Authorization servers or other authorization components may be used to enforce one or more privacy settings of the users of the messaging system100and other elements of a social-networking system through blocking, data hashing, anonymization, or other suitable techniques as appropriate.

FIG. 2illustrates an example of a social graph200. In particular embodiments, a social-networking system may store one or more social graphs200in one or more data stores as a social graph data structure.

In particular embodiments, social graph200may include multiple nodes, which may include multiple user nodes202and multiple concept nodes204. Social graph200may include multiple edges206connecting the nodes. In particular embodiments, a social-networking system, client system, third-party system, or any other system or device may access social graph200and related social-graph information for suitable applications. The nodes and edges of social graph200may be stored as data objects, for example, in a data store (such as a social-graph database). Such a data store may include one or more searchable or queryable indexes of nodes or edges of social graph200.

In particular embodiments, a user node202may correspond to a user of the social-networking system. As an example and not by way of limitation, a user may be an individual (human user), an entity (e.g., an enterprise, business, or third-party application), or a group (e.g., of individuals or entities) that interacts or communicates with or over the social-networking system. In particular embodiments, when a user registers for an account with the social-networking system, the social-networking system may create a user node202corresponding to the user, and store the user node202in one or more data stores. Users and user nodes202described herein may, where appropriate, refer to registered users and user nodes202associated with registered users. In addition or as an alternative, users and user nodes202described herein may, where appropriate, refer to users that have not registered with the social-networking system. In particular embodiments, a user node202may be associated with information provided by a user or information gathered by various systems, including the social-networking system. As an example and not by way of limitation, a user may provide their name, profile picture, contact information, birth date, sex, marital status, family status, employment, education background, preferences, interests, or other demographic information. In particular embodiments, a user node202may be associated with one or more data objects corresponding to information associated with a user. In particular embodiments, a user node202may correspond to one or more webpages. A user node202may be associated with a unique user identifier for the user in the social-networking system.

In particular embodiments, a concept node204may represent a third-party webpage or resource hosted by a third-party system. The third-party webpage or resource may include, among other elements, content, a selectable or other icon, or other inter-actable object (which may be implemented, for example, in JavaScript, AJAX, or PHP codes) representing an action or activity. As an example and not by way of limitation, a third-party webpage may include a selectable icon such as “like,” “check in,” “eat,” “recommend,” or another suitable action or activity. A user viewing the third-party webpage may perform an action by selecting one of the icons (e.g., “eat”), causing a client system to send to the social-networking system a message indicating the user's action. In response to the message, the social-networking system may create an edge (e.g., an “eat” edge) between a user node202corresponding to the user and a concept node204corresponding to the third-party webpage or resource and store edge206in one or more data stores.

In particular embodiments, a pair of nodes in social graph200may be connected to each other by one or more edges206. An edge206connecting a pair of nodes may represent a relationship between the pair of nodes. In particular embodiments, an edge206may include or represent one or more data objects or attributes corresponding to the relationship between a pair of nodes. As an example and not by way of limitation, a first user may indicate that a second user is a “friend” of the first user. In response to this indication, the social-networking system may send a “friend request” to the second user. If the second user confirms the “friend request,” the social-networking system may create an edge206connecting the first user's user node202to the second user's user node202in social graph200and store edge206as social-graph information in one or more data stores. In the example ofFIG. 2, social graph200includes an edge206indicating a friend relation between user nodes202of user “Amanda” and user “Dorothy.” Although this disclosure describes or illustrates particular edges206with particular attributes connecting particular user nodes202, this disclosure contemplates any suitable edges206with any suitable attributes connecting user nodes202. As an example and not by way of limitation, an edge206may represent a friendship, family relationship, business or employment relationship, fan relationship, follower relationship, visitor relationship, subscriber relationship, superior/subordinate relationship, reciprocal relationship, non-reciprocal relationship, another suitable type of relationship, or two or more such relationships. Moreover, although this disclosure generally describes nodes as being connected, this disclosure also describes users or concepts as being connected. Herein, references to users or concepts being connected may, where appropriate, refer to the nodes corresponding to those users or concepts being connected in social graph200by one or more edges206.

In particular embodiments, the social-networking system may create an edge206between a user node202and a concept node204in social graph200. As an example and not by way of limitation, a user viewing a concept-profile page (such as, for example, by using a web browser or a special-purpose application hosted by the user's client system) may indicate that he or she likes the concept represented by the concept node204by clicking or selecting a “Like” icon, which may cause the user's client system to send to the social-networking system a message indicating the user's liking of the concept associated with the concept-profile page. In response to the message, the social-networking system may create an edge206between user node202associated with the user and concept node204, as illustrated by “like” edge206between the user and concept node204. In particular embodiments, the social-networking system may store an edge206in one or more data stores. In particular embodiments, an edge206may be automatically formed by the social-networking system in response to a particular user action. As an example and not by way of limitation, if a first user uploads a picture, watches a movie, or listens to a song, an edge206may be formed between user node202corresponding to the first user and concept nodes204corresponding to those concepts. Although this disclosure describes forming particular edges206in particular manners, this disclosure contemplates forming any suitable edges206in any suitable manner.

The social graph200may further comprise a plurality of product nodes. Product nodes may represent particular products that may be associated with a particular business. A business may provide a product catalog to the consumer-to-business service110and the consumer-to-business service110may therefore represent each of the products within the product in the social graph200with each product being in a distinct product node. A product node may comprise information relating to the product, such as pricing information, descriptive information, manufacturer information, availability information, and other relevant information. For example, each of the items on a menu for a restaurant may be represented within the social graph200with a product node describing each of the items. A product node may be linked by an edge to the business providing the product. Where multiple businesses provide a product, each business may have a distinct product node associated with its providing of the product or may each link to the same product node. A product node may be linked by an edge to each user that has purchased, rated, owns, recommended, or viewed the product, with the edge describing the nature of the relationship (e.g., purchased, rated, owns, recommended, viewed, or other relationship). Each of the product nodes may be associated with a graph id and an associated merchant id by virtue of the linked merchant business. Products available from a business may therefore be communicated to a user by retrieving the available product nodes linked to the user node for the business within the social graph200. The information for a product node may be manipulated by the social-networking system as a product object that encapsulates information regarding the referenced product.

As such, the social graph200may be used to infer shared interests, shared experiences, or other shared or common attributes of two or more users of a social-networking system. For instance, two or more users each having an edge to a common business, product, media item, institution, or other entity represented in the social graph200may indicate a shared relationship with that entity, which may be used to suggest customization of a use of a social-networking system, including a messaging system150, for one or more users.

FIG. 3Aillustrates an embodiment of a user interface300displaying a messaging interface on a client device320.

The user interface300may comprise a user interface for a one-on-one message thread. At least a portion of the message exchange for the message thread may be displayed in a one-on-one message thread interaction display310. A one-on-one message thread interaction display310may comprise a display of one or more messages exchanged by the users of the one-on-one message thread.

Each of the one or more messages may be represented by a particular message bubble, such as message bubble315. A message bubble may represent an atomic messaging interaction. A message bubble may generally correspond to a defined geometric area in which the contents of a particular messaging exchange (e.g., text, media) are contained within the defined geometric area. A message bubble may have a distinct color or plurality of colors (e.g., one or more gradients) that distinguish it from a background of a message thread interaction display. A message bubble may have a distinctly-colored border, such as a black outline as depicted, or may have a border defined by the interface between differing colors of the message bubble and the background. In some embodiments, the color or colors of either or both the message bubbles and the background may be customized and configured by users of the display configuration system100.

The user interface300for a message thread may include thread controls317. Some portion of the thread controls317may be persistently visible during the display of a message thread, such as a control bar empowering access to further user interface controls. Some of the thread controls317, such as controls in a control bar, may empower access to further user interface controls for the performance of various tasks, such as text entry, media selection, emoji selection, camera use, etc. However, some controls—and in some embodiments precisely one of the thread controls317—empower the immediate sending of a single icon, such as the social approval icon. One or more of the thread controls317may comprise a bot-invocation or service-request control corresponding to a particular messaging bot or service. A portion of the thread controls317may comprise text controls for the entry of text. A portion of the thread controls317may comprise a text entry display area displaying text that has been entered or otherwise selected by the user, but that has not yet been sent to the other participants in the thread as a message. In some embodiments, text entered or selected for entry in a text entry display area may be communicated to the messaging server110of the messaging system100for analysis, the providing of suggestions, or other operations.

The user interface300may include a thread title305listing one or more other users involved in the thread. The thread title305may automatically use the name of a user, such as a full name, short name, or other name registered as the name for use with a particular user for messaging and/or social-networking interactions.

FIG. 3Billustrates an embodiment of a user interface325displaying a transit interface on a client device320. The transit interface may comprise an element of a messaging client.

A transit interface may be invoked when transit is requested, such as by selecting a transit control. In general, a service-specific interface may be invoked when a service-specific control is invoked. In some cases, a service-specific interface may be specific to a class or type of service, such as local transit (e.g., ride sharing). In other cases, a service-specific interface may be specific to a particular service provider, such as a particular transit provider.

A transit interface may include a transit information display335, such as a map of the local area of the client device320and, by proxy, the user of the client device320. The transit information display335may include a current location of the client device320, such as may be represented on a map of the local area.

A transit interface may include transit controls340. Transit controls may empower the specification of a starting location and destination location. Where transit service is being requested, such as in a ride sharing service, a starting location may comprise a location at which a user of the service will be picked up. A destination location may comprise a location to which a user of the service will be delivered. In the illustrated embodiment ofFIG. 3B, a starting location has been specified while a destination location has not. The starting location is associated with an estimated pick up time for the requested service. A destination location may be specified if the control reading “ADD DESTINATION” is selected. The starting location may be modified if the control represented by the current starting destination is selected. In some embodiments, a starting location and/or destination location may be specified such as by selecting it on a displayed map. In some embodiments, a displayed map may be zoomed into, zoomed out of, scrolled, or otherwise manipulated.

FIG. 3Cillustrates an embodiment of a user interface350displaying a destination configuration interface.

Transit configuration controls355may comprise a display a plurality of suggested locations. Suggested locations may be determined based on a variety of techniques. In some embodiments, suggested locations may be determined based on the contents of the message thread from which the transit configuration controls335are invoked. For instance, locations related to the context of the message thread may be suggested. In the illustrated embodiment, movie theaters may have been suggested in response to the message thread referencing getting to a movie.

In some embodiments, locations may be suggested based on their proximity, with nearer locations promoted over more distant locations. In some embodiments, locations may be suggested based on the history of one or more users involved in the message thread, and in particular the user of the client device320. For instance, locations recently visited, frequently visited, recently or frequently visited on previous occasions similar to the current occasion (e.g., time of day, day of the week), or otherwise related to a user's history may be suggested. In some embodiments, locations related to one or more users engaged in the message thread, such as addresses of one or more of the users, may be suggested. In some embodiments, locations relevant to one or more other users may be suggested. For instance, where another user is mentioned in a message thread, the address of that user—if made available to the user of the client device320—may be suggested.

The transit configuration controls335may include text entry controls. The suggested locations may be determined at least in part based on text entered using the text entry controls.

FIG. 3Dillustrates an embodiment of a user interface360displaying a configured transit request.

A configured transit request may include both a starting location and destination location specified. A text version of the starting location and the destination location may be displayed in the updated transit controls370. The updated transit controls370may empower the modification of the starting location and/or the destination location by selecting the currently-configured starting location or destination location. A graphic representation of the starting location and the destination location, as well as a suggested path, may be displayed in the updated transit information365. In some embodiments, a configured transit request may be displayed in association with an estimated time of travel for the configured trip.

FIG. 3Eillustrates an embodiment of a user interface375displaying a transit request in a message thread.

A configured transit request submitted to a service from a message thread may then be displayed in the message thread. An embodiment of a service request may be generated and added to the sequence of messages of the message thread and transmitted to all of the users engaged in the message thread. Each of the users engaged in the message thread may be provided an in-thread bot request display385in their view of the message thread. For a transit request, the in-thread bot request display385may comprise a text display of a starting location, a text display of a destination location, a visual representation of a starting location, a visual representation of a destination location, and/or a representation of a suggested route. In general, a request display may include a text descriptor of a requested service.

In some cases, a bot may generate a message and provide the message to a message thread. The message may relate to a service requested of the bot from within the message thread. A request to the bot having been made from within the thread may authorize the bot to transmit a message to the message thread, which it may otherwise be prevented from doing. In this instance, the in-thread bot message405comprises a confirmation of the service requested of the bot. In some embodiments, an in-thread bot message405may include an in-message bot control410—and may include a plurality of in-message bot controls. An in-message bot control410may empower a user to modify, cancel, or otherwise interact with the request to which the in-message bot message405relates. In this instance, the in-message bot control410empowers the cancelling of the requested transit service.

FIG. 4Billustrates an embodiment of a user interface425displaying a bot message for a service update in a message thread.

In the illustrated embodiment, a second in-thread bot message430has been added to the message thread by the bot. The second in-thread bot message430relates to an update regarding the service requested of the bot, in this case an update communicating a specific individual providing the service requested of the bot, other information related to the performance of the service, and an estimated time related to the performance of the service. The second in-thread bot message430further comprises in-message bot controls435empowering additional functions, such as contacting the specific individual providing the service and retrieving an updated estimate time of arrival for the individual providing the service.2.

FIG. 4Cillustrates an embodiment of a user interface450displaying an in-thread live chat message455from a service provider.

In some embodiments, in-thread messages for a service may be a bot message generated automatically by a messaging bot. However, in other embodiments, an in-thread message for a service may be an in-thread live chat message455. An in-thread live chat message455may comprise a message composed and submitted by a human operator in response to a service requested in a message thread. In contrast to a bot message, an in-thread live chat message455may be individually generated or individually selected and submitted to the messaging system100in response to the situation of a service or other request made in a message thread, rather than programmed for use or programmatically generated.

The in-thread live chat message455may be inserted into the message thread despite the service not generally being a participant in the message thread, not generally being privy to the contents of the message thread, and not generally being authorized to add messages to the message thread. A service may be authorized by the messaging system100to submit an in-thread live chat message455to a message thread based on the message thread having been used to make a request of, query to, or otherwise contacting the service. However, the service provider may be prevented from receiving and viewing any messages not directed to the service provider and may only be provided any messages specifically directed to the service provider, such as messages that use a service alias or messaging bot alias at the start or that are otherwise addressed to the service provider or are responding to a message from the service provider.

An in-thread live chat message455may be provided by the operator providing a specific service. In the illustrated embodiment, a driver for a ride-sharing service has transmitted the in-thread live chat message455to the messaging system100and had the in-thread live chat message455distributed to participants in the message thread. In these cases, an in-thread live chat message455may be associated for display with an account name, user avatar, or other personal identifying information for the operator providing a specific service and the operator may be individually authorized to temporarily access the message thread or a portion thereof. For instance, the operator may be individually authorized to temporarily access the portion of the message thread addressed to the operator or to the service with which the operator is associated. An operator or service may be addressed by prefixing the comment with an address symbol, such as the “@” symbol, and a name for the service.

Alternatively, an in-thread live chat message455may be provided by the service provider for the service, such as a representative of the service provider. For instance, a customer-service representative of a ride-sharing service may transmit an in-thread live chat message455to the messaging system100for distribution to participants in the message thread. In these cases, an in-thread live chat message455may be associated for display with an account name, user avatar, or other personal identifying information for the representative of the service and the representative may be individually authorized to temporarily access the message thread. Alternatively, an in-thread live chat message455may be associated for display with an account name, user avatar, or other identifying information for the service at large. A computer system for the service may be authorized to temporarily access the message thread or a portion thereof, with the service providing access to the computer system for communication with the message thread to its representatives according to its own procedures. For instance, the operator may be individually authorized to temporarily access the portion of the message thread addressed to the operator or to the service with which the operator is associated.

FIG. 5Aillustrates an embodiment of a user interface500displaying a trigger in a message thread.

A trigger may generally correspond to a word, phrase, or other element of a message thread that a messaging system100associates with a potential action. A bot trigger may generally correspond to a trigger that the messaging system100associated with a potential request to a bot. In the illustrated embodiment, the text segment “movie” may comprise a first bot trigger505and the text segment “Southpointe” a second bot trigger510. The first bot trigger505may indicate an interest in bot requests related to movies. The second bot trigger510may indicate an interest in bot requests related to the location “Southpointe,” which either independently or in association with the existing thread context of movies may be identified as being associated with a particular movie theater called “Southpointe.” A user selecting a trigger may invoke suggested services, such as suggested bots, related to the trigger. Triggers may be determined based on predetermined and pre-assigned associations between words and/or phrases and services, or may be automatically determined based on natural language programming techniques.

FIG. 5Billustrates an embodiment of a user interface525displaying suggested services in response to a trigger.

A user may select a trigger in a messaging thread interface. In response the messaging client may retrieve and display a plurality of suggested services, such as may correspond to suggests bots, in a plurality of triggered controls530. In some embodiments, the plurality of suggested services may be automatically displayed on response to the messaging client and/or messaging system100detecting a trigger. The triggered controls530may comprise a plurality of messaging bot options. A messaging bot option535may comprise a particular bot associated with a particular service. In some embodiments, a messaging bot option may be associated with service performance information540. Service performance information may include, for instance, estimated performance information such as an estimated time of arrival and estimated cost or price information. A messaging bot option may include service rating information545, the service rating information545comprising an evaluation of the quality of a service, such as may be derived from user feedback. A messaging bot option may be selected to invoke an interaction with an associated messaging bot. The messaging bot options may be displayed in association with the messaging thread from which they are invoked.

The triggered controls530may comprise suggestions for services and for messaging bots. The triggered controls530may comprise a ranked list of suggested messaging bots. Suggested messaging bots may be determined based on a variety of techniques and based on a variety of factors. Suggested messaging bots may be selected and ranked based on the location of the user(s) in the thread. For instance, messaging bots that are geographically proximate or more geographically proximate to a location of one or more users may be selected or ranked higher. Messaging bots that relate to activities that have previously been associated with a user's current geographic location may similarly be selected or ranked higher, such as suggesting restaurant-related messaging bots when a couple are messaging each other while both are at their place of employment.

Suggested messaging bots may be selected and ranked based on associations between one or more detected keywords or intents and the messaging bots. A keyword may correspond to a word or phrase extracted from the contents of a messaging interaction. The messaging system100may have a registry of relevant keywords and may examine the contents of messaging interactions to identify and extract those keywords as a basis for selecting and ranking messaging bots. For example, a mention of “ride” or “transport” may prompt the suggestion of transportation-related service or a higher ranking for transportation-related services. An intent may comprise a keyword, concept, phrase, or other identifier generated based on the context of a messaging interaction that is not explicitly used within the messaging interaction. The messaging system100may have a registry of intents and may perform natural language processing on the contents of a messaging interaction to determine intents inferred by the messaging interaction. For example, a mention of multiple specific movies may imply the intent keyword “movie” without a specific use of the word “movie.” In another example, a person-to-person inquiry regarding whether they “want to go see something” could imply an interest in movies without the direct use of the word “movie.”

Keywords and/or intent may be extracted from the content, or a portion of the content, of the messaging interaction embodied in a message thread. In some cases, a recent portion of the message thread may be used, such as by detecting a current period of engagement with the message thread and extracting keywords and/or intent from the message thread for that current period. The recent portion of a message thread may be defined according to a variety of techniques. In some cases, the recent portion may be defined according to a predefined length of time, with the recent portion being the segment of the thread exchanged during an extent of time spanning a length equal to the predefined length of time and concluding at the current time. In some cases, the recent portion may be determined as spanning a variable length, such as by detecting the most recent break in conversation of sufficient length, which may be predefined, to indicate temporary disengagement with the message thread. For example, the recent portion of the message thread may be the maximum extent of the thread concluding at the current time that does not include any gap in conversation longer than one hour. Other techniques for defining a recent portion of a thread may be used. This recent portion of the message thread may be analyzed to determine one or more keywords, which may comprise one or more explicit keywords explicitly used within the message thread and which may comprise one or more intent keywords inferred from the message thread based on natural language processing techniques.

Keywords, whether explicitly extracted or derived from intent, may be used to determine one or more services that may be of interest to the user(s) in the message thread. The triggered controls530may comprise a selection of messaging bots corresponding to one or more providers for the one or more services. For instance, keywords related to “movies” and “transportation” may be extracted or inferred. A plurality of providers related to movies may be selected, such as a ticket-vendor service and a movie-theater operator. A plurality of providers related to transportation may be selected, such as a plurality of ride sharing services. The plurality of providers for each of the plurality of services may be joined together into a plurality of combined providers representing the plurality of services detected as being of possible internet to the user(s) in the message thread. This plurality of combined providers, and their associated messaging bots, may then be ranked according to a variety of factors, including location, level of detected interest in the services provided by the providers, level of detected interest in the specific providers, previous history of requesting various services either globally for the one or more user(s) or specifically within the message thread, previous history of using various providers either globally for the one or more user(s) or specifically within the message thread, or according to any other relevant factor.

In some embodiments, where multiple services are to be offered, the ranking of the corresponding providers may be constructed so as to showcase the variety of services being offered. For instance, a highest-ranked provider for each service may be selected and offered as the top-listed provider (and therefore a top-listed associated messaging bot) prior to a second provider for any of the services. The highest-ranked provider for each service may be ranked according to predicted interest in the service in general and/or based on the predicted interest in the provider specifically, such as may be determined according to various factors described herein.

FIG. 6illustrates an embodiment of a user interface600displaying a prompt to link accounts.

Where a user already possesses an account with a particular service, and in particular where a messaging client is aware that the user has the account with the particular service, the user may be invited to link their messaging account with the messaging system100with the user account for the service. The messaging client may detect that the user already has an account with the service based on, for example, an application for the service being installed on the client device320, identifying information for the user (e.g., a phone number, an email address) being known to both the messaging client and the service, or using any known technique.

A user that already possesses an account with a service corresponding to a selected bot may be presented with an existing user dialog605. An existing user dialog605may comprise a control to cancel, or refrain, from linking accounts. An existing user dialog605may comprise a control to continue with linking accounts.

Linking accounts may include an exchange of information between the messaging system100and a system for the service. Linking accounts may include an exchange of identifying information for the user, such as name, demographic information, address, phone number, e-mail address, or other information. Linking accounts may include an exchange of financial information. In general, any information related to the user may be exchanged as a result of linking accounts. Linking accounts may empower the messaging system100to request services with the linked service on behalf of the user. Linking accounts may empower the linked service to transmit messages to the user via the messaging system100.

FIG. 7Aillustrates an embodiment of a user interface700displaying a new user dialog705.

A new user dialog705may be displayed by the messaging client when the messaging client lacks knowledge that the user has an existing account with the service. The new user dialog705may be invoked when a bot is selected where the messaging client lacks knowledge that the user has an existing account with the service. The new user dialog705may include a existing-account control empowering the user to indicate that they already have an account with the service and to provide information for the service account to link the accounts. The new user dialog705may include an account creation control empowering the user to configure an account with the service.

FIG. 7Billustrates an embodiment of a user interface725displaying an account detail request for an account creation dialog730.

The account creation dialog730may empower a user to create an account with the service for a selected bot. At least some portion of the required details for an account may be specified by the messaging system100where known to the messaging system100. In the illustrated embodiment, the email address and the public profile (i.e., for a social-networking system) may be shared to empower details required by the service.

However, some details may be unknown to the messaging system100and the account creation dialog730may therefore request that the user specify the unknown details. A needed information control735empowers a user to specify required information unknown to the messaging system100. In the illustrated embodiment, the messaging system100requests the phone number and credit card information for the user, for providing to the service. The messaging system100may retain this information to expand the user account information for the user, and may thereafter reuse this information.

Where information required by a service is still unknown to the messaging system100, the messaging client may present a disabled account creation control740. A disabled account creation control740may be inactive, such that a user may not use it to complete account creation. The disable account creation control740may be enabled once the required information is entered.

FIG. 7Cillustrates an embodiment of a user interface750displaying a completed account creation dialog.

The completed account creation dialog may correspond to a dialog shown once all of the required information for a user is registered with the messaging system100. Where a bot is selected that requires information all of which is known to the messaging system100, the complete account creation dialog may be immediately displayed without an intermediary incomplete account creation dialog. Now that all the information required by the service is registered with the messaging system100, the account creation dialog730now includes an enabled account creation control755. The enabled account creation control755may empower the user to initiate the creation of the account with the service. The messaging system100my provide the required information to the service and thereby perform the account creation.

In some embodiments, financial information may only be provided to the service in a tokenized form. A tokenized form of financial information, such as credit card information, may be sufficient to empower the service to perform a transaction without the service having access to the details of the financial information. For instance, a credit card number for the user may be hidden from the service and only maintained with the messaging system100. In some embodiments, the messaging system100may perform financial transactions on behalf of the user using the financial information for the user and then provide the required funds to the service. In either embodiments, the user's financial information may be protected by refraining from transmitting it to the service.

FIG. 8Aillustrates an embodiment of a user interface800displaying a partial bot address810with suggested bots805.

A user may enter text in a text entry field of a messaging interface using text controls. The text entered by the user may be analyzed to determine whether it may correspond to a bot invocation. In some embodiments, a particular symbol, such as the ‘@’ symbol, may be used to indicate bot invocation. The messaging client and/or messaging system100may detect the bot invocation symbol and suggest bots in return. Where additional text beyond the bot invocation symbol has been specified, the messaging system100may generate particular suggested bots805with bot aliases beginning with the specified text. A bot alias may correspond to a registered name for a bot, the name registered with the messaging system100.

The suggested bots805may be determined based on a variety of techniques. In some embodiments, suggested bots805may be determined based on the contents of the message thread in which the partial bot address810is entered. For instance, bots related to the context of the message thread may be suggested. In the illustrated embodiment, a bot for a movie service may have been suggested in response to the message thread referencing going to a movie. In some embodiments, bots may be suggested based on the history of one or more users involved in the message thread, and in particular the user of the client device320. For instance, bots recently used, frequently used, recently or frequently used on previous occasions similar to the current occasion (e.g., time of day, day of the week), or otherwise related to a user's history may be suggested. Any of various techniques may be used for the selection of the suggested bots805, such as any of the techniques described with reference toFIG. 5B. Selecting a suggested bot may automatically complete the text entry field with the complete alias for the selected bot.

FIG. 8Billustrates an embodiment of a user interface825displaying suggested commands830retrieved based on a complete bot address835.

A complete bot address835may comprise a text segment beginning with the bot invocation symbol and followed by a text segment corresponding to a bot alias. The completion of a bot address may be determined through the use of a particular character not allowed within a bot alias, such as a space. In response to a complete bot address835being entered in the text entry field, suggested commands830may be retrieved by the messaging client and provided to the user.

Suggested bot commands830may be determined by the service corresponding to the bot. Suggested bot commands830may comprise commands available for issuing to the bot. The suggested bot commands830may be determined based on a variety of techniques. In some embodiments, suggested bot commands830may be determined based on the contents of the message thread in which the complete bot address835is entered. For instance, bot commands related to the context of the message thread may be suggested. In the illustrated embodiment, a bot for a movie service may have been suggested in response to the message thread referencing going to a movie. However, in other embodiments the bot service may be prevented from receiving any message content not specifically marked for the bot so as to avoid violating the privacy of the message thread. In some embodiments, keywords may be provided to the bot service without providing the full history of the message thread.

In some embodiments, bot commands may be suggested based on the history of one or more users involved in the message thread, and in particular the user of the client device320. For instance, bot commands recently used, frequently used, recently or frequently used on previous occasions similar to the current occasion (e.g., time of day, day of the week), or otherwise related to a user's history may be suggested. In some embodiments, a user identifier for the user that entered the complete bot address835may be provided to the bot service to empower the bot service to act based on the user history known to it. In some embodiments, the bot service may be responsible for generating and providing suggested bot commands830to the messaging system100for providing to the user via the messaging client. Selecting a suggested bot command may automatically complete the text entry field with the complete bot command.

FIG. 8Cillustrates an embodiment of a user interface850displaying updated suggested commands855retrieved based on a partial bot command860.

A text entry field may contain a bot invocation symbol followed by a complete bot alias and a partial bot command860. The messaging system100may match the partial bot command860against bot commands for the bot service specified by the complete bot alias to provide updated suggested commands855corresponding to the partial bot command860, such as commands beginning with the characters of the partial bot command860. In some embodiments, the partial bot command860may provided to a bot service associated with the complete bot alias, with the updated suggested commands855provided in response and thereafter provided to the user via the messaging client. In these embodiments, the messaging system100may provide each text segment generated on the messaging client (i.e., each text segment generated through the iterative addition of characters) to the appropriate bot service and receive suggested commands in response and provide the suggested commands to the user.

FIG. 8Dillustrates an embodiment of a user interface875displaying an in-thread bot response885.

An in-thread bot command880entered via the text entry field for a message thread may be distributed as a message within the message thread to all participants in the message thread, and thereby to all devices used by all participants in the message thread. The in-thread bot command880may further be provided to the bot service.

The bot service may reply to the in-thread bot command880with an in-thread bot response885. The in-thread bot response885may be inserted into the message thread despite the bot service not generally being a participant in the message thread, not generally being privy to the contents of the message thread, and not generally being authorized to add messages to the message thread. The in-thread bot response885may comprise a response generated by the bot service in response to the in-thread bot command880. In this instance, the in-thread bot response885comprises in-thread bot controls890empowering the user to take action related to the in-thread bot response885. The user may also be empowered to responds to the in-thread bot response885using additional bot commands entered via the text entry field and transmitted out as elements of the message thread.

FIG. 9illustrates an embodiment of a message910being transmitted through a messaging system100.

A messaging system100may comprise a plurality of components. In some embodiments, these plurality of components may be distributed among a plurality of servers. In other embodiments, a single server may implement the plurality of components. In some embodiments, a plurality of servers may be executed by a single server device. In other embodiments, the plurality of servers may be executed by a plurality of server devices. In some embodiments, multiple instances of the various components and various servers may be executed to provide redundancy, improved scaling, and other benefits. Similarly, a client device may execute a plurality of components as part of a messaging client.

A client device may communicate with other devices using wireless transmissions to exchange network traffic. Exchanging network traffic, such as may be included in the exchange of messaging transactions, may comprise transmitting and receiving network traffic via a network interface controller (NIC). A NIC comprises a hardware component connecting a computer device, such as client device, to a computer network. The NIC may be associated with a software network interface empowering software applications to access and use the NIC. Network traffic may be received over the computer network as signals transmitted over data links. The network traffic may be received by capturing these signals and interpreting them. The NIC may receive network traffic over the computer network and transfer the network traffic to memory storage accessible to software applications using a network interface application programming interface (API). The network interface controller may be used for the network activities of the embodiments described herein, including the interoperation of the messaging client and messaging servers110through network communication. For example, the messaging client transmitting or receiving messages to or from a client front-end server935may be interpreted as using the network interface controller for network access to a communications network for the transmission or reception of information.

A messaging client may comprise a user interface component923. A user interface component923may be generally arranged to display user interfaces to a user of a client device and to receive user commands for the messaging client for the client device. The user interface component923may receive a messaging bot invocation in a message thread display on the client device and invoke a messaging bot interaction user interface on the client device in combination with the message thread display in response to the messaging bot invocation. The user interface component923may then receive a messaging bot interaction command via the messaging bot interaction user interface.

A messaging client may comprise a client messaging component926. A client messaging component926may be generally arranged to conduct messaging interactions on the behalf of the messaging client via communication with the client front-end server935. The client messaging component926may be operative to transmit the messaging bot interaction command from the client device to a messaging system. The messaging bot interaction command may be at least a portion of a message910, such as at least a portion of a text segment communicated as the message910. In some cases, the text segment comprising a message body of the message910may correspond to the messaging bot interaction command.

A client front-end server935may be generally arranged to act as a network access point to the messaging system100for client devices such as sender client device920. The client front-end server935may comprise a messaging component930, the messaging component930generally arranged to act as a network access point to messaging services for the messaging system100. The messaging component930may receive the message910from a sender client device920and add the message910to a message queue980.

The message queue980may be specifically associated with the user of sender client device920, such as by being uniquely associated within the messaging system100with a user account for the user of sender client device920. The message queue980may be a single queue used for all messaging endpoints used by this user. The message queue980may comprise a representation of updates in a strict linear order. The message queue980may be organized as a data unit according to a variety of techniques. The message queue980may be stored in semi-persistent memory, persistent storage, both semi-persistent memory and persistent storage, or a combination of the two. The message queue980may be organized according to a variety of data structures, including linked lists, arrays, and other techniques for organizing queues. The message queue980may generally comprise a first-in-first-out (FIFO) queue in which no update will be removed from the queue before any updates that were received prior to it.

The messaging system100may comprise a worker server945. In general, the messaging system100may comprise a plurality of worker servers that may be assigned to various tasks. A worker server945may comprise a message queue monitoring component940, the message queue monitoring component940arranged to monitor updates, such as may comprise messages, in the message queue980and other message queues of the messaging system100for various flags, indicators, and other information.

The message queue monitoring component940may be operative to monitor the message queue980. The message queue monitoring component940may examine each entry within the message queue980and detect that the message910indicates messaging bot invocation. In response to detecting that the message910indicates messaging bot invocation, the message queue monitoring component940may submit the message910to a bot framework component950. Submitting a message910to the bot framework component950may, in some embodiments, comprise transmitting the message910to the bot framework component950. In other embodiments, submitting a message910to the bot framework component950may comprise transmitting a notification to the bot framework component950that a message910with a messaging bot invocation was detected, such as by transmitting an identifier for the message910to the bot framework component950.

The messaging system100may comprise a bot front-end server955. A bot front-end server955may act as an access point to messaging bot services for the messaging system100. The bot front-end server955may act as an intermediary between the servers of the messaging system100and one or more internal and/or external bot execution servers. The bot front-end server955may comprise a bot framework component950generally arranged to provide an accessible framework to the messaging bot system.

The bot framework component950may be operative to receive the message910from the message queue monitoring component940, or receive notification of the message910from the message queue monitoring component940and retrieve the message910from the message queue980, determine a messaging bot associated with the message910, and submit the message to the messaging bot.

The messaging bot invocation may comprise a bot invocation text segment. The message910may comprise a text content portion, the text content portion recording the bot invocation text segment. The user interface component923may receive a bot invocation text segment in a text entry portion of the message thread display. The client messaging component926may transmit the bot invocation text segment to the messaging servers110.

A bot invocation text segment may be identified based on the text segment beginning with a bot invocation symbol, such as the “@” address symbol. The message queue monitoring component940may detect a bot invocation symbol in the text content portion of a message910and detect that the message910indicates messaging bot invocation based on detecting the bot invocation symbol. The message queue monitoring component940may be operative to examine each message in a message queue980for those messages that start with the bot invocation symbol.

In some embodiments, a sender client device920may flag messages that include information for a bot by flagging a metadata portion of a message910with a bot invocation flag. The message queue monitoring component940may detect a bot invocation flag in the metadata portion of the message910and detect that the message910indicates messaging bot invocation based on detecting the bot invocation flag.

In some cases, messaging bots may be executed by servers external to the messaging system100, such as an external bot server975operated by the service associated with the bot. The bot framework component950may determine an external bot server975for the service associated with the messaging bot. The messaging system100may maintain a bot alias registry indexed based on bot aliases. The bot framework component950may look up the messaging bot identified by a bot alias from the message910and retrieve bot information for the external bot server975associated with the bot alias. The bot information may indicate, without limitation, addressing information for contacting the external bot server975. The bot framework component950may submit the message910to the messaging bot by transmitting the message910to the external bot server975associated with the messaging bot. In some embodiments, submitting the message910may comprise extracting message content and transmitting the message content to the external bot server975using a bot server interaction application programming interface (API).

In other cases, messaging bots may be executed by the servers of the messaging system100. The bot framework component950may determine a hosted bot server965for the service associated with the messaging bot. The bot framework component950may look up the messaging bot identified by a bot alias from the message910and retrieve bot information for the hosted bot server965associated with the bot alias. A hosted bot server965may comprise a bot server maintained by the provider of the messaging system100. The bot framework component950may submit the message910to the messaging bot by transmitting the message910to the hosted bot server965associated with the messaging bot.

The messaging system100may assist users in finding bots and in addressing bots. The messaging system100may generate suggested messaging bots for the user of a client device. These suggestions may be generated in response to the predicted invocation of a messaging bot, such as by entering a bot invocation symbol in a text entry field of a messaging client. These suggestions may be selected on the context of the user performing the search, the context of the one or more other users in a message thread, the context of a message thread, and/or other context information. These suggestions may be refined as a user enters additional text in a text entry field by selecting those bot aliases that start with the text entered by the user in the text entry field.

The user interface component923may receive an alias initial portion in a text entry field of a messaging client. The user interface component923may identify the text entered in the text entry field as an alias initial portion based on it being preceded by a bot invocation symbol. However, in general, the user interface component923may transmit any text entered in the text entry field to the messaging system100. The user interface component923may transmit the alias initial portion to the bot framework component950. In some embodiments, the alias initial portion may be transmitted directly to the bot front-end server955. In other embodiments, the alias initial portion may be transmitted via the client front-end server935.

The bot framework component950may receive the alias initial portion of the bot alias text segment. The bot framework component950may match the alias initial portion against a bot alias registry to determine one or more predicted bot alias text segments and transmit the one or more predicted bot alias text segments to the sender client device920. The sender client device920may display the one or more predicted bot alias text segments to the user of the sender client device920as to make the one or more predicted bot alias text segments available to the user for selection or use. Where the user uses one of the predicted bot aliases communicated by the one or more predicted bot alias text segments, either by selecting in an interface or typing the bot alias into the text entry field, the message910may therefore comprise a bot alias text segment of the one or more predicted bot alias text segments in a text portion of the message910.

The messaging system100may assist users in determining bot commands. The messaging system100may generate suggested messaging bot commands for the user of a client device. These suggestions may be generated in response to the predicted invocation of a messaging bot, such as by entering a bot invocation symbol in a text entry field of a messaging client followed by an identified bot alias. These suggestions may be selected on the context of the user performing the search, the context of the one or more other users in a message thread, the context of a message thread, and/or other context information. The suggestion of bot commands may be performed by the services executing the bots, and as such the suggestions may be generated outside the messaging system100by the service providers.

These suggestions may be refined as a user enters additional text in a text entry field by selecting those bot commands that start with the text entered by the user in the text entry field. The user interface component923may receive a command text segment initial portion via the text entry portion of the message thread display, transmit the command text segment initial portion to the bot framework component950, and determine one or more predicted bot command text segments by receiving the one or more predicted bot command text segments from the bot framework component950in response to transmitting the command text segment initial portion to the bot framework component950.

The user interface component923may receive a bot invocation text segment in a text entry portion of a message thread display. Receiving this bot invocation text segment may correspond to receiving the messaging bot invocation. The user interface component923may transmit the bot invocation text segment to the bot framework component950to determine one or more predicted bot command text segments. As with suggestions for a bot alias, in some embodiments the bot invocation text segment may be transmitted to the bot framework component950via the client front-end server935.

The bot framework component950may receive the bot invocation text segment and extract a command initial portion of the bot command text segment. Extracting the command initial portion may comprise excluding a bot invocation symbol and a bot alias from the bot invocation text segment. Alternatively, in some embodiments, the entire bot invocation text segment may be submitting to the messaging bot. The bot framework component950may submit the command initial portion to the messaging bot and receive one or more predicted bot command text segments from the messaging bot. The bot framework component950may then transmit the one or more predicted bot command text segment to the client device. If the user uses one of the predicted bot command text segments then it may appears within a text portion of a message910.

The user interface component923may receive the one or more predicted bot command text segments from the bot framework component950and display the one or more predicted bot command text segments in the message thread display. This displaying of the one or more predicted bot command text segments may correspond to invoking the messaging bot interaction user interface.

The user interface component923may receive a user selection of a bot command text segment of the one or more predicted bot command text segments. The user selection may comprise selecting one of the predicted bot commands text segments in a display of the predicted bot commands segments. The user selection may comprise entering one of the predicted bot commands text segments in a text entry field of the messaging client. This bot command text segment may be transmitted to the messaging component930of the client front-end server935as a message910.

In some cases, a configuration interface for a messaging bot may be invoked as the messaging bot interaction user interface. Invoking the message bot within the message thread may comprise the user interface component923receiving a messaging bot control selection in a message thread display. In response to the messaging bot control selection, the user interface component923may display a messaging bot interaction configuration interface in the message thread display. The user interface component923may receive one or more user interface selections for the messaging bot interaction configuration interface. The received one or more user interface selections may comprise the messaging bot interaction command sent via the message910to the messaging system100.

In some cases, the control selected may be a service type control. A service type control indicates a category of services in which multiple providers may be available for the service. The user interface component923may receive a service type control selection of a service type control in the message thread display on the sender client device920. The user interface component923may display a plurality of messaging bot controls in the message thread display in response to the service type control selection.

The user interface component923may display service performance information in association with each of the plurality of messaging bot controls. Service performance information may comprise, without limitation, one or more of estimated cost, estimated time of arrival, estimated travel time, and service availability. Service performance information may be retrieved from the bot server for the associated messaging bot by the bot framework component950and provided to the user interface component923.

The use of a messaging bot, and therefore an associated service, may require an account for the user with the service. The user interface component923may receive a messaging bot control selection in the message thread display on the sender client device920. The user interface component923may determine that the user lacks a user account for a service associated with the messaging bot and, in response, display a user account creation interface for the service in the message thread display. The user interface component923may receive user interactions with the user account creation interface, generate a user account creation command based on the received user interactions with the user account creation interface, and transmit the user account creation command to the service. In some embodiments, the user account creation command may be transmitted directly to the service. In other embodiments, the user account creation command may be transmitted via the bot framework component950and/or client front-end server935.

Some services may require that a user phone number for the sender client device920be verified prior to the performance of a requested service. Where the messaging system100has already verified the phone number—such as by transmitting a verification code to the phone number (e.g., in a text message) and having the verification code entered in the messaging client—the messaging system100may attest to the verification of the phone number and therefore save the service from performing phone number verification and save the user from the effort of performing the phone number verification. As such, the messaging system100may verify a user phone number associated with the client device to the service in association with the user account creation command. Verifying the user phone number to the service may be operative to prevent the service from performing user phone number verification.

Where the financial information for a user is registered with the messaging system100the full financial information for the user may be held back from the service in order to protect the user's financial details. Instead, where a messaging bot interaction command invokes a service request with the service, the client messaging component926may transmit tokenized financial information for the user to the service. Tokenized financial information may empower the service to perform a financial transaction without revealing the full financial information for the user to the service. The messaging system100may use an irreversible transformation on the financial information to generate the tokenized financial information. In some cases, the financial information may be stored on the messaging servers110rather than or in addition to the sender client device920, with the tokenized financial information generated by and sent from the messaging servers110.

Where the user already has an account with the service, the messaging service100may make use of the existing account for arranging services with the service. Where the messaging system100does not currently have the financial information for the user, the service may provide the user's financial information to the messaging system100for use with financial transactions with the messaging system100and with other services. This providing of the financial information to the messaging system100may be in a complete, non-tokenized form. The user interface component923may receive a messaging bot control selection in the message thread display on the client device and determine that the user is associated with a user account for a service associated with the messaging bot. This determination may be made by either the messaging client on the sender client device920or by the messaging servers110. Either the sender client device920or the bot framework component950may query the service for financial information for the user in response to receiving the messaging bot control selection and store the financial information in association with the user of the messaging system100.

In addition to being extracted from the message queue980, the message910may be transmitted to a recipient client device990. The message thread display of the messaging client on the sender client device920may be associated with a message thread with the messaging system100. This message thread may be associated with two or more individual users of the messaging system. The client devices for those users other than the sender client device920, which may include the recipient client device990, may each receive a copy of the message910. Even where only two users are associated with the message thread, each user may be associated with more than one client device, increasing the number of client devices to receive the message910. Where additional users are associated with the message thread, such as in a group message thread, client devices for those additional users may also receive the message910. In general, the message910may be distributed to client devices through the regular operation of the messaging system100in addition to the message910being extracted for processing by a messaging bot.

FIG. 10illustrates an embodiment of a response1010to a message910in a messaging system100.

In some cases, the messaging system100may generate the bot response. A bot execution component960on a hosted bot server965may generate a messaging bot response1010to the message910. Some hosted bots may be developed internally to the provider of the messaging system100, which may include, without limitation, bots for playing games, accessing messaging system services, or other services. Some hosted bots may be developed externally to the provider of the messaging system100. These third-party bots may be hosted by the provider of the messaging system100, using a hosted bot server965as a hosting platform for third-party software executing the hosted bot. A bot execution component960may transmit the messaging bot response1010to the message910to the bot framework component950.

The bot framework component950may receive the messaging bot response1010to the message910from the bot server, whether from a hosted bot server965or an external bot server975. The bot framework component950may receive the messaging bot response1010to the message910and insert the messaging bot response1010in the message queue980. Inserting the messaging bot response1010in the message queue980may comprise adding the messaging bot response1010to the message queue980as a new update for the message queue980. The messaging component930may then transmit the messaging bot response1010to the sender client device920as part of the regular operation of the message queue980in providing messages in the message queue980to the devices of its associated user.

The message910may have been originated in association with a message thread. In some cases, the message thread may be a one-to-bot message thread in which the user directly engages with a bot without any additional users. In other cases, the message thread may include multiple users, such as a one-to-one message thread or a group message thread. The messaging bot response1010may be inserted in the message queue980marked for display in the message thread. The messaging bot response1010may be inserted in message queues for each participant in a message thread marked for display in the message thread.

The message thread may be associated with two or more individual users of the message system100. Each of the users may have a message queue associated with them with the messaging system100. The response1010may be inserted into the message queues for each of the two or more users. Each of these users may be associated with at least one client device, such as by having a messaging client on each of the client devices registered with a user account for each of the users. Messaging components on client front-end servers may therefore transmit the messaging bot interaction response1010from the messaging system100to the two or more client devices.

The client messaging component926of the messaging client on the sender client device920may receive the messaging bot interaction response1010from the messaging system100. The user interface component923of the messaging client may then display the messaging bot interaction response1010in the message thread display.

FIG. 11illustrates an embodiment of a subscription command1110in a messaging system100.

In most cases, bots may only be permitted add messages to a user's message queue980in response to a message sent out by the user to the bot. A messaging bot may be authorized to respond to a message910with a response1010because of the user sending the message910to the messaging bot. In some cases, the messaging bot may be authorized to send a single response1010to the message910. In other cases, the messaging bot may be authorized to send responses for a limited period of time in response to the message910.

In addition, users of the messaging system100may also be empowered to subscribe message threads to bots to be pushed updates from the bots. A subscription to a bot may authorize the bot to transmit messages to the subscribed message thread. This authorization may have restrictions, such as having a limited number of subscription messages that may be sent within a given time period. For example, a messaging bot may be restricted to sending at most one message a day or a specific number of messages a day. In some embodiments, subscriber thread preferences for a user may specify a restriction on the frequency with which a messaging bot may message a message thread.

A message910to a messaging bot may comprise a subscription command1110, the subscription command1110instructing the messaging system100and the messaging bot that the message thread associated with the message subscription command1110should receive subscription messages from the messaging bot. The bot framework component950may subscribe the message thread to the messaging bot in response to the bot subscription command1110. In various embodiments, the subscription command may be transmitted directly from the client messaging component926to the bot framework component950, may be transmitted directly from the messaging component930to the bot framework component950, or may be detected in the message queue980and thereby communicated to the bot framework component950.

The subscription command1110may also be received by a recipient client device990, such as every recipient client device for users involved in the message thread subscribed by the subscription command1110. The subscription command1110may be communicated to a recipient client device990as a notification in the message thread that the message thread has been subscribed to the messaging bot. In general, any member of a message thread may subscribe the thread to a messaging bot, unsubscribe the thread from the messaging bot, or modify the subscriber thread preferences for the message thread's subscription to the messaging bot. Any of these actions may result in a notification message being added to the message queue for each member of the message thread, the notification message communicating the action, whether subscription, un-subscription, or modification of subscriber thread preferences.

Subscriptions may be maintained in a subscription registry. A subscription registry may map between thread identifiers that uniquely identify message threads within the messaging system100and subscriptions to messaging bots. A subscription registry may comprise, without limitation, a database or database table with a row for each registered subscription. Each registered subscription may be associated with subscriber thread preferences for that subscription.

FIG. 12illustrates an embodiment of a broadcast message1210in a messaging system100.

The distribution of a broadcast message1210to client devices may be performed in two stages to accommodate the large number of recipients a broadcast message1210may have and therefore to distribute the work of broadcasting the broadcast message1210across multiple servers and server devices. In some cases, a messaging bot may have millions or billions of subscribers, which may exceed the ability of a single server device to distribute a broadcast message1210with a desired responsiveness. As such, a first stage server may generate the list of potential recipients and a plurality of second stage servers may add the broadcast message1210to the message queues of the recipients of the broadcast message1210.

The bot front-end server955may comprise a broadcast component1240. The broadcast component1240may be generally arranged to generate the list of potential recipients and to assign the distribution of the broadcast message1210to one or more broadcast workers. The broadcast component1240may receive a broadcast message1210from a messaging bot and determine a plurality of subscriber threads for the broadcast message. Determining the plurality of subscriber threads may be based on the messaging bot, such as by comparing a messaging bot identifier for the messaging bot to the subscription registry to retrieve the thread identifiers for the message threads subscribed to the messaging bot.

The broadcast component1240may divide the plurality of subscriber threads into a plurality of subscriber thread chunks. Subscriber thread chunks may have a predefined size within the messaging system100. The bot framework component950may generate a plurality of subscriber thread chunks based on the predefined chunk size, dividing the plurality of subscriber threads in chunks of the predefined size, with the likely exception of a single chunk of a smaller size due to the number of subscriber threads not being a precise duplicate of the predefined size. Other division schemes may be used, such as making the subscriber thread chunks of an approximately equal size—such as having a membership within one of each other—with this approximately equal size being as large as possible without exceeding the predefined size. Other division techniques may alternatively or additionally be used.

The bot framework component950may assign each of the plurality of subscriber threads chunks to a broadcast worker of a plurality of broadcast workers. This plurality of broadcast workers may execute on a plurality of workers servers1245. A broadcast worker1250may be generally arranged to process a subscriber thread chunk and to add the broadcast message1210to a plurality of message queues. The plurality of broadcast workers may add the broadcast message to a plurality of message queues based on the plurality of subscriber threads chunks, wherein each of the plurality of broadcast workers adds the broadcast message to the message queues corresponding to its assigned subscriber thread chunk.

The actions of the broadcast workers may be informed by subscriber thread preferences, which may be distributed to the broadcast workers as an element of the subscriber thread chunks. The plurality of broadcast workers may retrieve a plurality of subscriber thread preferences, each of the plurality of subscriber thread preferences associated with a corresponding subscriber thread. The plurality of broadcast workers may compare each of the plurality of subscriber threads preferences to the corresponding subscriber thread to determine a plurality of selected subscriber threads, the plurality of selected subscriber threads a subset of the plurality of subscriber threads. For instance, the subscriber thread preferences may specify a portion of the day during which broadcast messages are desired, such as excluding a nighttime sleeping portion of the day. Subscriber thread preferences may specify topics, frequency, content (e.g., text, images, video), or any other element of or context for a broadcast message and specify that such broadcast messages should or should not be allowed through. Various techniques may be used for specifying and applying rules for subscriber thread preferences without limitation. The plurality of broadcast workers may then add the broadcast message to a plurality of selected message queues corresponding to the plurality of selected subscriber threads, the plurality of selected messages queues corresponding to the message queues for users that are members of the selected subscriber threads.

FIG. 13Aillustrates one embodiment of a first logic flow1300. The logic flow1300may be representative of some or all of the operations executed by one or more embodiments described herein.

In the illustrated embodiment shown inFIG. 13A, the logic flow1300may receive a messaging bot invocation in a message thread display on a client device at block1302.

The logic flow1300may invoke a messaging bot interaction user interface on the client device in combination with the message thread display in response to the messaging bot invocation at block1304.

The logic flow1300may receive a messaging bot interaction command via the messaging bot interaction user interface at block1306.

The logic flow1300may transmit the messaging bot interaction command from the client device to a messaging system at block1308.

The logic flow1300may receive a messaging bot interaction response from the messaging system at the client device at block1310.

The logic flow1300may display the messaging bot interaction response in the message thread display at block1312.

The embodiments are not limited to this example.

FIG. 13Billustrates one embodiment of a first logic flow1350. The logic flow1300may be representative of some or all of the operations executed by one or more embodiments described herein.

In the illustrated embodiment shown inFIG. 13B, the logic flow1350may receive a message from a client device at block1352.

The logic flow1350may add the message to a message queue at block1354.

The logic flow1350may monitor the message queue at block1356.

The logic flow1350may detect that the message indicates messaging bot invocation at block1358.

The logic flow1350may submit the message to a bot framework component based on detecting that the message indicates messaging bot invocation at block1360.

The logic flow1350may determine a messaging bot associated with the message at block1362.

The logic flow1350may submit the message to the messaging bot at block1364.

The embodiments are not limited to this example.

FIG. 14illustrates a block diagram of a centralized system1400. The centralized system1400may implement some or all of the structure and/or operations for the messaging system100in a single computing entity, such as entirely within a single centralized server device1420.

The centralized server device1420may comprise any electronic device capable of receiving, processing, and sending information for the messaging system100. Examples of an electronic device may include without limitation an ultra-mobile device, a mobile device, a personal digital assistant (PDA), a mobile computing device, a smart phone, a telephone, a digital telephone, a cellular telephone, ebook readers, a handset, a one-way pager, a two-way pager, a messaging device, a computer, a personal computer (PC), a desktop computer, a laptop computer, a notebook computer, a netbook computer, a handheld computer, a tablet computer, a server, a server array or server farm, a web server, a network server, an Internet server, a work station, a mini-computer, a main frame computer, a supercomputer, a network appliance, a web appliance, a distributed computing system, multiprocessor systems, processor-based systems, consumer electronics, programmable consumer electronics, game devices, television, digital television, set top box, wireless access point, base station, subscriber station, mobile subscriber center, radio network controller, router, hub, gateway, bridge, switch, machine, or combination thereof. The embodiments are not limited in this context.

The centralized server device1420may execute communications operations or logic for the messaging system100using communications component1440. The communications component1440may implement any well-known communications techniques and protocols, such as techniques suitable for use with packet-switched networks (e.g., public networks such as the Internet, private networks such as an enterprise intranet, and so forth), circuit-switched networks (e.g., the public switched telephone network), or a combination of packet-switched networks and circuit-switched networks (with suitable gateways and translators). The communications component1440may include various types of standard communication elements, such as one or more communications interfaces, network interfaces, network interface cards (NIC), radios, wireless transmitters/receivers (transceivers), wired and/or wireless communication media, physical connectors, and so forth. By way of example, and not limitation, communication media1412includes wired communications media and wireless communications media. Examples of wired communications media may include a wire, cable, metal leads, printed circuit boards (PCB), backplanes, switch fabrics, semiconductor material, twisted-pair wire, co-axial cable, fiber optics, a propagated signal, and so forth. Examples of wireless communications media may include acoustic, radio-frequency (RF) spectrum, infrared and other wireless media.

The centralized server device1420may communicate with other devices over a communications media1412using communications signals1414via the communications component1440. The devices may be internal or external to the centralized server device1420as desired for a given implementation. The devices may include client devices1410. Client devices1410may generally correspond to any of personal computer device180, smartphone device150, table device160, client device320, sender client device920, and recipient client device990.

FIG. 15illustrates a block diagram of a distributed system1500. The distributed system1500may distribute portions of the structure and/or operations for the messaging system100across multiple computing entities. Examples of distributed system1500may include without limitation a client-server architecture, a 3-tier architecture, an N-tier architecture, a tightly-coupled or clustered architecture, a peer-to-peer architecture, a master-slave architecture, a shared database architecture, and other types of distributed systems. The embodiments are not limited in this context.

The distributed system1500may comprise a plurality of server devices1535,1545,1555,1565. In general, the server devices1535,1545,1555,1565may be the same or similar to the centralized server device1420as described with reference toFIG. 14. For instance, the server devices1535,1545,1555,1565may each comprise a processing component1530and a communications component1540which are the same or similar to the processing component1430and the communications component1440, respectively, as described with reference toFIG. 14. In another example, the server devices1535,1545,1555,1565may communicate over a communications media1512using communications signals1514via the communications components1540.

The server devices may comprise or employ one or more client programs that operate to perform various methodologies in accordance with the described embodiments. A plurality of client front-end server devices1535may each execute a client front-end server935, each of the client front-end servers executing tasks as described with reference to the client front-end server935. A plurality of worker server devices1545may each execute a worker server945or a worker server corresponding to one of the worker server1245, each of the worker servers executing tasks as described with reference to the worker server945or worker servers1245. A plurality of bot front-end server devices1555may each execute a bot front-end server955, each of the bot front-end servers executing tasks as described with reference to the bot front-end server955. A plurality of hosted bot server devices1565may each execute a hosted bot server965, each of the hosted bot servers executing tasks as described with reference to the hosted bot server965.

It will be appreciate that the relationship between servers and server devices may not be one-to-one. In some embodiments, a single server device may execute multiple servers. Similarly, in some embodiments, server devices may be transitioned between roles, and therefore transitioned between the server(s) they execute, based on the demands of the messaging system100. In general, various techniques may be used to distribute server tasks across a plurality of server devices.

Client devices1520may generally correspond to any of personal computer device180, smartphone device150, table device160, client device320, sender client device920, recipient client device990, and client devices1410.

FIG. 16illustrates an embodiment of an exemplary computing architecture1600suitable for implementing various embodiments as previously described. In one embodiment, the computing architecture1600may comprise or be implemented as part of an electronic device. Examples of an electronic device may include those described with reference toFIG. 14, 15, among others. The embodiments are not limited in this context.

As shown inFIG. 16, the computing architecture1600comprises a processing unit1604, a system memory1606and a system bus1608. The processing unit1604can be any of various commercially available processors, including without limitation an AMD® Athlon®, Duron® and Opteron® processors; ARM® application, embedded and secure processors; IBM® and Motorola® DragonBall® and PowerPC® processors; IBM and Sony® Cell processors; Intel® Celeron®, Core (2) Duo®, Itanium®, Pentium®, Xeon®, and XScale® processors; and similar processors. Dual microprocessors, multi-core processors, and other multi-processor architectures may also be employed as the processing unit1604.

The computer1602may include various types of computer-readable storage media in the form of one or more lower speed memory units, including an internal (or external) hard disk drive (HDD)1614, a magnetic floppy disk drive (FDD)1616to read from or write to a removable magnetic disk1618, and an optical disk drive1620to read from or write to a removable optical disk1622(e.g., a CD-ROM or DVD). The HDD1614, FDD1616and optical disk drive1620can be connected to the system bus1608by a HDD interface1624, an FDD interface1626and an optical drive interface1628, respectively. The HDD interface1624for external drive implementations can include at least one or both of Universal Serial Bus (USB) and IEEE 1394 interface technologies.

The drives and associated computer-readable media provide volatile and/or nonvolatile storage of data, data structures, computer-executable instructions, and so forth. For example, a number of program modules can be stored in the drives and memory units1610,1612, including an operating system1630, one or more application programs1632, other program modules1634, and program data1636. In one embodiment, the one or more application programs1632, other program modules1634, and program data1636can include, for example, the various applications and/or components of the messaging system100.

A user can enter commands and information into the computer1602through one or more wire/wireless input devices, for example, a keyboard1638and a pointing device, such as a mouse1640. Other input devices may include microphones, infra-red (IR) remote controls, radio-frequency (RF) remote controls, game pads, stylus pens, card readers, dongles, finger print readers, gloves, graphics tablets, joysticks, keyboards, retina readers, touch screens (e.g., capacitive, resistive, etc.), trackballs, trackpads, sensors, styluses, and the like. These and other input devices are often connected to the processing unit1604through an input device interface1642that is coupled to the system bus1608, but can be connected by other interfaces such as a parallel port, IEEE 1394 serial port, a game port, a USB port, an IR interface, and so forth.

A monitor1644or other type of display device is also connected to the system bus1608via an interface, such as a video adaptor1646. The monitor1644may be internal or external to the computer1602. In addition to the monitor1644, a computer typically includes other peripheral output devices, such as speakers, printers, and so forth.

When used in a LAN networking environment, the computer1602is connected to the LAN1652through a wire and/or wireless communication network interface or adaptor1656. The adaptor1656can facilitate wire and/or wireless communications to the LAN1652, which may also include a wireless access point disposed thereon for communicating with the wireless functionality of the adaptor1656.

When used in a WAN networking environment, the computer1602can include a modem1658, or is connected to a communications server on the WAN1654, or has other means for establishing communications over the WAN1654, such as by way of the Internet. The modem1658, which can be internal or external and a wire and/or wireless device, connects to the system bus1608via the input device interface1642. In a networked environment, program modules depicted relative to the computer1602, or portions thereof, can be stored in the remote memory/storage device1650. It will be appreciated that the network connections shown are exemplary and other means of establishing a communications link between the computers can be used.

FIG. 17illustrates a block diagram of an exemplary communications architecture1700suitable for implementing various embodiments as previously described. The communications architecture1700includes various common communications elements, such as a transmitter, receiver, transceiver, radio, network interface, baseband processor, antenna, amplifiers, filters, power supplies, and so forth. The embodiments, however, are not limited to implementation by the communications architecture1700.

As shown inFIG. 17, the communications architecture1700comprises includes one or more clients1702and servers1704. The clients1702may implement any of personal computer device180, smartphone device150, table device160, client device320, sender client device920, recipient client device990, client devices1410, and client devices1520. The servers1704may implement any of centralized server device1420and client front-end server devices1535, worker server devices1545, bot front-end server devices1555, and hosted bot server devices1565. The clients1702and the servers1704are operatively connected to one or more respective client data stores1708and server data stores1710that can be employed to store information local to the respective clients1702and servers1704, such as cookies and/or associated contextual information.

FIG. 18illustrates an embodiment of a device1800for use in a multicarrier OFDM system, such as the messaging system100. Device1800may implement, for example, software components1860as described with reference to messaging system100and/or a logic circuit1835. The logic circuit1835may include physical circuits to perform operations described for the messaging system100. As shown inFIG. 18, device1800may include a radio interface1810, baseband circuitry1820, and computing platform1830, although embodiments are not limited to this configuration.

The device1800may implement some or all of the structure and/or operations for the messaging system100and/or logic circuit1835in a single computing entity, such as entirely within a single device. Alternatively, the device1800may distribute portions of the structure and/or operations for the messaging system100and/or logic circuit1835across multiple computing entities using a distributed system architecture, such as a client-server architecture, a3-tier architecture, an N-tier architecture, a tightly-coupled or clustered architecture, a peer-to-peer architecture, a master-slave architecture, a shared database architecture, and other types of distributed systems. The embodiments are not limited in this context.

In one embodiment, radio interface1810may include a component or combination of components adapted for transmitting and/or receiving single carrier or multi-carrier modulated signals (e.g., including complementary code keying (CCK) and/or orthogonal frequency division multiplexing (OFDM) symbols) although the embodiments are not limited to any specific over-the-air interface or modulation scheme. Radio interface1810may include, for example, a receiver1812, a transmitter1816and/or a frequency synthesizer1814. Radio interface1810may include bias controls, a crystal oscillator and/or one or more antennas1818. In another embodiment, radio interface1810may use external voltage-controlled oscillators (VCOs), surface acoustic wave filters, intermediate frequency (IF) filters and/or RF filters, as desired. Due to the variety of potential RF interface designs an expansive description thereof is omitted.

Baseband circuitry1820may communicate with radio interface1810to process receive and/or transmit signals and may include, for example, an analog-to-digital converter1822for down converting received signals, a digital-to-analog converter1824for up converting signals for transmission. Further, baseband circuitry1820may include a baseband or physical layer (PHY) processing circuit1856for PHY link layer processing of respective receive/transmit signals. Baseband circuitry1820may include, for example, a processing circuit1828for medium access control (MAC)/data link layer processing. Baseband circuitry1820may include a memory controller1832for communicating with processing circuit1828and/or a computing platform1830, for example, via one or more interfaces1834.

In some embodiments, PHY processing circuit1826may include a frame construction and/or detection module, in combination with additional circuitry such as a buffer memory, to construct and/or deconstruct communication frames, such as radio frames. Alternatively or in addition, MAC processing circuit1828may share processing for certain of these functions or perform these processes independent of PHY processing circuit1826. In some embodiments, MAC and PHY processing may be integrated into a single circuit.

The computing platform1830may provide computing functionality for the device1800. As shown, the computing platform1830may include a processing component1840. In addition to, or alternatively of, the baseband circuitry1820, the device1800may execute processing operations or logic for the messaging system100and logic circuit1835using the processing component1840. The processing component1840(and/or PHY1826and/or MAC1828) may comprise various hardware elements, software elements, or a combination of both. Examples of hardware elements may include devices, logic devices, components, processors, microprocessors, circuits, processor circuits, circuit elements (e.g., transistors, resistors, capacitors, inductors, and so forth), integrated circuits, application specific integrated circuits (ASIC), programmable logic devices (PLD), digital signal processors (DSP), field programmable gate array (FPGA), memory units, logic gates, registers, semiconductor device, chips, microchips, chip sets, and so forth. Examples of software elements may include software components, programs, applications, computer programs, application programs, system programs, software development programs, machine programs, operating system software, middleware, firmware, software modules, routines, subroutines, functions, methods, procedures, software interfaces, application program interfaces (API), instruction sets, computing code, computer code, code segments, computer code segments, words, values, symbols, or any combination thereof. Determining whether an embodiment is implemented using hardware elements and/or software elements may vary in accordance with any number of factors, such as desired computational rate, power levels, heat tolerances, processing cycle budget, input data rates, output data rates, memory resources, data bus speeds and other design or performance constraints, as desired for a given implementation.

Device1800may be, for example, an ultra-mobile device, a mobile device, a fixed device, a machine-to-machine (M2M) device, a personal digital assistant (PDA), a mobile computing device, a smart phone, a telephone, a digital telephone, a cellular telephone, user equipment, eBook readers, a handset, a one-way pager, a two-way pager, a messaging device, a computer, a personal computer (PC), a desktop computer, a laptop computer, a notebook computer, a netbook computer, a handheld computer, a tablet computer, a server, a server array or server farm, a web server, a network server, an Internet server, a work station, a mini-computer, a main frame computer, a supercomputer, a network appliance, a web appliance, a distributed computing system, multiprocessor systems, processor-based systems, consumer electronics, programmable consumer electronics, game devices, television, digital television, set top box, wireless access point, base station, node B, evolved node B (eNB), subscriber station, mobile subscriber center, radio network controller, router, hub, gateway, bridge, switch, machine, or combination thereof. Accordingly, functions and/or specific configurations of device1800described herein, may be included or omitted in various embodiments of device1800, as suitably desired. In some embodiments, device1800may be configured to be compatible with protocols and frequencies associated one or more of the 3GPP LTE Specifications and/or IEEE 1802.16 Standards for WMANs, and/or other broadband wireless networks, cited herein, although the embodiments are not limited in this respect.

Embodiments of device1800may be implemented using single input single output (SISO) architectures. However, certain implementations may include multiple antennas (e.g., antennas1818) for transmission and/or reception using adaptive antenna techniques for beamforming or spatial division multiple access (SDMA) and/or using MIMO communication techniques.

It should be appreciated that the exemplary device1800shown in the block diagram ofFIG. 18may represent one functionally descriptive example of many potential implementations. Accordingly, division, omission or inclusion of block functions depicted in the accompanying figures does not infer that the hardware components, circuits, software and/or elements for implementing these functions would be necessarily be divided, omitted, or included in embodiments.

A computer-implemented method may comprise receiving a messaging bot invocation in a message thread display on a client device; invoking a messaging bot interaction user interface on the client device in combination with the message thread display in response to the messaging bot invocation; receiving a messaging bot interaction command via the messaging bot interaction user interface; transmitting the messaging bot interaction command from the client device to a messaging system; receiving a messaging bot interaction response from the messaging system at the client device; displaying the messaging bot interaction response in the message thread display.

A computer-implemented method may further comprise receiving a bot invocation text segment in a text entry portion of the message thread display, wherein receiving the bot invocation text segment comprises receiving the messaging bot invocation; determining one or more predicted bot command text segments; displaying the one or more predicted bot command text segments in the message thread display, wherein displaying the one or more predicted bot command text segments comprises invoking the messaging bot interaction user interface; receiving a user selection of a bot command text segment of the one or more predicted bot command text segments; and transmitting the bot command text segment corresponding to the user selection from the client device to the messaging system, wherein transmitting the bot command text segment to the messaging system comprises transmitting the messaging bot interaction command from the client device to a messaging system.

A computer-implemented method may further comprise receiving a command text segment initial portion via the text entry portion of the message thread display; transmitting the command text segment initial portion to the messaging system; and determining the one or more predicted bot command text segments by receiving the one or more predicted bot command text segments from the messaging system in response to transmitting the command text segment initial portion to the messaging system.

A computer-implemented method may further comprise receiving a messaging bot control selection in the message thread display on the client device, wherein receiving the messaging bot control selection comprises receiving the messaging bot invocation, the messaging bot control selection for a messaging bot control associated with a messaging bot; displaying a messaging bot interaction configuration interface in the message thread display, wherein displaying the messaging bot interaction configuration interface comprises invoking the messaging bot interaction user interface; and receiving one or more user interface selections for the messaging bot interaction configuration interface, wherein receiving the one or more user interface selections comprises receiving the messaging bot interaction command.

A computer-implemented method may further comprise receiving a service type control selection of a service type control in the message thread display on the client device; displaying a plurality of messaging bot controls in the message thread display in response to the service type control selection, the plurality of messaging bot controls comprising the messaging bot control; and displaying service performance information in association with each of the plurality of messaging bot controls, the service performance information comprising one or more of estimated cost, estimated time of arrival, estimated travel time, and service availability.

A computer-implemented method may further comprise the client device associated with a user of the messaging system, further comprising: receiving a messaging bot control selection in the message thread display on the client device, wherein receiving the messaging bot control selection comprises receiving the messaging bot invocation, the messaging bot control selection for a messaging bot control associated with a messaging bot; determining that the user lacks a user account for a service associated with the messaging bot; displaying a user account creation interface for the service in the message thread display; receiving user interactions with the user account creation interface; generating a user account creation command based on the received user interactions with the user account creation interface; and transmitting the user account creation command to the service.

A computer-implemented method may further comprise verifying a user phone number associated with the client device to the service in association with the user account creation command, wherein verifying the user phone number to the service is operative to prevent the service from performing user phone number verification.

A computer-implemented method may further comprise the client device associated with a user of the messaging system, wherein transmitting the messaging bot interaction command from the client device to the messaging system invokes a service request with a service, further comprising: transmitting tokenized financial information for the user to the service.

A computer-implemented method may further comprise the client device associated with a user of the messaging system, further comprising: receiving a messaging bot control selection in the message thread display on the client device, wherein receiving the messaging bot control selection comprises receiving the messaging bot invocation, the messaging bot control selection for a messaging bot control associated with a messaging bot; determining that the user is associated with a user account for a service associated with the messaging bot; querying the service for financial information for the user in response to receiving the messaging bot control selection; and storing the financial information in association with the user of the messaging system.

A computer-implemented method may further comprise the message thread display associated with a message thread with the messaging system, the message thread associated with two or more individual users of the messaging system.

A computer-implemented method may further comprise the two or more individual users associated with two or more client devices, the two or more client devices comprising the client device, further comprising: transmitting the messaging bot interaction response from the messaging system to the two or more client devices.

An apparatus may comprise a processor circuit on a device; a user interface component operative on the processor circuit to receive a messaging bot invocation in a message thread display on a client device; invoke a messaging bot interaction user interface on the client device in combination with the message thread display in response to the messaging bot invocation; receive a messaging bot interaction command via the messaging bot interaction user interface; and display a messaging bot interaction response in the message thread display; and a client messaging component operative on the processor circuit to transmit the messaging bot interaction command from the client device to a messaging system; and receive the messaging bot interaction response from the messaging system at the client device. The apparatus may be operative to implement any of the computer-implemented methods described herein.

A computer-implemented method may comprise receiving a message from a client device; adding the message to a message queue; monitoring the message queue; detecting that the message indicates messaging bot invocation; and submitting the message to a bot framework component based on detecting that the message indicates messaging bot invocation; determining a messaging bot associated with the message; and submitting the message to the messaging bot.

A computer-implemented method may further comprise the message comprising a text content portion, further comprising: detecting a bot invocation symbol in the text content portion of the message; and detecting that the message indicates messaging bot invocation based on detecting the bot invocation symbol.

A computer-implemented method may further comprise the message comprising a metadata portion, further comprising: detecting a bot invocation flag in the metadata portion of the message; and detecting that the message indicates messaging bot invocation based on detecting the bot invocation flag.

A computer-implemented method may further comprise submitting the message to the messaging bot by transmitting the message to a bot server associated with the messaging bot.

A computer-implemented method may further comprise receiving a messaging bot response to the message from the bot server.

A computer-implemented method may further comprise generating a messaging bot response to the message; and transmitting the messaging bot response to the message to the bot framework component.

A computer-implemented method may further comprise receiving a messaging bot response to the message; and inserting the messaging bot response in the message queue.

A computer-implemented method may further comprise transmitting the messaging bot response to the client device.

A computer-implemented method may further comprise the message associated with a message thread, the messaging bot response inserted in the message queue marked for display in the message thread.

A computer-implemented method may further comprise the message thread associated with two or more individual users.

A computer-implemented method may further comprise the message comprising a text portion, the text portion comprising a bot alias text segment, further comprising: receiving an alias initial portion of the bot alias text segment; matching the alias initial portion against a bot alias registry to determine one or more predicted bot alias text segments, the one or more predicted bot alias text segments comprising the bot alias text segment; and transmitting the one or more predicted bot alias text segments to the client device.

A computer-implemented method may further comprise the message comprising a text portion, the text portion comprising a bot command text segment, further comprising: receiving a command initial portion of the bot command text segment; submitting the command initial portion to the messaging bot; receiving one or more predicted bot command text segments from the messaging bot, the one or more predicted bot command text segments comprising the bot command text segment; and transmitting the one or more predicted bot command text segment to the client device.

A computer-implemented method may further comprise the message associated with a message thread, the message comprising a bot subscription command, further comprising: subscribing the message thread to the messaging bot in response to the bot subscription command; receiving a broadcast message from the messaging bot; determining a plurality of subscriber threads for the broadcast message based on the messaging bot, the plurality of subscriber threads comprising the message thread; dividing the plurality of subscriber threads into a plurality of subscriber thread chunks; assigning each of the plurality of subscriber threads chunks to a broadcast worker of a plurality of broadcast workers; and adding the broadcast message to a plurality of message queues based on the plurality of subscriber threads chunks by the plurality of broadcast workers, the plurality of message queues comprising the message queue.

A computer-implemented method may further comprise retrieving a plurality of subscriber thread preferences, each of the plurality of subscriber thread preferences associated with a corresponding subscriber thread; comparing each of the plurality of subscriber threads preferences to the corresponding subscriber thread to determine a plurality of selected subscriber threads, the plurality of selected subscriber threads a subset of the plurality of subscriber threads; and adding the broadcast message to a plurality of selected message queues corresponding to the plurality of selected subscriber threads.

An apparatus may comprise a processor circuit on a device; a messaging component operative on the processor circuit to receive a message from a client device; and add the message to a message queue; a message queue monitoring component operative on the processor circuit to monitor the message queue; detect that the message indicates messaging bot invocation; and submit the message to a bot framework component based on detecting that the message indicates messaging bot invocation; and the bot framework component operative to determine a messaging bot associated with the message; and submit the message to the messaging bot. The apparatus may be operative to implement any of the computer-implemented methods described herein.

At least one computer-readable storage medium may comprise instructions that, when executed, cause a system to perform any of the computer-implemented methods described herein.