Patent ID: 12197967

DESCRIPTION

The technology described herein allows multiple users to use a software recipe, for example, a software recipe or execution thereof may be customized for each user. In some implementations, the technology may allow a user to use their own account with an external system. According to some implementations, the technology may be used within chat platforms, such as Slack™ or Microsoft Teams™ where bots may be used.

In some implementations, bots and/or software recipes may be personal or designed to function in a group environment. For instance, the technology described herein may be used from a single user's or administrator's perspective within a team, but may be automatically customized to each individual user's perspective. The administrator may build a software recipe and/or a bot for a user or for a team, and may, according to some implementations, tag an attribute or object of the software recipe as customizable, as described below. Permissions, objects, or other attributes of a recipe or bot may be global within a group of users or specific to individual users. For example, objects in a recipe or bot can be tagged by an administrator to prevent the system from executing certain commands from certain users or may be tagged to execute certain commands in certain user's context (e.g., to customize the experience or actions for that user).

A recipe may include an integration flow that contains a trigger and a set of actions. The trigger may cause the actions in a recipe to be executed. Actions may include the routines the software recipe runs. In some implementations, each action may include an input configuration and may be associated with a given application. Each trigger and action may further include an input schema and an output schema. Actions may run in parallel, series, or various combinations thereof. In some instances, one action may be dependent upon the output of a preceding action. In some recipe configurations, the different actions in the software recipe are associated with different applications, and the software recipe automates the interaction between the different applications using the application programming interfaces (APIs) of those applications. For instance, the software recipe may flow, sync, etc., data from one application to another, populate multiple different applications with data from a certain source application, etc. In some implementations, the software recipes are written in Ruby, and the secure containers of the worker instances interpret and process the codes, although it should be understood that other languages and interpreters may be used.

According to some implementations, the technology described herein may provide for an intermediate software layer to facilitate interaction between a particular user and an application using a bot (e.g., the interaction bot120), wherein the intermediate layer is coupled to a configurable customizations database to allow a single bot to be used among a group of users while personalizing the experience and/or bot actions for each user. For example, a single bot or recipe could be installed once for a group/team of users by an administrator, but the bot or recipe could be run for the specific user thereby customizing the use and/or results of the software recipe to that user (or, in some instances, group of users). In some instances, the administrator may define the behavior of the software recipe for the whole group. The techniques described herein may enable individualized user specific customization and/or interaction (defined by the administrator or individual users) within the group of users for the single bot. For instance, certain commands/requests may be identified as using a personalized connection (e.g., to an external system and/or bot).

In some implementations, the technology may run in a group environment, such as an online chat channel. The technology may authenticate individuals to allow the individuals to perform specific actions in an external system, for example, through a bot and/or software recipe. For example, in a group environment, such as within a chat tool, the technology described herein may allow a particular action (e.g., by or using a service or external system connected to the software recipe) to be performed by a user calling a software recipe via a chat bot, the user being authenticated at runtime. In some implementations, the technology may identify a specific user within a group of users and cause a bot and/or recipe to customize the recipe result for that user, despite, for example, having only a single bot and/or a single instance of a recipe.

In some implementations, the technology may provide an extra level of authorization, so that, a user that is a member of a chat channel (e.g., a group chat or group collaboration environment) may be authenticated for a particular task. In some implementations, the authentication may be performed by a connected service (e.g., the service software application108). By offloading the task of authentication from the bot or software recipe, implementations of the technology described herein reduce bandwidth and processing resource consumption.

Further, the technology described herein allows an administrator to generate a recipe that authenticates a user with a service software application108, for example, using late connection binding, as described in detail below. For instance, the technology described herein my allow an administrator to generate a single software recipe with a connection placeholder that indicates that a recipe may connect with an external service, such as the service software application108using connection details to be determined at runtime. Accordingly, while there may be many users who may each be authenticated with an external service (e.g., each using separate login credentials), the software recipe may dynamically adapt to each user at runtime. As such, the technology is beneficial as it reduces the processing and memory storage resources consumed using separate software recipes for each of the users' connections.

With reference to the figures, reference numbers may be used to refer to components found in any of the figures, regardless whether those reference numbers are shown in the figure being described. Further, where a reference number includes a letter referring to one of multiple similar components (e.g., component000a,000b, and000n), the reference number may be used without the letter to refer to one or all of the similar components.

FIG.1depicts an example system100and communication flow for implementing late connection binding, for example, using bots. The example system100may include a software recipe manager110, an interface software application104accessible by one or more users112a. . .112n, and a service software application108with one or more connections106a. . .106nto one or more software recipe manager(s)110. A connection106may be a digital communication between, for example, the software recipe manager110and the service software application108via a computer communication protocol. In some implementations, the connections106may use connection details, such as authentication credentials or tokens, as described in further detail elsewhere herein.

The software recipe manager110may, in some implementations, include one or more hardware and/or virtual servers programmed to perform the operations, acts, and/or functionality described herein. The components of the software recipe manager110may comprise software routines storable in one or more non-transitory memory devices and executable by one or more computer processors to carry out the operations, acts, and/or functionality described herein. In further implementations, these routines, or a portion thereof, may be embodied in electrical hardware that is operable to carry out the operations, acts, and/or functionality described herein. In some implementations, the software recipe manager110may interact with a user, for example, via the interface software application104, determine which recipe to execute, determine a connection to a service software application108, and execute the software recipe using the determined connection. In some implementations, the software recipe manager110may also facilitate the creation of recipes.

The service software application108may be implemented using software and/or hardware logic executable by a computing system to perform the operations herein. In some implementations, the service software application108may be operational on one or more hardware and/or virtual servers programmed to perform the operations, acts, and/or functionality described herein. For instance, the service software application108may be operable on a third-party server communicatively coupled with the software recipe manager110, for example, via a computer network. For example, the server software application may include a service that receives data requests and serves responses, for example from and to the software recipe manager110or another computing device. Examples of service software application108sinclude Salesforce™, Google™ calendars, databases, etc.

In some implementations, the service software application108may use user credentials to provide authenticated communication with computing devices. For example, users may have accounts, along with usernames and passwords, to log into the service software application108. The service software application108may generate secure tokens, for example, using OAuth (e.g., OAuth 1.0, OAuth 2, etc.) and provide the tokens (e.g., to the software recipe manager110) for future authentication and/or identification of the computing device of the user, although other implementations are possible and contemplated herein.

