In contexts where the user might want to give more than one piece of information at once, e.g. a place, a date and a time of day, should Dialogflow, accordingly, have one intent for each possible subset of those three slots to match to or is it better practice to handle it with one intent that matches phrases with all possible combinations and separate the cases in the webhook?
Either way, I'm assuming slot filling for required parameters should be handled by the webhook and not by prompts set in Dialogflow? I have little experience with the exact process behind Dialogflow's intent matching, so I'm not sure what the most robust approach would be.
Or is it maybe a bad idea in general to allow the user to fill multiple slots at once in the first place (from an app development/maintainability point of view)?
In general it is a good approach to have an intent for each possible thing your user could say. A lot of people assume an intent is like a step in a flow, but this isn't the right way off working with them. You could see them as categories of user phrases, they describe something your user is trying to say. For instance:
You could see these three phrases as 3 steps in an order flow, but if try to categorize these phrases in separate intents, you get 2 intents that can work independently from eachother.
By separating intents, you keep your conversations flexible and you are able to re-use responses and code more easily.
As you guessed correctly, slot filling is used to get specific pieces of information from the users phrases. In the case of the order intent, it would be an order. In the example phrases I gave you might have already noticed that one phrase is missing an actual order. This is fine, because if I would tell you "I want to order" you know what I'm trying to do, I want to buy something and that is the same when I tell you "Give me a hamburger", both phrases are part of the same category.
If you want to create the best possible experience and dynamic conversations, I have to recommend to do slot filling via code. The Dialogflow tool is nice for quick basic things, but if you want to ask your user something different depending on if they mention a product or not, you will have to do slot filling or check parameters via code.
So in short, I would use 1 intent for each type of user phrase, handle parameters in this intent and do slot filling or variant responses via the webhook using slot filling and context. If any information is missing, save the current information in the context and prompt the user for the information that you need.
For example: "Okay, you want hamburgers and fries, do you also want a drink with that?".