Azure Communication Chat Java

by microsoft354361d83247MITListed Oct 8, 2026Updated Oct 8, 2026

Build real-time chat applications with Azure Communication Services Chat Java SDK. Use when implementing chat threads, messaging, participants, read receipts, typing notifications, or real-time chat features.

FeaturedInstructions onlySoftware Development
AI-generated overview

Guides Java developers in building real-time chat features with the Azure Communication Services Chat SDK.

What it does
Provides Java code patterns for creating chat threads, sending and managing messages, handling participants, read receipts, and typing notifications using the Azure Communication Services Chat SDK. It covers client setup, pagination, error handling, and message types, with a reference examples file. The deliverable is implementation guidance rather than a runnable application.
When to use it
Use when implementing real-time chat in a Java application on Azure Communication Services, such as chat threads, messaging, participants, read receipts, or typing notifications. It suits developers who need concrete SDK usage examples and best practices.
Requirements
Requires the com.azure:azure-communication-chat Java package, an Azure Communication Services endpoint, and a user access token credential. Network access to Azure Communication Services is needed. No scripts are included; only instructions and a reference document.

Azure Communication Chat (Java)

Build real-time chat applications with thread management, messaging, participants, and read receipts.

Installation

xml
<dependency>    <groupId>com.azure</groupId>    <artifactId>azure-communication-chat</artifactId>    <version>1.6.0</version></dependency>

Client Creation

java
import com.azure.communication.chat.ChatClient;import com.azure.communication.chat.ChatClientBuilder;import com.azure.communication.chat.ChatThreadClient;import com.azure.communication.common.CommunicationTokenCredential;
// ChatClient requires a CommunicationTokenCredential (user access token)String endpoint = "https://<resource>.communication.azure.com";String userAccessToken = "<user-access-token>";
CommunicationTokenCredential credential = new CommunicationTokenCredential(userAccessToken);
ChatClient chatClient = new ChatClientBuilder()    .endpoint(endpoint)    .credential(credential)    .buildClient();
// Async clientChatAsyncClient chatAsyncClient = new ChatClientBuilder()    .endpoint(endpoint)    .credential(credential)    .buildAsyncClient();

Key Concepts

ClassPurpose
ChatClientCreate/delete chat threads, get thread clients
ChatThreadClientOperations within a thread (messages, participants, receipts)
ChatParticipantUser in a chat thread with display name
ChatMessageMessage content, type, sender info, timestamps
ChatMessageReadReceiptRead receipt tracking per participant

Create Chat Thread

java
import com.azure.communication.chat.models.*;import com.azure.communication.common.CommunicationUserIdentifier;import java.util.ArrayList;import java.util.List;
// Define participantsList<ChatParticipant> participants = new ArrayList<>();
ChatParticipant participant1 = new ChatParticipant()    .setCommunicationIdentifier(new CommunicationUserIdentifier("<user-id-1>"))    .setDisplayName("Alice");
ChatParticipant participant2 = new ChatParticipant()    .setCommunicationIdentifier(new CommunicationUserIdentifier("<user-id-2>"))    .setDisplayName("Bob");
participants.add(participant1);participants.add(participant2);
// Create threadCreateChatThreadOptions options = new CreateChatThreadOptions("Project Discussion")    .setParticipants(participants);
CreateChatThreadResult result = chatClient.createChatThread(options);String threadId = result.getChatThread().getId();
// Get thread client for operationsChatThreadClient threadClient = chatClient.getChatThreadClient(threadId);

Send Messages

java
// Send text messageSendChatMessageOptions messageOptions = new SendChatMessageOptions()    .setContent("Hello, team!")    .setSenderDisplayName("Alice")    .setType(ChatMessageType.TEXT);
SendChatMessageResult sendResult = threadClient.sendMessage(messageOptions);String messageId = sendResult.getId();
// Send HTML messageSendChatMessageOptions htmlOptions = new SendChatMessageOptions()    .setContent("<strong>Important:</strong> Meeting at 3pm")    .setType(ChatMessageType.HTML);
threadClient.sendMessage(htmlOptions);

Get Messages