The interface software application104may include an application configured to receive inputs from a user and provide outputs to the user. For example, the interface software application104may include a chat application, such as Slack™, Microsoft Teams™, Google Hangouts™, Skype®, etc. It should be noted that implementations of the technology described herein may additionally or alternatively include a short messaging service (SMS), multimedia messaging service (MMS), e-mail, a web form, HTTPS communication, or another communication application or service, for example.

In some implementations, the interface software application104may be implemented using software and/or hardware logic executable by a computing system to perform the operations herein. In some implementations, the interface software application104may be operational on one or more hardware and/or virtual servers programmed to perform the operations, acts, and/or functionality described herein. For instance, the interface software application104may be operable on a third-party server communicatively coupled with the software recipe manager110, for example, via a computer network or, in some implementations, may be operable on the same server with the software recipe manager110.

In some implementations, the software recipe manager110may include an interaction bot120, a recipe engine122, a recipe data store124, and/or a connection data store126. It should be understood that the components of the software recipe manager110may be further subdivided or combined. Further, it should be noted that the functionality and components of the software recipe manager110may be operable a single device or distributed among multiple devices.

In some implementations, the interaction bot120may be implemented using software and/or hardware logic executable by a computing system to perform the operations herein, such as receiving commands from a user (e.g., via the interface software application104or another input) thereby providing trigger events, conditions, and/or other information for executing software recipes to the recipe engine122. In some implementations, the interaction bot120may include a virtual agent that interacts with users using verbal or textual communication, for example, it may receive messages in a group chat environment. For example, the interaction bot120may scan the messages in a group chat environment for keywords or addresses that signal the interaction bot120from the chat. For instance, a message including @interactionbot may indicate to the interaction bot120that the contents of the message or subsequent messages are directed to the interaction bot120. The interaction bot120may then perform an operation (e.g., calling/running a recipe based on the contents of the message or other input).

In some implementations, the interaction bot120may be programmed to intercept messages directed to a service software application108and cause recipes associated with the service software application108to be executed. For example, an interaction bot120may recognize the message “@salesforce run my performance report” and may accordingly run a recipe with the trigger event: “run my performance report” (or “@salesforce run my performance report”) and the action/response to communicate with a server associated with Salesforce® to run a report for the particular user (or group of users) dictated by the software recipe, as described in further detail below.

The interaction bot120may include a virtual agent, chat bot, or workbot. The interaction bot120may refer to an intelligent bot for use with a system or application, for example a bot for use in Slack® chat for interacting with Salesforce®. In some implementations, the interaction bot120and/or a software recipe may be associated with an administrator's account and would return values for a connection specific to the administrator (e.g., the administrator's Salesforce® statistics). In some implementations, for example, as described below, the interaction bot120and/or software recipe may have a late bindable connection, so that the interaction bot120and/or software recipe may be executed using particular connection details for a specific user (e.g., one of many users instead of simply an administrator or a creator of the software recipe).

In some instances, interaction bots120or chatbots may enable chat users to communicate with applications, for example, a chatbot may refer to a bot configured to provide a conversational/chat interface to a user, for example, with one or more applications. For example, a user can interact with a service software application108from a chat interface. For instance, when a user types the appropriate instructions into a chat platform, the chat platform (e.g., using an interaction bot120) may collect this information and pass it on the appropriate application to execute the instructions. In some instances, the bot may maintain an authorized connection to a service software application to carry out these instructions. Bots may use single ‘admin’ type credentials to carry out these instructions on behalf of all chat users, may use team type credentials for groups of chat users, or may use individual credentials for each user.

In some implementations, the recipe engine122may be implemented using software and/or hardware logic executable by a computing system to perform the operations herein, such as creating and/or executing recipes. For instance, the recipe engine122may allow a user to generate a recipe (e.g., which may be used with or as an interaction bot120) and/or may execute a recipe in response to a trigger event/condition. In some implementations, the recipe engine122may receive events and, in response, execute actions dictated by recipes. In some implementations, where the software recipes include connection placeholders, the recipe engine122may determine connection details to establish a connection as part of execution of the software recipe, for instance, at runtime.

In some implementations, the recipe engine122may interact with the recipe data store124to store recipes, triggers, actions, etc. The recipe data store124is an information source for storing and providing access to data. The data stored by the recipe data store124may be organized and queried using various criteria including any type of data stored by it, such as a user identifier, tags, locations, user devices, electronic address, trigger events/conditions, actions/responses, etc. The recipe data store124may include data tables, relational/semi-structured/graph/etc., databases, or other organized or unorganized collections of data. The interaction bot120and/or recipe engine122may be coupled to retrieve, generate, and/or store any applicable data in the recipe data store124in order to carry out their respective acts and functionalities.

In some implementations, the recipe engine122may interact with the connection data store126to retrieve connection data (e.g., connection data, tokens, credentials, computing device/service addresses, etc.) and store connection data therein. The connection data store126is an information source for storing and providing access to data. The data stored by the connection data store126may be organized and queried using various criteria including any type of data stored by it, such as a user identifier, tags, locations, user devices, electronic address, connection details, login credentials, security or access tokens, etc. The connection data store126may include data tables, relational/semi-structured/graph/etc., databases, or other organized or unorganized collections of data. The interaction bot120and/or recipe engine122may be coupled to retrieve, generate, and/or store any applicable data in the connection data store126in order to carry out their respective acts and functionalities.

In some implementations, the connection data store126may include a logical name space for the accounts. The connections and accounts may be owned by an administrative user or by individual users. When a new connection is generated or otherwise determined, a command (e.g., as an action of a recipe) may be executed with the specified connection. The connection data store126may provide a secure storage space for credentials or tokens, for example. For instance, tokens, credentials, or other connection details may be stored in an encrypted space and, when an action is performed where the connection details are needed (e.g., where a connection placeholder is present in a recipe), the connection details may be retrieved and used to complete the action, for example, on behalf of the user.

In some implementations, the connection data store126may store tokens or information used in authentication although other implementations are possible and contemplated herein. For instance, the connection data store126may store login credentials themselves. Further, it should be noted that, as described in further detail below, the connection details (e.g., tokens) may have expiry dates after which they may be re-authenticated in order to continue to establish connections with service software applications108. In some implementations, the software recipe manager110may receive tokens from service software application108sin response to login credentials of users being authenticated by the service software application108and/or, in some implementations, the software recipe manager110may collect usernames and passwords from users.

