SYSTEM AND METHOD FOR INTEGRATING COMMUNICATION CHANNELS

20220405819 · 2022-12-22

Assignee

Inventors

Cpc classification

International classification

Abstract

A systems and method for integrating communications channels and threads with a Customer Relations Management (CRM) platform, such as Salesforce. The system includes methods for linking communication channels with specific records and generating reports such as summaries and digests for select communication threads.

Claims

1. A system for integrating communications channels and a Customer Relations Management (CRM) platform, such as Salesforce, comprising: Computational equipment specifically configured to link records in a CRM platform with at least one communication channel; the at least one communication channel coupled to the CRM by the linked records; at least one database configured to store data from the linked records; a Natural Language Processing engine coupled to the database and capable of reading and compiling linked records based on (1) a specific one of the at least one communication channel, (2) natural language appearing in threads contained within the at least one communication channel, and (3) user-inputted identifiers that identify a specific type of thread; wherein the system is configured to generate at least one summary of communications made over the at least one communication channel, and wherein the system is further configured to generate at least one digest of one or more of the at least one communication channels.

Description

BRIEF DESCRIPTION OF THE DRAWINGS

[0036] The accompanying drawings, which are incorporated herein and constitute a part of the specification, illustrate embodiments of the disclosure, and together with the Summary and the Detailed Description serve to explain the principles of these embodiments. In certain instances, details that are not necessary for an understanding of the disclosure or that render other details difficult to perceive may have been omitted. It should be understood, of course, that the present disclosure is not necessarily limited to the particular embodiments illustrated herein. Additionally, it should be understood that the drawings are not meant to be and/or are not necessarily to scale. In the drawings:

[0037] FIG. 1 depicts an embodiment for selecting and displaying linked communication channels for a particular Customer Relations Management (CRM) platform;

[0038] FIGS. 2A-2C depict an embodiment wherein a user links a specific channel with a specific CRM record and associates conversations via the specific channel with the specific record;

[0039] FIGS. 3A-3E depict embodiments for searching linked communication channels and/or specific records;

[0040] FIGS. 4A-4G depict embodiments for creating new records through the communication channel(s);

[0041] FIGS. 5A-5B depict an embodiment for editing records through a linked communication channel;

[0042] FIG. 6 depicts an embodiment for changing a CRM record owner through a linked communication channel;

[0043] FIGS. 7A-7F depict embodiments for generating a communication thread and templates associated with the same through a linked communication channel;

[0044] FIGS. 8A-8E depict embodiments for autonomously generating a conversation thread or channel summary and displaying the same;

[0045] FIGS. 9A-9C depict embodiments for creating a CRM record data utilizing a custom form;

[0046] FIG. 10 depicts an embodiment for posting a CRM record as a communication channel message;

[0047] FIG. 11 depicts an embodiment for triggering a CRM event or event-driven message inside and outside a CRM platform;

[0048] FIG. 12 depicts a flowchart illustrating certain steps of the embodiment depicted in FIG. 11;

[0049] FIGS. 13A-13F depict embodiments for creating and subscribing to communication channel summary and daily digest for a linked communication channel(s);

[0050] FIG. 14 depicts an embodiment for providing real-time or near real-time messaging from a linked communication channel within a CRM platform environment;

[0051] FIG. 15 depicts an embodiment for linking a thread or message between a CRM platform to a communication channel;

[0052] FIG. 16 depicts an embodiment for displaying a listing of records with sorting, filtering and searching capabilities;

[0053] FIG. 17 depicts an embodiment for a user to select a record for an action;

[0054] FIG. 18 depicts the embodiment of FIG. 17 for confirming batch actions;

[0055] FIG. 19 depicts an embodiment for establishing a list using a custom workflow;

[0056] FIG. 20 depicts an embodiment for displaying linked conversations and messaging queue; and

[0057] FIG. 21 depicts an interface for live messaging via one or more external web site(s).

DETAILED DESCRIPTION