java
import com.azure.core.util.paging.PagedIterable;
// List all messagesPagedIterable<ChatMessage> messages = threadClient.listMessages();
for (ChatMessage message : messages) {    System.out.println("ID: " + message.getId());    System.out.println("Type: " + message.getType());    System.out.println("Content: " + message.getContent().getMessage());    System.out.println("Sender: " + message.getSenderDisplayName());    System.out.println("Created: " + message.getCreatedOn());        // Check if edited or deleted    if (message.getEditedOn() != null) {        System.out.println("Edited: " + message.getEditedOn());    }    if (message.getDeletedOn() != null) {        System.out.println("Deleted: " + message.getDeletedOn());    }}
// Get specific messageChatMessage message = threadClient.getMessage(messageId);

Update and Delete Messages

java
// Update messageUpdateChatMessageOptions updateOptions = new UpdateChatMessageOptions()    .setContent("Updated message content");
threadClient.updateMessage(messageId, updateOptions);
// Delete messagethreadClient.deleteMessage(messageId);

Manage Participants

java
// List participantsPagedIterable<ChatParticipant> participants = threadClient.listParticipants();
for (ChatParticipant participant : participants) {    CommunicationUserIdentifier user =         (CommunicationUserIdentifier) participant.getCommunicationIdentifier();    System.out.println("User: " + user.getId());    System.out.println("Display Name: " + participant.getDisplayName());}
// Add participantsList<ChatParticipant> newParticipants = new ArrayList<>();newParticipants.add(new ChatParticipant()    .setCommunicationIdentifier(new CommunicationUserIdentifier("<new-user-id>"))    .setDisplayName("Charlie")    .setShareHistoryTime(OffsetDateTime.now().minusDays(7))); // Share last 7 days
threadClient.addParticipants(newParticipants);
// Remove participantCommunicationUserIdentifier userToRemove = new CommunicationUserIdentifier("<user-id>");threadClient.removeParticipant(userToRemove);

Read Receipts

java
// Send read receiptthreadClient.sendReadReceipt(messageId);
// Get read receiptsPagedIterable<ChatMessageReadReceipt> receipts = threadClient.listReadReceipts();
for (ChatMessageReadReceipt receipt : receipts) {    System.out.println("Message ID: " + receipt.getChatMessageId());    System.out.println("Read by: " + receipt.getSenderCommunicationIdentifier());    System.out.println("Read at: " + receipt.getReadOn());}

Typing Notifications

java
import com.azure.communication.chat.models.TypingNotificationOptions;
// Send typing notificationTypingNotificationOptions typingOptions = new TypingNotificationOptions()    .setSenderDisplayName("Alice");
threadClient.sendTypingNotificationWithResponse(typingOptions, Context.NONE);
// Simple typing notificationthreadClient.sendTypingNotification();

Thread Operations

java
// Get thread propertiesChatThreadProperties properties = threadClient.getProperties();System.out.println("Topic: " + properties.getTopic());System.out.println("Created: " + properties.getCreatedOn());
// Update topicthreadClient.updateTopic("New Project Discussion Topic");
// Delete threadchatClient.deleteChatThread(threadId);

List Threads

java
// List all chat threads for the userPagedIterable<ChatThreadItem> threads = chatClient.listChatThreads();
for (ChatThreadItem thread : threads) {    System.out.println("Thread ID: " + thread.getId());    System.out.println("Topic: " + thread.getTopic());    System.out.println("Last message: " + thread.getLastMessageReceivedOn());}

Pagination

java
import com.azure.core.http.rest.PagedResponse;
// Paginate through messagesint maxPageSize = 10;ListChatMessagesOptions listOptions = new ListChatMessagesOptions()    .setMaxPageSize(maxPageSize);
PagedIterable<ChatMessage> pagedMessages = threadClient.listMessages(listOptions);
pagedMessages.iterableByPage().forEach(page -> {    System.out.println("Page status code: " + page.getStatusCode());    page.getElements().forEach(msg ->         System.out.println("Message: " + msg.getContent().getMessage()));});

Error Handling

java
import com.azure.core.exception.HttpResponseException;
try {    threadClient.sendMessage(messageOptions);} catch (HttpResponseException e) {    switch (e.getResponse().getStatusCode()) {        case 401:            System.out.println("Unauthorized - check token");            break;        case 403:            System.out.println("Forbidden - user not in thread");            break;        case 404:            System.out.println("Thread not found");            break;        default:            System.out.println("Error: " + e.getMessage());    }}

Message Types

TypeDescription
TEXTRegular chat message
HTMLHTML-formatted message
TOPIC_UPDATEDSystem message - topic changed
PARTICIPANT_ADDEDSystem message - participant joined
PARTICIPANT_REMOVEDSystem message - participant left

Environment Variables

bash
AZURE_COMMUNICATION_ENDPOINT=https://<resource>.communication.azure.comAZURE_COMMUNICATION_USER_TOKEN=<user-access-token>

Best Practices

  1. Token Management - User tokens expire; implement refresh logic with CommunicationTokenRefreshOptions
  2. Pagination - Use listMessages(options) with maxPageSize for large threads
  3. Share History - Set shareHistoryTime when adding participants to control message visibility
  4. Message Types - Filter system messages (PARTICIPANT_ADDED, etc.) from user messages
  5. Read Receipts - Send receipts only when messages are actually viewed by user

Trigger Phrases

  • "chat application Java", "real-time messaging Java"
  • "chat thread", "chat participants", "chat messages"
  • "read receipts", "typing notifications"
  • "Azure Communication Services chat"

Source and attribution

Source:microsoft/skillsin.github/plugins/azure-sdk-java/skills/azure-communication-chat-javaat commit354361d

License: MIT

Content belongs to its original authors. SourceWeft indexes it from a public repository.

Report or request removal