New Slots Filling Functionality in Watson Conversation

In my previous role I worked on improvements for tooling for conversational user experiences. One of these improvements was an easy way to gather user input before actions are invoked. These typical conversation scenarios are often referred to as ‘slot filling’.

In traditional web applications users define input values in HTML forms and then click on submit buttons to invoke business logic. ‘Slot filling’ is basically the counterpart for conversational user experiences. For example a ‘find company news’ intent might require a ‘company’ and a ‘sentiment’ parameter before the actual APIs (e.g. Watson Discovery API against news corpus) can be invoked.

If all of this information is provided by people in their phrase, the conversation is straight forward and looks like this.

watson-conv-slots2

If however the input parameters are mandatory and have not been provided, the conversation service gathers these slots from users first.

watson-conv-slots1

While it has been possible to build such scenarios with the Watson Conversation service for quite some time, the tooling provided by the Conversation service has now significantly improved. You don’t need any longer different dialog nodes for every single variation of a conversation flow. Instead developers can turn on ‘slots’ per node to enter additional information how to ask users to provide the missing information.

watson-conv-slots3

In order to find out read the documentation or watch this video.

  • Pham Duyen

    Can we break out of slots to jump to an other node?

  • Learner 1980

    thanks for the valuable information. i have 2 specific questions.

    1. I created a slot that prompts the user to enter a number. so i used @sys-number and created a context variable $number to capture it. However i want to also check that the number enter by user is exactly 5 digits. is there a way to perform this validation?

    2. in another scenario i have to prompt the user to provide 2 numbers – customer id and order id. both are numbers. so i again created 2 slots with @sys-number and created 2 context variables to capture customerId and orderId. now my problem is how to figure out order of these numbers in the user input. so let’s say that if the users writes “please give me status of my order with id 100”, how can i ensure that 100 is interpreted as the orderId and not customerId. At present because my first slot is customerId, watson assumes that the number provided is customerId and not orderId and it again prompts the user to provide customerId. is there a way to design it in a better way. i was hoping that if i can get answer to Point 1, may be i can put some check on number of digits and do something.

    Looking forward for some tips here. thanks !