option
MaisonMaison Skill Développement d'API azure-communication-chat-java

azure-communication-chat-java

microsoft/skills microsoft/skills

Créez des applications de chat en temps réel avec gestion des fils de discussion, messagerie, participants et accusés de réception à l'aide du SDK Java pour le chat d'Azure Communication Services.

...Développer tout
1
Heure mise à jour 15 septembre 2026

Azure Communication Chat (Java)

Créez des applications de chat en temps réel avec gestion des fils de discussion, messagerie, participants et accusés de réception.

Installation


    com.azure
    azure-communication-chat
    1.6.0

Création du client

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 nécessite un CommunicationTokenCredential (jeton d'accès utilisateur)
String endpoint = "https://.communication.azure.com";
String userAccessToken = "";

CommunicationTokenCredential credential = new CommunicationTokenCredential(userAccessToken);

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

// Client asynchrone
ChatAsyncClient chatAsyncClient = new ChatClientBuilder()
    .endpoint(endpoint)
    .credential(credential)
    .buildAsyncClient();

Concepts clés

Classe Objectif
ChatClient Créer/supprimer des fils de discussion, récupérer les clients d'un fil de discussion
ChatThreadClient Opérations au sein d'un fil de discussion (messages, participants, accusés de réception)
ChatParticipant Utilisateur d'un fil de discussion avec son nom d'affichage
ChatMessage Contenu du message, type, informations sur l'expéditeur, horodatages
ChatMessageReadReceipt Suivi des accusés de lecture par participant

Créer un fil de discussion

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

// Définir les participants
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);

// Créer un fil de discussion
CreateChatThreadOptions options = new CreateChatThreadOptions("Discussion sur le projet")
    .setParticipants(participants);

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

// Récupérer le client du fil de discussion pour les opérations
ChatThreadClient threadClient = chatClient.getChatThreadClient(threadId);

Envoyer des messages

// Envoyer un message texte
SendChatMessageOptions messageOptions = new SendChatMessageOptions()
    .setContent("Bonjour à toute l'équipe !")
    .setSenderDisplayName("Alice")
    .setType(ChatMessageType.TEXT);

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

// Envoyer un message HTML
SendChatMessageOptions htmlOptions = new SendChatMessageOptions()
    .setContent("Important : réunion à 15 h")
    .setType(ChatMessageType.HTML);

threadClient.sendMessage(htmlOptions);

Récupérer les messages

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

// Lister tous les messages
PagedIterable messages = threadClient.listMessages();

for (ChatMessage message : messages) {
    System.out.println("ID : " + message.getId());
    System.out.println("Type : " + message.getType());
    System.out.println("Contenu : " + message.getContent().getMessage());
    System.out.println("Expéditeur : " + message.getSenderDisplayName());
    System.out.println("Créé le : " + message.getCreatedOn());
    
    // Vérifier si le message a été modifié ou supprimé
    if (message.getEditedOn() != null) {
        System.out.println("Modifié le : " + message.getEditedOn());
    }
    if (message.getDeletedOn() != null) {
        System.out.println("Supprimé le : " + message.getDeletedOn());
    }
}

// Récupérer un message spécifique
ChatMessage message = threadClient.getMessage(messageId);

Mise à jour et suppression de messages

// Mettre à jour un message
UpdateChatMessageOptions updateOptions = new UpdateChatMessageOptions()
    .setContent("Contenu du message mis à jour");

threadClient.updateMessage(messageId, updateOptions);

// Supprimer un message
threadClient.deleteMessage(messageId);

Gérer les participants

// Lister les participants
PagedIterable participants = threadClient.listParticipants();

for (ChatParticipant participant : participants) {
    CommunicationUserIdentifier user = 
        (CommunicationUserIdentifier) participant.getCommunicationIdentifier();
    System.out.println("Utilisateur : " + user.getId());
    System.out.println("Nom d'affichage : " + participant.getDisplayName());
}

// Ajouter des participants
List newParticipants = new ArrayList<>();
newParticipants.add(new ChatParticipant()
    .setCommunicationIdentifier(new CommunicationUserIdentifier(""))
    .setDisplayName("Charlie")
    .setShareHistoryTime(OffsetDateTime.now().minusDays(7))); // Partager les 7 derniers jours

threadClient.addParticipants(newParticipants);

// Supprimer un participant
CommunicationUserIdentifier userToRemove = new CommunicationUserIdentifier("");
threadClient.removeParticipant(userToRemove);

Accusés de réception

// Envoyer un accusé de lecture
threadClient.sendReadReceipt(messageId);