In some implementations, an interaction bot120and/or recipe engine122may initially use an administrator account credential upon receiving a command/request or may automatically detect that the user who is creating a ticket to perform the command is not the administrator, for example. The interaction bot120and/or recipe engine122may check if the user's personalized connection is already stored in a database, such as the connection data store126. If no personalized connection is stored in the database, the interaction bot120and/or recipe engine122may request that the user create a personalized connection for the particular system, for example, the interaction bot120and/or recipe engine122may facilitate the user to create an account with the service software application108. The recipe engine122, for instance, may then continue execution using the user specific personalized account.

Although not shown inFIG.1, in some implementations, the components of the system100may communicate via a computer network, such as the network202, as described in reference toFIG.2A.

FIG.2Ais a block diagram illustrating an example integration management system200encompassed by the technology. The illustrated example system200includes client devices206a. . .206n, a server system250, and third-party applications260, which are communicatively coupled via a network202for interaction with one another. For example, the client devices206a. . .206nmay be respectively coupled to the network202and may be accessible by users212a. . .212n(also referred to individually and collectively as212, which may correspond to the users112described above). The server system250and third-party applications260are also communicatively coupled to the network202. The use of the nomenclature “a” and “n” in the reference numbers indicates that any number of those elements having that nomenclature may be included in the system200, for example.

The network202may include any number of networks and/or network types. For example, the network202may include, but is not limited to, one or more local area networks (LANs), wide area networks (WANs) (e.g., the Internet), virtual private networks (VPNs), mobile (cellular) networks, wireless wide area network (WWANs), WiMAX® networks, Bluetooth® communication networks, peer-to-peer networks, other interconnected data paths across which multiple devices may communicate, various combinations thereof, etc. Data transmitted by the network202may include packetized data (e.g., Internet Protocol (IP) data packets) that is routed to designated computing devices coupled to the network202. In some implementations, the network202may include a combination of wired and wireless networking software and/or hardware that interconnects the computing devices of the system200. For example, the network202may include packet-switching devices that route the data packets to the various computing devices based on information included in a header of the data packets.

The client devices206a. . .206n(also referred to individually and collectively as206) include computing systems having data processing and communication capabilities. In some implementations, a client device206may include a processor (e.g., virtual, physical, etc.), a memory, a power source, a network interface, and/or other software and/or hardware components, such as a display, graphics processor, wireless transceivers, keyboard, camera, sensors, firmware, operating systems, drivers, and/or various physical connection interfaces (e.g., USB, HDMI, etc.), etc. The client devices206a. . .206nmay couple to and communicate with one another and the other entities of the system200via the network202using a wireless and/or wired connection.

Examples of client devices206may include, but are not limited to, mobile phones (e.g., feature phones, smart phones, etc.), tablets, laptops, desktops, netbooks, server appliances, servers, virtual machines, TVs, set-top boxes, media streaming devices, portable media players, navigation devices, personal digital assistants, etc. While two or more client devices206are depicted inFIG.2A, the system200may include any number of client devices206. In addition, the client devices206a. . .206nmay be the same or different types of computing systems.

In the depicted implementation, the client devices206a. . .206nrespectively contain instances208a. . .208nof a client application (also referred to individually and collectively as208). The client application208may be storable in a memory and executable by a processor of a client device206to provide for user interaction, receive user input, present information to the user via a display, and send data to and receive data from the other entities of the system200via the network202.

In some implementations, the client application208may generate and present various user interfaces to perform these acts and/or functionality, such as the example graphical user interfaces discussed elsewhere herein, which may in some cases be based at least in part on information received from local storage, the server system250, and/or one or more of the third-party applications260via the network202. In some implementations, the client application208is code operable in a web browser, a native application (e.g., mobile app), a combination of both, etc. Additional structure, acts, and/or functionality of the client devices206and the client application208are described in further detail elsewhere in this document.

In some implementations, the client application208may include or provide access to the interface software application104. In some implementations, the client application208may include a desktop chat application (e.g., Slack®, Google Hangouts®, etc., as described above) and may serve as, or communicate with, the interface software application104. In some implementations, the client application208may include a web browser via which the user may interact with an interface software application104(e.g., Slack®, Google Hangouts®, etc., as described above).

The server system250and/or the third-party applications260may include one or more computing systems having data processing, storing, and communication capabilities. For example, these entities250and/or260may include one or more hardware servers, virtual servers, server arrays, storage devices and/or systems, etc., and/or may be centralized or distributed/cloud-based. In some implementations, these entities250and/or260may include one or more virtual servers, which operate in a host server environment and access the physical hardware of the host server including, for example, a processor, memory, storage, network interfaces, etc., via an abstraction layer (e.g., a virtual machine manager).

In the depicted implementation, the server system250includes a web server220, a trigger event queue226, databases234and238, worker instances228, and a software recipe manager110. These components, and their sub-components, are coupled for electronic communication with one another, and/or the other elements of the system200. In some instances, these components may communicate via direct electronic connections or via a public and and/or private computer network, such as the network202.

In some embodiments, a worker instance228represents a worker compute node and may include more than one secure container230, as shown inFIG.2A. Each container in the worker instance228, at a given time, runs a recipe. A container may add trigger events to the trigger event queue226and (responsive to the trigger event being triggered) receive events from the trigger event queue226. The event poller232is software configured to poll for messages indicating the completion of a prior call so the secure container can proceed to the next step of the software recipe (or to completion as the case may be). The server system250may utilize any suitable runtime environment and process queue/worker architecture, such as Heroku™.

The web server220includes computer logic executable by the processor262(seeFIG.2B) to process content requests. The web server220may include an HTTP server, a REST (representational state transfer) service, or other suitable server type. The web server220may receive content requests (e.g., product search requests, HTTP requests) from client devices206, cooperate with the other components of the server system250(e.g., software recipe manager110, worker instances228, trigger event queue226, etc.) to determine the content and or trigger processing, retrieve and incorporate data from the databases234and238, format the content, and provide the content to the client devices206. In some instances, the web server220may format the content using a web language and provide the content to a corresponding client application208for processing and/or rendering to the user for display. The web server220may be coupled to the databases234and238to store retrieve, and/or manipulate data stored therein.

