Building a narrative conversational agent using a component-based architecture