// Récupérer les accusés de lecture
PagedIterable receipts = threadClient.listReadReceipts();

for (ChatMessageReadReceipt receipt : receipts) {
    System.out.println("ID du message : " + receipt.getChatMessageId());
    System.out.println("Lu par : " + receipt.getSenderCommunicationIdentifier());
    System.out.println("Lu le : " + receipt.getReadOn());
}

Notifications de saisie

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

// Envoyer une notification de saisie
TypingNotificationOptions typingOptions = new TypingNotificationOptions()
    .setSenderDisplayName("Alice");

threadClient.sendTypingNotificationWithResponse(typingOptions, Context.NONE);

// Notification de saisie simple
threadClient.sendTypingNotification();

Opérations sur les fils de discussion

// Récupérer les propriétés du fil de discussion
ChatThreadProperties properties = threadClient.getProperties();
System.out.println("Sujet : " + properties.getTopic());
System.out.println("Créé le : " + properties.getCreatedOn());

// Mettre à jour le sujet
threadClient.updateTopic("Nouveau sujet de discussion sur le projet");

// Supprimer le fil de discussion
chatClient.deleteChatThread(threadId);

Lister les fils de discussion

// Lister tous les fils de discussion de l'utilisateur
PagedIterable threads = chatClient.listChatThreads();

for (ChatThreadItem thread : threads) {
    System.out.println("ID du fil : " + thread.getId());
    System.out.println("Sujet : " + thread.getTopic());
    System.out.println("Dernier message : " + thread.getLastMessageReceivedOn());
}

Pagination

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

// Pagination des messages
int maxPageSize = 10;
ListChatMessagesOptions listOptions = new ListChatMessagesOptions()
    .setMaxPageSize(maxPageSize);

PagedIterable pagedMessages = threadClient.listMessages(listOptions);

pagedMessages.iterableByPage().forEach(page -> {
    System.out.println("Code d'état de la page : " + page.getStatusCode());
    page.getElements().forEach(msg -> 
        System.out.println("Message : " + msg.getContent().getMessage()));
});

Gestion des erreurs

import com.azure.core.exception.HttpResponseException;

try {
    threadClient.sendMessage(messageOptions);
} catch (HttpResponseException e) {
    switch (e.getResponse().getStatusCode()) {
        case 401:
            System.out.println("Accès non autorisé - vérifiez le jeton");
            break;
        case 403:
            System.out.println("Accès interdit - l'utilisateur n'est pas dans le thread");
            break;
        case 404:
            System.out.println("Fil de discussion introuvable");
            break;
        default:
            System.out.println("Erreur : " + e.getMessage());
    }
}

Types de messages

Type Description
TEXT Message de chat standard
HTML Message au format HTML
TOPIC_UPDATED Message système - sujet modifié
PARTICIPANT_ADDED Message système - un participant s'est joint à la discussion
PARTICIPANT_SUPPRIMÉ Message système - un participant a quitté la discussion

Variables d'environnement

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

Meilleures pratiques

  1. Gestion des jetons – Les jetons utilisateur expirent ; implémentez une logique de rafraîchissement à l’aide de CommunicationTokenRefreshOptions
  2. Pagination – Utilisez listMessages(options) avec maxPageSize pour les fils de discussion volumineux
  3. Historique des partages - Définissez shareHistoryTime lors de l’ajout de participants pour contrôler la visibilité des messages
  4. Types de messages - Filtrez les messages système (PARTICIPANT_ADDED, etc.) des messages utilisateur
  5. Accusés de lecture - N'envoyez des accusés de lecture que lorsque les messages sont réellement consultés par l'utilisateur

Expressions déclencheuses

  • « application de chat Java », « messagerie en temps réel Java »
  • « fil de discussion », « participants au chat », « messages de chat »
  • « accusés de lecture », « notifications de saisie »
  • « chat Azure Communication Services »
Voir sur 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"

Tous les fichiers

0 fichiers

Installer azure-communication-chat-java

Téléchargez et décompressez les fichiers de compétences dans votre répertoire .claude/skills/.

Télécharger le ZIP

Clonez le dépôt et copiez les fichiers de compétence dans votre projet.

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

Copier Copier
Configuration rapide: Copiez le dossier de la compétence dans .claude/skills/ Claude détectera automatiquement la compétence et l'utilisera

Compétences similaires

brightdata-cli
Heure mise à jour 29 juin 2026
agentwallet
Heure mise à jour 7 juillet 2026
humanize
Heure mise à jour 7 juillet 2026
korean-stock-search
Heure mise à jour 8 juillet 2026
OR