In some embodiments, the components208,220,228,226, and/or110may include computer logic storable in the memory266and executable by the processor262, and/or implemented in hardware (e.g., ASIC, FPGA, ASSP, SoC, etc.), to provide their acts and/or functionality. For example, with reference also toFIG.2B, in some embodiments, the client application208, the web server220, the worker instances228, the trigger event queue226, and/or the software recipe manager110, and/or their sub-modules are sets of instructions executable by the processor262to provide their functionality. In some embodiments, these components and/or their sub-components are stored in the memory264of the computing system260and are accessible and executable by the processor262to provide their functionality. In any of the foregoing embodiments, these components and/or their sub-components may be adapted for cooperation and communication with the processor262and other components of the computing system260.

The databases234and238are information sources for storing and providing access to data. Examples of the types of data stored by the databases234and238may include the recipe data store124, the connection data store126, user and partner account information, codes representing the software recipes, requirement tables associated with the codes, input and output schemas associated with the codes and/or applications, objects associated with the applications, codes, and/or schemas, etc., and/or any of the other data discussed herein that is received, processed, stored, or provided by the system200.

The databases234and238may be included in the computing system260or in another computing system and/or storage system distinct from but coupled to or accessible by the computing system260. The databases234and238can include one or more non-transitory computer-readable mediums for storing the data. In some implementations, the databases234and238may be incorporated with the memory264or may be distinct therefrom. In some implementations, the databases234and238may include a database management system (DBMS) operable on the computing system260. For example, the DBMS could include a structured query language (SQL) DBMS, a NoSQL DBMS, various combinations thereof, etc. In some instances, the DBMS may store data in multi-dimensional tables comprised of rows and columns, and manipulate, i.e., insert, query, update and/or delete, rows of data using programmatic operations.

The third-party applications260a. . .260n, as depicted, respectively expose APIs362for accessing the functionality and data of the third-party applications260a. . .260n(also referred to individually and collectively as260). In some implementations, a third-party application260may correspond to the service software application108or interface software application104. An application260may include hardware (e.g., a server) configured to execute software, logic, and/or routines to provide various services (consumer, business, etc.), such as video, music and multimedia hosting, distribution, and sharing; email; social networking; blogging; micro-blogging; photo management; cloud-based data storage and sharing; ERM; CRM; financial services; surveys; marketing; analytics; a combination of one or more of the foregoing services; or any other service where users store, retrieve, collaborate, generate, consume, and/or share information.

In some implementations, the client application208, the various components of the server system250, the third-party applications260, etc., may require users212to be registered to access the acts and/or functionality provided by them, as described in further detail elsewhere herein. For example, to access various acts and/or functionality provided by these components, the components may require a user212to authenticate his/her identity (e.g., by confirming a valid electronic address or other information). In some instances, these entities208,220,240,260, etc., may interact with a federated identity server (not shown) to register/authenticate users212. Once registered, these entities may require a user212seeking access to authenticate by inputting credentials in an associated user interface.

The system200illustrated inFIG.2Ais provided as an example, and it should be understood that a variety of different system environments and configurations are contemplated and are within the scope of the present disclosure. For instance, various functionality may be moved from a server to a client, or vice versa and some implementations may include additional or fewer computing systems, services, and/or networks, and may implement various functionality client or server-side. Further, various entities of the system200may be integrated into to a single computing device or system or additional computing devices or systems, etc.

FIG.2Bis a block diagram of an example computing system260for implementing the technology described herein, for example, software recipe manager110. The example computing system260may represent the computer architecture of a client device206, a server system250, and/or a server of the third-party application260, depending on the implementation. As depicted, in some implementations, the computing system260may include a processor262, a memory264, a communication unit268, a display270, an input device272, and/or a data store274, which may be communicatively coupled by a communications bus266. The computing system260depicted inFIG.2Bis provided by way of example and it should be understood that it may take other forms and include additional or fewer components without departing from the scope of the present disclosure. For instance, various components of the computing devices and may be coupled for communication using a variety of communication protocols and/or technologies including, for instance, communication buses, software communication mechanisms, computer networks, etc.

The processor262may execute software instructions by performing various input/output, logical, and/or mathematical operations. The processor262may have various computing architectures to process data signals including, for example, a complex instruction set computer (CISC) architecture, a reduced instruction set computer (RISC) architecture, and/or an architecture implementing a combination of instruction sets. The processor262may be physical and/or virtual, and may include a single core or plurality of processing units and/or cores. In some implementations, the processor262may be capable of generating and providing electronic display signals to a display device, supporting the display of images, capturing and transmitting images, performing complex tasks including various types of feature extraction and sampling, etc. In some implementations, the processor262may be coupled to the memory264via the bus266to access data and instructions therefrom and store data therein. The bus266may couple the processor262to the other components of the computing system260including, for example, the memory264, the communication unit268, display270, the input device272, and the data store274.

The memory264may store and provide access to data to the other components of the computing system260. The memory264may be included in a single computing device or a plurality of computing devices as discussed elsewhere herein. In some implementations, the memory264may store instructions and/or data that may be executed by the processor262. For example, the memory264may include various different combinations of the software components described herein, depending on the configuration. The memory264is also capable of storing other instructions and data, including, for example, an operating system, hardware drivers, other software applications, databases, etc. The memory264may be coupled to the bus266for communication with the processor262and the various other components of computing system260.

The memory264includes a non-transitory computer-usable (e.g., readable, writeable, etc.) medium, which can be any tangible apparatus or device that can contain, store, communicate, propagate or transport instructions, data, computer programs, software, code, routines, etc., for processing by or in connection with the processor262. In some implementations, the memory264may include one or more of volatile memory and non-volatile memory. For example, the memory264may include, but is not limited, to one or more of a dynamic random access memory (DRAM) device, a static random access memory (SRAM) device, a discrete memory device (e.g., a PROM, FPROM, ROM), a hard disk drive, an optical disk drive. It should be understood that the memory264may be a single device or may include multiple types of devices and configurations.

The bus266can include a communication bus for transferring data between components of a computing system or between computing systems, a network bus system including the network202and/or portions thereof, a processor mesh, a combination thereof, etc. In some implementations, the various components of the system200may cooperate and communicate via a software communication mechanism implemented in association with the bus266. The software communication mechanism can include and/or facilitate, for example, inter-process communication, local function or procedure calls, remote procedure calls, an object broker (e.g., CORBA), direct socket communication (e.g., TCP/IP sockets) among software modules, UDP broadcasts and receipts, HTTP connections, etc. Further, any or all of the communication could be secure (e.g., SSH, HTTPS, etc.).

