Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Ajoutez un chat en temps réel à votre application à l’aide du SDK Communication Services Chat. Cet article décrit comment utiliser le SDK Chat pour créer des fils de discussion qui permettent aux utilisateurs d'avoir des conversations entre eux. Pour en savoir plus sur les concepts de conversation, consultez la documentation conceptuelle de la conversation.
Prérequis
Compte Azure avec un abonnement actif. Créez un compte gratuitement.
Une ressource Communication Services active et la chaîne de connexion. Créez une ressource Communication Services.
Installez Azure CLI.
Prenez note de votre point de terminaison de ressource Communication Services. Vous pouvez obtenir ce point de terminaison auprès du portail Azure. Vous pouvez aussi trouver l’URL du point de terminaison dans la chaîne de connexion. C’est l’URL qui vient après
endpoint=et qui commence parhttps://.Jeton d’accès utilisateur. Veillez à définir l’étendue sur chat (conversation) et prenez note de la chaîne du jeton et de la chaîne user_id. Vous pouvez également utiliser Azure CLI et exécuter la commande suivante avec votre chaîne de connexion pour créer un utilisateur et un jeton d’accès.
az communication identity token issue --scope chat --connection-string "yourConnectionString"Pour plus d’informations, consultez Utiliser Azure CLI pour créer et gérer des jetons d’accès.
Configurer
Ajouter l’extension
Ajoutez l’extension Azure Communication Services pour Azure CLI à l’aide de la commande az extension.
az extension add --name communication
Connectez-vous à Azure CLI
Connectez-vous à Azure CLI. Vous pouvez vous connecter en exécutant la commande az login à partir du terminal et en fournissant vos informations d’identification.
(Facultatif) Utiliser les opérations d’identité Azure CLI sans passer un point de terminaison ou un jeton d’accès
Stocker votre point de terminaison dans une variable d’environnement
Vous pouvez configurer la variable d’environnement AZURE_COMMUNICATION_ENDPOINT pour utiliser les opérations de conversation Azure CLI sans avoir à utiliser --endpoint pour passer le point de terminaison. Pour configurer une variable d’environnement, ouvrez une fenêtre de console, puis sélectionnez votre système d’exploitation dans les onglets suivants. Remplacez <yourEndpoint> par votre point de terminaison réel.
Ouvrez une fenêtre de console et entrez la commande suivante :
setx AZURE_COMMUNICATION_ENDPOINT "<yourEndpoint>"
Après avoir ajouté la variable d’environnement, vous devrez peut-être redémarrer les programmes en cours d’exécution qui doivent lire la variable d’environnement, y compris la fenêtre de console. Par exemple, si vous utilisez Visual Studio comme éditeur, redémarrez Visual Studio avant d’exécuter l’exemple.
Stocker votre jeton d’accès dans une variable d’environnement
Vous pouvez configurer la variable d’environnement AZURE_COMMUNICATION_ACCESS_TOKEN pour utiliser les opérations de conversation Azure CLI sans avoir à utiliser --access-token pour passer le jeton d’accès. Pour configurer une variable d’environnement, ouvrez une fenêtre de console, puis sélectionnez votre système d’exploitation dans les onglets suivants. Remplacez <yourAccessToken> par votre jeton d’accès réel.
Ouvrez une fenêtre de console et entrez la commande suivante :
setx AZURE_COMMUNICATION_ACCESS_TOKEN "<yourAccessToken>"
Après avoir ajouté la variable d’environnement, vous devrez peut-être redémarrer les programmes en cours d’exécution qui doivent lire la variable d’environnement, y compris la fenêtre de console. Par exemple, si vous utilisez Visual Studio comme éditeur, redémarrez Visual Studio avant d’exécuter l’exemple.
Opérations
Démarrer un fil de conversation
Utilisez la commande thread create pour créer un thread de conversation.
az communication chat thread create --topic "<chatTopic>" --endpoint "<endpoint>" --access-token "<token>"
Si vous avez stocké le point de terminaison et le jeton d'accès dans des variables d'environnement comme indiqué précédemment, vous n'avez pas besoin de les transmettre à la commande.
az communication chat thread create --topic "<chatTopic>"
- Utilisez
<chatTopic>pour attribuer un thème à ce fil de conversation. Vous pouvez mettre à jour le thème après la création du thread de conversation en utilisant la commandethread update-topic. - Remplacez
<endpoint>par votre point de terminaison Azure Communication Services. - Remplacez
<token>par votre jeton d’accès obtenu précédemment en exécutant la commandeidentity token issue.
Mettre à jour le sujet d’un fil de conversation
az communication chat thread update-topic --thread "<chatThreadId>" --topic "<chatTopic>" --endpoint "<endpoint>" --access-token "<token>"
- Remplacez
<chatThreadId>par votre ID de thread de conversation. - Remplacez
<chatTopic>par le nouveau thème de conversation que vous voulez définir. - Remplacez
<endpoint>par votre point de terminaison Azure Communication Services. - Remplacez
<token>par votre jeton d’accès obtenu précédemment en exécutant la commandeidentity token issue.
Répertorier tous les fils de conversation
La commande thread list retourne la liste des threads de conversation d’un utilisateur.
az communication chat thread list --start-time "<startTime>" --endpoint "<endpoint>" --access-token "<token>"
- Facultatif : utilisez
<startTime>pour spécifier le moment le plus ancien pour recevoir des messages de discussion. - Remplacez
<endpoint>par votre point de terminaison Azure Communication Services. - Remplacez
<token>par votre jeton d’accès obtenu précédemment en exécutant la commandeidentity token issue.
Envoyer un message à un fil de conversation
Utilisez la commande message send pour envoyer un message à un thread de conversation que vous avez créé, identifié par threadId.
az communication chat message send --thread "<chatThreadId>" --display-name "<displayName>" --content "<content>" --message-type "<messageType>" --endpoint "<endpoint>" --access-token "<token>"
- Remplacez
<chatThreadId>par votre ID de thread de conversation. - Utilisez
<content>pour fournir le contenu du message de conversation. - Utilisez
<messageType>pour spécifier le type de contenu du message. Les valeurs possibles sonttextethtml. Si vous ne spécifiez aucune valeur, la valeur par défaut esttext. - Utiliser éventuellement
<displayName>pour spécifier le nom d’affichage de l’expéditeur. - Remplacez
<endpoint>par votre point de terminaison Azure Communication Services. - Remplacez
<token>par votre jeton d’accès obtenu précédemment en exécutant la commandeidentity token issue.
Lister les messages de conversation d’un thread de conversation
La commande message list retourne la liste des messages de conversation dans un thread de conversation.
az communication chat message list --thread "<chatThreadId>" --start-time "<startTime>" --endpoint "<endpoint>" --access-token "<token>"
- Remplacez
<chatThreadId>par votre ID de thread de conversation. - Utilisez éventuellement
<startTime>pour spécifier le point dans le temps le plus ancien pour obtenir les messages de la conversation. - Remplacez
<endpoint>par votre point de terminaison Azure Communication Services. - Remplacez
<token>par votre jeton d’accès obtenu précédemment en exécutant la commandeidentity token issue.
Recevoir un message de conversation d’un thread de conversation
Vous pouvez récupérer des messages de conversation en utilisant la commande message list.
az communication chat message get --thread "<chatThreadId>" --message-id "<messageId>" --endpoint "<endpoint>" --access-token "<token>"
- Remplacez
<chatThreadId>par votre ID de thread de conversation. - Remplacez
<messageId>par l’ID du message que vous voulez récupérer. - Remplacez
<endpoint>par votre point de terminaison Azure Communication Services. - Remplacez
<token>par votre jeton d’accès obtenu précédemment en exécutant la commandeidentity token issue.
Envoyer une confirmation de lecture
Vous utilisez la commande message receipt send pour publier un événement de confirmation de lecture sur un thread pour le compte d’un utilisateur.
az communication chat message receipt send --thread "<chatThreadId>" --message-id "<messageId>" --endpoint "<endpoint>" --access-token "<token>"
- Remplacez
<chatThreadId>par votre ID de thread de conversation. - Remplacez
<messageId>pour spécifier l’ID du dernier message lu par l’utilisateur actuel. - Remplacez
<endpoint>par votre point de terminaison Azure Communication Services. - Remplacez
<token>par votre jeton d’accès obtenu précédemment en exécutant la commandeidentity token issue.
Ajouter un utilisateur comme participant au fil de conversation
Quand vous créez un fil de conversation, vous pouvez y ajouter des utilisateurs et en supprimer. En ajoutant des utilisateurs, vous leur octroyez l’accès permettant d’envoyer des messages au fil de conversation et d’ajouter ou de supprimer d’autres participants. Avant d’appeler la commande participant add, assurez-vous d’avoir acquis un nouveau jeton d’accès et une nouvelle identité pour cet utilisateur.
az communication chat participant add --thread "<chatThreadId>" --user "<userId>" --display-name "<displayName>" --start-time "<startTime>" --endpoint "<endpoint>" --access-token "<token>"
- Remplacez
<chatThreadId>par votre ID de thread de conversation. - Remplacez
<userId>par votre userId. - Utiliser éventuellement
<displayName>pour spécifier le nom d’affichage de l’expéditeur. - Utilisez éventuellement
<startTime>pour spécifier le point dans le temps le plus ancien pour obtenir les messages de la conversation. - Remplacez
<endpoint>par votre point de terminaison Azure Communication Services. - Remplacez
<token>par votre jeton d’accès obtenu précédemment en exécutant la commandeidentity token issue.
Répertorier les participants d’un fil de conversation
De la même façon que vous ajoutez un participant, vous pouvez également répertorier les participants d’une conversation.
Utilisez la commande participant list pour récupérer les participants à la conversation.
az communication chat participant list --thread "<chatThreadId>" --skip "<skip>" --endpoint "<endpoint>" --access-token "<token>"
- Remplacez
<chatThreadId>par votre ID de thread de conversation. - Utilisez éventuellement
<skip>pour ignorer les participants jusqu’à une position spécifiée dans la réponse. - Remplacez
<endpoint>par votre point de terminaison Azure Communication Services. - Remplacez
<token>par votre jeton d’accès obtenu précédemment en exécutant la commandeidentity token issue.
Supprimer un participant d’un thread de conversation
Vous pouvez supprimer un participant de conversation d’un thread de conversation en utilisant la commande « participant remove ».
az communication chat participant remove --thread "<chatThreadId>" --user "<userId>" --endpoint "<endpoint>" --access-token "<token>"
- Remplacez
<chatThreadId>par votre ID de thread de conversation. - Remplacez
<userId>par l’ID d’utilisateur que vous voulez supprimer du thread de conversation. - Remplacez
<endpoint>par votre point de terminaison Azure Communication Services. - Remplacez
<token>par votre jeton d’accès obtenu précédemment en exécutant la commandeidentity token issue.
Prérequis
Créer un compte Azure avec un abonnement actif. Pour plus d’informations, consultez Créer un compte gratuitement.
Installez Node.js, versions Active LTS et Maintenance LTS.
Créer une ressource Azure Communication Services. Pour plus d’informations, consultez Créer des ressources Azure Communication Services. Vous devez enregistrer votre point de terminaison de ressource et votre chaîne de connexion pour cet article.
Créez trois utilisateurs Azure Communication Services et émettez pour eux un Jeton d’accès utilisateur. Veillez à définir l’étendue sur chat (conversation) et prenez note de la chaîne du jeton et de la chaîne user_id. La démonstration complète crée un fil avec deux participants initiaux, puis ajoute un troisième participant au fil. Vous pouvez également utiliser Azure CLI et exécuter la commande suivante avec votre chaîne de connexion pour créer un utilisateur et un jeton d’accès.
az communication identity token issue --scope chat --connection-string "yourConnectionString"Pour plus d’informations, consultez Utiliser Azure CLI pour créer et gérer des jetons d’accès.
Configurer
Créer une application web
Pour commencer, ouvrez votre terminal ou votre fenêtre Commande pour créer un répertoire pour votre application, puis accédez-y.
mkdir chat-quickstart && cd chat-quickstart
Exécutez npm init -y pour créer un fichier package.json avec les paramètres par défaut.
npm init -y
Installer les packages
Utilisez la npm install commande pour installer les kits SDK Communication Services suivants pour JavaScript.
npm install @azure/communication-common --save
npm install @azure/communication-identity --save
npm install @azure/communication-signaling --save
npm install @azure/communication-chat --save
L’option --save liste la bibliothèque comme dépendance dans votre fichier package.json.
Configurer le framework d’application
Cet article utilise webpack pour regrouper les ressources d’application. Exécutez la commande suivante pour l’installer et la répertorier en tant que dépendance de développement dans votre Package. JSON :
npm install webpack webpack-cli webpack-dev-server --save-dev
Créez un webpack.config.js dans le répertoire racine de votre projet.
module.exports = {
entry: "./client.js",
output: {
filename: "bundle.js"
},
devtool: "inline-source-map",
mode: "development"
}
Créez un fichier index.html dans le répertoire racine de votre projet. Utilisez ce fichier comme modèle pour ajouter une fonctionnalité de conversation à l’aide du SDK Azure Communication Chat pour JavaScript.
<!DOCTYPE html>
<html>
<head>
<title>Communication Client - Chat Sample</title>
</head>
<body>
<h4>Azure Communication Services</h4>
<h1>Chat Quickstart</h1>
<script src="./bundle.js"></script>
</body>
</html>
Créez un fichier dans le répertoire racine de votre projet appelé client.js pour contenir la logique d'application de cet article.
Créer un client de conversation
Pour créer un client de conversation dans votre application Web, utilisez le point de terminaison du service de communication et le jeton d’accès généré dans le cadre des étapes préalables.
Les jetons d’accès utilisateur vous permettent de créer des applications clientes qui s’authentifient directement auprès d’Azure Communication Services. Cet article n’aborde pas la création d’un niveau de service pour gérer les jetons de votre application de conversation. Pour plus d’informations sur l’architecture de conversation, consultez Concepts de conversation. Pour plus d’informations sur les jetons d’accès, consultez Jetons d’accès utilisateur.
Dans client.js, utilisez le point de terminaison et le jeton d’accès dans le code suivant pour ajouter une fonctionnalité de conversation à l’aide du SDK Azure Communication Chat pour JavaScript.
import { ChatClient } from '@azure/communication-chat';
import { AzureCommunicationTokenCredential } from '@azure/communication-common';
// Your unique Azure Communication service endpoint
let endpointUrl = '<replace with your resource endpoint>';
// The user access token generated as part of the pre-requisites
let userAccessToken = '<USER_ACCESS_TOKEN>';
let chatClient = new ChatClient(endpointUrl, new AzureCommunicationTokenCredential(userAccessToken));
console.log('Azure Communication Chat client created!');
- Remplacez endpointUrl par le point de terminaison de la ressource Communication Services. Pour plus d’informations, consultez Créer une ressource Azure Communication Services.
- Remplacez userAccessToken par le jeton que vous avez émis.
Exécuter le code
Mettez à jour la scripts section dans la package.json pour inclure « start » (démarrer)
"start": "webpack serve --config ./webpack.config.js"
Utilisez la commande suivante pour exécuter votre application :
npm install
npm run start
Ouvrez votre navigateur et accédez à l’adresse http://localhost:8080/.. Dans la console des outils de développement de votre navigateur, vous devriez voir :
Azure Communication Chat client created!
Modèle objet
Les classes et interfaces suivantes gèrent quelques-unes des principales fonctionnalités du kit de développement logiciel (SDK) Azure Communication Services Chat pour JavaScript.
| Nom | Description |
|---|---|
| ChatClient | Cette classe est nécessaire à la fonctionnalité de conversation (Chat). Vous l’instanciez avec vos informations d’abonnement et l’utilisez pour créer, obtenir et supprimer des threads, ainsi que pour vous abonner à des événements de conversation. |
| ChatThreadClient | Cette classe est nécessaire à la fonctionnalité de fil de conversation (Chat Thread). Vous obtenez une instance via ChatClient et l’utilisez pour envoyer/recevoir/mettre à jour/supprimer des messages, ajouter/supprimer/obtenir des utilisateurs, envoyer des notifications de saisie et des accusés de lecture. |
Démarrer un fil de conversation
Utilisez la méthode createThread pour créer un fil de conversation.
createThreadRequest est utilisé pour décrire la demande de fil :
- Utilisez
topicpour attribuer un sujet à cette conversation. Les sujets peuvent être mis à jour après la création du thread de conversation à l’aide de la fonctionUpdateThread. - Utilisez
participantspour lister les participants à ajouter au fil de conversation.
Une fois résolue, la méthode createChatThread retourne une CreateChatThreadResult. Ce modèle contient une propriété chatThread où vous pouvez accéder à l’id du fil nouvellement créé. Vous pouvez ensuite utiliser l’id pour obtenir une instance de ChatThreadClient. Le ChatThreadClient peut ensuite être utilisé pour effectuer une opération dans le fil, comme envoyer des messages ou lister les participants.
async function createChatThread() {
const createChatThreadRequest = {
topic: "Hello, World!"
};
const createChatThreadOptions = {
participants: [
{
id: { communicationUserId: '<USER_ID>' },
displayName: '<USER_DISPLAY_NAME>'
}
]
};
const createChatThreadResult = await chatClient.createChatThread(
createChatThreadRequest,
createChatThreadOptions
);
const threadId = createChatThreadResult.chatThread.id;
return threadId;
}
createChatThread().then(async threadId => {
console.log(`Thread created:${threadId}`);
// PLACEHOLDERS
// <CREATE CHAT THREAD CLIENT>
// <RECEIVE A CHAT MESSAGE FROM A CHAT THREAD>
// <SEND MESSAGE TO A CHAT THREAD>
// <LIST MESSAGES IN A CHAT THREAD>
// <ADD NEW PARTICIPANT TO THREAD>
// <LIST PARTICIPANTS IN A THREAD>
// <REMOVE PARTICIPANT FROM THREAD>
});
Lorsque vous actualisez l'onglet de votre navigateur, vous devriez voir le message suivant dans la console :
Thread created: <thread_id>
Obtenir un client de fil de conversation
La méthode getChatThreadClient retourne un chatThreadClient pour un fil qui existe déjà. Elle peut être utilisée pour effectuer des opérations sur le fil créé : ajout de participants, envoi d’un message, etc. threadId est l’ID unique du fil de conversation existant.
let chatThreadClient = chatClient.getChatThreadClient(threadId);
console.log(`Chat Thread client for threadId:${threadId}`);
Ajoutez ce code à la place du commentaire <CREATE CHAT THREAD CLIENT> dans client.js, actualisez l’onglet du navigateur et examinez la console, qui doit présenter les éléments suivants :
Chat Thread client for threadId: <threadId>
Répertorier tous les fils de conversation
La méthode listChatThreads retourne un objet PagedAsyncIterableIterator de ChatThreadItem. Celui-ci peut être utilisé pour répertorier tous les fils de conversation.
Un itérateur de [ChatThreadItem] est la réponse retournée par l’énumération des threads
const threads = chatClient.listChatThreads();
for await (const thread of threads) {
// your code here
}
Envoyer un message à un fil de conversation
Utilisez la méthode sendMessage pour envoyer un message à un fil identifié par threadId.
sendMessageRequest est utilisé pour décrire la demande de message :
- Utilisez
contentpour fournir le contenu du message de conversation ;
sendMessageOptions sert à décrire les paramètres facultatifs de l’opération :
- Utilisez
senderDisplayNamepour spécifier le nom d’affichage de l’expéditeur ; - Utilisez
typepour spécifier le type de message, par exemple « text » ou « html » ; - Utilisez
metadata(facultatif) pour inclure toute autre donnée que vous souhaitez envoyer avec le message. Ce champ constitue un mécanisme permettant aux développeurs d’étendre les fonctionnalités des messages de conversation et d’ajouter des informations personnalisées selon le cas d’usage. Par exemple, si vous partagez un lien de fichier dans le message, vous avez la possibilité d’ajouter « hasAttachment:true » dans les métadonnées pour que l’application du destinataire puisse l’analyser et l’afficher en conséquence.
SendChatMessageResult est la réponse retournée par l’envoi d’un message. Il contient l'ID unique du message.
const sendMessageRequest =
{
content: 'Please take a look at the attachment'
};
let sendMessageOptions =
{
senderDisplayName : 'Jack',
type: 'text',
metadata: {
'hasAttachment': 'true',
'attachmentUrl': 'https://contoso.com/files/attachment.docx'
}
};
const sendChatMessageResult = await chatThreadClient.sendMessage(sendMessageRequest, sendMessageOptions);
const messageId = sendChatMessageResult.id;
console.log(`Message sent!, message id:${messageId}`);
Ajoutez ce code à la place du commentaire <SEND MESSAGE TO A CHAT THREAD> dans client.js, actualisez l’onglet du navigateur et examinez la console.
Message sent!, message id:<number>
Recevoir les messages de conversation d’un fil de conversation
Avec la signalisation en temps réel, vous pouvez vous abonner pour écouter les nouveaux messages entrants et mettre à jour en conséquence les messages actuellement en mémoire. Azure Communication Services prend en charge une liste d’événements auxquels vous pouvez vous abonner.
// open notifications channel
await chatClient.startRealtimeNotifications();
// subscribe to new notification
chatClient.on("chatMessageReceived", (e) => {
console.log("Notification chatMessageReceived!");
// your code here
});
Ajoutez ce code à la place du commentaire <RECEIVE A CHAT MESSAGE FROM A CHAT THREAD> dans client.js.
Si vous actualisez l’onglet du navigateur, la console doit présenter un message Notification chatMessageReceived ;
Vous pouvez aussi récupérer les messages de conversation en interrogeant la méthode listMessages selon des intervalles définis.
const messages = chatThreadClient.listMessages();
for await (const message of messages) {
// your code here
}
Ajoutez ce code à la place du commentaire <LIST MESSAGES IN A CHAT THREAD> dans client.js.
Si vous actualisez l’onglet, la liste des messages envoyés dans ce fil de conversation doit apparaître dans la console.
listMessages renvoie différents types de messages que vous pouvez identifier par le chatMessage.type.
Pour plus d’informations, consultez Types de message.
Ajouter un utilisateur comme participant au fil de conversation
Une fois qu’un fil de conversation est créé, vous pouvez y ajouter des utilisateurs et en supprimer. En ajoutant des utilisateurs, vous leur permettez d’envoyer des messages au fil de conversation et d’ajouter/supprimer d’autres participants.
Avant d’appeler la méthode addParticipants, vérifiez que vous avez acquis un nouveau jeton d’accès et une identité pour cet utilisateur. L'utilisateur a besoin de ce jeton d'accès pour initialiser son client de conversation.
addParticipantsRequest décrit l’objet de demande où participants liste les participants à ajouter au fil de conversation ;
-
id, obligatoire, est l’identificateur de communication à ajouter au fil de conversation. -
displayName, facultatif, est le nom d’affichage pour le participant au fil. -
shareHistoryTime, facultatif, est le moment à partir duquel l’historique de conversation est partagé avec le participant. Pour partager l’historique depuis le début du fil de conversation, attribuez à cette propriété une date égale ou antérieure à la date de création du fil. Pour ne pas partager l’historique antérieur au moment où le participant a été ajouté, définissez-la sur l’heure actuelle. Pour partager l’historique partiel, attribuez-lui la date de votre choix.
const addParticipantsRequest =
{
participants: [
{
id: { communicationUserId: '<NEW_PARTICIPANT_USER_ID>' },
displayName: 'Jane'
}
]
};
await chatThreadClient.addParticipants(addParticipantsRequest);
Remplacez NEW_PARTICIPANT_USER_ID par un nouvel ID d’utilisateur. Ajoutez ce code à la place du commentaire <ADD NEW PARTICIPANT TO THREAD> dans client.js.
Lister les utilisateurs dans un fil de conversation
const participants = chatThreadClient.listParticipants();
for await (const participant of participants) {
// your code here
}
Ajoutez ce code à la place du commentaire <LIST PARTICIPANTS IN A THREAD> dans client.js, actualisez l’onglet du navigateur et examinez la console. Vous devriez voir des informations sur les utilisateurs dans un fil de discussion.
Supprimer un utilisateur d’un fil de conversation
De la même façon que vous ajoutez un participant, vous pouvez supprimer des participants d’un fil de conversation. Pour supprimer, vous devez suivre les IDs des participants que vous avez ajoutés.
Utilisez la méthode removeParticipant où participant est l’utilisateur de communication à supprimer du fil.
await chatThreadClient.removeParticipant({ communicationUserId: <PARTICIPANT_ID> });
await listParticipants();
Remplacez PARTICIPANT_ID par un ID d’utilisateur utilisé à l’étape précédente (<NEW_PARTICIPANT_USER_ID>).
Ajoutez ce code à la place du commentaire <REMOVE PARTICIPANT FROM THREAD> dans client.js.
S’abonner à l’état de la connexion des notifications en temps réel
Abonnement aux événements realTimeNotificationConnected et realTimeNotificationDisconnected permet de savoir quand la connexion au serveur d'appel est active.
// subscribe to realTimeNotificationConnected event
chatClient.on('realTimeNotificationConnected', () => {
console.log("Real time notification is now connected!");
// your code here
});
// subscribe to realTimeNotificationDisconnected event
chatClient.on('realTimeNotificationDisconnected', () => {
console.log("Real time notification is now disconnected!");
// your code here
});
Exemple de code
Trouvez le code finalisé de cet article dans l'exemple GitHub Ajoutez Chat à votre application.
Prérequis
Créer un compte Azure avec un abonnement actif. Pour plus d’informations, consultez Créer un compte gratuitement.
Installez Python 3.7+.
Créer une ressource Azure Communication Services. Pour plus d’informations, consultez Démarrage rapide : Créer et gérer des ressources Communication Services. Vous devez enregistrer votre point de terminaison de ressource et votre chaîne de connexion pour cet article.
Jeton d’accès utilisateur. Veillez à définir l’étendue sur chat (conversation) et prenez note de la chaîne du jeton et de la chaîne user_id. Vous pouvez également utiliser Azure CLI et exécuter la commande suivante avec votre chaîne de connexion pour créer un utilisateur et un jeton d’accès.
az communication identity token issue --scope chat --connection-string "yourConnectionString"Pour plus d’informations, consultez Utiliser Azure CLI pour créer et gérer des jetons d’accès.
Configuration
Créer une application Python
Ouvrez votre fenêtre de terminal ou de commande, créez un répertoire pour votre application, puis accédez-y.
mkdir chat-quickstart && cd chat-quickstart
Utilisez un éditeur de texte pour créer un fichier nommé start-chat.py dans le répertoire racine du projet. Ajoutez la structure du programme, y compris la gestion des exceptions de base. Dans les sections suivantes, ajoutez tout le code source de cet article à ce fichier.
import os
# Add required SDK components from quickstart here
try:
print('Azure Communication Services - Chat Quickstart')
# Quickstart code goes here
except Exception as ex:
print('Exception:')
print(ex)
Installer le kit SDK
Utilisez la commande suivante pour installer le kit SDK :
pip install azure-communication-chat
Modèle objet
Les classes et interfaces suivantes gèrent quelques-unes des principales fonctionnalités du kit de développement logiciel (SDK) Azure Communication Services Chat pour Python.
| Nom | Description |
|---|---|
ChatClient |
Cette classe est nécessaire à la fonctionnalité de conversation. Vous l’instanciez avec vos informations d’abonnement et l’utilisez pour créer, obtenir et supprimer des threads. |
ChatThreadClient |
Cette classe est nécessaire à la fonctionnalité de fil de conversation. Vous obtenez une instance par le biais de ChatClient et vous l’utilisez pour envoyer, recevoir, mettre à jour et supprimer des messages. Vous pouvez également l’utiliser pour ajouter, supprimer et obtenir des utilisateurs, ainsi qu’envoyer des notifications de saisie et des confirmations de lecture. |
Créer un client de conversation
Pour créer un client de conversation, utilisez le point de terminaison Communication Services ainsi que le jeton d’accès que vous avez généré au cours des étapes prérequises.
pip install azure-communication-identity
from azure.communication.chat import ChatClient, CommunicationTokenCredential
endpoint = "<replace with your resource endpoint>"
chat_client = ChatClient(endpoint, CommunicationTokenCredential("<Access Token>"))
Cet article ne couvre pas la création d'un niveau de service pour gérer les jetons de votre application de conversation, mais il est recommandé. Pour plus d’informations, consultez la section Architecture des conversations > de Concepts relatifs aux conversations.
Démarrer un fil de conversation
Utilisez la méthode create_chat_thread pour créer un fil de conversation.
- Utilisez
topicpour attribuer un thème à ce fil de conversation. Vous pouvez mettre à jour ce thème après la création du fil de conversation à l’aide de la fonctionupdate_thread. - Utilisez
thread_participantspour lister leChatParticipantà ajouter au fil de conversation. LeChatParticipantprend le typeCommunicationUserIdentifiercommeuser.
CreateChatThreadResult est le résultat retourné par la création d’un fil de conversation. Vous pouvez l’utiliser pour extraire l’id du fil de conversation qui a été créé. Cet id peut ensuite être utilisé pour extraire un objet ChatThreadClient à l’aide de la méthode get_chat_thread_client. Vous pouvez utiliser ChatThreadClient pour effectuer d’autres opérations de conversation sur ce fil de conversation.
topic="test topic"
create_chat_thread_result = chat_client.create_chat_thread(topic)
chat_thread_client = chat_client.get_chat_thread_client(create_chat_thread_result.chat_thread.id)
Obtenir un client de fil de conversation
La méthode get_chat_thread_client retourne un client de fil pour un fil qui existe déjà. Vous pouvez l’utiliser pour effectuer des opérations sur le fil de conversation créé. Par exemple, vous pouvez ajouter des participants et envoyer des messages.
thread_id est l’ID unique du fil de conversation existant.
Vous pouvez utiliser ChatThreadClient pour effectuer d’autres opérations de conversation sur ce fil de conversation.
thread_id = create_chat_thread_result.chat_thread.id
chat_thread_client = chat_client.get_chat_thread_client(thread_id)
Répertorier tous les fils de conversation
La méthode list_chat_threads retourne un itérateur de type ChatThreadItem.
- Utilisez
start_timepour spécifier l’instant dans le passé le plus ancien auquel vous souhaitez accéder pour obtenir des fils de conversation. - Utilisez
results_per_pagepour spécifier le nombre maximal de fils de conversation retournés par page.
Un itérateur égal à [ChatThreadItem] est la réponse retournée par l’énumération des fils de conversation.
from datetime import datetime, timedelta
start_time = datetime.utcnow() - timedelta(days=2)
chat_threads = chat_client.list_chat_threads(results_per_page=5, start_time=start_time)
for chat_thread_item_page in chat_threads.by_page():
for chat_thread_item in chat_thread_item_page:
print(chat_thread_item)
print('Chat Thread Id: ', chat_thread_item.id)
Envoyer un message à un fil de conversation
Utilisez la méthode send_message pour envoyer un message à un fil de discussion que vous avez créé, identifié par thread_id.
- Utilisez
contentpour fournir le contenu du message de conversation. - Utilisez
chat_message_typepour spécifier le type de contenu du message. Les valeurs possibles sonttextethtml. Si vous ne spécifiez aucune valeur, la valeur par défaut esttext. - Utilisez
sender_display_namepour spécifier le nom d’affichage de l’expéditeur. - Utilisez
metadata(facultatif) pour inclure toute autre donnée que vous souhaitez envoyer avec le message. Ce champ constitue un mécanisme permettant aux développeurs d’étendre les fonctionnalités des messages de conversation et d’ajouter des informations personnalisées selon le cas d’usage. Par exemple, si vous partagez un lien de fichier dans le message, vous avez la possibilité d’ajouter « hasAttachment:true » dans les métadonnées pour que l’application du destinataire puisse l’analyser et l’afficher en conséquence.
SendChatMessageResult est la réponse retournée par l’envoi d’un message. Elle contient un ID, qui est l’ID unique du message.
from azure.communication.chat import ChatMessageType
topic = "test topic"
create_chat_thread_result = chat_client.create_chat_thread(topic)
thread_id = create_chat_thread_result.chat_thread.id
chat_thread_client = chat_client.get_chat_thread_client(create_chat_thread_result.chat_thread.id)
content='Please take a look at the attachment'
sender_display_name='sender name'
metadata={
'hasAttachment': 'true',
'attachmentUrl': 'https://contoso.com/files/attachment.docx'
}
# specify chat message type with pre-built enumerations
send_message_result_w_enum = chat_thread_client.send_message(content=content, sender_display_name=sender_display_name, chat_message_type=ChatMessageType.TEXT, metadata=metadata)
print("Message sent: id: ", send_message_result_w_enum.id)
Recevoir les messages de conversation d’un fil de conversation
Vous pouvez récupérer les messages de conversation en interrogeant la méthode list_messages selon des intervalles définis.
- Utilisez
results_per_pagepour spécifier le nombre maximal de messages retournés par page. - Utilisez
start_timepour spécifier l’instant dans le passé le plus ancien auquel vous souhaitez accéder pour obtenir des messages.
Un itérateur de [ChatMessage] est la réponse retournée par l’énumération des messages.
from datetime import datetime, timedelta
start_time = datetime.utcnow() - timedelta(days=1)
chat_messages = chat_thread_client.list_messages(results_per_page=1, start_time=start_time)
for chat_message_page in chat_messages.by_page():
for chat_message in chat_message_page:
print("ChatMessage: Id=", chat_message.id, "; Content=", chat_message.content.message)
list_messages retourne la version la plus récente du message, avec les modifications ou les suppressions dont le message a éventuellement fait l’objet via update_message et delete_message. Pour les messages supprimés, ChatMessage.deleted_on retourne une valeur datetime indiquant à quel moment ce message a été supprimé. Pour les messages modifiés, ChatMessage.edited_on retourne une valeur datetime indiquant à quel moment le message a été modifié. Vous pouvez accéder à l’heure initiale de création du message à l’aide de ChatMessage.created_on, qui peut être utilisée pour ordonner les messages.
list_messages renvoie différents types de messages, que vous identifiez à partir du ChatMessage.type.
Pour plus d’informations, consultez Types de message.
Envoyer une confirmation de lecture
Vous utilisez la méthode send_read_receipt pour publier un événement de confirmation de lecture sur un fil de conversation, pour le compte d’un utilisateur.
- Utilisez
message_idpour spécifier l’identifiant du dernier message lu par l’utilisateur actuel.
content='hello world'
send_message_result = chat_thread_client.send_message(content)
chat_thread_client.send_read_receipt(message_id=send_message_result.id)
Ajouter un utilisateur comme participant au fil de conversation
Quand vous créez un fil de conversation, vous pouvez y ajouter des utilisateurs et en supprimer. En ajoutant des utilisateurs, vous leur octroyez l’accès permettant d’envoyer des messages au fil de conversation et d’ajouter ou de supprimer d’autres participants. Avant d’appeler la méthode add_participants, vérifiez que vous avez acquis un nouveau jeton d’accès et une identité pour cet utilisateur. L’utilisateur a besoin de ce jeton d’accès pour initialiser le client de conversation.
Vous pouvez ajouter un ou plusieurs utilisateurs au fil de discussion en utilisant la méthode add_participants, si un nouveau jeton d'accès et une nouvelle identité sont disponibles pour tous les utilisateurs.
A list(tuple(ChatParticipant, CommunicationError)) est retourné. Quand le participant est correctement ajouté, une liste vide est attendue. Si vous rencontrez une erreur lors de l'ajout d'un participant, la liste est renseignée avec les participants ayant échoué et l'erreur rencontrée.
from azure.communication.identity import CommunicationIdentityClient
from azure.communication.chat import ChatParticipant
from datetime import datetime
# create 2 users
identity_client = CommunicationIdentityClient.from_connection_string('<connection_string>')
new_users = [identity_client.create_user() for i in range(2)]
# # conversely, you can also add an existing user to a chat thread; provided the user_id is known
# from azure.communication.identity import CommunicationUserIdentifier
#
# user_id = 'some user id'
# user_display_name = "Wilma Flinstone"
# new_user = CommunicationUserIdentifier(user_id)
# participant = ChatParticipant(
# identifier=new_user,
# display_name=user_display_name,
# share_history_time=datetime.utcnow())
participants = []
for _user in new_users:
chat_thread_participant = ChatParticipant(
identifier=_user,
display_name='Fred Flinstone',
share_history_time=datetime.utcnow()
)
participants.append(chat_thread_participant)
response = chat_thread_client.add_participants(participants)
def decide_to_retry(error, **kwargs):
"""
Insert some custom logic to decide if retry is applicable based on error
"""
return True
# verify if all users has been successfully added or not
# in case of partial failures, you can retry to add all the failed participants
retry = [p for p, e in response if decide_to_retry(e)]
if retry:
chat_thread_client.add_participants(retry)
Répertorier les participants d’un fil de conversation
De la même façon que vous ajoutez un participant, vous pouvez également répertorier les participants d’une conversation.
Utilisez list_participants pour récupérer les participants à la conversation. Les deux commandes suivantes sont facultatives :
- Utilisez
results_per_pagepour spécifier le nombre maximal de participants à retourner par page. - Utilisez
skippour ignorer les participants jusqu’à une position spécifiée dans la réponse.
Un itérateur de [ChatParticipant] est la réponse retournée par l’énumération des participants.
chat_thread_participants = chat_thread_client.list_participants()
for chat_thread_participant_page in chat_thread_participants.by_page():
for chat_thread_participant in chat_thread_participant_page:
print("ChatParticipant: ", chat_thread_participant)
Exécuter le code
Exécutez l’application à partir de votre répertoire d’application avec la commande python.
python start-chat.py
Exemple de code
Trouvez le code finalisé de cet article dans l'exemple GitHub Ajoutez Chat à votre application.
Prérequis
Compte Azure avec un abonnement actif. Créez un compte gratuitement.
Java Development Kit (JDK) version 8 ou ultérieure.
Créer une ressource Azure Communication Services. Pour plus d’informations, consultez Créer des ressources Azure Communication Services. Vous devez enregistrer votre point de terminaison de ressource et votre chaîne de connexion pour cet article.
Jeton d’accès utilisateur. Veillez à définir l’étendue sur chat (conversation) et prenez note de la chaîne du jeton et de la chaîne user_id. Vous pouvez également utiliser Azure CLI et exécuter la commande suivante avec votre chaîne de connexion pour créer un utilisateur et un jeton d’accès.
az communication identity token issue --scope chat --connection-string "yourConnectionString"Pour plus d’informations, consultez Utiliser Azure CLI pour créer et gérer des jetons d’accès.
Configurer
Créer une application Java
Ouvrez votre terminal ou votre fenêtre Commande, puis accédez au répertoire dans lequel vous souhaitez créer votre application Java. Exécutez la commande suivante pour générer le projet Java à partir du modèle maven-archetype-quickstart.
mvn archetype:generate -DgroupId=com.communication.quickstart -DartifactId=communication-quickstart -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false
L'objectif generate est de créer un répertoire portant le même nom que le artifactId. Sous ce répertoire, le fichier src/main/java directory contient le code source du projet, le répertoire src/test/java contient la source de test et le fichier pom.xml est le modèle d'objet de projet du projet, ou POM.
Mettez à jour le fichier POM de votre application pour utiliser Java 8 ou version ultérieure :
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
Ajouter les références de package pour le kit de développement logiciel (SDK) Chat
Dans votre fichier POM, référencez le package azure-communication-chat avec les API de conversation (Chat) :
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-communication-chat</artifactId>
<version><!-- Please refer to https://search.maven.org/artifact/com.azure/azure-communication-chat for the latest version --></version>
</dependency>
Pour l’authentification, votre client doit référencer le package azure-communication-common :
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-communication-common</artifactId>
<version><!-- Please refer to https://search.maven.org/artifact/com.azure/azure-communication-common for the latest version --></version>
</dependency>
Modèle objet
Les classes et interfaces suivantes gèrent quelques-unes des principales fonctionnalités du kit de développement logiciel (SDK) Azure Communication Services Chat pour Java.
| Nom | Description |
|---|---|
| ChatClient | Cette classe est nécessaire à la fonctionnalité de conversation (Chat). Vous l’instanciez avec vos informations d’abonnement et l’utilisez pour créer, obtenir et supprimer des threads. |
| ChatAsyncClient | Cette classe est nécessaire à la fonctionnalité de conversation (Chat) asynchrone. Vous l’instanciez avec vos informations d’abonnement et l’utilisez pour créer, obtenir et supprimer des threads. |
| ChatThreadClient | Cette classe est nécessaire à la fonctionnalité de fil de conversation (Chat Thread). Vous obtenez une instance via ChatClient et l’utilisez pour envoyer/recevoir/mettre à jour/supprimer des messages, ajouter/supprimer/obtenir des utilisateurs, envoyer des notifications de saisie et des accusés de lecture. |
| ChatThreadAsyncClient | Cette classe est nécessaire à la fonctionnalité de fil de conversation (Chat Thread) asynchrone. Vous obtenez une instance via ChatAsyncClient et l’utilisez pour envoyer/recevoir/mettre à jour/supprimer des messages, ajouter/supprimer/obtenir des utilisateurs, envoyer des notifications de saisie et des accusés de lecture. |
Créer un client de conversation
Pour créer un client de conversation, utilisez le point de terminaison Communication Services ainsi que le jeton d’accès qui a été généré au cours des étapes prérequises. Les jetons d’accès utilisateur vous permettent de créer des applications clientes qui s’authentifient directement auprès d’Azure Communication Services. Une fois que vous avez généré ces jetons sur votre serveur, transmettez-les en retour à un appareil client. Vous devez utiliser la classe CommunicationTokenCredential du kit de développement logiciel (SDK) commun pour transmettre le jeton à votre client de conversation.
En savoir plus sur l’Architecture de conversation
Si vous devez ajouter des instructions d’importation, veillez à ajouter uniquement des importations des espaces de noms com.azure.communication.chat et com.azure.communication.chat.models, et non de l’espace de noms com.azure.communication.chat.implementation. Dans le fichier App.java qui a été généré via Maven, vous pouvez commencer avec le code suivant :
package com.communication.quickstart;
import com.azure.communication.chat.*;
import com.azure.communication.chat.models.*;
import com.azure.communication.common.*;
import com.azure.core.http.rest.PagedIterable;
import java.io.*;
import java.util.*;
public class App
{
public static void main( String[] args ) throws IOException
{
System.out.println("Azure Communication Services - Chat Quickstart");
// Your unique Azure Communication service endpoint
String endpoint = "<replace with your resource endpoint>";
// User access token fetched from your trusted service
String userAccessToken = "<USER_ACCESS_TOKEN>";
// Create a CommunicationTokenCredential with the given access token, which is only valid until the token is valid
CommunicationTokenCredential userCredential = new CommunicationTokenCredential(userAccessToken);
// Initialize the chat client
final ChatClientBuilder builder = new ChatClientBuilder();
builder.endpoint(endpoint)
.credential(userCredential);
ChatClient chatClient = builder.buildClient();
}
}
Démarrer un fil de conversation
Utilisez la méthode createChatThread pour créer un fil de conversation.
createChatThreadOptions est utilisé pour décrire la demande de fil.
- Utilisez le paramètre
topicdu constructeur pour attribuer un sujet à cette conversation ; le sujet peut être mis à jour après que le fil de conversation a été créé à l’aide de la fonctionUpdateThread. - Utilisez
participantspour lister les participants au fil à ajouter à la conversation.ChatParticipantprend l'utilisateur que vous avez créé dans le Jeton d'accès utilisateur.
CreateChatThreadResult correspond à la réponse renvoyée par la création d’un fil de conversation.
Elle contient une méthode getChatThread() qui retourne l’objet ChatThread permettant d’obtenir le client de thread à partir duquel obtenir ChatThreadClient pour effectuer des opérations sur le thread créé : ajout de participants, envoi d’un message, etc. L’objet ChatThread contient également la méthode getId() qui récupère l’ID unique du thread.
CommunicationUserIdentifier identity1 = new CommunicationUserIdentifier("<USER_1_ID>");
CommunicationUserIdentifier identity2 = new CommunicationUserIdentifier("<USER_2_ID>");
ChatParticipant firstThreadParticipant = new ChatParticipant()
.setCommunicationIdentifier(identity1)
.setDisplayName("Participant Display Name 1");
ChatParticipant secondThreadParticipant = new ChatParticipant()
.setCommunicationIdentifier(identity2)
.setDisplayName("Participant Display Name 2");
CreateChatThreadOptions createChatThreadOptions = new CreateChatThreadOptions("Topic")
.addParticipant(firstThreadParticipant)
.addParticipant(secondThreadParticipant);
CreateChatThreadResult result = chatClient.createChatThread(createChatThreadOptions);
String chatThreadId = result.getChatThread().getId();
Répertorier les fils de conversation
Utilisez la méthode listChatThreads pour récupérer la liste des fils de conversation existants.
PagedIterable<ChatThreadItem> chatThreads = chatClient.listChatThreads();
chatThreads.forEach(chatThread -> {
System.out.printf("ChatThread id is %s.\n", chatThread.getId());
});
Obtenir un client de fil de conversation
La méthode getChatThreadClient retourne un client de fil pour un fil qui existe déjà. Elle peut être utilisée pour effectuer des opérations sur le fil créé : ajout de participants, envoi d’un message, etc. chatThreadId est l’ID unique du fil de conversation existant.
ChatThreadClient chatThreadClient = chatClient.getChatThreadClient(chatThreadId);
Envoyer un message à un fil de conversation
Utilisez la méthode sendMessage pour envoyer un message au thread que vous avez créé, identifié par chatThreadId.
sendChatMessageOptions est utilisé pour décrire la demande de message de conversation.
- Utilisez
contentpour fournir le contenu du message de conversation. - Utiliser
typepour spécifier le type de contenu du message de discussion,TEXTouHTML. - Utilisez
senderDisplayNamepour spécifier le nom d’affichage de l’expéditeur. - Utilisez
metadata(facultatif) pour inclure toute autre donnée que vous souhaitez envoyer avec le message. Ce champ constitue un mécanisme permettant aux développeurs d’étendre les fonctionnalités des messages de conversation et d’ajouter des informations personnalisées selon le cas d’usage. Par exemple, si vous partagez un lien de fichier dans le message, vous pouvez ajouterhasAttachment:truedans les métadonnées pour que l’application du destinataire puisse l’analyser et l’afficher en conséquence.
La réponse sendChatMessageResult contient un id, qui est l’ID unique du message.
Map<String, String> metadata = new HashMap<String, String>();
metadata.put("hasAttachment", "true");
metadata.put("attachmentUrl", "https://contoso.com/files/attachment.docx");
SendChatMessageOptions sendChatMessageOptions = new SendChatMessageOptions()
.setContent("Please take a look at the attachment")
.setType(ChatMessageType.TEXT)
.setSenderDisplayName("Sender Display Name")
.setMetadata(metadata);
SendChatMessageResult sendChatMessageResult = chatThreadClient.sendMessage(sendChatMessageOptions);
String chatMessageId = sendChatMessageResult.getId();
Recevoir les messages de conversation d’un fil de conversation
Vous pouvez récupérer les messages de conversation en interrogeant la méthode listMessages sur le client de fil de conversation selon des intervalles définis.
chatThreadClient.listMessages().forEach(message -> {
System.out.printf("Message id is %s.\n", message.getId());
});
listMessages retourne la version la plus récente du message, avec les modifications ou les suppressions dont le message a éventuellement fait l’objet via .editMessage() et .deleteMessage(). Pour les messages supprimés, chatMessage.getDeletedOn() retourne une valeur datetime indiquant à quel moment ce message a été supprimé. Pour les messages modifiés, chatMessage.getEditedOn() retourne une valeur datetime indiquant à quel moment ce message a été modifié. Il est possible d’accéder à l’heure initiale de création du message à l’aide de chatMessage.getCreatedOn() ; elle peut être utilisée à des fins de classement des messages.
Pour en savoir plus sur les types de messages, consultez Types de messages.
Envoyer une confirmation de lecture
Utilisez la méthode sendReadReceipt pour publier un événement de confirmation de lecture sur un fil de conversation, pour le compte d’un utilisateur.
chatMessageId correspond à ID unique du message de conversation lu.
String chatMessageId = message.getId();
chatThreadClient.sendReadReceipt(chatMessageId);
Répertorier les participants à la conversation
Utilisez listParticipants pour récupérer une collection paginée contenant les participants du fil de conversation identifié par chatThreadId.
PagedIterable<ChatParticipant> chatParticipantsResponse = chatThreadClient.listParticipants();
chatParticipantsResponse.forEach(chatParticipant -> {
System.out.printf("Participant id is %s.\n", ((CommunicationUserIdentifier) chatParticipant.getCommunicationIdentifier()).getId());
});
Ajouter un utilisateur comme participant au fil de conversation
Une fois qu’un fil de conversation est créé, vous pouvez y ajouter des utilisateurs et en supprimer. En ajoutant des utilisateurs, vous leur permettez d’envoyer des messages au fil de conversation et d’ajouter/supprimer d’autres participants. Vous devez commencer par obtenir un nouveau jeton d’accès et une nouvelle identité pour cet utilisateur. Avant d’appeler la méthode addParticipants, assurez-vous d’avoir acquis un nouveau jeton d’accès et une nouvelle identité pour cet utilisateur. L’utilisateur a besoin de ce jeton d’accès pour initialiser son client de conversation.
Utilisez la méthode addParticipants pour ajouter des participants au fil.
-
communicationIdentifier, obligatoire, est le CommunicationIdentifier que vous avez créé par CommunicationIdentityClient dans User Access Token. -
displayName, facultatif, est le nom d’affichage pour le participant au fil. -
shareHistoryTime, facultatif, est le moment à partir duquel l’historique de conversation est partagé avec le participant. Pour partager l’historique depuis le début du fil de conversation, attribuez à cette propriété une date égale ou antérieure à la date de création du fil. Pour ne pas partager l’historique antérieur au moment où le participant a été ajouté, définissez-la sur l’heure actuelle. Pour partager un historique partiel, attribuez-lui la date de votre choix.
List<ChatParticipant> participants = new ArrayList<ChatParticipant>();
CommunicationUserIdentifier identity3 = new CommunicationUserIdentifier("<USER_3_ID>");
CommunicationUserIdentifier identity4 = new CommunicationUserIdentifier("<USER_4_ID>");
ChatParticipant thirdThreadParticipant = new ChatParticipant()
.setCommunicationIdentifier(identity3)
.setDisplayName("Display Name 3");
ChatParticipant fourthThreadParticipant = new ChatParticipant()
.setCommunicationIdentifier(identity4)
.setDisplayName("Display Name 4");
participants.add(thirdThreadParticipant);
participants.add(fourthThreadParticipant);
chatThreadClient.addParticipants(participants);
Exécuter le code
Accédez au répertoire contenant le fichier pom.xml, puis compilez le projet à l’aide de la commande mvn suivante.
mvn compile
Ensuite, générez le package.
mvn package
Exécutez la commande mvn suivante pour exécuter l’application.
mvn exec:java -Dexec.mainClass="com.communication.quickstart.App" -Dexec.cleanupDaemonThreads=false
Exemple de code
Trouvez le code finalisé de cet article dans l'exemple GitHub Ajoutez Chat à votre application.
Prérequis
Créer un compte Azure avec un abonnement actif. Pour plus d’informations, consultez Créer un compte gratuitement.
Installez Android Studio, nous utilisons Android Studio pour créer une application Android et installer des dépendances.
Créer une ressource Azure Communication Services. Pour plus d’informations, consultez Créer des ressources Azure Communication Services. Vous devez enregistrer votre point de terminaison de ressource et votre chaîne de connexion pour cet article.
Créez deux utilisateurs Azure Communication Services et émettez pour eux un Jeton d’accès utilisateur. Veillez à définir l’étendue sur chat (conversation) et prenez note de la chaîne du jeton et de la chaîne user_id. Dans cet article, nous créons un fil de discussion avec un participant initial, puis ajoutons un deuxième participant au fil de discussion. Vous pouvez également utiliser Azure CLI et exécuter la commande suivante avec votre chaîne de connexion pour créer un utilisateur et un jeton d’accès.
az communication identity token issue --scope chat --connection-string "yourConnectionString"Pour plus d’informations, consultez Utiliser Azure CLI pour créer et gérer des jetons d’accès.
Configurer
Créer une application Android
- Ouvrez Android Studio, puis sélectionnez
Create a new project. - Dans la fenêtre suivante, sélectionnez
Empty Views Activityen tant que modèle de projet. - Lors du choix des options, entrez
ChatQuickstartcomme nom du projet. - Cet exemple utilise Java comme langage
- Cliquez sur Suivant, puis choisissez le répertoire où vous voulez créer le projet.
Installer les bibliothèques
Nous utilisons Gradle pour installer les dépendances nécessaires aux services de communication. À partir de la ligne de commande, accédez au répertoire racine du projet ChatQuickstart. Ouvrez le fichier build.gradle de l’application et ajoutez les dépendances suivantes à la cible ChatQuickstart :
implementation libs.azure.communication.common
implementation libs.azure.communication.chat
implementation libs.slf4j.log4j12
Pour les derniers numéros de version, consultez https://search.maven.org/artifact/com.azure.android/azure-communication-common et https://search.maven.org/artifact/com.azure.android/azure-communication-chat.
Exclure les fichiers méta dans les options d’empaquetage dans build.gradle à la racine
android {
...
packagingOptions {
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/LICENSE'
exclude 'META-INF/license'
exclude 'META-INF/NOTICE'
exclude 'META-INF/notice'
exclude 'META-INF/ASL2.0'
exclude("META-INF/*.md")
exclude("META-INF/*.txt")
exclude("META-INF/*.kotlin_module")
}
}
(Alternative) Pour installer des bibliothèques via Maven
Pour importer la bibliothèque dans votre projet à l’aide du système de génération Maven, ajoutez-la à la section dependencies du fichier pom.xml de votre application, en spécifiant son ID d’artefact et la version que vous souhaitez utiliser :
<dependency>
<groupId>com.azure.android</groupId>
<artifactId>azure-communication-chat</artifactId>
<version><!-- Please refer to https://search.maven.org/artifact/com.azure.android/azure-communication-chat for the latest version --></version>
</dependency>
Configurer Azure Function
Pour plus de détails, consultez l’intégration des fonctions Azure.. Nous vous recommandons d’intégrer Azure Function pour éviter de coder en dur les paramètres d’application.
Configurer les constantes d'application
Créez une classe ApplicationConstants qui stocke toutes les constantes d’application :
public class ApplicationConstants {
public static final String SDK_VERSION = "<your_version>";
public final static String SDK_NAME = "azure-communication-com.azure.android.communication.chat";
public final static String APPLICATION_ID = "Chat_Test_App";
public final static String TAG = "[Chat Test App]";
public static CommunicationTokenCredential COMMUNICATION_TOKEN_CREDENTIAL;
}
Configurer les espaces réservés
Ouvrez et modifiez le fichier MainActivity.java. Dans cet article, nous ajoutons notre code à MainActivity, et visualisons la sortie dans la console. Cet article ne traite pas de la création d'une interface utilisateur. En haut du fichier, importez les bibliothèques Azure Communication Common et Azure Communication Chat, ainsi que les autres bibliothèques système :
import com.azure.android.communication.chat.*;
import com.azure.android.communication.chat.models.*;
import com.azure.android.communication.common.*;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;
import com.jakewharton.threetenabp.AndroidThreeTen;
import java.util.ArrayList;
import java.util.List;
Copiez le code suivant dans la classe MainActivity du fichier MainActivity.java :
private ChatAsyncClient chatAsyncClient;
private void log(String msg) {
Toast.makeText(this, msg, Toast.LENGTH_LONG).show();
}
@Override
protected void onStart() {
super.onStart();
try {
AndroidThreeTen.init(this);
// Initialize application parameters if one of the conditions in '### Initialize Application Parameters' are met.
// <CREATE A CHAT CLIENT>
// <CREATE A CHAT THREAD>
// <CREATE A CHAT THREAD CLIENT>
// <SEND A MESSAGE>
// <RECEIVE CHAT MESSAGES>
// <ADD A USER>
// <LIST USERS>
// <REMOVE A USER>
// <<SEND A TYPING NOTIFICATION>>
// <<SEND A READ RECEIPT>>
// <<LIST READ RECEIPTS>>
} catch (Exception e){
System.out.println("Quickstart failed: " + e.getMessage());
}
}
Initialisation des paramètres d’application
Remarque
L'initialisation ApplicationConstants doit être ajoutée sur MainActivity.java si l'une des conditions suivantes est remplie : 1. La fonctionnalité de notification Push n’est PAS activée. 2. La version de la bibliothèque Azure Communication Chat pour Android est < 2.0.0. Sinon, reportez-vous à l’étape 11 des notifications push Android. Reportez-vous à l'exemple d'application de la version SDK que vous utilisez pour référence.
ACS_ENDPOINT, FIRST_USER_ID, et FIRST_USER_ACCESS_TOKEN sont renvoyés par l’appel de la fonction Azure. Pour plus d’informations, consultez Intégration de la fonction Azure. Nous utilisons la réponse à l’appel de la fonction Azure pour initialiser la liste des paramètres :
-
ACS_ENDPOINT: le point de terminaison de votre ressource Communication Services. -
FIRST_USER_IDetSECOND_USER_ID: des identifiants utilisateur Communication Services valides générés par votre ressource Communication Services. -
FIRST_USER_ACCESS_TOKEN: le jeton d'accès aux services de communication pour<FIRST_USER_ID>.
Bloc de code pour initialiser les paramètres de l'application en appelant la fonction Azure :
try {
UserTokenClient userTokenClient = new UserTokenClient(AZURE_FUNCTION_URL);
//First user context
userTokenClient.getNewUserContext();
ACS_ENDPOINT = userTokenClient.getACSEndpoint();
FIRST_USER_ID = userTokenClient.getUserId();
FIRST_USER_ACCESS_TOKEN = userTokenClient.getUserToken();
COMMUNICATION_TOKEN_CREDENTIAL = new CommunicationTokenCredential(FIRST_USER_ACCESS_TOKEN);
//Second user context
userTokenClient.getNewUserContext();
SECOND_USER_ID = userTokenClient.getUserId();
} catch (Throwable throwable) {
//Your handling code
logger.logThrowableAsError(throwable);
}
Créer un client de conversation
Remplacez le commentaire <CREATE A CHAT CLIENT> par le code suivant (placez les instructions d’importation en haut du fichier) :
import com.azure.android.core.http.policy.UserAgentPolicy;
chatAsyncClient = new ChatClientBuilder()
.endpoint(endpoint)
.credential(new CommunicationTokenCredential(firstUserAccessToken))
.addPolicy(new UserAgentPolicy(APPLICATION_ID, SDK_NAME, sdkVersion))
.buildAsyncClient();
Modèle objet
Les classes et interfaces suivantes gèrent quelques-unes des principales fonctionnalités du kit de développement logiciel (SDK) Azure Communication Services Chat pour JavaScript.
| Nom | Description |
|---|---|
| ChatClient/ChatAsyncClient | Cette classe est nécessaire à la fonctionnalité de conversation (Chat). Vous l’instanciez avec vos informations d’abonnement et l’utilisez pour créer, obtenir et supprimer des threads, ainsi que pour vous abonner à des événements de conversation. |
| ChatThreadClient/ChatThreadAsyncClient | Cette classe est nécessaire à la fonctionnalité de fil de conversation (Chat Thread). Vous obtenez une instance via ChatClient et l’utilisez pour envoyer/recevoir/mettre à jour/supprimer des messages, ajouter/supprimer/obtenir des utilisateurs, envoyer des notifications de saisie et des accusés de lecture. |
Démarrer un fil de conversation
Utilisez notre ChatAsyncClient pour créer un nouveau fil de discussion avec un utilisateur initial.
Remplacez le commentaire <CREATE A CHAT THREAD> par le code suivant :
// A list of ChatParticipant to start the thread with.
List<ChatParticipant> participants = new ArrayList<>();
// The display name for the thread participant.
String displayName = "initial participant";
participants.add(new ChatParticipant()
.setCommunicationIdentifier(new CommunicationUserIdentifier(firstUserId))
.setDisplayName(displayName));
// The topic for the thread.
final String topic = "General";
// Optional, set a repeat request ID.
final String repeatabilityRequestID = "";
// Options to pass to the create method.
CreateChatThreadOptions createChatThreadOptions = new CreateChatThreadOptions()
.setTopic(topic)
.setParticipants(participants)
.setIdempotencyToken(repeatabilityRequestID);
CreateChatThreadResult createChatThreadResult =
chatAsyncClient.createChatThread(createChatThreadOptions).get();
ChatThreadProperties chatThreadProperties = createChatThreadResult.getChatThreadProperties();
threadId = chatThreadProperties.getId();
Obtenir un client de fil de conversation
Maintenant que nous avons créé un fil de discussion, nous devons obtenir un ChatThreadAsyncClient pour effectuer des opérations dans le fil. Remplacez le commentaire <CREATE A CHAT THREAD CLIENT> par le code suivant :
ChatThreadAsyncClient chatThreadAsyncClient = new ChatThreadClientBuilder()
.endpoint(endpoint)
.credential(new CommunicationTokenCredential(firstUserAccessToken))
.addPolicy(new UserAgentPolicy(APPLICATION_ID, SDK_NAME, sdkVersion))
.chatThreadId(threadId)
.buildAsyncClient();
Envoyer un message à un fil de conversation
Envoyez un message au fil de discussion maintenant.
Remplacez le commentaire <SEND A MESSAGE> par le code suivant :
// The chat message content, required.
final String content = "Please take a look at the attachment";
// The display name of the sender, if null (i.e. not specified), an empty name will be set.
final String senderDisplayName = "An important person";
// Use metadata optionally to include any additional data you want to send along with the message.
// This field provides a mechanism for developers to extend chat message functionality and add
// custom information for your use case. For example, when sharing a file link in the message, you
// might want to add 'hasAttachment:true' in metadata so that recipient's application can parse
// that and display accordingly.
final Map<String, String> metadata = new HashMap<String, String>();
metadata.put("hasAttachment", "true");
metadata.put("attachmentUrl", "https://contoso.com/files/attachment.docx");
SendChatMessageOptions chatMessageOptions = new SendChatMessageOptions()
.setType(ChatMessageType.TEXT)
.setContent(content)
.setSenderDisplayName(senderDisplayName)
.setMetadata(metadata);
// A string is the response returned from sending a message, it is an id, which is the unique ID
// of the message.
chatMessageId = chatThreadAsyncClient.sendMessage(chatMessageOptions).get().getId();
Recevoir les messages de conversation d’un fil de conversation
Notifications en temps réel
Avec la signalisation en temps réel, vous pouvez vous abonner aux nouveaux messages entrants et mettre à jour en conséquence les messages actuellement en mémoire. Azure Communication Services prend en charge une liste d’événements auxquels vous pouvez vous abonner.
Remplacez le commentaire <RECEIVE CHAT MESSAGES> par le code suivant (placez les instructions d’importation en haut du fichier) :
// Start real time notification
chatAsyncClient.startRealtimeNotifications(firstUserAccessToken, getApplicationContext());
// Register a listener for chatMessageReceived event
chatAsyncClient.addEventHandler(ChatEventType.CHAT_MESSAGE_RECEIVED, (ChatEvent payload) -> {
ChatMessageReceivedEvent chatMessageReceivedEvent = (ChatMessageReceivedEvent) payload;
// You code to handle chatMessageReceived event
});
Important
Problème connu : lorsque vous utilisez Android Chat et Calling SDK ensemble dans la même application, la fonctionnalité de notifications en temps réel de Chat SDK ne fonctionne pas. Vous risquez d’obtenir un problème de résolution de dépendance.
Vous pouvez désactiver la fonctionnalité de notifications en temps réel en ajoutant les informations de dépendance suivantes dans le fichier build.gradle de l'application et interroger à la place l'API GetMessages pour afficher les messages entrants aux utilisateurs.
implementation ("com.azure.android:azure-communication-chat:1.0.0") {
exclude group: 'com.microsoft', module: 'trouter-client-android'
}
implementation 'com.azure.android:azure-communication-calling:1.0.0'
Notez qu'avec cette mise à jour, si l'application tente de contacter l'API de notification en utilisant chatAsyncClient.startRealtimeNotifications() ou chatAsyncClient.addEventHandler(), elle génère une erreur d'exécution.
Notifications Push
Pour plus d'informations, consultez les notifications push Android.
Ajouter un utilisateur comme participant au fil de conversation
Remplacez le commentaire <ADD A USER> par le code suivant :
// The display name for the thread participant.
String secondUserDisplayName = "a new participant";
ChatParticipant participant = new ChatParticipant()
.setCommunicationIdentifier(new CommunicationUserIdentifier(secondUserId))
.setDisplayName(secondUserDisplayName);
chatThreadAsyncClient.addParticipant(participant);
Lister les utilisateurs dans un fil de conversation
Remplacez le commentaire <LIST USERS> par le code suivant (placez les instructions d’importation en haut du fichier) :
import com.azure.android.core.rest.util.paging.PagedAsyncStream;
import com.azure.android.core.util.RequestContext;
// The maximum number of participants to be returned per page, optional.
int maxPageSize = 10;
// Skips participants up to a specified position in response.
int skip = 0;
// Options to pass to the list method.
ListParticipantsOptions listParticipantsOptions = new ListParticipantsOptions()
.setMaxPageSize(maxPageSize)
.setSkip(skip);
PagedAsyncStream<ChatParticipant> participantsPagedAsyncStream =
chatThreadAsyncClient.listParticipants(listParticipantsOptions, RequestContext.NONE);
participantsPagedAsyncStream.forEach(chatParticipant -> {
// You code to handle participant
});
Supprimer un utilisateur d’un fil de conversation
Supprimez le deuxième utilisateur du fil de discussion.
Remplacez le commentaire <REMOVE A USER> par le code suivant :
// Using the unique ID of the participant.
chatThreadAsyncClient.removeParticipant(new CommunicationUserIdentifier(secondUserId)).get();
Envoyer une notification de saisie
Remplacez le commentaire <SEND A TYPING NOTIFICATION> par le code suivant :
chatThreadAsyncClient.sendTypingNotification().get();
Envoyer une confirmation de lecture
Nous envoyons un accusé de lecture pour le message précédemment envoyé.
Remplacez le commentaire <SEND A READ RECEIPT> par le code suivant :
chatThreadAsyncClient.sendReadReceipt(chatMessageId).get();
Répertorier les confirmations de lecture
Remplacez le commentaire <READ RECEIPTS> par le code suivant :
// The maximum number of participants to be returned per page, optional.
maxPageSize = 10;
// Skips participants up to a specified position in response.
skip = 0;
// Options to pass to the list method.
ListReadReceiptOptions listReadReceiptOptions = new ListReadReceiptOptions()
.setMaxPageSize(maxPageSize)
.setSkip(skip);
PagedAsyncStream<ChatMessageReadReceipt> readReceiptsPagedAsyncStream =
chatThreadAsyncClient.listReadReceipts(listReadReceiptOptions, RequestContext.NONE);
readReceiptsPagedAsyncStream.forEach(readReceipt -> {
// You code to handle readReceipt
});
Exécuter le code
Dans Android Studio, cliquez sur le bouton Run (Exécuter) pour générer et exécuter le projet. Dans la console, vous pouvez voir la sortie du code et la sortie de l’enregistreur d’événements du ChatClient.
Exemple de code
Trouvez le code finalisé de cet article dans l'exemple GitHub Ajoutez Chat à votre application.
Prérequis
Créer un compte Azure avec un abonnement actif. Pour plus d’informations, consultez Créer un compte gratuitement.
Installez Visual Studio
Créer une ressource Azure Communication Services. Pour plus d’informations, consultez Créer des ressources Azure Communication Services. Vous devez enregistrer votre point de terminaison de ressource et votre chaîne de connexion pour cet article.
Jeton d’accès utilisateur. Veillez à définir l’étendue sur chat (conversation) et prenez note de la chaîne du jeton et de la chaîne user_id. Vous pouvez également utiliser Azure CLI et exécuter la commande suivante avec votre chaîne de connexion pour créer un utilisateur et un jeton d’accès.
az communication identity token issue --scope chat --connection-string "yourConnectionString"Pour plus d’informations, consultez Utiliser Azure CLI pour créer et gérer des jetons d’accès.
Configurer
Créer une application C#
Dans une fenêtre de console (par exemple cmd, PowerShell ou Bash), utilisez la commande dotnet new pour créer une application console avec le nom ChatQuickstart. Cette commande crée un projet C# simple nommé « Hello World » avec un seul fichier source : Program.cs.
dotnet new console -o ChatQuickstart
Remplacez votre répertoire par le dossier d’application que vous venez de créer, puis utilisez la commande dotnet build pour compiler votre application.
cd ChatQuickstart
dotnet build
Installer le package
Installer le kit de développement logiciel (SDK) Azure Communication Chat pour .NET
dotnet add package Azure.Communication.Chat
Modèle objet
Les classes suivantes gèrent quelques-unes des principales fonctionnalités du kit de développement logiciel (SDK) Azure Communication Services Chat pour C#.
| Nom | Description |
|---|---|
| ChatClient | Cette classe est nécessaire à la fonctionnalité de conversation (Chat). Vous l’instanciez avec vos informations d’abonnement et l’utilisez pour créer, obtenir et supprimer des threads. |
| ChatThreadClient | Cette classe est nécessaire à la fonctionnalité de fil de conversation (Chat Thread). Vous obtenez une instance via ChatClient et l’utilisez pour envoyer/recevoir/mettre à jour/supprimer des messages, ajouter/supprimer/obtenir des participants, envoyer des notifications de saisie et des accusés de lecture. |
Créer un client de conversation
Pour créer un client de conversation, utilisez votre point de terminaison Communication Services et le jeton d’accès généré dans le cadre des étapes préalables. Vous devez utiliser la classe CommunicationIdentityClient du kit de développement logiciel (SDK) Identity pour créer un utilisateur et émettre un jeton à transmettre à votre client de conversation.
Apprenez-en davantage sur les jetons d’accès utilisateur.
Cet article ne couvre pas la création d'un niveau de service pour gérer les jetons de votre application de conversation, bien que nous le recommandions. Pour plus d'informations, voir Architecture de conversation.
Copiez les extraits de code suivants et collez-les dans le fichier source Program.cs.
using Azure;
using Azure.Communication;
using Azure.Communication.Chat;
using System;
namespace ChatQuickstart
{
class Program
{
static async System.Threading.Tasks.Task Main(string[] args)
{
// Your unique Azure Communication service endpoint
Uri endpoint = new Uri("<replace with your resource endpoint>");
CommunicationTokenCredential communicationTokenCredential = new CommunicationTokenCredential(<Access_Token>);
ChatClient chatClient = new ChatClient(endpoint, communicationTokenCredential);
}
}
}
Démarrer un fil de conversation
Utilisez la méthode createChatThread sur chatClient pour créer un fil de conversation
- Utilisez
topicpour attribuer un sujet à cette conversation. Vous pouvez mettre à jour le sujet après avoir créé le fil de discussion à l'aide de la fonctionUpdateTopic. - Utilisez la propriété
participantspour transmettre la liste d’objetsChatParticipantà ajouter au fil de conversation. L’objetChatParticipantest initialisé avec un objetCommunicationIdentifier.CommunicationIdentifierpeut être de typeCommunicationUserIdentifier,MicrosoftTeamsUserIdentifierouPhoneNumberIdentifier. Par exemple, pour obtenir un objetCommunicationIdentifier, vous devez transmettre un identifiant d'accès que vous avez créé en suivant les instructions pour Créer un utilisateur
L’objet de réponse de la méthode createChatThread contient les détails de chatThread. Pour interagir avec les opérations du fil de discussion telles que l'ajout de participants, l'envoi d'un message, la suppression d'un message, etc., une instance client chatThreadClient doit être instanciée à l'aide de la méthode GetChatThreadClient sur le client ChatClient.
var chatParticipant = new ChatParticipant(identifier: new CommunicationUserIdentifier(id: "<Access_ID>"))
{
DisplayName = "UserDisplayName"
};
CreateChatThreadResult createChatThreadResult = await chatClient.CreateChatThreadAsync(topic: "Hello world!", participants: new[] { chatParticipant });
ChatThreadClient chatThreadClient = chatClient.GetChatThreadClient(threadId: createChatThreadResult.ChatThread.Id);
string threadId = chatThreadClient.Id;
Obtenir un client de fil de conversation
La méthode GetChatThreadClient retourne un client de fil pour un fil qui existe déjà. Vous pouvez l’utiliser pour effectuer des opérations sur le fil créé : ajouter des membres, envoyer un message, et ainsi de suite.
threadId est l’ID unique du fil de conversation existant.
string threadId = "<THREAD_ID>";
ChatThreadClient chatThreadClient = chatClient.GetChatThreadClient(threadId: threadId);
Répertorier tous les fils de conversation
Utilisez GetChatThreads pour récupérer tous les fils de conversation dont fait partie l’utilisateur.
AsyncPageable<ChatThreadItem> chatThreadItems = chatClient.GetChatThreadsAsync();
await foreach (ChatThreadItem chatThreadItem in chatThreadItems)
{
Console.WriteLine($"{ chatThreadItem.Id}");
}
Envoyer un message à un fil de conversation
Utilisez SendMessage pour envoyer un message à un fil de conversation.
- Utilisez
contentpour fournir le contenu du message. Obligatoire. - Utilisez
typepour le type de contenu du message tel que « Text » ou « Html ». S’il n’est pas spécifié, ' Text' est défini. - Utilisez
senderDisplayNamepour spécifier le nom d’affichage de l’expéditeur. Si elle n’est pas spécifiée, la chaîne vide est définie. - Facultatif : utilisez
metadatapour inclure d’autres données que vous souhaitez envoyer avec le message. Ce champ constitue un mécanisme permettant aux développeurs d’étendre les fonctionnalités des messages de conversation et d’ajouter des informations personnalisées selon le cas d’usage. Par exemple, si vous partagez un lien de fichier dans le message, vous avez la possibilité d’ajouter « hasAttachment:true » dans les métadonnées pour que l’application du destinataire puisse l’analyser et l’afficher en conséquence.
SendChatMessageOptions sendChatMessageOptions = new SendChatMessageOptions()
{
Content = "Please take a look at the attachment",
MessageType = ChatMessageType.Text
};
sendChatMessageOptions.Metadata["hasAttachment"] = "true";
sendChatMessageOptions.Metadata["attachmentUrl"] = "https://contoso.com/files/attachment.docx";
SendChatMessageResult sendChatMessageResult = await chatThreadClient.SendMessageAsync(sendChatMessageOptions);
string messageId = sendChatMessageResult.Id;
Recevoir les messages de conversation d’un fil de conversation
Vous pouvez récupérer les messages de conversation en interrogeant la méthode GetMessages sur le client de fil de conversation selon des intervalles définis.
AsyncPageable<ChatMessage> allMessages = chatThreadClient.GetMessagesAsync();
await foreach (ChatMessage message in allMessages)
{
Console.WriteLine($"{message.Id}:{message.Content.Message}");
}
GetMessages accepte un paramètre DateTimeOffset facultatif. Si ce décalage est spécifié, vous recevez les messages qui ont été reçus, mis à jour ou supprimés après celui-ci. Les messages reçus avant l'heure de décalage mais modifiés ou supprimés par la suite sont également renvoyés.
GetMessages retourne la version la plus récente du message, avec les modifications ou les suppressions dont le message a éventuellement fait l’objet via UpdateMessage et DeleteMessage. Pour les messages supprimés, chatMessage.DeletedOn retourne une valeur datetime indiquant à quel moment ce message a été supprimé. Pour les messages modifiés, chatMessage.EditedOn retourne une valeur datetime indiquant à quel moment ce message a été modifié. Il est possible d’accéder à l’heure initiale de création du message à l’aide de chatMessage.CreatedOn ; elle peut être utilisée à des fins de classement des messages.
GetMessages renvoie différents types de messages. Vous pouvez identifier le type à partir du chatMessage.Type. Les types sont :
Text: Message de conversation ordinaire envoyé par un membre du fil.Html: Message en texte mis en forme. Les utilisateurs des services de communication ne peuvent actuellement pas envoyer de messages RichText. Ce type de message est pris en charge pour les messages envoyés par les utilisateurs Teams aux utilisateurs Communication Services dans les scénarios Teams Interop.TopicUpdated: Message système indiquant que le sujet est mis à jour. (lecture seule)ParticipantAdded: Message système indiquant qu'un ou plusieurs participants sont ajoutés au fil de discussion (lecture seule).ParticipantRemoved: Message système qui indique qu’un participant est supprimé du fil de conversation.
Pour plus d’informations, consultez Types de message.
Ajouter un utilisateur comme participant au fil de conversation
Une fois qu’un fil est créé, vous pouvez y ajouter des utilisateurs ou en supprimer. En ajoutant des utilisateurs, vous leur permettez d’envoyer des messages au fil de conversation et d’ajouter ou de supprimer d’autres participants. Avant d’appeler AddParticipants, veillez à acquérir un nouveau jeton d’accès et une identité pour cet utilisateur. L'utilisateur a besoin de ce jeton d'accès pour initialiser son client de conversation.
Utilisez AddParticipants pour ajouter un ou plusieurs participants au fil de conversation. Voici les attributs pris en charge pour chaque participant au thread :
-
communicationUser, obligatoire. Il s’agit de l’identité du participant au fil de conversation. -
displayName, facultatif, est le nom d’affichage pour le participant au fil. -
shareHistoryTime, facultatif. Il s’agit du moment à partir duquel l’historique de conversation est partagé avec le participant.
var josh = new CommunicationUserIdentifier(id: "<Access_ID_For_Josh>");
var gloria = new CommunicationUserIdentifier(id: "<Access_ID_For_Gloria>");
var amy = new CommunicationUserIdentifier(id: "<Access_ID_For_Amy>");
var participants = new[]
{
new ChatParticipant(josh) { DisplayName = "Josh" },
new ChatParticipant(gloria) { DisplayName = "Gloria" },
new ChatParticipant(amy) { DisplayName = "Amy" }
};
await chatThreadClient.AddParticipantsAsync(participants: participants);
Obtenir les participants au fil de conversation
Utilisez GetParticipants pour récupérer les participants au fil de conversation.
AsyncPageable<ChatParticipant> allParticipants = chatThreadClient.GetParticipantsAsync();
await foreach (ChatParticipant participant in allParticipants)
{
Console.WriteLine($"{((CommunicationUserIdentifier)participant.User).Id}:{participant.DisplayName}:{participant.ShareHistoryTime}");
}
Envoyer une confirmation de lecture
Utiliser SendReadReceipt pour informer les autres participants que l’utilisateur a lu le message.
await chatThreadClient.SendReadReceiptAsync(messageId: messageId);
Exécuter le code
Exécutez l’application à partir de votre répertoire d’application avec la commande dotnet run.
dotnet run
Exemple de code
Trouvez le code finalisé de cet article dans l'exemple GitHub Ajoutez Chat à votre application.
Prérequis
Créer un compte Azure avec un abonnement actif. Pour plus d’informations, consultez Créer un compte gratuitement.
Installez Xcode et CocoaPods. Vous utilisez Xcode pour créer une application iOS pour cet article et CocoaPods pour installer les dépendances.
Créer une ressource Azure Communication Services. Pour plus d’informations, consultez Démarrage rapide : Créer et gérer des ressources Communication Services. Vous devez enregistrer votre point de terminaison de ressource et votre chaîne de connexion pour cet article.
Créez deux utilisateurs dans Azure Communication Services, et émettez pour eux un jeton d’accès utilisateur. Veillez à définir l’étendue sur chat (conversation) et prenez note de la chaîne du jeton et de la chaîne user_id. Dans cet article, vous créez un fil de discussion avec un participant initial, puis ajoutez un deuxième participant au fil de discussion. Vous pouvez également utiliser Azure CLI et exécuter la commande suivante avec votre chaîne de connexion pour créer un utilisateur et un jeton d’accès.
az communication identity token issue --scope chat --connection-string "yourConnectionString"Pour plus d’informations, consultez Utiliser Azure CLI pour créer et gérer des jetons d’accès.
Configurer
Créer une application iOS
Ouvrez Xcode et sélectionnez Create a new Xcode project (Créer un projet Xcode). Sélectionnez ensuite iOS comme plateforme, et Application pour le modèle.
En guise de nom de projet, entrez ChatQuickstart. Sélectionnez ensuite Storyboard comme interface et Swift comme langue.
Sélectionnez Suivant, puis choisissez le répertoire où vous voulez créer le projet.
Installer les bibliothèques
Utilisez CocoaPods pour installer les dépendances nécessaires de Communication Services.
À partir de la ligne de commande, accédez au répertoire racine du projet iOS ChatQuickstart. Créez un Podfile avec le contenu suivant : pod init.
Ouvrez le Podfile et ajoutez les dépendances suivantes à la cible ChatQuickstart :
pod 'AzureCommunicationChat', '~> 1.3.6'
Installez les dépendances à l’aide de la commande suivante : pod install. Cela crée également un espace de travail Xcode.
Après l'exécution de pod install, rouvrez le projet dans Xcode en sélectionnant le projet nouvellement créé .xcworkspace.
Configurer les espaces réservés
Ouvrez l’espace de travail ChatQuickstart.xcworkspace dans Xcode, puis ouvrez ViewController.swift.
Dans cet article, vous ajoutez votre code à viewController, et affichez la sortie dans la console Xcode. Cet article ne traite pas de la création d’une interface utilisateur dans iOS.
En haut de viewController.swift, importez les bibliothèques AzureCommunication et AzureCommunicationChat :
import AzureCommunicationCommon
import AzureCommunicationChat
Copiez le code suivant dans la méthode viewDidLoad() de ViewController :
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
let semaphore = DispatchSemaphore(value: 0)
DispatchQueue.global(qos: .background).async {
do {
// <CREATE A CHAT CLIENT>
// <CREATE A CHAT THREAD>
// <LIST ALL CHAT THREADS>
// <GET A CHAT THREAD CLIENT>
// <SEND A MESSAGE>
// <SEND A READ RECEIPT >
// <RECEIVE MESSAGES>
// <ADD A USER>
// <LIST USERS>
} catch {
print("Quickstart failed: \(error.localizedDescription)")
}
}
}
À des fins de démonstration, nous utilisons un sémaphore pour synchroniser votre code. Dans les étapes suivantes, vous remplacez les espaces réservés par un exemple de code en utilisant la bibliothèque Conversation Azure Communication Services.
Créer un client de conversation
Pour créer un client de conversation, utilisez votre point de terminaison Communication Services et le jeton d’accès généré dans le cadre des étapes préalables.
Apprenez-en davantage sur les jetons d’accès utilisateur.
Cet article ne couvre pas la création d'un niveau de service pour gérer les jetons de votre application de conversation, mais nous le recommandons. En savoir plus sur l’Architecture de conversation
Remplacez le commentaire <CREATE A CHAT CLIENT> par l’extrait de code suivant :
let endpoint = "<ACS_RESOURCE_ENDPOINT>"
let credential =
try CommunicationTokenCredential(
token: "<ACCESS_TOKEN>"
)
let options = AzureCommunicationChatClientOptions()
let chatClient = try ChatClient(
endpoint: endpoint,
credential: credential,
withOptions: options
)
Remplacez <ACS_RESOURCE_ENDPOINT> par le point de terminaison de votre ressource Azure Communication Services. Remplacez <ACCESS_TOKEN> par un jeton d’accès Communication Services valide.
Modèle objet
Les classes et interfaces suivantes gèrent quelques-unes des principales fonctionnalités du kit SDK Azure Communication Services Chat pour iOS.
| Nom | Description |
|---|---|
ChatClient |
Cette classe est nécessaire à la fonctionnalité de conversation. Vous l’instanciez avec vos informations d’abonnement et l’utilisez pour créer, obtenir et supprimer des threads, ainsi que pour vous abonner à des événements de conversation. |
ChatThreadClient |
Cette classe est nécessaire à la fonctionnalité de fil de conversation. Vous obtenez une instance par le biais de ChatClient et vous l’utilisez pour envoyer, recevoir, mettre à jour et supprimer des messages. Vous pouvez également l’utiliser pour ajouter, supprimer et obtenir des utilisateurs, ainsi qu’envoyer des notifications de saisie et des confirmations de lecture. |
Démarrer un fil de conversation
CreateChatThreadResult correspond à la réponse renvoyée par la création d’un fil de conversation.
Il contient une propriété chatThread qui correspond à l’objet ChatThreadProperties. Cet objet contient la propriété threadId qui permet d’obtenir un ChatThreadClient pour effectuer des opérations sur le thread créé : ajouter des participants, envoyer un message, etc.
Remplacez le commentaire <CREATE A CHAT THREAD> par l’extrait de code suivant :
let request = CreateChatThreadRequest(
topic: "Quickstart",
participants: [
ChatParticipant(
id: CommunicationUserIdentifier("<USER_ID>"),
displayName: "Jack"
)
]
)
var threadId: String?
chatClient.create(thread: request) { result, _ in
switch result {
case let .success(result):
threadId = result.chatThread?.id
case .failure:
fatalError("Failed to create thread.")
}
semaphore.signal()
}
semaphore.wait()
Remplacez <USER_ID> par un ID d’utilisateur Communication Services valide.
Vous utilisez ici un sémaphore pour attendre le gestionnaire d’achèvement avant de continuer. Lors des étapes ultérieures, utilisez le threadId de la réponse retournée au gestionnaire d’achèvement.
Répertorier tous les fils de conversation
Après avoir créé un fil de discussion, nous pouvons lister tous les fils de discussion en appelant la méthode listChatThreads sur ChatClient. Remplacez le commentaire <LIST ALL CHAT THREADS> par le code suivant :
chatClient.listThreads { result, _ in
switch result {
case let .success(threads):
guard let chatThreadItems = threads.pageItems else {
print("No threads returned.")
return
}
for chatThreadItem in chatThreadItems {
print("Thread id: \(chatThreadItem.id)")
}
case .failure:
print("Failed to list threads")
}
semaphore.signal()
}
semaphore.wait()
Obtenir un client de fil de conversation
La méthode createClient retourne un ChatThreadClient pour un fil qui existe déjà. Elle peut être utilisée pour effectuer des opérations sur le fil créé : ajout de participants, envoi d’un message, etc. threadId est l’ID unique du fil de conversation existant.
Remplacez le commentaire <GET A CHAT THREAD CLIENT> par le code suivant :
let chatThreadClient = try chatClient.createClient(forThread: threadId!)
Envoyer un message à un fil de conversation
Utilisez la méthode send pour envoyer un message à un thread identifié par threadId.
SendChatMessageRequest est utilisé pour décrire la demande de message :
- Utiliser
contentpour fournir le contenu du message de conversation - Utiliser
senderDisplayNamepour spécifier le nom d’affichage de l’expéditeur - Utiliser
typepour spécifier le type de message, par exemple « text » ou « html » - Utilisez
metadata(facultatif) pour inclure toute autre donnée que vous souhaitez envoyer avec le message. Ce champ constitue un mécanisme permettant aux développeurs d’étendre les fonctionnalités des messages de conversation et d’ajouter des informations personnalisées selon le cas d’usage. Par exemple, si vous partagez un lien de fichier dans le message, vous avez la possibilité d’ajouter « hasAttachment:true » dans les métadonnées pour que l’application du destinataire puisse l’analyser et l’afficher en conséquence.
SendChatMessageResult est la réponse retournée par l’envoi d’un message. Elle contient un ID, qui est l’ID unique du message.
Remplacez le commentaire <SEND A MESSAGE> par l’extrait de code suivant :
let message = SendChatMessageRequest(
content: "Hello!",
senderDisplayName: "Jack",
type: .text,
metadata: [
"hasAttachment": "true",
"attachmentUrl": "https://contoso.com/files/attachment.docx"
]
)
var messageId: String?
chatThreadClient.send(message: message) { result, _ in
switch result {
case let .success(result):
print("Message sent, message id: \(result.id)")
messageId = result.id
case .failure:
print("Failed to send message")
}
semaphore.signal()
}
semaphore.wait()
Envoyer une confirmation de lecture
Utilisez la méthode sendReadReceipt pour publier un événement de confirmation de lecture sur un fil de conversation, pour le compte d’un utilisateur.
messageId correspond à ID unique du message de conversation lu.
Remplacez le commentaire <SEND A READ RECEIPT> par le code suivant :
if let id = messageId {
chatThreadClient.sendReadReceipt(forMessage: id) { result, _ in
switch result {
case .success:
print("Read receipt sent")
case .failure:
print("Failed to send read receipt")
}
semaphore.signal()
}
semaphore.wait()
} else {
print("Cannot send read receipt without a message id")
}
Recevoir les messages de conversation d’un fil de conversation
Avec la signalisation en temps réel, vous pouvez vous abonner pour écouter les nouveaux messages entrants et mettre à jour en conséquence les messages actuellement en mémoire. Azure Communication Services prend en charge une liste d’événements auxquels vous pouvez vous abonner.
Remplacez le commentaire <RECEIVE MESSAGES> par le code suivant. Après avoir activé les notifications, essayez d’envoyer de nouveaux messages pour voir les ChatMessageReceivedEvents.
chatClient.startRealTimeNotifications { result in
switch result {
case .success:
print("Real-time notifications started.")
case .failure:
print("Failed to start real-time notifications.")
}
semaphore.signal()
}
semaphore.wait()
chatClient.register(event: .chatMessageReceived, handler: { response in
switch response {
case let .chatMessageReceivedEvent(event):
print("Received a message: \(event.message)")
default:
return
}
})
Vous pouvez aussi récupérer les messages de conversation en interrogeant la méthode listMessages selon des intervalles définis. Regarder l’extrait de code suivant pour listMessages
chatThreadClient.listMessages { result, _ in
switch result {
case let .success(messagesResult):
guard let messages = messagesResult.pageItems else {
print("No messages returned.")
return
}
for message in messages {
print("Received message with id: \(message.id)")
}
case .failure:
print("Failed to receive messages")
}
semaphore.signal()
}
semaphore.wait()
Ajouter un utilisateur comme participant au fil de conversation
Une fois qu’un fil est créé, vous pouvez y ajouter des utilisateurs ou en supprimer. En ajoutant des utilisateurs, vous leur permettez d’envoyer des messages au fil de conversation et d’ajouter ou de supprimer d’autres participants. Avant d’appeler add, assurez-vous d’avoir acquis un nouveau jeton d’accès et une nouvelle identité pour cet utilisateur. L'utilisateur a besoin du jeton d'accès pour initialiser son client de conversation.
Utilisez la méthode add de ChatThreadClient pour ajouter un ou plusieurs participants au thread de conversation. Voici les attributs pris en charge pour chaque participant au thread :
-
id, obligatoire. Il s’agit de l’identité du participant au fil de conversation. -
displayName, facultatif, est le nom d’affichage pour le participant au fil. -
shareHistoryTime, facultatif. Il s’agit du moment à partir duquel l’historique de conversation est partagé avec le participant.
Remplacez le commentaire <ADD A USER> par le code suivant :
let user = ChatParticipant(
id: CommunicationUserIdentifier("<USER_ID>"),
displayName: "Jane"
)
chatThreadClient.add(participants: [user]) { result, _ in
switch result {
case let .success(result):
if let errors = result.invalidParticipants, !errors.isEmpty {
print("Error adding participant")
} else {
print("Added participant")
}
case .failure:
print("Failed to add the participant")
}
semaphore.signal()
}
semaphore.wait()
Remplacez <USER_ID> par l’ID d’utilisateur Communication Services de l’utilisateur à ajouter.
Lister les utilisateurs dans un fil de conversation
Utilisez la méthode listParticipants pour obtenir tous les participants d’un thread de conversation particulier.
Remplacez le commentaire <LIST USERS> par le code suivant :
chatThreadClient.listParticipants { result, _ in
switch result {
case let .success(participantsResult):
guard let participants = participantsResult.pageItems else {
print("No participants returned.")
return
}
for participant in participants {
let user = participant.id as! CommunicationUserIdentifier
print("User with id: \(user.identifier)")
}
case .failure:
print("Failed to list participants")
}
semaphore.signal()
}
semaphore.wait()
Notifications Push
Les notifications push informent les clients des messages entrants dans un fil de discussion dans les situations où l'application mobile ne s'exécute pas au premier plan.
Actuellement, l'envoi de notifications push de conversation avec Notification Hub est pris en charge pour IOS SDK dans la version 1.3.0.
Pour plus d’informations, consultez Activer les notifications Push dans votre application de conversation.
Exécuter le code
Désactiver le bac à sable de script utilisateur
Certains des scripts dans les bibliothèques liées écrivent des fichiers pendant le processus de génération. Pour activer l’écriture de fichiers, désactivez le bac à sable du script utilisateur dans Xcode.
Dans le projet Xcode, sous Paramètres de build, définissez l’option Sandboxing de script utilisateur sur Non. Pour rechercher le paramètre, remplacez le filtre De base par Tout ou utilisez la barre de recherche.
Exécuter le projet
Dans Xcode, cliquez sur le bouton Run (Exécuter) pour générer et exécuter le projet. Dans la console, vous pouvez voir la sortie du code et la sortie de l’enregistreur d’événements du ChatClient.
Exemple de code
Trouvez le code finalisé de cet article dans l'exemple GitHub Ajoutez Chat à votre application.
Prérequis
Un compte Azure avec un abonnement actif ou créez gratuitement un compte Azure.
Une ressource Azure Communication Services active ou créez une ressource Communication Services.
Une ressource Azure Logic Apps active, ou créez une application logique vide avec le déclencheur que vous souhaitez utiliser. Comme le connecteur Communication Services Chat ne fournit que des actions actuellement, votre application logique nécessite au minimum un déclencheur.
Créer un utilisateur
Effectuez ces étapes dans Power Automate avec votre flux Power Automate ouvert en mode d’édition.
Pour ajouter une nouvelle étape dans votre workflow à l’aide du connecteur Communication Services Identity :
Dans le concepteur, sous l’étape à laquelle vous voulez ajouter la nouvelle action, choisissez Nouvelle étape. Vous pouvez également ajouter la nouvelle action entre des étapes, déplacez votre pointeur sur la flèche située entre ces étapes, sélectionnez le signe plus (+), puis sélectionnez Ajouter une action.
Dans la zone de recherche Choisir une opération, entrez Communication Services Identity. Dans la liste de la liste d’actions, sélectionnez Créer un utilisateur.
Entrez la chaîne de connexion. Pour obtenir l’URL de chaîne de connexion dans le Portail Azure, accédez à la ressource Azure Communication Services. Dans le menu des ressources, sélectionnez Clés, puis Chaîne de connexion. Sélectionnez l’icône Copier pour effectuer la copie de la chaîne de connexion.
Attribuez un nom à cette connexion.
Sélectionnez Afficher les options avancées, puis sélectionnez l’étendue du jeton. L’action génère un jeton d’accès et son heure d’expiration avec spécification de l’étendue. Cette action génère également un identifiant utilisateur qui est une identité d’utilisateur de Communication Services.
Dans Élément des étendues de jeton, sélectionnez Conversation.
Sélectionnez Create (Créer). L’identifiant utilisateur et un jeton d’accès s’affichent.
Créer un fil de conversation
Ajoutez une nouvelle action.
Dans la zone de recherche Choisir une opération, entrez Communication Services Chat. Dans la liste d’actions, sélectionnez Créer un thread de conversation.
Entrez l’URL du point de terminaison Communication Services. Pour obtenir l’URL du point de terminaison dans le Portail Azure, accédez à la ressource Communication Services. Dans le menu de la ressource, sélectionnez Clés, puis Point de terminaison.
Attribuez un nom à cette connexion.
Sélectionnez le jeton d’accès qui a été généré dans la section précédente, puis ajoutez une description à la rubrique du fil de conversation. Ajoutez l’utilisateur créé et entrez un nom pour le participant.
Envoyer un message
Ajoutez une nouvelle action.
Dans la zone de recherche Choisir une opération, entrez Communication Services Chat. Dans la liste d’actions, sélectionnez Envoyer un message au thread de conversation.
Entrez le jeton d’accès, l’ID de thread, le contenu et le nom.
Répertorier les messages de thread de conversation
Pour vérifier que vous avez correctement envoyé un message :
Ajoutez une nouvelle action.
Dans la zone de recherche Choisir une opération, entrez Communication Services Chat. Dans la liste d’actions, sélectionnez Liste des messages de thread de conversation.
Entrez le jeton d’accès et l’ID de thread.
Tester votre application logique
Pour lancer manuellement votre workflow, sélectionnez Exécuter dans la barre d’outils du concepteur. Le workflow crée un utilisateur, émet un jeton d’accès pour cet utilisateur, puis supprime le jeton et supprime l’utilisateur. Pour plus d'informations, consultez Comment exécuter votre flux de travail.
À présent, sélectionnez Répertorier les messages de thread de conversation. Dans les sorties d’action, recherchez le message qui a été envoyé.
Nettoyer des ressources de flux de travail
Pour nettoyer le flux de travail de votre application logique et les ressources associées, découvrez comment nettoyer les ressources des applications logiques..
Nettoyer les ressources
Pour nettoyer et supprimer un abonnement Communication Services, vous pouvez supprimer la ressource ou le groupe de ressources. La suppression du groupe de ressources efface également les autres ressources qui y sont associées. Pour plus d'informations, consultez les ressources de nettoyage.
Étapes suivantes
Cet article a décrit comment :
- Créer un client de conversation
- Créer un fil avec deux utilisateurs
- Envoyer un message au fil
- Recevoir des messages d’un fil
- Supprimer des utilisateurs d’un fil
Articles connexes
- Familiarisez-vous avec la bibliothèque d’interface utilisateur.
- Découvrez les concepts de conversation.
- Familiarisez-vous avec Chat SDK.
- Utilisation du kit de développement logiciel (SDK) dans votre application React Native.