I got this question from a reader:
i didn't understand difference between slot filling vs follow up intents as slot filling can be achieved by followup as well with extra validations right?
We can better understand this by looking at our bigger goal: we wish to collect a mandatory set of inputs from the user (that is, all are required values).
The order in which user provides input
Slot filling is orderless
The first difference between slot filling and follow up intents is that slot filling doesn't expect the user to go in a certain order.
You can set up a single slot filling intent which can handle either of these inputs: "I would like to book a flight leaving tomorrow and coming back this Friday"  "I would like to book a flight from Seattle to New York"  "I would like to book a flight for two"
In the first case, the intent will be able to extract the departure date and return date, and needs to get the remaining inputs, i.e. slots - from, to, and number of passengers.
In the second case, the intent will be able to extract the from and to locations and will prompt the user to get the other values such as departure date, return date and number of passenger.
In the last case, the intent can only extract the number of passengers and needs to prompt the user to get the other four values.
Follow up intents impose an implicit order
In the case of follow up intents, as you can imagine, you will collect the inputs in a specific order.
User: I would like to book a flight
Bot: When is the departure date?
User: <provides departure date>
Bot: When is the return date?
User: <provides return date>
Number of values collected from a single user message
Slot filling can "fill" multiple slots in one message
In message , we can infer both the departure date and return date from a single user message, while we can only infer one parameter (number of passengers) from message .
That is, we can extract multiple values in a single user message, especially the first message from the user which triggers the slot filling.
Follow up intents can extract one value per user message
While in theory you CAN design follow up intents to extract multiple values, in practice it is much more intuitive for the user if you collect only a single value per user message.
Slot filling gives the user a second chance to get their input right
If user makes a simple typo, for example, slot filling will re-prompt them for the input value. So it gives the user a chance to recover from input error. In theory, the bot can "keep asking till the user gets it right". In practice, it actually goes into an unrecoverable loop (see next point).
Follow up intents do not automatically give the user second chances
In the case of follow up intents, if the user's input is not recognized, it will trigger the fallback intent and there isn't any way to recover and go back to the previous state in the conversation.
And a third, fourth, fifth, sixth.....
But slot filling does unlimited reprompts
Slot filling actually goes into an infinite loop of asking the user to provide some information if they don't provide the value it expects. (one reason I suggest you avoid using it).
Here is what happens with slot filling when using the @sys.given-name with a name that it cannot identify.
Bot: What is your first name?
Bot: Sorry, can you tell me your first name?
User: I said Aravind
Bot: I don't think I got that. Can you tell me your first name again?
User: Its Aravind
Bot: Sorry, something went wrong. Can you.....
Followup intents don't go into a loop
Using followup intents, you don't (automatically) give the user a second chance to get their input right. In addition, there is really no way to "keep asking until the user gets it right" with followup intents.
Generally, that isn't a bad thing.
Can the slot filling feature be replicated using followup intents? No.
Can the eventual goal of slot filling (collecting a set of mandatory parameters) be achieved using followup intents? Yes.
Check out my guide to Dialogflow slot filling.