opção
LarLar Skill Desenvolvimento de APIs azure-communication-chat-java

azure-communication-chat-java

microsoft/skills microsoft/skills

Crie aplicativos de bate-papo em tempo real com gerenciamento de threads, envio de mensagens, participantes e confirmações de leitura usando o SDK Java do Azure Communication Services Chat.

...Expandir tudo
1
Tempo atualizado 15 de Setembro de 2026

Azure Communication Chat (Java)

Crie aplicativos de bate-papo em tempo real com gerenciamento de threads, envio de mensagens, participantes e confirmações de leitura.

Instalação


    com.azure
    azure-communication-chat
    1.6.0

Criação do cliente

import com.azure.communication.chat.ChatClient;
import com.azure.communication.chat.ChatClientBuilder;
import com.azure.communication.chat.ChatThreadClient;
import com.azure.communication.common.CommunicationTokenCredential;

// O ChatClient requer um CommunicationTokenCredential (token de acesso do usuário)
String endpoint = "https://.communication.azure.com";
String userAccessToken = "";

CommunicationTokenCredential credential = new CommunicationTokenCredential(userAccessToken);

ChatClient chatClient = new ChatClientBuilder()
    .endpoint(endpoint)
    .credential(credential)
    .buildClient();

// Cliente assíncrono
ChatAsyncClient chatAsyncClient = new ChatClientBuilder()
    .endpoint(endpoint)
    .credential(credential)
    .buildAsyncClient();

Conceitos-chave

Classe Finalidade
ChatClient Criar/excluir threads de bate-papo, obter clientes de threads
ChatThreadClient Operações dentro de um tópico (mensagens, participantes, confirmações de recebimento)
ChatParticipant Usuário em uma conversa com nome de exibição
ChatMessage Conteúdo da mensagem, tipo, informações do remetente, carimbos de data/hora
ChatMessageReadReceipt Rastreamento de confirmação de leitura por participante

Criar conversa

import com.azure.communication.chat.models.*;
import com.azure.communication.common.CommunicationUserIdentifier;
import java.util.ArrayList;
import java.util.List;

// Definir participantes
List participants = new ArrayList<>();

ChatParticipant participant1 = new ChatParticipant()
    .setCommunicationIdentifier(new CommunicationUserIdentifier(""))
    .setDisplayName("Alice");

ChatParticipant participant2 = new ChatParticipant()
    .setCommunicationIdentifier(new CommunicationUserIdentifier(""))
    .setDisplayName("Bob");

participants.add(participant1);
participants.add(participant2);

// Criar tópico
CreateChatThreadOptions options = new CreateChatThreadOptions("Discussão do projeto")
    .setParticipants(participants);

CreateChatThreadResult result = chatClient.createChatThread(options);
String threadId = result.getChatThread().getId();

// Obter o cliente do tópico para operações
ChatThreadClient threadClient = chatClient.getChatThreadClient(threadId);

Enviar mensagens

// Enviar mensagem de texto
SendChatMessageOptions messageOptions = new SendChatMessageOptions()
    .setContent("Olá, equipe!")
    .setSenderDisplayName("Alice")
    .setType(ChatMessageType.TEXT);

SendChatMessageResult sendResult = threadClient.sendMessage(messageOptions);
String messageId = sendResult.getId();

// Enviar mensagem em HTML
SendChatMessageOptions htmlOptions = new SendChatMessageOptions()
    .setContent("Importante: Reunião às 15h")
    .setType(ChatMessageType.HTML);

threadClient.sendMessage(htmlOptions);

Obter mensagens

import com.azure.core.util.paging.PagedIterable;

// Listar todas as mensagens
PagedIterable messages = threadClient.listMessages();

for (ChatMessage message : messages) {
    System.out.println("ID: " + message.getId());
    System.out.println("Tipo: " + message.getType());
    System.out.println("Conteúdo: " + message.getContent().getMessage());
    System.out.println("Remetente: " + message.getSenderDisplayName());
    System.out.println("Criado em: " + message.getCreatedOn());
    
    // Verificar se foi editada ou excluída
    if (message.getEditedOn() != null) {
        System.out.println("Editada: " + message.getEditedOn());
    }
    if (message.getDeletedOn() != null) {
        System.out.println("Excluída: " + message.getDeletedOn());
    }
}

// Obter mensagem específica
ChatMessage message = threadClient.getMessage(messageId);

Atualizar e excluir mensagens

// Atualizar mensagem
UpdateChatMessageOptions updateOptions = new UpdateChatMessageOptions()
    .setContent("Conteúdo da mensagem atualizada");

threadClient.updateMessage(messageId, updateOptions);

// Excluir mensagem
threadClient.deleteMessage(messageId);

Gerenciar participantes