The communication unit268may include one or more interface devices (I/F) for wired and/or wireless connectivity with the network202and/or other computing systems. For instance, the communication unit268may include, but is not limited to, CAT-type interfaces; wireless transceivers for sending and receiving signals using Wi-Fi™, Bluetooth®, IrDA™, Z-Wave™, ZigBee®, cellular communications, and the like, etc.; USB interfaces; various combinations thereof; etc. The communication unit268may connect to and send/receive data via a mobile network, a public IP network of the network202, a private IP network of the network202, etc. In some implementations, the communication unit268can link the processor262to the network202, which may in turn be coupled to other processing systems. The communication unit268can provide other connections to the network202and to other entities of the system200using various standard network communication protocols, including, for example, those discussed elsewhere herein.

The display270may display electronic images and data output by the computing system260for presentation to a user212. The display270may include any conventional display device, monitor or screen, including, for example, an organic light-emitting diode (OLED) display, a liquid crystal display (LCD), etc. In some implementations, the display270may be a touch-screen display capable of receiving input from one or more fingers of a user212. For example, the display270may be a capacitive touch-screen display capable of detecting and interpreting multiple points of contact with the display surface. In some implementations, the computing system260may include a graphics adapter (not shown) for rendering and outputting the images and data for presentation on display270. The graphics adapter (not shown) may be a separate processing device including a separate processor and memory (not shown) or may be integrated with the processor262and memory264.

The input device272may include any device for inputting information into the computing system260. In some implementations, the input device272may include one or more peripheral devices. For example, the input device272may include a keyboard (e.g., a QWERTY keyboard), a pointing device (e.g., a mouse or touchpad), microphone, an image/video capture device (e.g., camera), etc. In some implementations, the input device272may include a touch-screen display capable of receiving input from the one or more fingers of the user. For instance, the structure and/or functionality of the input device272and the display270may be integrated, and a user of the computing system260may interact with the computing system260by contacting a surface of the display270using one or more fingers. In this example, the user could interact with an emulated (i.e., virtual or soft) keyboard displayed on the touch-screen display270by using fingers to contact the display in the keyboard regions.

The data store274may be included in the computing system260or in another computing system and/or storage system distinct from but coupled to or accessible by the computing system260. The data store274can include one or more non-transitory computer-readable mediums for storing the data. In some embodiments, the data store274may be incorporated with the memory(ies)264or may be distinct therefrom. In some embodiments, the data store274may store data associated with a database management system (DBMS) operable on the computing system260. For example, the DBMS could include a structured query language (SQL) DBMS, a NoSQL DMBS, various combinations thereof, etc. In some instances, the DBMS may store data in multi-dimensional tables comprised of rows and columns, and manipulate, i.e., insert, query, update and/or delete, rows of data using programmatic operations. In these or other instances, the DBMS may store data as nodes and edges of graph, key-value pairs, or documents.

FIG.3is a flowchart illustrating an example method300for executing a software recipe according to some implementations of the technology described herein.

At302, the software recipe manager110may receive a request to execute a software recipe from a user on a first software application, such as the interface software application104. In some implementations, the first software application may include a chat application, which may be coupled with a virtual agent. For instance, the chat application may be an interface software application104that is coupled with an interaction bot120, as described in further detail above. In some implementations, the first software application may include some other application (e.g., a client application208) capable of sending requests to the software recipe manager110.

In some implementations, receiving the request to execute the software recipe from the first user may include the virtual agent receiving a chat message in a communication channel of a chat application, extracting the request to execute the software recipe from the chat message, and identifying the first user in the chat application from the chat message. The virtual agent may call the software recipe based on the request to execute the software recipe. For example, the virtual agent may receive a chat message including a command or request (e.g., which may be associated with or correspond to a trigger event of a recipe) in a group chat environment and identify the user who submitted the chat message.

It should be noted, that although the technologies described herein may be described in reference to a first user, they may be applicable to multiple users, for example, in a team, group chat, or other collaborative environment, or they may be applicable, depending on the implementation, in a one on one interaction between a user and the software recipe manager110.

In some implementations, the software recipe manager110may determine a type of request, based on the request, particular recipe, type of recipe, or type of task being executed. For instance, a first type of request might be one that any user in a group chat/channel may be allowed to initiate (e.g., if the user is authenticated, as described below), in which circumstance, the connection details used for each user may be unique to and, in some instances, only available and/or known to that user or a set or subset of users to which the user belongs. A second type of request may include one that only a particular user, such as an administrator, can initiate. The software recipe manager110, in response to the second type of request, may run the software recipe for the requesting user. The software recipe manager110may then use the connection details for the user to perform the software recipe. If the user is authorized to perform the operation (e.g., if the user is an administrator, in this example) then the action may be performed, but if the user is not authorized, the action may fail, send an error message, or automatically request administrator credentials or approval by an authorized user.

At304, the software recipe manager110may determine whether the software recipe includes a connection placeholder to a second software application, such as a service software application108. For instance, the software recipe manager110may determine whether the software recipe has associated therewith an existing or a default connection or if, for instance, a connection of the software recipe is tagged as late bindable, that is, that a connection for the software recipe may be determined at runtime or at some other time after the software recipe's creation, as described in further detail elsewhere herein.

At306, the software recipe manager110may, in response to determining that the software recipe does not include a connection placeholder, may retrieve a default recipe connection for the software recipe. For instance, if the software recipe manager110determines that the software recipe excludes a connection placeholder for the software recipe connection to a service software application108, the software recipe manager110may retrieve a default recipe connection to the service software application108(e.g., from the connection data store126), use a connection stored in the software recipe, or execute the software recipe without a connection (e.g., if the software recipe does not require a connection to a service software application108).

At308, the software recipe manager110may execute the software recipe (e.g., using the default recipe connection, if applicable, as described above) and, at310, may provide a recipe result from the execution of the software recipe to a user via a first application, such as the interface software application104. For instance, the recipe engine122may communicate with a service software application108to send a command (e.g., via an API or some other communication protocol) to the service software application108and may receive data (e.g., a result of the command) from the service software application108. The recipe engine122may then provide the result to the user, for example, via the interface software application104. In some implementations, the interaction bot120may provide the result to the user via one or more chat messages (or e-mails, text messages, etc.) in an individual or group chat/channel, a link provided in a chat message, or a file attached to a chat message, etc.