[0058] Embodiments of the present disclosure relate to integration between two or more platforms; by way of example but not limitation, embodiments may integrate communications between a Salesforce or other Customer Relations Management (CRM) platform and Slack or another user communication channel. Certain embodiments are illustrated in FIGS. 1-21 appended hereto. It is to be expressly understood that the embodiments illustrated in the Figures are for the purpose of streamlining this disclosure and are not exhaustive of the novel aspects of the system and method described herein, which are reflected in the claims. Thus, the Figures are intended to be exemplary of the manner of practicing the invention(s) claimed herein.

[0059] Referring now to FIG. 1, the system preferably comprises workflows for selecting and displaying linked communication channels for a particular Customer Relations Management (CRM) platform, such as Salesforce. For instance, the system 10 may comprise a messaging or chat feature 11 and a linked conversations feature 12. The linked conversations feature 12 may be organized in a variety of different manners, and may comprise details such as the channel name 13, membership 14, last modified or last activity 15, among other details. The user may have the option to Create or Link Channel(s) 16. These features preferably further comprise the ability to create new conversation threads within the system 10, as shown in FIG. 1.

[0060] The system provides dynamic linking and pinning of dialog created among authenticated users of, by way of example but not limitation, a CRM such as Salesforce and a communication forum such as Slack. The system includes tools and other utilities for streamlining activity among users across both CRM and communication forum workspaces. In an embodiment, once a user's credentials are established, the system configures and manages requests from either platform.

[0061] The system preferably comprises a database that comprises a Channel ID, which is coupled to the Salesforce Record ID (associated with the Slack workspace and Salesforce org respectively). One novel aspect of the system with respect to integrating Salesforce and Slack is referred to herein as “channel linking.” Channel linking associates a particular Salesforce record with a Slack channel. In a preferred embodiment, the system creates a new Channel for a particular Salesforce record. In alternate embodiments, the system permits a user to associate a Salesforce or other CRM record with an existing Slack channel. In yet other embodiments, a user may create a new Channel for use with an existing or new Salesforce record. Aspects of the system showing the linking of channels and records are depicted in FIG. 1.

[0062] FIGS. 2A-2C further illustrate how a user creates or links a specific channel with a specific CRM record, as well as associated conversations via the specific channel with the specific record. Referring to FIG. 2A, the user may be presented with a dialog box 20 when the user initiates a query, such as a search for a particular record, or elects to create a new channel 16. Once a user links the record, it will post a message to the specified channel 22, as shown in FIG. 2B.

[0063] It is expressly noted that different Salesforce records may comprise different actions than depicted in FIGS. 2A-2B.

[0064] The system 10 preferably comprises an engine or bot that automatically pins a message to the channel. The action of creating a record link also occurs when invoked from the Salesforce component 24, as depicted in FIG. 2C. When creating or linking from Salesforce, the same behavior applies, and a new message will appear in the channel with the record from which it originated.

[0065] FIGS. 3A-3E depict embodiments for searching linked communication channels and/or specific records. A user may search for specific records using, for example, keyword search terms 27 and filters 28 provided by the system 10. In a preferred embodiment, the system provides at least two ways for searching for records in Slack: searching by object; and, by related records from a pinned or posted message block. Most commonly, searching for a record results in posting the record details for the channel to see in order to have context for the conversation, although in other embodiments no posting occurs from searching for a record.

[0066] A user also has the ability to engage in generic searching, which in one embodiment may be achieved by generating a search string for a specific record locator. For example, a user may input the string Use the “/centro<object API_name><search term>”. The method of initiating this particular search method is illustrated in FIG. 3A. From here, the user may Select a specific record locator to pin it to a new or existing channel 30, as shown in FIG. 3B. The user may be presented with a menu to select options such as Change Owner, Edit, Unlink from Channel, Refresh or Customize 31. A suer may also have shortcut icons 32 that initiate other actions.