// Listar participantes
PagedIterable participants = threadClient.listParticipants();

for (ChatParticipant participant : participants) {
    CommunicationUserIdentifier user = 
        (CommunicationUserIdentifier) participant.getCommunicationIdentifier();
    System.out.println("Usuário: " + user.getId());
    System.out.println("Nome de exibição: " + participant.getDisplayName());
}

// Adicionar participantes
List newParticipants = new ArrayList<>();
newParticipants.add(new ChatParticipant()
    .setCommunicationIdentifier(new CommunicationUserIdentifier(""))
    .setDisplayName("Charlie")
    .setShareHistoryTime(OffsetDateTime.now().minusDays(7))); // Compartilhar os últimos 7 dias

threadClient.addParticipants(newParticipants);

// Remover participante
CommunicationUserIdentifier userToRemove = new CommunicationUserIdentifier("");
threadClient.removeParticipant(userToRemove);

Confirmações de leitura

// Enviar confirmação de leitura
threadClient.sendReadReceipt(messageId);

// Obter confirmações de leitura
PagedIterable receipts = threadClient.listReadReceipts();

for (ChatMessageReadReceipt receipt : receipts) {
    System.out.println("ID da mensagem: " + receipt.getChatMessageId());
    System.out.println("Lida por: " + receipt.getSenderCommunicationIdentifier());
    System.out.println("Lida em: " + receipt.getReadOn());
}

Notificações de digitação

import com.azure.communication.chat.models.TypingNotificationOptions;

// Enviar notificação de digitação
TypingNotificationOptions typingOptions = new TypingNotificationOptions()
    .setSenderDisplayName("Alice");

threadClient.sendTypingNotificationWithResponse(typingOptions, Context.NONE);

// Notificação simples de digitação
threadClient.sendTypingNotification();

Operações com threads

// Obter propriedades do tópico
ChatThreadProperties properties = threadClient.getProperties();
System.out.println("Tópico: " + properties.getTopic());
System.out.println("Criado em: " + properties.getCreatedOn());

// Atualizar tópico
threadClient.updateTopic("Novo tópico de discussão sobre o projeto");

// Excluir tópico
chatClient.deleteChatThread(threadId);

Listar threads

// Listar todos os tópicos de bate-papo do usuário
PagedIterable threads = chatClient.listChatThreads();

for (ChatThreadItem thread : threads) {
    System.out.println("ID do tópico: " + thread.getId());
    System.out.println("Tópico: " + thread.getTopic());
    System.out.println("Última mensagem: " + thread.getLastMessageReceivedOn());
}

Paginação

import com.azure.core.http.rest.PagedResponse;

// Paginar as mensagens
int maxPageSize = 10;
ListChatMessagesOptions listOptions = new ListChatMessagesOptions()
    .setMaxPageSize(maxPageSize);

PagedIterable pagedMessages = threadClient.listMessages(listOptions);

pagedMessages.iterableByPage().forEach(page -> {
    System.out.println("Código de status da página: " + page.getStatusCode());
    page.getElements().forEach(msg -> 
        System.out.println("Mensagem: " + msg.getContent().getMessage()));
});

Tratamento de erros

import com.azure.core.exception.HttpResponseException;

try {
    threadClient.sendMessage(messageOptions);
} catch (HttpResponseException e) {
    switch (e.getResponse().getStatusCode()) {
        case 401:
            System.out.println("Não autorizado — verifique o token");
            break;
        case 403:
            System.out.println("Proibido — usuário não está no thread");
            break;
        case 404:
            System.out.println("Thread não encontrado");
            break;
        default:
            System.out.println("Erro: " + e.getMessage());
    }
}

Tipos de mensagens

Tipo Descrição
TEXTO Mensagem normal de bate-papo
HTML Mensagem formatada em HTML
TÓPICO_ATUALIZADO Mensagem do sistema — tópico alterado
PARTICIPANT_ADDED Mensagem do sistema – participante entrou
PARTICIPANT_REMOVED Mensagem do sistema - participante saiu

Variáveis de ambiente

AZURE_COMMUNICATION_ENDPOINT=https://.communication.azure.com
AZURE_COMMUNICATION_USER_TOKEN=

Práticas recomendadas

  1. Gerenciamento de tokens – Os tokens de usuário expiram; implemente uma lógica de atualização com CommunicationTokenRefreshOptions
  2. Paginação — use listMessages(options) com maxPageSize para threads grandes
  3. Histórico de compartilhamento — Defina shareHistoryTime ao adicionar participantes para controlar a visibilidade das mensagens
  4. Tipos de mensagem — Filtre as mensagens do sistema (PARTICIPANT_ADDED, etc.) das mensagens do usuário
  5. Confirmações de leitura — Envie confirmações somente quando as mensagens forem efetivamente visualizadas pelo usuário

