Building a QnA bot and hooking it up to Cortana is simple in node.js under BotFramework V3.
If you have a FAQ that is in Q: A: format you can import it via the Azure QnA Maker tools and auto-create a "knowledge base". No coding required. You can do this here https://www.qnamaker.ai.
The next step is creating your bot. Microsoft has standardized on their botframework to do this. https://dev.botframework.com is your gateway.
If you are like me and like the simplicity of node.js then pick the QnA template.
Then go back to the Azure portal and update your bot for the Application Settings blade sections shown here.
The test web app will now be successfully linked to your QnA bot! But don't forget the last step...
Go to your Channels blade and set up Cortana. Then, go to the build blade and open the online editor. In the app.js code, you will see that the template uses the standard QnA dialog builder - that does not say the resulting answers back with the Cortana speech channel. Add an override like this.
(See GitHub QnAMaker patch for a V4 node example.)
There you have it. Now "Hey Cortana, ask Bernie Question Bot Test what is a dwarf planet?"
For C#, it is slightly more complicated. You need to subclass the the BasicQnAMakerDialog with something that sends a message with speak attached. This is done as an inner class of RootDialog (from the V3 C# template that comes with Azure Web App Bots.
(See GitHub QnAMaker patch for a V4 C# example.)