As you redefine the conversational AI and customer experience strategy for your business, your biggest area of focus may be extending the scope of chatbots. You may want to make your virtual assistant experience more robust without the dependency of subject matter experts, but problems can arise: spanning from adding more intents and conversational flows – to making these changes with minimal delays. Yet another challenge lies in bringing in the context of conversations from virtual assistant interactions to live chat, and to live call. Plus, following all that up to the different systems of record where data continues to live and analyzed across several workflows.

We have seen common use cases for chatbot or virtual assistant experiences across customer support aiming to save costs for the organization and increase end-user satisfaction. However the content of those conversations is heavily reliant on subject matter experts who understand end-user pain points across several communication touch points. These subject matter experts scrub the knowledge bases to define how the pain points can be addressed instantly, providing the most accurate actionable answers based on the conversation context.

In this post, we will cover the life cycle for improving the scope of your chatbot interactions and conservation design as it relates to the value Symbl can help enhance. Our goal is to provide you with different ways in which Symbl as a platform can be used to automate data labeling activities across calls, understand new patterns in real-time, and also provide ways to transfer context from one channel to another.

Revisiting the Conversational AI Pipeline

Before we see what Symbl can do for your conversational AI data pipeline, let’s take a look at the opportunities in the life cycle of conversation design and potential areas for enhancements.

How to Extend Scope of Chatbot Conversations with Symbl.ai
  • Creating a data lake and process to capture and archive the unstructured conversation data across live calls, emails, chat conversations. Some areas to consider are the cost of storage, scalability of the data store and how easy it is to correlate it with other forms of data in the business that will eventually drive insights beyond improving chatbot interactions.
  • Converting unstructured data into a form of context-aware standardized formats like Topics, Questions, Intents, Themes, or Sentiments that can be consumed by your conversation designers to not only extend the scope of the interaction, but also identify new patterns. This format and data structure can keep evolving with your capability to better understand conversation data, which is what Symbl enables you to do. An important area to consider here are time delays and how real-time this can become. That will help enable you to act as soon as you learn new intents. This intelligence will also enable you to identify new patterns, intents and failover scenarios by building a real-time aggregated monitoring solution.
  • Using real-time learnings, new topics, patterns and intents by conversation designers can help you scale your existing virtual assistant implementations or add new ones.

Understanding Unstructured Conversation Data and Context

For the rest of this post, we will talk about that second point above and how can Symbl, as a platform, enables users to understand data and context from multi-channel unstructured conversations. Building with conversation intelligence technology, you can use machine learning to identify the unknown pattern or scale the identification of what is known.

  • If you don’t know what you are looking for (in the cases of understanding the failed intent data or scrubbing through the call data to label it without human labelers) you can use Sentiments, Topics, Questions, and Action Items to help you classify the conversation and go to the specific instances. These conversation understanding tasks are built without bias to a specific type of domain and identify patterns based on the modality of language used, as well as the context and content and tone of the conversation. You calibrate these insights based on specific vocabulary or domains for which you are building the conversational AI experience.
  • If you already know what you are looking for but do not know the various ways in which customers are asking questions or looking for specific information, using Trackers is the right approach. Trackers use a zero shot learning approach to find similarity with language and context as it relates to the few ways in which you already know.

Using Trackers

Trackers are user-defined entities that allow you to track the occurrences of any characteristics or events in a conversation with just a few examples. You can track critical moments in a conversation across several use cases in both real-time (as the conversation is in-progress) and asynchronously (after the conversation is over from recordings). Some use cases for Trackers include when a customer is unhappy, when someone is rude, or a potential sales opportunity. Trackers help you identify emerging trends and gauge the nature of interactions. Please take a look at this Trackers tutorial for more details regarding how to create trackers using the Async APIs.

How does it work?

Run your transcript through Async text API, use audio or video call recordings and process using Async Voice API or Async Video API. You can also implement the ingestion process in real-time.

For ease of understanding, we will take the example of processing transcripts thought Symbl to find out the several ways in which your customers are asking the question for a specific intent.

1. Create a developer account with Symbl.ai and authenticate:

   Generate a valid Symbl accessToken by sending POST oauth2/token:generate: with your Symbl App ID and App Secret. If you don’t have App ID and App Secret you can sign up here.

For example:

curl --location --request POST 'https://api.symbl.ai/oauth2/token:generate' 
--header 'Content-Type: application/json' 
--data-raw '{
   "type": "application",
   "appId": "",
   "appSecret": ""}'

2. Process the transcript, below is a sample part of the transcription. You can also relate this to a chat conversation or text message

a. Send Async POST text API request and in the body request add the message content, the trackers to search and a webhookUrl for Symbl to signal the chatbot the job request is completed. For example:

curl --location --request POST 'https://api.symbl.ai/v1/process/text' 
--header 'x-api-key: ' 
--header 'Content-Type: application/json' 
--data-raw '{
   "messages": [
     {
       "payload": {
         "content": "My order was supposed to arrive three weeks ago, but it didn'''t. Can I have with this please",
         "contentType": "text/plain"
       },
       "from": {
         "name": "Becky",
         "userId": "[email protected]"
       }
     }
   ],
       "trackers": [
         {
             "name": "Order delay",
             "vocabulary": [
                 "Order was supposed to arrive",
                 "Order did not arrive",
                 "Order is delayed",
                 "Order is not here"
             ]
         },
             {
           "name":"refund",
           "vocabulary":[
               "I want refund",
               "refund please",
               "cancel this order",
               "give me money back"
           ]
           }
   ]
 }'