Frases de acionamento

  • “aplicativo de bate-papo Java”, “mensagens em tempo real Java”
  • “linha de conversa”, “participantes do chat”, “mensagens de chat”
  • “confirmações de leitura”, “notificações de digitação”
  • “bate-papo do Azure Communication Services”
Ver no GitHub
---
name: azure-communication-chat-java
description: Build real-time chat applications with thread management, messaging, participants, and read receipts using the Azure Communication Services Chat Java SDK.
license: MIT
---

# 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 client
ChatAsyncClient chatAsyncClient = new ChatClientBuilder()
    .endpoint(endpoint)
    .credential(credential)
    .buildAsyncClient();
```

## Key Concepts

| Class | Purpose |
|-------|---------|
| `ChatClient` | Create/delete chat threads, get thread clients |
| `ChatThreadClient` | Operations within a thread (messages, participants, receipts) |
| `ChatParticipant` | User in a chat thread with display name |
| `ChatMessage` | Message content, type, sender info, timestamps |
| `ChatMessageReadReceipt` | Read 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 participants
List<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 thread
CreateChatThreadOptions options = new CreateChatThreadOptions("Project Discussion")
    .setParticipants(participants);

CreateChatThreadResult result = chatClient.createChatThread(options);
String threadId = result.getChatThread().getId();

// Get thread client for operations
ChatThreadClient threadClient = chatClient.getChatThreadClient(threadId);
```

## Send Messages

```java
// Send text message
SendChatMessageOptions messageOptions = new SendChatMessageOptions()
    .setContent("Hello, team!")
    .setSenderDisplayName("Alice")
    .setType(ChatMessageType.TEXT);

SendChatMessageResult sendResult = threadClient.sendMessage(messageOptions);
String messageId = sendResult.getId();

// Send HTML message
SendChatMessageOptions 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 messages
PagedIterable<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 message
ChatMessage message = threadClient.getMessage(messageId);
```

## Update and Delete Messages

```java
// Update message
UpdateChatMessageOptions updateOptions = new UpdateChatMessageOptions()
    .setContent("Updated message content");

threadClient.updateMessage(messageId, updateOptions);

// Delete message
threadClient.deleteMessage(messageId);
```

## Manage Participants

```java
// List participants
PagedIterable<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 participants
List<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 participant
CommunicationUserIdentifier userToRemove = new CommunicationUserIdentifier("<user-id>");
threadClient.removeParticipant(userToRemove);
```

## Read Receipts

```java
// Send read receipt
threadClient.sendReadReceipt(messageId);

// Get read receipts
PagedIterable<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 notification
TypingNotificationOptions typingOptions = new TypingNotificationOptions()
    .setSenderDisplayName("Alice");

threadClient.sendTypingNotificationWithResponse(typingOptions, Context.NONE);

// Simple typing notification
threadClient.sendTypingNotification();
```

## Thread Operations

```java
// Get thread properties
ChatThreadProperties properties = threadClient.getProperties();
System.out.println("Topic: " + properties.getTopic());
System.out.println("Created: " + properties.getCreatedOn());

// Update topic
threadClient.updateTopic("New Project Discussion Topic");

// Delete thread
chatClient.deleteChatThread(threadId);
```

## List Threads

```java
// List all chat threads for the user
PagedIterable<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 messages
int 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

| Type | Description |
|------|-------------|
| `TEXT` | Regular chat message |
| `HTML` | HTML-formatted message |
| `TOPIC_UPDATED` | System message - topic changed |
| `PARTICIPANT_ADDED` | System message - participant joined |
| `PARTICIPANT_REMOVED` | System message - participant left |

## Environment Variables

```bash
AZURE_COMMUNICATION_ENDPOINT=https://<resource>.communication.azure.com
AZURE_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"

Todos os arquivos

0 arquivos

Instalar azure-communication-chat-java

Baixe e descompacte os arquivos de habilidades no diretório .claude/skills/.

Baixar ZIP

Clone o repositório e copie os arquivos da habilidade para o seu projeto.

git clone https://github.com/microsoft/skills/tree/main/.github/plugins/azure-sdk-java/skills/azure-communication-chat-java # Copy SKILL.md to your .claude/skills/ directory

Copiar Copiar
Configuração rápida: Copie a pasta da habilidade para .claude/skills/ O Claude detectará e utilizará automaticamente a habilidade
Repositório microsoft/skills

Habilidades relacionadas

brightdata-cli
Tempo atualizado 29 de Junho de 2026
agentwallet
Tempo atualizado 7 de Julho de 2026
humanize
Tempo atualizado 7 de Julho de 2026
korean-stock-search
Tempo atualizado 8 de Julho de 2026
OR