[0067] Alternatively, a user may search by Related Records. From an established linked and posted message, the user may configure one or more related object buttons/icons. For example, if an account record is linked, a user may configure the related objects to the Account like Contact, Opportunity, Case or other objects. The user may be presented with a pick list or menu of options, such as the overflow menu for posted messages shown in FIG. 3B. Next, a user may select the “Add/Remove” button/icon 34 from the Related List section, as shown in FIG. 3C. Next, a user may select the related objects 36 the user would like to add or remove, as shown in FIG. 3D, which may comprise Account Partner, Cases, Contacts or Opportunities 37. The selected options appear on the posted message 38, preferably as arranged in FIG. 3E.

[0068] FIGS. 4A-4G show one method to create new records 40 through the communication channel(s). The system preferably provides at least two ways for creating new records in Slack: any object (at any time); and, by related records from a pinned or posted message block. The modal dialog for selecting fields is preferably taken from the Page Layout for the object in question.

[0069] A user may create a new record 40 using a generic creation method, such as by using the command “/centro new <object API_name>” as shown in FIG. 4A. Selecting the “/centro” command will also call up a set of quick action buttons 45, including a “new” record. This button/icon 44 will display new records for the standard objects and may be non-configurable, and is illustrated in the display 42 of FIG. 4B.

[0070] A user may also create by Related Records. From an established, linked and posted message, a user may configure related object buttons. For example, if an Account record is linked, a user may configure related objects to the Account, such as Contact, Opportunity, Case and the like. To do so, a user may open the overflow menu 48 for the posted message 46 as shown in

[0071] FIG. 4C. Then, the user may select the “Add/Remove” button 51 from the Related List section as shown in the pop up window 50 of FIG. 4D. The user may utilize this display 52 to select the related objects they wish to add or remove for creating new records, as shown in FIG. 4E.

[0072] The posted message block 54 will now show any new buttons/icons that were configured, as depicted in FIG. 4F. In a preferred embodiment, when creating records the lookup field is set automatically based on the message block record. In this manner, an administrative user may set up “Salesforce.com” as the default account lookup when a user selects the “Account Partner” icon 56, as shown in FIG. 4G.

[0073] FIGS. 5A-5B illustrate how a user may edit records through a linked communication channel. A posted message with a Salesforce record may be edited, for example, using a similar dialog as the New Record method described above. However, unlike the New Record method, any existing data from the linked channel is populated in the record for users to update. From any posted message, a user may be presented with a menu 59 as shown in the display 58 of FIG. 5A. A modal dialog box 60 preferably displays the fields and sections of the page layout for the selected object. The data will preferably be populated in this dialog box as well, and a user may be presented with the display shown in FIG. 5B to continue editing the record. Once edits are saved by the user, the posted message will be updated in the Salesforce record.

[0074] When using the push Leads or Case functions (from Salesforce), a user 64 may create new Slack messages or thread a response 63 in a designated channel any time a new Lead or Case is created in Salesforce, as depicted in the display 62 of FIG. 6. For teams of users processing the Leads or Cases, it may be beneficial to change the Owner, or to indicate to other users when this has transpired. The system enables this change through the overflow menu 65, which is illustrated in FIG. 6.

[0075] FIG. 6 further illustrates how to change a CRM record owner through a linked conversation 66 channel. Note that the Record details screen does not automatically update, and the user may be prompted to “Refresh” prior to updating. In other embodiments, the update occurs automatically without any prompt. In addition, Centro allows the user to Post to the channel that this change has occurred. This capability (as depicted and described in relation to FIG. 6) is available on all linked Salesforce Records that have Owners that are capable of being changed.

[0076] FIGS. 7A-7F show how a user may generate a communication thread and templates associated with the same through a linked communication channel 70. In this embodiment, several discrete steps may be performed, including creating one or more cadence email 72 templates for use in the system. For example, once a webhook 73 is established, the first email in the sequence 74 may be an introductory email after a web site visit. A second email may be added 75 if the prospect doesn't respond in a certain time frame (i.e., three days). Next, a user may download the example. Next, the user will navigate to Workflow Builder and select “Import.”

