Yeah, teaching your bot is probably the most challenging part. I guess you should try to be as detailed as possible when creating your intents, and add as many different user says expressions as possible.
Training is a process that takes time, so be patient. Once you start off with your initial intents, in the case with API.AI, you can additionally access the history of user inputs (there is a Training section in the sidebar), and use them to train your agent by going through each of them and assigning it to a specific intent.
Hope this helps!