Hi and welcome, Kevin.
One thing that I do is to create an outline of a specific topic that I want my bot to address, starting with generalities and working toward specifics. Once I have a list of concepts I write down as many ways to ask/talk about each concept as I can (even “farming out” the list to others who may have different points of view on the subject), grouping them by similarities. Having access to a thesaurus can prove very useful at this point. Please note that at this point you aren’t thinking about your bot’s responses; only potential user inputs. Once you have a list of potential inputs, it’s time to “simplify” the list by using whatever “wildcard” options your chosen bot platform has available. I’m most familiar with AIML since I’m one of the developers for Program O, so I’ll use those in my examples, below.
Let’s say your bot needs to discuss pizza. Some potential concepts to discuss might be the history of pizza, various styles of pizza (e.g. New York, Chicago, Sicilian, etc.), toppings, sauces and so on. Other things to be discussed could be favorite types of pizza, preferred pizza parlors, the virtues of cold pizza and more. A brief list of potential inputs (BEFORE simplification) might look like this:
What do you know about pizza
Tell me about pizza
what about pizza makes it so popular
I want to know about pizza
what types of pizza are there
tell me about the different types of pizza
what toppings go on pizza
which pizza toppings do you like
tell me about pizza topings
{etc.}
The above list could then be simplified through the use of “wildcard” characters, like this:
* about pizza
* types of pizza
* types of pizza *
* toppings * pizza
* pizza toppings
* pizza toppings *
For this example (and within AIML in general) the “star” wildcard replaces one or more words in the input so that “* about pizza” matches both “tell me about pizza” and “what do you know about pizza”. It won’t, however, match “what about pizza makes it so popular”.
Anyway, when you have your “simplified” list of inputs, you can then work out the responses your bot will give for each input. With AIML (and other platforms as well, but I’m not well versed with them) there are ways to have a single response for multiple inputs, which can make for less work, and I’m happy to discuss it if you’re interested, but it’s a bit wordy, and my hands are already complaining a little.
I hope this helps.