[0077] The user may select Edit in the Email/SMS step 76 as shown in FIG. 7B. Other fields, such as Send as User, Salesforce Record ID, and Channel ID preferably remain unedited. Under the menu option, a picklist item called Use Template 78 may be selected to choose the specific email template created above. A user may choose from several options 79, including to automatically send a template instead of drafting an email. A user may also specify a time period before sending a follow-on email (i.e., set the number of days before sending the next email in the sequence). Each of these sub-steps are depicted in FIG. 7B.

[0078] The user may add as many sub-steps in the sequence as desired. A user may select email and SMS (or both) 81, as shown in FIG. 7C. The user may then publish the custom workflow 80 so that another user may choose the template at a later time.

[0079] In embodiments, a user may link any template to the system, such as by selecting the Copy icon 83, thereby copying the webhook, as shown in the display 82 of FIG. 7D. The user also has the option to copy 84 the body of the HTTP text as well. The user may then paste the template into the system's database 86, as shown in FIG. 7E. The user may return and select to edit 89 the webhooks copied and pasted into Saleforce, or navigate through the system menu 88 to choose a different channel or thread.

[0080] Custom workflows may be configured to start when a Lead or a Contact is pinned to a Slack channel. In the above example, the first email in the sequence was drafted the moment a Lead was pinned, as depicted in the display 90 of FIG. 7F. In other examples, the user may specify to begin a workflow upon the occurrence of a different or subsequent event.

[0081] As stated in the Summary, the system and method also comprise NLP engine 92 that is preferably configured to create summaries or digests of particular conversation threads or communication channels. FIGS. 8A-8E depict embodiments for autonomously generating a conversation thread or channel summary. In embodiments, the NLP engine 92 is referred to as “Grok” or “the Grok Workflow.” The Grok Workflow may be configured to operate on any Slack Channel, Message, or Thread to produce a summary of the selection. The output can be used in other workflow steps as a variable 94. The Step Parameters, which may also dictate the summary style 93 produced by the NLP engine 92, preferably look as shown in FIG. 8A.

[0082] To illustrate some of the steps in this method, a user may select a static channel 96 as shown in FIG. 8B, or alternatively may use a variable 94 as shown in the display 98 of FIG. 8C. Optionally, a user may use a permalink to a message, hard-coded message timestamp or more commonly a variable (such as when triggered from an Emoji reaction on a message) as shown in FIG. 8D. The output can be consumed in another step as the Summary or the Chat Transcript 102, as shown in FIG. 8D. Any of these methods may be used to send a message 100 through the NLP engine 92.

[0083] Grok preferably uses the GPT-3 in conjunction with a “prompt”/“response” system. That is, the system formats a selected Slack conversation to pass on to a custom API, such as the GPT-3 API, with a prompt asking to summarize the discussion. The GPT-3 API responds with a summary, which the system passes back to the requesting user. This is reflected in FIG. 8E, which depicts a summary display 104 presented to a user once the steps above are completed.

[0084] FIGS. 9A-9C depict embodiments for creating a CRM record data utilizing a custom form. In one embodiment, a user may select a Submit Salesforce Form 106 workflow step to create or edit Salesforce record data in a custom modal form. This step uses the Salesforce Connection of the user who saves the Workflow Step (as indicated when editing the Step). This allows Slack users to modify Salesforce data even if they do not have a login to Salesforce by utilizing the Workflow user's connection. This method is illustrated in FIG. 9A.

[0085] In operation, the Submit Salesforce Form step will send a user an ephemeral message only they can see allowing the user to edit and submit data in a modal form by clicking the message “Open Form” button. The fields that are displayed on this form 108 are user-configurable when editing the step. Fields may be displayed to the user, or they can be hidden from the user to set a field value to a default (i.e. for a Record Type or Status field), as shown in FIG. 9B.