At312, the software recipe manager110may, in response to determining that the software recipe includes a connection placeholder, may determine whether a recipe connection to a second application, such as the service software application108, exists for the user. For instance, the software recipe manager110may identify the user (or a client device of the user) sending the request and query the connection data store126for connection data based on the software recipe and the user. For instance, the software recipe manager110may determine that an action of a recipe is to create a calendar appointment on Google® calendar in which circumstance, the software recipe manager110may determine if it has connection details stored for the user's Google™ calendar and, in some instances, if it is authorized to make changes to the user's calendar.

At314, the software recipe manager110may, in response to determining that a recipe connection to the second software application (e.g., a particular service software application108called by the request), retrieve a recipe connection of the user, for example, from the connection data store126. For example, the connection details for the particular user may include an access token associated with the particular user. As described in further detail above, the access token may enable a connection, for a user associated with the token, between a computing device (e.g., the interface software application104or recipe engine122) and another application, such as the service software application108. For instance, the software recipe manager110may receive the access token from the service software application108in response to user credentials of the user (and/or a client device of the user) being authenticated by the service software application108and, in some instances, the software recipe manager110may then use the access token to authenticate future connections, such as for use with software recipes, as described herein.

In some implementations, the software recipe manager110may also determine whether the connection details (e.g., a token) expire and/or are expired. In some instances, if connection details have expired, the software recipe manager110may automatically renew the connection details, for example, using operations described in reference to316,408, and/or410.

At316, the software recipe manager110may establish a recipe connection for the user using retrieved, received, or determined connection details. In some implementations, the software recipe manager110may establish a recipe connection for the user in response to determining that no recipe connection currently exists for the user or that an existing recipe connection is no longer valid (e.g., has expired). For instance, if no connection details for the user are stored in the connection data store126or the connection details are no longer valid, the software recipe manager110may establish connection details for the user.

In some implementations, the software recipe manager110may establish connection details for a connection to the service software application108for a particular user including facilitating authentication of the user by the service software application108. The software recipe manager110may receive the connection details of the connection from the service software application108and store the connection details of the connection in the connection data store126in association with the user. Establishing a recipe connection is described in further detail, for example, in reference toFIG.4.

In some implementations, actions and/or connections may be attributed to an administrator account, as discussed above, so that a ticket, task, or result of a recipe may be created for the administrator account. Additionally, as described above, an administrator may have a more privileges than other users.

At318, the software recipe manager110may execute the software recipe using the recipe connection of the user with the second software application, such as the service software application108. For example, the software recipe manager110may execute the software recipe using the determined connection details in place of the connection placeholder. Executing the software recipe may include generating a recipe result using the connection of the user to the service software application108. For instance, the interaction bot120may receive a recipe result from the service software application108based on the request and provide the recipe result in a communication channel of a chat application to the user.

At320, the software recipe manager110may provide the recipe result to the user on a first software application, such as the interface software application104.

FIG.4is a flowchart illustrating an example method400for determining a connection according to some implementations of the technology described herein.

In some implementations, at402, the software recipe manager110may request that a user perform user authentication with the service software application108and, at404, the software recipe manager110may receive, from the service software application108, a recipe connection of the user.

In some implementations, in response to determining that connection does not exist for a particular user for the software application, the software recipe manager110may send a message to the user including a link configured to create a connection for the service software application108. The software recipe manager110, the interface software application104, and/or the service software application108, for example, may receive a selection of the link by the user and, in response, provide a connection credentials interface for receiving connection credentials for display to the user. In some implementations, one or more of the components104,108, and110may store connection details (e.g., a token) or connection credentials entered by the user in a connection data store126and, in some instances, the recipe engine122may execute the command using the stored connection.

In some implementations, the interaction bot120may send an ephemeral message to a user via group chat channel with a link to provide a connection to the application. When the user selects the link, a connection credentials screen may be displayed and the connection credentials may be stored in the connection data store126or transmitted to the service software application108for authentication and a token corresponding to the connection credentials may be stored in the connection data store126.

At406, the software recipe manager110may store the recipe connection with the service software application108for the user, for example, in the connection data store126. In some implementations, the software recipe manager110may maintain a connection on behalf of each user. For example, the first time the user interacts with the software recipe manager110(e.g., via the interaction bot120) the software recipe manager110may ask the user to authorize the software recipe manager110to connect with the service software application108on their behalf. The software recipe manager110may then store this connection and use it for subsequent interactions.

In some implementations, at408, the software recipe manager110may determine whether a recipe connection expired, for example, at runtime. For example, a recipe connection may include a token, which has an expiration date, in which instances, the software recipe manager110may detect that the token has expired request re-authentication by the user and/or automatically renew the token.

In some implementations, at410, the software recipe manager110may automatically request to renew the recipe connection with the service software application108. For example, the software recipe manager110may automatically request, from the service software application108, the connection details (e.g., the token). In some instances, the software recipe manager110may receive, from the service software application108, new connection details for the connection and may store the new connection details for the connection in the connection data store126.

FIG.5is a flowchart illustrating an example method500for generating the software recipe according to some implementations of the technology described herein. The method500may allow a user, such as an administrative user (e.g., a user with an administrative access level for a particular group of users, although other implementations are possible) to define trigger conditions and action responses.

According to some implementations, a recipe with an interaction bot120trigger allows a user to tag recipe connections as late bindable. The software recipe manager110may then store a state on behalf of users or sets of users to store connections per user. Accordingly, as described above, when a user submits a command associated with a recipe with late bound connections or one or more connection placeholders, the software recipe manager110may use the techniques described above to execute the software recipe.

At502, the software recipe manager110may receive user input specifying one or more trigger events or conditions for the software recipe. In some implementations, these trigger events may be associated with or received through an interaction bot120. In some implementations, a trigger event may include a connection placeholder.

In some implementations, at504, the software recipe manager110may receive user input specifying details for the interface software application104for the software recipe. For example, the software recipe may be executable through an interaction bot120and the user may provide keywords or identifiers signaling to the interaction bot120that a request is addressed to the interaction bot120and referencing a particular recipe or trigger event.

At506, the software recipe manager110may receive user input specifying one or more actions for the software recipe, for example, to perform in response to the trigger events/conditions. In some implementations, an action may include communication with a service software application108to perform an operation.

At508, the software recipe manager110may receive a user input specifying a service software application108for the software recipe. In some implementations, a service software application108may use or require a user specific connection, identification, or authentication. For instance, a service software application108may use user authentication to an account of the user with the service software application108, in which instances, the software recipe manager110may use connection details as described above.

