opción
HogarHogar Skill Desarrollo de API azure-communication-chat-java

azure-communication-chat-java

microsoft/skills microsoft/skills

Crea aplicaciones de chat en tiempo real con gestión de hilos, mensajería, participantes y confirmaciones de lectura utilizando el SDK de Java de Azure Communication Services Chat.

...Expandir todo
1
Tiempo actualizado 15 de septiembre de 2026

Chat de Azure Communication (Java)

Crea aplicaciones de chat en tiempo real con gestión de hilos, mensajería, participantes y acuses de lectura.

Instalación


    com.azure
    azure-communication-chat
    1.6.0

Creación del 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;

// ChatClient requiere un CommunicationTokenCredential (token de acceso de usuario)
String endpoint = "https://.communication.azure.com";
String userAccessToken = "";

CommunicationTokenCredential credential = new CommunicationTokenCredential(userAccessToken);

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

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

Conceptos clave

Clase Finalidad
ChatClient Crear/eliminar hilos de chat, obtener clientes de hilos
ChatThreadClient Operaciones dentro de un hilo (mensajes, participantes, confirmaciones de recepción)
ChatParticipant Usuario en un hilo de chat con nombre de visualización
ChatMessage Contenido del mensaje, tipo, información del remitente, marcas de tiempo
ChatMessageReadReceipt Seguimiento de los acuses de lectura por participante

Crear hilo de chat

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);

// Crear hilo
CreateChatThreadOptions options = new CreateChatThreadOptions("Debate sobre el proyecto")
    .setParticipants(participants);

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

// Obtener el cliente del hilo para realizar operaciones
ChatThreadClient threadClient = chatClient.getChatThreadClient(threadId);

Enviar mensajes

// Enviar mensaje de texto
SendChatMessageOptions messageOptions = new SendChatMessageOptions()
    .setContent("¡Hola, equipo!")
    .setSenderDisplayName("Alice")
    .setType(ChatMessageType.TEXT);

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

// Enviar mensaje HTML
SendChatMessageOptions htmlOptions = new SendChatMessageOptions()
    .setContent("Importante: Reunión a las 15:00")
    .setType(ChatMessageType.HTML);

threadClient.sendMessage(htmlOptions);

Obtener mensajes

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

// Mostrar todos los mensajes
PagedIterable messages = threadClient.listMessages();

for (ChatMessage message : messages) {
    System.out.println("ID: " + message.getId());
    System.out.println("Tipo: " + message.getType());
    System.out.println("Contenido: " + message.getContent().getMessage());
    System.out.println("Remitente: " + message.getSenderDisplayName());
    System.out.println("Creado: " + message.getCreatedOn());
    
    // Comprobar si se ha editado o eliminado
    if (message.getEditedOn() != null) {
        System.out.println("Editado: " + message.getEditedOn());
    }
    if (message.getDeletedOn() != null) {
        System.out.println("Eliminado: " + message.getDeletedOn());
    }
}

// Obtener un mensaje específico
ChatMessage message = threadClient.getMessage(messageId);

Actualizar y eliminar mensajes

// Actualizar mensaje
UpdateChatMessageOptions updateOptions = new UpdateChatMessageOptions()
    .setContent("Contenido del mensaje actualizado");

threadClient.updateMessage(messageId, updateOptions);

// Eliminar mensaje
threadClient.deleteMessage(messageId);

Gestionar participantes

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

for (ChatParticipant participant : participants) {
    CommunicationUserIdentifier user = 
        (CommunicationUserIdentifier) participant.getCommunicationIdentifier();
    System.out.println("Usuario: " + user.getId());
    System.out.println("Nombre para mostrar: " + participant.getDisplayName());
}

// Añadir participantes
List newParticipants = new ArrayList<>();
newParticipants.add(new ChatParticipant()
    .setCommunicationIdentifier(new CommunicationUserIdentifier(""))
    .setDisplayName("Charlie")
    .setShareHistoryTime(OffsetDateTime.now().minusDays(7))); // Compartir los últimos 7 días

threadClient.addParticipants(newParticipants);

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

Confirmaciones de lectura

// Enviar acuse de lectura
threadClient.sendReadReceipt(messageId);

// Obtener acuses de lectura
PagedIterable receipts = threadClient.listReadReceipts();