[0086] A user may also add fields using the “Add Field” icon 109 in the workflow step and move fields in the order they should be displayed or move fields to the bottom to hide the field. Set default values for fields by inserting Workflow variables or specifying a constant value using the appropriate data-type formatting when creating a task 110, as shown in FIG. 9C.

[0087] Date fields should be formatted using ISO 8601 format, picklists should use appropriate API_names, lookups should specify a Salesforce Record Id of expected type, and strings and numbers should be in a format they can be parsed to expected length and type. To edit an existing Salesforce Record, specify the Record Id value as a hidden field. When the Record Id is specified, defaults will be populated using the existing Salesforce data unless overridden in the Workflow step, as further illustrated in FIG. 9C.

[0088] FIG. 10 depicts an embodiment for posting a CRM record 112 as a communication channel message. The Post Salesforce Record Workflow step posts a selected Salesforce record to a Slack channel as a message via the user who created the Workflow Step. The step is configured by completing the dialog shown in FIG. 10. The user preferably has two options. For instance, the user may select Connected as Salesforce User. This option is preferably not editable to the user who created the workflow Step and relies upon use the user's established Salesforce authenticated connection (via the system). Alternatively, the user may select to configure as a Channel, and either select a static channel or use a variable as described above.

[0089] The user preferably is asked to complete multiple fields to configure this workflow, as shown in FIG. 10, including the Salesforce Record ID 114. This ID is statically set using the 15-character Salesforce Record ID, or more may instead use a Record ID variable from a previous workflow step. Other fields include the Additional Message (Optional), wherein the user sets the text of a message preceding the Record Block set of fields from the Compact Layout of the record selected; Link to Salesforce 115, which appears after the message posts to the channel, show the dialog to link the Record Block to the selected Salesforce record; and, Output. The Message block will appear of the selected record, along with any Additional Messages set.

[0090] The system disclosed herein further comprises one or more methods for triggering events. Salesforce Platform Events are an event-driven messaging architecture, which enable apps to communicate inside and outside of Salesforce. Platform Events are therefore similar to Salesforce Custom Objects in that they are defined with an API Name (i.e. Event e) and with Custom Fields that can have defined name, type and value which can be utilized by event-listeners consuming the event. FIG. 11 depicts an embodiment for triggering a CRM event or event-driven message 116 inside and outside a CRM platform. When invoking a Platform Event using Slack Workflow Builder and Platform Event 117 step, the Event API Name 118 is required and Custom Field values must be specified as JSON-encoded values. JSON-encoded values comprise basic data-types such as String types, Integer and floating-point numbers, and Boolean values. Date and time values may be formatted as Strings in ISO 8601 format (i.e. YYYY-MM-DD for Dates and YYYY-MM-DDTHH:NN:SSZ for UTC time). Channel ID 119 is preferably optional, and may be requested at the time the Platform Event is generated.

[0091] Slack Workflow variables may be used in the Platform Event Step, as shown in FIG. 11. This enables outputs from other steps in a workflow to be passed into the Platform Event and used by other integrations inside or outside of the Salesforce platform. For example, this Platform Event could trigger a Salesforce Flow process to Create a Task 120 as shown in FIG. 12, which depicts several steps 121-127 and their interrelationships in a flowchart. Other steps and conditions are further illustrated in FIG. 12.

[0092] FIGS. 13A-13F depict embodiments for creating and subscribing to communication channel summaries and daily digests for any linked communication channel(s). As described above, the system preferably comprises a NLP service referred to as Grok, which utilizes an advanced AI Engine to summarize Slack Channels on-demand as well as a daily digest of subscribed channels.

[0093] The system therefore provides Single and/or On-Demand Summaries 129. Grok will typically summarize the last thirty messages in any Slack channel 128, and provide the output as shown in FIG. 13A, although a fewer or greater number of channels may be included in the summary.

