[Conversational assistants](🔗) are chatbots in Kustomer that allow you to exchange automated messages with a customer to collect information or provide self-support opportunities before the customer connects with an agent over chat.
## Conversational assistant message template types
JSON message template types
See [Template types](🔗) for Kustomer Chat message template types with sample JSON object templates and UI examples.
A conversational assistant sends chat messages with one of three [message template types](🔗) available in the Chat SDK:
**`
text
`**: Messages in plain text, or texts**`
quick_replies
`**: Messages customers can select from available response buttons, or quick replies**`
mll
`**: Messages customers can select from a multi-level list with parent list items and children list items, or Multi-level Lists (MLL)
Chat message responses from the customer to the assistant use one of the following three formats:
`
String
`: Responses in plain text`
Action
`: Button responses from quick replies`
MLLNode
`: Selection responses from a multi-level list
The assistant receives and processes the customer response. Based on the customer response, the assistant sends another message or a set of messages based on the configured conversational flow.
The assistant and customer exchange chat messages until the assistant either ends the chat or transfers the customer to a support agent.
## Select a conversational assistant by `id
`
You can select a specific conversational assistant by the assistant id. To learn how to find the assistant id, see [Conversation assistant id](🔗) in the Kustomer Help Center.
## Select the default conversational assistant
You can use the Chat Management: Settings to select a default conversational assistant for each brand. To learn how to set a default conversational assistant, see [Default Assistant](🔗) in the Kustomer Help Center.
## Store the id of the final conversation in a variable
The id of the conversation you're going to make/use is set in `makeAnAssistant()
`, further down the page. You'll need this to be able to use other core sdk methods with your conversation.
## Set up a listener
Create a listener with `KUSChatListener
` to tell you when a new chat message is received because of the conversation that was started with an assistant:
## Implement `makeAnAssistant()
`
Implement `makeAnAssistant()
` to do the following:
Get the active assistant and start dialog
Gets the initial messages that the active assistant asks the user, which contain the data needed to render buttons and multi level list items for the first question that requires a user response
Automatically replies with the last button, multi level list item, or the text "Orders"
Gives you a conversation id (stored in `
newConversationId
` here) you use just like without a chat assistant
## Notes
Note 1: for buttons and multi level list items the user must reply with one of the provided options--free text won't progress the assistant.
Note 2: the initial messages of the chat assistant will be re-broadcast to your KUSChatListener after you send the first user response.
Note 3: only after you create the conversation with the first response will a conversation object (and conversation id) actually be created.