b. Successful Async POST text request will result in a “conversationId” and a “jobId” to be stored in a DB for continued and later usage. Async POST response example:

{
   "conversationId": "4530092689588224",
   "jobId": "16d119db-7d2a-4182-b1db-33b27b6a7711"
}

c. Once job status is completed reported by the webhookUrl (Or by checking the job status) send a GET tracker + conversationId to check if one of the provided trackers were found in the message. For example:

curl --location --request GET 'https://api.symbl.ai/v1/conversations//trackers-detected' 
--header 'x-api-key: ' 
--header 'Content-Type: text/plain' 
--data-binary '@'

d. In case the tracker was found, store the tracker id received and run the same tracker across all the other transcript, chat and text data in your data store to identify all the other ways in which your customers are asking the same question or expressing the same intent “Order Delays.” This will help you improve your current NLU implementation to extend the scope of question or further more inform your conversation design.

Example:

[
   {
       "id": "6116730783924224",
       "name": "Order delay",
       "matches": [
           {
               "messageRefs": [
                   {
                       "id": "6702093319536640",
                       "text": "My order was supposed to arrive three weeks ago, but it didn't.",
                       "offset": 3
                   }
               ],
               "type": "vocabulary",
               "value": "Order was supposed to arrive",
               "insightRefs": []
           }
       ]
   }
]

Let’s take an example of using the same tracker, in your virtual assistant conversation flow that can help you identify intents of failovers where the question was not identified via your NLU engine.

e. Send Async PUT text API request with the conversationId received in step 2.b, the new message content from end-user, same trackers list to search and a webhookUrl for Symbl to signal the chatbot the job request is completed:

curl --location --request PUT 'https://api.symbl.ai/v1/process/text/<Add your conversationId created in step 2.b>' 
--header 'x-api-key: <Add your accessToken>' 
--data-raw '{
   "messages": [
     {
       "payload": {
         "content": "can I please get a refund please?",
         "contentType": "text/plain"
       },
       "from": {
         "name": "Becky",
         "userId": "[email protected]"
       }
     }
   ],
       "trackers": [
         {
             "name": "Order delay",
             "vocabulary": [
                 "Order was supposed to arrive",
                 "Order did not arrive",
                 "Order is delayed",
                 "Order is not here"
             ]
         },
             {
           "name":"refund",
           "vocabulary":[
               "I want refund",
               "refund please",
               "cancel this order",
               "give me money back"
           ]
           }
   ]
 }'

f. Successful Async POST text request will result in the same conversationId and a new jobId. The jobId can be stored in a DB for checking the job status in case webhookUrl is not used. For example:

{
   "conversationId": "4530092689588224",
   "jobId": "c3cb4253-8961-4519-bf44-c840ce6f0108"
}

g. Once job status is completed reported by the webhookUrl (Or by checking the job status) send a GET tracker request with conversationId to check if one of the provided trackers were found in the message. For example:

curl --location --request GET 'https://api.symbl.ai/v1/conversations//trackers-detected' 
--header 'x-api-key: ' 
--header 'Content-Type: text/plain' 
--data-binary '@'

h. Check if new tracker id was created (Old tracker id is marked in Orange and new tracker id is marked in green in this example) in the response and send the relevant pre-made reply to end-user based on the tracker name found:

[
   {
       "id": "5379319225384960",
       "name": "refund",
       "matches": [
           {
               "messageRefs": [
                   {
                       "id": "5865521099571200",
                       "text": "Can I please get a refund please?",
                       "offset": 19
                   }
               ],
               "type": "vocabulary",
               "value": "refund please",
               "insightRefs": [
                   {
                       "text": "Can I please get a refund please?",
                       "offset": 19,
                       "type": "question",
                       "id": "5764795425882112"
                   },
                   {
                       "text": "Can I please get a refund please?",
                       "offset": -1,
                       "type": "question",
                       "id": "5764795425882112"
                   }
               ]
           }
       ]
   },
 
   {
       "id": "6116730783924224",
       "name": "Order delay",
       "matches": [
           {
               "messageRefs": [
                   {
                       "id": "6702093319536640",
                       "text": "My order was supposed to arrive three weeks ago, but it didn't.",
                       "offset": 3
                   }
               ],
               "type": "vocabulary",
               "value": "Order was supposed to arrive",
               "insightRefs": []
           }
       ]
   }
]

Conclusion

In this blog post, you have seen how conversation intelligence and Symbl can be used to augment your conversational AI pipeline with more insights, coverage and extending scope. We took an example of how Trackers can be used to speed up data labeling, use as a failover intent detection engine or even inform new conversation patterns for the same intent. With Symbl you can inject Async APIs in your existing data pipeline or build a real-time approach as part of your monitoring solution.

Resources

Avatar photo
Janhavi Sathe
Associate Solutions Engineer