[0094] The above-referenced action can be invoked by inputting “/centro summary” into any Slack Channel that Grok is aware of and clicking “Grok Conversation Summary” 130 in the actions list, as shown in FIG. 13B. Note that each on-demand message is ephemeral (only visible to the user who invoked it). By default, a concise and narrow summary concise appears. If more detail and verbose summary is desired, the user has the option of selecting a “More Detail” button/icon on the message and edit the summary accordingly.

[0095] A user may subscribe to an on-demand channel summary, which may be scheduled for a daily digest for multiple channels. An example output 132 is illustrated in FIG. 13C. To subscribe to digests, a user must first select the channels to summarize, and the time of their daily delivery. Selecting a channel involves a user choosing the communication channels they want as part of their digest in one of two ways: clicking the “Subscribe” button on any Grok on-demand summary 134, as shown in FIG. 13D, or by selecting the Go to the Centro App Home, then under the Grok Settings display 136, clicking the “Select Conversations” button 137, as shown in FIG. 13E. A user may select the frequency of the digest delivery by choosing the same “Select Conversations” button in the Grok Settings in Centro's App Home is the Delivery Time setting, as shown in the display 138 of FIG. 13F. A user may also tag conversations 139 from this display 138. In some embodiments the user is limited to five conversations, while in other instances the number may be greater.

[0096] FIG. 14 depicts an embodiment 140 for providing real-time or near real-time messaging and/or feedback from a linked communication channel within a CRM platform environment. The Lightning Web Component supports sending a message to a linked Slack Channel, as shown in FIG. 14. Here, the user may complete a series of steps to configure the system, including: [0097] 1. Connect a Slack channel to a Salesforce record either from the Salesforce Lightning component (Create or Link a Channel button) or the Slack Channel Linking functionality. [0098] 2. Open the Salesforce record. [0099] 3. Select a row in the list of Linked Channels. [0100] 4. A preview window will appear. Users will see a box to send a message to that channel, as a Slack Member. Note, however, the Salesforce user must be a valid Slack member in the connected workspace. [0101] 5. If this is the first time the user has messaged a Slack channel from Salesforce, they will be prompted to connect to Slack. [0102] 6. Once they have completed the workflow, they will post a message to the selected Slack Channel from Salesforce.

[0103] The user must authenticate from Salesforce to Slack using “OAuth” workflow. This is facilitated the moment they attempt to message the channel for the first time.

[0104] A user may also link a Message or Thread from Salesforce or another CRM 143, as depicted in FIG. 15. FIG. 15 shows aspects of a system 142 for linking a thread or message between a CRM platform to a communication channel. In addition to linking public or private Slack conversations it is also possible to link single messages or entire message threads to a Salesforce record. To link a message or thread use the Centro message shortcut by clicking the message context menu. If the “Link to Salesforce” message shortcut does not appear in the menu, select “More message shortcuts” and then select “Link to Salesforce”.

[0105] The system may also comprise a Salesforce “List View” in Slack feature, as shown in FIG. 16. This functionality includes a display or list of Salesforce record in a Slack channel that can be displayed to all users or select users ephemerally. The display can show up to four Salesforce field values, grouped by a specific field. The display preferably can show ten records at a time: if there are more records, paging options will appear. The list of record duplicates a Salesforce list view results, including filters and sort order. Actions can also be applied to one or more records within Slack, such as batch edit, batch post, and custom actions.

[0106] Other functionality relating to the list view feature are shown in FIGS. 17-19. FIG. 17 demonstrates one example of selecting record for Action within Slack, while FIG. 18 shows an example dialog confirming batch actions. FIG. 19 shows an example of setup for the List View step in Slack Workflow builder.

[0107] A history of linked channels 160 may be captured in a Salesforce object title “Linked Conversations”. This object holds metadata of each linked conversation, such as the Conversation Name 161, Slack Channel ID 164, the Salesforce Record ID 162, who created the channel, the Slack Message Timestamp of a linked Thread 165, and parent Account 163 (where applicable). This object can be further customized for purpose-built features. For instance, this object allows users to quickly and easily look up where conversations are located in Slack as they relate to a Salesforce object.