At510, the software recipe manager110may receive user input tagging a recipe connection as late bindable and/or specifying that the software recipe includes a connection placeholder. In such instances, the connection placeholder may be saved to the software recipe (e.g., as stored in the recipe data store124), so that when the software recipe is executed, the connection placeholder identifies to the recipe engine122that a connection is to be determined for the user for the software recipe, as described in further detail above.

At512, the software recipe manager110may, in response to receiving an input specifying that the software recipe includes a connection placeholder, include a connection placeholder in the software recipe. For instance, responsive to the software recipe being tagged as late bindable, the software recipe manager110may store the connection placeholder in association with the one or more of the trigger condition and the action response of the software recipe in the recipe connection data store126.

At514, the software recipe manager110may, in response to receiving an input specifying that the software recipe does not include a connection placeholder, specify a default recipe connection (e.g., for the service software application108) for the software recipe. For instance, a software recipe action may not use a service software application108or may use the same connection regardless of the user or circumstance in which the software recipe is triggered.

FIGS.6A through6Cillustrate example graphical user experience interfaces for generating software recipes.

FIG.6Aillustrates an example interface600afor creating a software recipe. For instance, the interface600aincludes a graphical region602for receiving user input defining trigger events or conditions and a graphical region604for receiving user input defining actions.

FIG.6Billustrates an example interface600bfor creating a software recipe. The interface600bmay include a graphical element612for selecting whether a recipe, or the results thereof, may be viewed or hidden by other users, for example, in a group chat channel/environment. The interface600bmay also include a graphical element614for selecting whether to make a connection in a recipe late bindable or using a connection placeholder in the software recipe. For instance, as described in further detail above, the software recipe manager110may allow a user to cause a connection to a particular service software application108to be verified or generated at runtime.

FIG.6Cillustrates an example interface600cfor creating a software recipe. The interface600cmay include one or more selectable elements622and624for receiving input from the user to make connections to one or more corresponding service software application108scustomizable to users (e.g., using connection placeholders for the recipe connections to those service software application108s, as described above). For instance, a particular recipe may have actions that communicate with a plurality of service software application108s.

FIG.7Aillustrates an example graphical user experience interface700afor managing connections in a chat interface. InFIG.7A, a user is interacting with an interaction bot120via a chat interface, which may be implemented, for instance, on an interface software application. For instance, the user enters the command/request at702, which may cause the software recipe manager110to determine that a connection is needed to run the command (e.g., a connection placeholder is in the software recipe). The software recipe manager110(e.g., via the interaction bot120) may send a request to the user in a message704requesting that the user provide access to the user's account on the service software application108. In some implementations, the message704may include a link706that the user can select to create the connection.

FIG.7Billustrates an example graphical user experience interface700bfor managing connections in a chat interface. InFIG.7B, a user is illustrated sending a message in a chat interface to an interaction bot120, which, in some instances, may have been previously addressed by the user thereby alerting the interaction bot120to expect a request from the user. The interaction bot120may receive a message712including a keyword “connections” signaling to the interaction bot120that the user wishes to receive a list of connections for that user (e.g., for the interaction bot120, for a particular recipe, for a list of recipes for which the user has connections, etc.), according to the techniques described herein. The interaction bot120may retrieve the connections for the user and may respond by send a message714including the list of connections (e.g., by retrieving the connections from the connection data store126). In some implementations, the message714may also include a link or other graphical element716with which the user may interact to edit or otherwise manage the connections. In some implementations, the interaction bot120may modify the message714to indicate, in a graphical element718, that a particular connection has been modified (e.g., deleted), for example if, the user instructs the interaction bot120to modify a connection. AlthoughFIG.7Billustrates an example where a list of connections are shown and a connection is deleted, the interaction bot120may additionally or alternatively perform other connection management operations, such as, listing connections for a specific user or for a group of users, disconnecting a connection, modifying a connection, re-connecting a connection, adding a connection for another user, provisioning a user to use a connection or recipe, or performing other operations.

FIGS.8A,8B,8C,8D, and8Eillustrate example graphical user experience interfaces800a,800b,800c,800d, and800e, respectively, for using software recipes and recipe connections in a chat interface, for instance, provided by an interface software application104.

As illustrated inFIG.8A, the interaction bot120may provide a request, such as a request for approval in a chat message822. For instance, the chat message822may include a selectable element824that returns a value to the interaction bot120and/or service software application108.

As illustrated inFIG.8B, an interaction bot120may send a message812including information provided by an interaction bot120and a link814to establish a connection with a service software application108. In some implementations, the action for which the interaction bot120is requesting that a connection be established may include an administrator type action for which an administrator level authentication is required (e.g., not any user in a group chat may authorize the action).

As illustrated inFIG.8C, a window or overlay800cmay be presented requesting login credentials from the user, for instance, in response to the user selecting the link814. In some implementations, the window may provide direct communication with the service software application108, so that the service software application108may authenticate the user, as described above.

As illustrated inFIG.8D, in some implementations, the interaction bot120may display a graphical element834indicating that a particular user (e.g., with an administrator level connection) has selected the selectable element or otherwise performed a given operation. The graphical element834may be displayed in a message832, which may correspond to the message812and/or802referenced above.

As illustrated inFIG.8E, the interaction bot120may provide other interaction options in a chat interface. For instance, the interaction bot120may allow a user to trigger recipes or otherwise interact with a service software application108, for example, using a graphical element842, which may include selectable fields, a pull down menu, or another graphical element.

In some implementations, the technology described herein may include a cloud-based service that automates interaction between different applications, such as, web applications, to facilitate data flow. The technology may greatly simplify the logic of connecting different applications allowing the user to build integrations with applications using a drag and drop interface.

While certain acts and/or functionality described herein as being associated with certain modules, it should be understood that these acts and/or functionality may be performed by other modules, or a combination of two or more modules, and/or moved from a client side or server side implementation without departing from the scope of this disclosure. Additionally, it should be understood that the system illustrated herein is representative of an example system and that a variety of different system environments and configurations are contemplated and are within the scope of the present disclosure. For instance, various acts and/or functionality may be moved from a server to a client, or vice versa, data may be consolidated into a single data store or further segmented into additional data stores, and some implementations may include additional or fewer computing devices, services, and/or networks, and may implement various functionality client or server-side. Further, various entities of the system may be integrated into a single computing device or system or divided into additional computing devices or systems, etc.

