Enable intelligent conversational AI capabilities in your Android app using CometChat UIKit v5 with AI Agent integration:
AI Assistant Chat History
Chat History Management
Contextual Responses
Agent Detection
Seamless Handoffs
Transform your chat experience with AI-powered assistance that provides intelligent responses and offers seamless integration with your existing chat infrastructure.
Users can interact with AI agents through a dedicated chat interface that:
Provides intelligent responses based on conversation context.
Maintains chat history for continuity.
Seamlessly integrates with your existing user chat system.
The AI Agent chat interface provides a familiar messaging experience enhanced with AI capabilities, accessible through your main chat flow or as a standalone feature.
Create the AI Assistant chat activity with proper theme and layout configuration.
Kotlin
Java
class AIAssistantChatActivity : AppCompatActivity() { private lateinit var binding: ActivityAiAssistantChatBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityAiAssistantChatBinding.inflate(layoutInflater) setContentView(binding.root) val messageJson = intent.getStringExtra(getString(R.string.app_base_message)) val userJson = intent.getStringExtra(getString(R.string.app_user)) var user: User? = null var parentMessage: BaseMessage? = null if (!userJson.isNullOrEmpty()) user = User.fromJson(userJson) if (!messageJson.isNullOrEmpty()) parentMessage = BaseMessage.processMessage(JSONObject(messageJson)) initializeComponents(user, parentMessage) initClickListeners() } private fun initializeComponents(user: User?, parentMessage: BaseMessage?) { user?.let { binding.messageHeader.user = it // Set user for header binding.messageList.user = it // Set user for message list binding.messageComposer.user = it // Set user for composer } if (parentMessage != null) { // Set message id of parent message to fetch messages with parent. // Here we are setting parent message id to message list to fetch messages and message composer to send reply to that message. // Here this is being used for AIAssistantChatHistory binding.messageList.setParentMessage(parentMessage!!.getId()) binding.messageComposer.setParentMessageId(parentMessage!!.getId()) } binding.messageList.setStyle(R.style.CustomCometChatMessageListStyle) // Custom style for AI chat binding.messageComposer.style = R.style.CustomMessageComposerStyle // Custom style for AI chat }}
public class AIAssistantChatActivity extends AppCompatActivity { private ActivityAiAssistantChatBinding binding; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); binding = ActivityAiAssistantChatBinding.inflate(getLayoutInflater()); setContentView(binding.getRoot()); String messageJson = getIntent().getStringExtra(getString(R.string.app_base_message)); String userJson = getIntent().getStringExtra(getString(R.string.app_user)); User user = null; BaseMessage parentMessage = null; if (userJson != null && !userJson.isEmpty()) user = User.fromJson(userJson); if (messageJson != null && !messageJson.isEmpty()) parentMessage = BaseMessage.processMessage(new JSONObject(messageJson)); initializeComponents(user, parentMessage); initClickListeners(); } private void initializeComponents(User user, BaseMessage parentMessage) { if (user != null) { binding.messageHeader.setUser(user); // Set user for header binding.messageList.setUser(user); // Set user for message list binding.messageComposer.setUser(user); // Set user for composer } if (parentMessage != null) { // Set message id of parent message to fetch messages with parent. // Here we are setting parent message id to message list to fetch messages and message composer to send reply to that message. // Here this is being used for AIAssistantChatHistory binding.messageList.setParentMessage(parentMessage.getId()); binding.messageComposer.setParentMessageId(parentMessage.getId()); } binding.messageList.setStyle(R.style.CustomCometChatMessageListStyle); // Custom style for AI chat binding.messageComposer.setStyle(R.style.CustomMessageComposerStyle); // Custom style for AI chat }}
Add CometChatMessageHeader, CometChatMessageList, and CometChatMessageComposer to your layout to enable a complete AI chat interface. Use the sample XML below as a reference for correct integration.
Initialize click listeners of message header to handle new chat creation and chat history access.
Kotlin
Java
private fun initClickListeners() { // New chat creation binding.messageHeader.setNewChatButtonClick { Utils.hideKeyBoard(this@AIAssistantChatActivity, binding.root) val intent = Intent(this@AIAssistantChatActivity, AIAssistantChatActivity::class.java) intent.putExtra(getString(R.string.app_user), user.toJson().toString()) // Pass user to create new chat startActivity(intent) finish() } // Chat history access binding.messageHeader.setChatHistoryButtonClick { val intent = Intent(this@AIAssistantChatActivity, AIAssistantChatHistoryActivity::class.java) intent.putExtra(getString(R.string.app_user), user.toJson().toString()) // Pass user to fetch chat history startActivity(intent) }}
private void initClickListeners() { // New chat creation binding.messageHeader.setNewChatButtonClick(() -> { Utils.hideKeyBoard(AIAssistantChatActivity.this, binding.getRoot()); Intent intent = new Intent(AIAssistantChatActivity.this, AIAssistantChatActivity.class); intent.putExtra(getString(R.string.app_user), user.toJson().toString()); // Pass user to create new chat startActivity(intent); finish(); }); // Chat history access binding.messageHeader.setChatHistoryButtonClick(() -> { Intent intent = new Intent(AIAssistantChatActivity.this, AIAssistantChatHistoryActivity.class); intent.putExtra(getString(R.string.app_user), user.toJson().toString()); // Pass user to fetch chat history startActivity(intent); });}
Step 5 - Create an activity for AIAssistantChatHistory component.
Create a new activity to host CometChatAIAssistantChatHistory component and handle its interactions.
Kotlin
Java
class AIAssistantChatHistoryActivity : AppCompatActivity() { private lateinit var binding: ActivityAiAssistantChatHistoryBinding private var user: User? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityAiAssistantChatHistoryBinding.inflate(layoutInflater) setContentView(binding.root) val userJson = intent.getStringExtra(getString(R.string.app_user)) if (userJson != null && !userJson.isEmpty()) { user = User.fromJson(userJson) // Set user to fetch chat history binding.cometchatAiAssistantChatHistory.setUser(user) } // Use setStyle() method of the component to apply custom styles if needed // binding.cometchatAiAssistantChatHistory.setStyle(R.style.CustomCometChatAIAssistantChatHistoryStyle) // See docs of CometChatAIAssistantChatHistory for available style attributes // init click listeners initClickListeners() } private fun initClickListeners() { // History item click binding.cometchatAiAssistantChatHistory.setOnItemClickListener { view, position, message -> val appEntity = message.getReceiver() if (appEntity is User) { user = appEntity val intent = Intent(this@AIAssistantChatHistoryActivity, AIAssistantChatActivity::class.java) intent.putExtra(getString(R.string.app_user), appEntity.toJson().toString()) intent.putExtra( getString(R.string.app_base_message), message.getRawMessage().toString() ) startActivity(intent) finish() } } // New chat creation from history screen binding.cometchatAiAssistantChatHistory.setOnNewChatClickListener { val intent = Intent(this@AIAssistantChatHistoryActivity, AIAssistantChatActivity::class.java) intent.putExtra(getString(R.string.app_user), user!!.toJson().toString()) // Pass user to create new chat startActivity(intent) finish() } // Close history screen binding.cometchatAiAssistantChatHistory.setOnCloseClickListener { // finish the activity } }}
public class AIAssistantChatHistoryActivity extends AppCompatActivity { private ActivityAiAssistantChatHistoryBinding binding; private User user; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); binding = ActivityAiAssistantChatHistoryBinding.inflate(getLayoutInflater()); setContentView(binding.getRoot()); String userJson = getIntent().getStringExtra(getString(R.string.app_user)); if (userJson != null && !userJson.isEmpty()) { user = User.fromJson(userJson); // Set user to fetch chat history binding.cometchatAiAssistantChatHistory.setUser(user); } // Use setStyle() method of the component to apply custom styles if needed // binding.cometchatAiAssistantChatHistory.setStyle(R.style.CustomCometChatAIAssistantChatHistoryStyle); // See docs of CometChatAIAssistantChatHistory for available style attributes // init click listeners initClickListeners(); } private void initClickListeners() { // History item click binding.cometchatAiAssistantChatHistory.setOnItemClickListener((view, position, message) -> { AppEntity appEntity = message.getReceiver(); if (appEntity instanceof User) { user = (User) appEntity; Intent intent = new Intent(AIAssistantChatHistoryActivity.this, AIAssistantChatActivity.class); intent.putExtra(getString(R.string.app_user), ((User) appEntity).toJson().toString()); intent.putExtra( getString(R.string.app_base_message), message.getRawMessage().toString() ); startActivity(intent); finish(); } }); // New chat creation from history screen binding.cometchatAiAssistantChatHistory.setOnNewChatClickListener(() -> { Intent intent = new Intent(AIAssistantChatHistoryActivity.this, AIAssistantChatActivity.class); intent.putExtra(getString(R.string.app_user), user.toJson().toString()); // Pass user to create new chat startActivity(intent); finish(); }); // Close history screen binding.cometchatAiAssistantChatHistory.setOnCloseClickListener(() -> { // finish the activity }); }}
Add CometChatAIAssistantChatHistory to your layout to enable access to AI chat history. Use the sample XML below as a reference for correct integration.
Create intent and start AI Assistant chat from your main application.
Kotlin
Java
// In your main activity or chat listfun launchAIAssistantChat(aiUser: User, parentMessage: BaseMessage? = null) { val intent = Intent(this, AIAssistantChatActivity::class.java) intent.putExtra(getString(R.string.app_user), aiUser.toJson().toString()) startActivity(intent)}
// In your main activity or chat listpublic void launchAIAssistantChat(User aiUser, BaseMessage parentMessage) { Intent intent = new Intent(this, AIAssistantChatActivity.class); intent.putExtra(getString(R.string.app_user), aiUser.toJson().toString()); startActivity(intent);}