The term chatbot is employed generically to refer to a computer program capable of simulating a human conversation through methods of Artificial Intelligence. When we refer to a chatbot, we speak of a tool whose sole purpose is being able to simulate said conversation with the most "human" characteristics possible.
One can make a distinction between chatbots and systems that attempt to assist a user (generally a client) by answering questions of performing some tasks. These questions and actions are not framed in an open domain, but are generally part of a business relationship. We call these systems Automated Online Assistants (AOA from now). For example, an AOA may give a user the reasons that led to his account being cancelled, the cost of a particular service, or execute an action like subscribing him for an upgrade.
The different purpose of these two type of systems determines the complexity of the problem, and thus impacts in the techniques and methods used to solve it. While in the most trivial case a chatbot can be thought of as a restricted set of questions-answers pairs, in the case of AOA other type of information is necessary: knowledge of the domain, of the possible procedures, the necessary chainings to perform an action or reply to an inquiry for information, dialogue strategy, among others.
The implementation of an AOA may seem like a daunting task. As is usual in these cases, to approach the problem we must break it up in more manageable pieces -- or modules -- each of which has specific responsibilities.
There isn't a standard implementation of an AOA that works for all domains, but we can think that we require a system with at least the following modules.
This module analyzes each input of the user, tries to segment it if necessary (ie. when there is more than one sentence), categorize it (ie. question, request, informative, small talk, etc.), extract the important elements (ie. what is the specific request, what kind of answer is expected -- place, organization, date, ... --, information given by the user like name, phone number, etc.) and generates some type of semantic representation of the input.
While in the case of chatbots this may be done with simple pattern matching over the input, AOA's use more advanced techniques of Natural Language Processing (NLP), typically: word and sentence segmentation, named entity recognition, syntactic and semantic analysis and categorization.
A module with these characteristics is found invariably in question-answering systems, but these are usually simpler because said systems are only designed to answer questions and things like chaining are not considered. That is, interaction is modeled as a sequence of questions and answers and not as a real dialogue.
Given a semantic representation of the input, this module is in charge of guiding the flow of the conversation. It maintains a historical and a current state of the dialog. It knows what information the user has provided and what is eventually missing in order to complete a request or answer a question. We call this a stateful module, in contrast with other modules that may be part of the AOA which do not have any "memory".
They have the knowledge required to perform some domain specific task. For example, they know the procedure to register an item (ie. a new user in an online system) and every piece of information necessary to carry on with said request. They are, in essence, in charge of knowing the business logic, so their implementation depends on each particular application. The Dialog Manager interacts with the agents to delegate the execution of tasks and to receive requests for additional information that must be conveyed to the user.
Builds the answers that are presented to the user. Its complexity is variable because it is supported by patterns of phrases defined in the Dialog Manager (for domain independent interactions like greeting or saying goodbye) or in the Specific Agent (for messages specifically of the tasks solved by the agent). These patterns are instantiated with concrete values that result from the exchange with the user.
While the implementation of a chatbots may consist of simple pattern matching with a fixed set of rules, automated assistants require the use of several more advanced techniques of Natural Language Processing, all of which are still subject of current research. Commercial applications like Aivo or Anboto are already being used to serve hundreds of thousands of conversations, but do not provide details on their implementation. In the case of Anboto, it is claimed to be able to identify related questions and understand multiple questions in a single input text, a complex problem in the NLP area. Recent research prototypes like NADIA -- subject of a PhD thesis -- attempt to fill existing gaps in current systems and advance the state of the art.