[0108] An additional aspect of the system is shown in FIG. 21. This system 170 may provide for live messaging 172, which enables the same concept of live chat offered for Salesforce Experience Cloud sites/pages, which are external websites 173 for customers to engage with select CRM data. In this embodiment, multiple Cases 171 may be selected. The Lightning Web Component described above in relation to FIG. 14 can therefore be configured for two purposes: Creating a static Slack channel where users logging in will always see the same chat channel, and agents on the other side are able to work in Slack or Salesforce directly to support that user; or creating a dynamically assigned Slack channel based on individual Salesforce records; that is, if you want to chat with a team about a support case, you may do so with the Lightning Web Component.

[0109] Users from the Salesforce Experience cloud may engage on the chat channel in one of two ways: Authenticated to Slack—that is, they have a Slack user account and that user profile will be adopted by the Lightning Web component; or No Slack authentication, which preferably utilizes Salesforce Experience Cloud user profile. In the case where the User needs support in Slack, but does not have a Slack license, the system will post a message leveraging the Experience Cloud elements such as the User Name and Avatar.

[0110] In the foregoing description, for the purposes of illustration, systems and methods were described in a particular order. It should be appreciated that in alternate embodiments, the methods may be performed in a different order than that described. It should also be appreciated that the methods described above may be performed by hardware components or may be embodied in sequences of executable instructions on machine-readable media, and which cause a machine, such as a general-purpose or special-purpose processor or logic circuits programmed with the instructions to perform the methods. These machine-executable instructions may be stored on one or more machine-readable mediums, such as CD-ROMs or other type of optical disks, floppy diskettes, ROMs, RAMs, EPROMs, EEPROMs, magnetic or optical cards, flash memory, or other types of machine-readable mediums suitable for storing electronic instructions. Alternatively, the methods may be performed by a combination of hardware and software.

[0111] Specific details were given in the description to provide a thorough understanding of the embodiments. However, it will be understood by one of ordinary skill in the art that the embodiments may be practiced without these specific details. For example, circuits may be shown in block diagrams in order not to obscure the embodiments in unnecessary detail. In other instances, well-known circuits, processes, algorithms, structures, and techniques may be shown without unnecessary detail in order to avoid obscuring the embodiments.

[0112] Also, it is noted that the embodiments were described as a process, which is depicted as a flowchart, a flow diagram, a data flow diagram, a structure diagram, or a block diagram. Although a flowchart may describe the operations as a sequential process, many of the operations can be performed in parallel or concurrently. In addition, the order of the operations may be re-arranged. A process is terminated when its operations are completed, but could have additional steps not included in the Figures. A process may correspond to a method, a function, a procedure, a subroutine, a subprogram, etc. When a process corresponds to a function, its termination corresponds to a return of the function to the calling function or the main function.

[0113] Furthermore, embodiments may be implemented by hardware, software, firmware, middleware, microcode, hardware description languages, or any combination thereof. When implemented in software, firmware, middleware or microcode, the program code or code segments to perform the necessary tasks may be stored in a machine-readable medium such as storage medium. A processor(s) may perform the necessary tasks. A code segment may represent a procedure, a function, a subprogram, a program, a routine, a subroutine, a module, a software package, a class, or any combination of instructions, data structures, or program statements. A code segment may be coupled to another code segment or a hardware circuit by passing and/or receiving information, data, arguments, parameters, or memory contents. Information, arguments, parameters, data, etc. may be passed, forwarded, or transmitted via any suitable means including memory sharing, message passing, token passing, network transmission, etc.

[0114] While illustrative embodiments of the invention have been described in detail herein, it is to be understood that the inventive concepts may be otherwise variously embodied and employed, and that the appended claims are intended to be construed to include such variations, except as limited by the prior art.