In the above description, for purposes of explanation, numerous specific details are set forth in order to provide a thorough understanding of the present disclosure. However, it should be understood that the technology described herein can be practiced without these specific details. Further, various systems, devices, and structures are shown in block diagram form in order to avoid obscuring the description. For instance, various implementations are described as having particular hardware, software, and user interfaces. However, the present disclosure applies to any type of computing device that can receive data and commands, and to any peripheral devices providing services. Thus, it should be understood that a variety of different system environments and configurations are contemplated and are within the scope of the present disclosure. For instance, various functionality may be moved from a server to a client, or vice versa and some implementations may include additional or fewer computing devices, services, and/or networks, and may implement various functionality client or server-side. Further, various entities of the described system(s) may be integrated into to a single computing device or system or additional computing devices or systems, etc. In addition, while the system described herein provides an example of an applicable computing architecture, it should be understood that any suitable computing architecture, whether local, distributed, or both, may be utilized in the system200.

In some instances, various implementations may be presented herein in terms of algorithms and symbolic representations of operations on data bits within a computer memory. An algorithm is here, and generally, conceived to be a self-consistent set of operations leading to a desired result. The operations are those requiring physical manipulations of physical quantities. Usually, though not necessarily, these quantities take the form of electrical or magnetic signals capable of being stored, transferred, combined, compared, and otherwise manipulated. It has proven convenient at times, principally for reasons of common usage, to refer to these signals as bits, values, elements, symbols, characters, terms, numbers, or the like.

It should be borne in mind, however, that all of these and similar terms are to be associated with the appropriate physical quantities and are merely convenient labels applied to these quantities. Unless specifically stated otherwise as apparent from the following discussion, it is appreciated that throughout this disclosure, discussions utilizing terms including “processing,” “computing,” “calculating,” “determining,” “displaying,” or the like, refer to the action and processes of a computer system, or similar electronic computing device, that manipulates and transforms data represented as physical (electronic) quantities within the computer system's registers and memories into other data similarly represented as physical quantities within the computer system memories or registers or other such information storage, transmission or display devices.

Various implementations described herein may relate to a computing device and/or other apparatus for performing the operations herein. This computing device may be specially constructed for the required purposes, or it may comprise a general-purpose computer selectively activated or reconfigured by a computer program stored in the computer. Such a computer program may be stored in a computer readable storage medium, including, but is not limited to, any type of disk including floppy disks, optical disks, CD-ROMs, and magnetic disks, read-only memories (ROMs), random access memories (RAMs), EPROMs, EEPROMs, magnetic or optical cards, flash memories including USB keys with non-volatile memory or any type of media suitable for storing electronic instructions, each coupled to a computer system bus.

The technology described herein can take the form of a hardware implementation, a software implementation, or implementations containing both hardware and software elements. For instance, the technology may be implemented in executable software, which includes but is not limited to an application, firmware, resident software, microcode, etc. Furthermore, the technology can take the form of a computer program product accessible from a computer-usable or computer-readable medium providing program code for use by or in connection with a computer or any instruction execution system. For the purposes of this description, a computer-usable or computer readable medium can be any non-transitory storage apparatus that can contain, store, communicate, propagate, or transport the program for use by or in connection with the instruction execution system, apparatus, or device.

A data processing system suitable for storing and/or executing program code may include at least one processor coupled directly or indirectly to memory elements through a system bus. The memory elements can include local memory employed during actual execution of the program code, bulk storage, and cache memories that provide temporary storage of at least some program code in order to reduce the number of times code must be retrieved from bulk storage during execution. Input/output or I/O devices (including but not limited to keyboards, displays, pointing devices, etc.) can be coupled to the system either directly or through intervening I/O controllers.

Communication unit(s) (e.g., network interfaces, etc.) may also be coupled to the system to enable the data processing system to become coupled to other data processing systems, storage devices, remote printers, etc., through intervening private and/or public networks, such as the network202.

Wireless (e.g., Wi-Fi™) transceivers, Ethernet adapters, and modems, are just a few examples of network adapters. The private and public networks may have any number of configurations and/or topologies. Data may be transmitted between these devices via the networks using a variety of different communication protocols including, for example, various Internet layer, transport layer, or application layer protocols. For example, data may be transmitted via the networks using transmission control protocol/Internet protocol (TCP/IP), user datagram protocol (UDP), transmission control protocol (TCP), hypertext transfer protocol (HTTP), secure hypertext transfer protocol (HTTPS), dynamic adaptive streaming over HTTP (DASH), real-time streaming protocol (RTSP), real-time transport protocol (RTP) and the real-time transport control protocol (RTCP), voice over Internet protocol (VOIP), file transfer protocol (FTP), WebSocket (WS), wireless access protocol (WAP), various messaging protocols (SMS, MMS, XMS, IMAP, SMTP, POP, WebDAV, etc.), or other known protocols.

Finally, the structure, algorithms, and/or interfaces presented herein are not inherently related to any particular computer or other apparatus. Various general-purpose systems may be used with programs in accordance with the teachings herein, or it may prove convenient to construct more specialized apparatus to perform the required method blocks. The required structure for a variety of these systems will appear from the description above. In addition, the specification is not described with reference to any particular programming language. It will be appreciated that a variety of programming languages may be used to implement the teachings of the specification as described herein.

The foregoing description has been presented for the purposes of illustration and description. It is not intended to be exhaustive or to limit the specification to the precise form disclosed. Many modifications and variations are possible in light of the above teaching. It is intended that the scope of the disclosure be limited not by this detailed description, but rather by the claims of this application. As will be understood by those familiar with the art, the specification may be embodied in other specific forms without departing from the spirit or essential characteristics thereof. Likewise, the particular naming and division of the modules, routines, features, attributes, methodologies and other aspects are not mandatory or significant, and the mechanisms that implement the specification or its features may have different names, divisions and/or formats.

Furthermore, the modules, routines, features, attributes, methodologies and other aspects of the disclosure can be implemented as software, hardware, firmware, or any combination of the foregoing. Also, wherever a component, an example of which is a module, of the specification is implemented as software, the component can be implemented as a standalone program, as part of a larger program, as a plurality of separate programs, as a statically or dynamically linked library, as a kernel loadable module, as a device driver, and/or in every and any other way known now or in the future. Additionally, the disclosure is in no way limited to implementation in any specific programming language, or for any specific operating system or environment.