for (ChatMessageReadReceipt receipt : receipts) {
    System.out.println("ID del mensaje: " + receipt.getChatMessageId());
    System.out.println("Leído por: " + receipt.getSenderCommunicationIdentifier());
    System.out.println("Leído a las: " + receipt.getReadOn());
}

Notificaciones de escritura

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

// Enviar notificación de escritura
TypingNotificationOptions typingOptions = new TypingNotificationOptions()
    .setSenderDisplayName("Alice");

threadClient.sendTypingNotificationWithResponse(typingOptions, Context.NONE);

// Notificación de escritura simple
threadClient.sendTypingNotification();

Operaciones con hilos

// Obtener las propiedades del hilo
ChatThreadProperties properties = threadClient.getProperties();
System.out.println("Tema: " + properties.getTopic());
System.out.println("Creado: " + properties.getCreatedOn());

// Actualizar tema
threadClient.updateTopic("Tema de debate sobre un nuevo proyecto");

// Eliminar hilo
chatClient.deleteChatThread(threadId);

Listar hilos

// Listar todos los hilos de chat del usuario
PagedIterable threads = chatClient.listChatThreads();

for (ChatThreadItem thread : threads) {
    System.out.println("ID del hilo: " + thread.getId());
    System.out.println("Tema: " + thread.getTopic());
    System.out.println("Último mensaje: " + thread.getLastMessageReceivedOn());
}

Paginación

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

// Paginación de mensajes
int maxPageSize = 10;
ListChatMessagesOptions listOptions = new ListChatMessagesOptions()
    .setMaxPageSize(maxPageSize);

PagedIterable pagedMessages = threadClient.listMessages(listOptions);

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

Gestión de errores

import com.azure.core.exception.HttpResponseException;

try {
    threadClient.sendMessage(messageOptions);
} catch (HttpResponseException e) {
    switch (e.getResponse().getStatusCode()) {
        case 401:
            System.out.println("Sin autorización: comprueba el token");
            break;
        case 403:
            System.out.println("Prohibido: el usuario no está en el hilo");
            break;
        case 404:
            System.out.println("Hilo no encontrado");
            break;
        default:
            System.out.println("Error: " + e.getMessage());
    }
}

Tipos de mensajes

Tipo Descripción
TEXTO Mensaje de chat normal
HTML Mensaje con formato HTML
TEMA_ACTUALIZADO Mensaje del sistema: tema modificado
PARTICIPANT_ADDED Mensaje del sistema: se ha incorporado un participante
PARTICIPANTE_ELIMINADO Mensaje del sistema: el participante se ha ido

Variables de entorno

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

Prácticas recomendadas

  1. Gestión de tokens: los tokens de usuario caducan; implemente la lógica de actualización con CommunicationTokenRefreshOptions
  2. Paginación: utilice listMessages(options) con maxPageSize para hilos largos
  3. Historial compartido: configura shareHistoryTime al añadir participantes para controlar la visibilidad de los mensajes
  4. Tipos de mensajes: filtra los mensajes del sistema (PARTICIPANT_ADDED, etc.) de los mensajes de los usuarios
  5. Confirmaciones de lectura: envía confirmaciones de lectura solo cuando el usuario haya visto realmente los mensajes

Frases de activación

  • «aplicación de chat Java», «mensajería en tiempo real Java»
  • «hilo de chat», «participantes en el chat», «mensajes de chat»
  • «confirmaciones de lectura», «notificaciones de escritura»
  • «chat de Azure Communication Services»
Ver en 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 los archivos

0 archivos

Instalar azure-communication-chat-java

Descarga y descomprime los archivos de habilidades en tu directorio .claude/skills/.

Descargar ZIP

Clona el repositorio y copia los archivos de la habilidad a tu proyecto.

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
Configuración rápida: Copia la carpeta de la habilidad en .claude/skills/ Claude detectará y utilizará automáticamente la habilidad
Repositorio microsoft/skills

Habilidades relacionadas

brightdata-cli
Tiempo actualizado 29 de junio de 2026
agentwallet
Tiempo actualizado 7 de julio de 2026
humanize
Tiempo actualizado 7 de julio de 2026
korean-stock-search
Tiempo actualizado 8 de julio de 2026
OR