Inicio rápido: Incorporación de chat a una aplicación
Comience a usar Azure Communication Services mediante el SDK de chat de Communication Services para agregar chat en tiempo real a la aplicación. En esta guía de inicio rápido, usaremos el SDK de chat para crear conversaciones de chat que permitan a los usuarios mantener conversaciones entre sí. Para obtener más información acerca de los conceptos de chat, visite la documentación conceptual de chat.
Requisitos previos
Una cuenta de Azure con una suscripción activa. Cree una cuenta gratuita.
Un recurso activo de Communication Services y una cadena de conexión. Cree un recurso de Communication Services.
Instale la CLI de Azure.
Tenga en cuenta el punto de conexión de recursos de Communication Services. Puede obtener el punto de conexión de Azure Portal. Como alternativa, puede encontrar la dirección URL del punto de conexión en la cadena de conexión. Es la dirección URL que viene después de
endpoint=
y comienza porhttps://
.Un Token de acceso de usuario. Asegúrese de establecer el ámbito en chat y anote la cadena del token, así como la cadena user_Id. También puede usar la CLI de Azure y ejecutar el comando siguiente con la cadena de conexión para crear un usuario y un token de acceso.
az communication identity token issue --scope chat --connection-string "yourConnectionString"
Para más información, consulte Uso de la CLI de Azure para crear y administrar tokens de acceso.
Instalación
Adición de la extensión
Agregue la extensión Azure Communication Services para la CLI de Azure mediante el comando az extension
.
az extension add --name communication
Inicio de sesión en la CLI de Azure
Deberá iniciar sesión en la CLI de Azure. Para iniciar sesión, ejecute el comando az login
desde el terminal y proporcione sus credenciales.
(Opcional) Uso de operaciones de identidad de la CLI de Azure sin pasar una cadena de conexión o un token de acceso
Almacenamiento del punto de conexión en una variable de entorno
Puede configurar la variable de entorno AZURE_COMMUNICATION_ENDPOINT
para usar operaciones de chat de la CLI de Azure sin tener que usar --endpoint
para pasar la cadena de conexión. Para configurar una variable de entorno, abra una ventana de consola y seleccione el sistema operativo en las pestañas siguientes. Reemplace <yourEndpoint>
por el punto de conexión real.
Abra una ventana de consola y escriba el siguiente comando:
setx AZURE_COMMUNICATION_ENDPOINT "<yourEndpoint>"
Después de agregar la variable de entorno, puede que tenga que reiniciar todos los programas en ejecución que necesiten leer la variable de entorno, incluida la ventana de consola. Por ejemplo, si usa Visual Studio como editor, reinícielo antes de ejecutar el ejemplo.
Almacenamiento del token de acceso en una variable de entorno
Puede configurar la variable de entorno AZURE_COMMUNICATION_ACCESS_TOKEN
para usar operaciones de chat de la CLI de Azure sin tener que usar --access-token
para pasar el token de acceso. Para configurar una variable de entorno, abra una ventana de consola y seleccione el sistema operativo en las pestañas siguientes. Reemplace <yourAccessToken>
con su token de acceso real.
Abra una ventana de consola y escriba el siguiente comando:
setx AZURE_COMMUNICATION_ACCESS_TOKEN "<yourAccessToken>"
Después de agregar la variable de entorno, puede que tenga que reiniciar todos los programas en ejecución que necesiten leer la variable de entorno, incluida la ventana de consola. Por ejemplo, si usa Visual Studio como editor, reinícielo antes de ejecutar el ejemplo.
Operaciones
Inicio de un subproceso de chat
Utilice el comando thread create
para crear un subproceso de chat.
az communication chat thread create --topic "<chatTopic>" --endpoint "<endpoint>" --access-token "<token>"
Si ha almacenado el punto de conexión y el token de acceso en variables de entorno como se indicó anteriormente, no tendrá que pasarlos al comando.
az communication chat thread create --topic "<chatTopic>"
- Use
<chatTopic>
para proporcionar un tema a la conversación. Puede actualizar el tema después de crear la conversación de chat mediante el comandothread update-topic
. - Reemplace
<endpoint>
por el punto de conexión de Azure Communication Services. - Reemplace
<token>
por el token de acceso obtenido anteriormente mediante el comando en ejecuciónidentity token issue
.
Actualizar el tema de una conversación de chat
az communication chat thread update-topic --thread "<chatThreadId>" --topic "<chatTopic>" --endpoint "<endpoint>" --access-token "<token>"
- Reemplace
<chatThreadId>
por el identificador del subproceso de chat. - Reemplace
<chatTopic>
por el nuevo tema de chat que desea establecer. - Reemplace
<endpoint>
por el punto de conexión de Azure Communication Services. - Reemplace
<token>
por el token de acceso obtenido anteriormente mediante el comando en ejecuciónidentity token issue
.
Lista de todas las conversaciones de chat
El comando thread list
devuelve la lista de subprocesos de chat de un usuario.
az communication chat thread list --start-time "<startTime>" --endpoint "<endpoint>" --access-token "<token>"
- De manera opcional, utilice
<startTime>
para especificar el primer momento a partir del cual obtener las conversaciones de chat. - Reemplace
<endpoint>
por el punto de conexión de Azure Communication Services. - Reemplace
<token>
por el token de acceso obtenido anteriormente mediante el comando en ejecuciónidentity token issue
.
Envío de un mensaje a un subproceso de chat
Utilice el comando message send
para enviar un mensaje a una conversación de chat que ha creado, identificada mediante threadId
.
az communication chat message send --thread "<chatThreadId>" --display-name "<displayName>" --content "<content>" --message-type "<messageType>" --endpoint "<endpoint>" --access-token "<token>"
- Reemplace
<chatThreadId>
por el identificador del subproceso de chat. - Utilice
<content>
para proporcionar el contenido del mensaje de chat. - Utilice
<messageType>
para especificar el tipo de contenido del mensaje. Los valores posibles sontext
yhtml
. Si no especifica un valor, el valor predeterminado estext
. - De manera opcional, utilice
<displayName>
para especificar el nombre para mostrar del remitente. - Reemplace
<endpoint>
por el punto de conexión de Azure Communication Services. - Reemplace
<token>
por el token de acceso obtenido anteriormente mediante el comando en ejecuciónidentity token issue
.
Enumere los mensajes de chat de un subproceso de chat
El comando message list
devuelve la lista de mensajes de chat en un subproceso de chat.
az communication chat message list --thread "<chatThreadId>" --start-time "<startTime>" --endpoint "<endpoint>" --access-token "<token>"
- Reemplace
<chatThreadId>
por el identificador del subproceso de chat. - De manera opcional, utilice
<startTime>
para especificar el primer momento a partir del cual obtener las conversaciones de chat. - Reemplace
<endpoint>
por el punto de conexión de Azure Communication Services. - Reemplace
<token>
por el token de acceso obtenido anteriormente mediante el comando en ejecuciónidentity token issue
.
Recepción de un mensaje de chat de un subproceso de chat
Puede recuperar mensajes de chat mediante el comando message list
.
az communication chat message get --thread "<chatThreadId>" --message-id "<messageId>" --endpoint "<endpoint>" --access-token "<token>"
- Reemplace
<chatThreadId>
por el identificador del subproceso de chat. - Reemplace
<messageId>
por el id. del mensaje que le gustaría recuperar. - Reemplace
<endpoint>
por el punto de conexión de Azure Communication Services. - Reemplace
<token>
por el token de acceso obtenido anteriormente mediante el comando en ejecuciónidentity token issue
.
Envío de confirmación de lectura
Puede usar el comando message receipt send
para publicar un evento de confirmación de lectura en una conversación de chat en nombre de un usuario.
az communication chat message receipt send --thread "<chatThreadId>" --message-id "<messageId>" --endpoint "<endpoint>" --access-token "<token>"
- Reemplace
<chatThreadId>
por el identificador del subproceso de chat. - Reemplace
<messageId>
para especificar el identificador del último mensaje leído por el usuario actual. - Reemplace
<endpoint>
por el punto de conexión de Azure Communication Services. - Reemplace
<token>
por el token de acceso obtenido anteriormente mediante el comando en ejecuciónidentity token issue
.
Adición de un usuario como miembro a la conversación del chat
Una vez que se crea una conversación de chat, puede agregar y quitar usuarios de ella. Al agregar usuarios, les concede acceso para enviar mensajes a la conversación de chat y para agregar o quitar otros participantes. Antes de llamar al comando participant add
, asegúrese de que ha adquirido un nuevo token de acceso y una identidad para el usuario.
az communication chat participant add --thread "<chatThreadId>" --user "<userId>" --display-name "<displayName>" --start-time "<startTime>" --endpoint "<endpoint>" --access-token "<token>"
- Reemplace
<chatThreadId>
por el identificador del subproceso de chat. - Reemplace
<userId>
por su userId. - De manera opcional, utilice
<displayName>
para especificar el nombre para mostrar del remitente. - De manera opcional, utilice
<startTime>
para especificar el primer momento a partir del cual obtener las conversaciones de chat. - Reemplace
<endpoint>
por el punto de conexión de Azure Communication Services. - Reemplace
<token>
por el token de acceso obtenido anteriormente mediante el comando en ejecuciónidentity token issue
.
Enumeración de los participantes en una conversación de un chat
En una conversación, los participantes se pueden enumerar de forma similar a como se agregan.
Use el comando participant list
para recuperar los participantes de la conversación.
az communication chat participant list --thread "<chatThreadId>" --skip "<skip>" --endpoint "<endpoint>" --access-token "<token>"
- Reemplace
<chatThreadId>
por el identificador del subproceso de chat. - De manera opcional, use
<skip>
para omitir los participantes hasta una posición especificada en la respuesta. - Reemplace
<endpoint>
por el punto de conexión de Azure Communication Services. - Reemplace
<token>
por el token de acceso obtenido anteriormente mediante el comando en ejecuciónidentity token issue
.
Eliminación del participante de una conversación de chat
Puede quitar un participante de chat de un subproceso de chat mediante el comando "quitar participante".
az communication chat participant remove --thread "<chatThreadId>" --user "<userId>" --endpoint "<endpoint>" --access-token "<token>"
- Reemplace
<chatThreadId>
por el identificador del subproceso de chat. - Reemplace
<userId>
por el Id. de usuario que desea quitar del subproceso de chat. - Reemplace
<endpoint>
por el punto de conexión de Azure Communication Services. - Reemplace
<token>
por el token de acceso obtenido anteriormente mediante el comando en ejecuciónidentity token issue
.
Requisitos previos
Antes de comenzar, compruebe lo siguiente:
Cree de una cuenta de Azure con una suscripción activa. Para más información, consulte Creación de una cuenta gratuita.
Instale las versiones Active LTS y Maintenance LTS de Node.js.
Cree un recurso de Azure Communication Services. Para más información, consulte Creación de un recurso de Azure Communication Services. Deberá registrar la cadena de conexión y del punto de conexión del recurso para esta guía de inicio rápido.
Cree tres usuarios de Communication Services y emítales Token de acceso de usuario. Asegúrese de establecer el ámbito en chat y anote la cadena del token, así como la cadena user_Id. La demo completa crea una conversación con dos participantes iniciales y, después, agrega un tercer participante a la misma. También puede usar la CLI de Azure y ejecutar el comando siguiente con la cadena de conexión para crear un usuario y un token de acceso.
az communication identity token issue --scope chat --connection-string "yourConnectionString"
Para más información, consulte Uso de la CLI de Azure para crear y administrar tokens de acceso.
Instalación
Creación de una nueva aplicación web
En primer lugar, abra la ventana de comandos o de terminal, cree un nuevo directorio para la aplicación y navegue hasta este.
mkdir chat-quickstart && cd chat-quickstart
Ejecute npm init -y
para crear un archivo package.json con la configuración predeterminada.
npm init -y
Instalación de los paquetes
Use el comando npm install
para instalar los siguientes SDK de Communication Services para 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
La opción --save
muestra la biblioteca como dependencia en el archivo package.json.
Instalación del marco de la aplicación
En esta guía de inicio rápido se usa parcel para agrupar los recursos de la aplicación. Ejecute el siguiente comando para llevar a cabo la instalación y que se muestre como una dependencia de desarrollo en package.json:
npm install parcel --save-dev
Cree un archivo index.html en el directorio raíz del proyecto. Usaremos este archivo como plantilla para agregar la funcionalidad de chat mediante Chat SDK de Azure Communication Services para JavaScript.
<!DOCTYPE html>
<html>
<head>
<title>Communication Client - Chat Sample</title>
</head>
<body>
<h4>Azure Communication Services</h4>
<h1>Chat Quickstart</h1>
<script src="./client.js" type="module"></script>
</body>
</html>
Cree un archivo en el directorio raíz del proyecto denominado client.js que contendrá la lógica de la aplicación para esta guía de inicio rápido.
Creación de un cliente de chat
Para crear un cliente de chat en una aplicación web, usará el punto de conexión de Communication Services y el token de acceso que se generó como parte de los pasos de los requisitos previos.
Los tokens de acceso de usuario permiten compilar aplicaciones cliente que se autentiquen directamente en Azure Communication Services. En este inicio rápido no se trata la creación de un nivel de servicio para administrar tokens para una aplicación de chat. Consulte Conceptos de chat para más información sobre la arquitectura de chat y Tokens de acceso de usuario para más información sobre los tokens de acceso.
En client.js, use el punto de conexión y el token de acceso del código siguiente para agregar la funcionalidad de chat mediante Chat SDK de Azure Communication Services para 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!');
- Reemplace endpointUrl por el punto de conexión de recurso de Communication Services y consulte Creación de un recurso de Communication Services si aún no lo ha hecho.
- Reemplace userAccessToken por el token que ha emitido.
Ejecución del código
Ejecute el siguiente comando para ejecutar la aplicación:
npx parcel index.html
Abra el explorador web y vaya a http://localhost:1234/. En la consola de herramientas de desarrollo en el explorador, debe ver lo siguiente:
Azure Communication Chat client created!
Modelo de objetos
Las siguientes clases e interfaces controlan algunas de las características principales de Chat SDK de Azure Communication Services para JavaScript.
Nombre | Descripción |
---|---|
ChatClient | Esta clase es necesaria para la funcionalidad de chat. Cree una instancia de ella con la información de la suscripción y úsela para crear, obtener y eliminar conversaciones, y para suscribirse a eventos de chat. |
ChatThreadClient | Esta clase es necesaria para la funcionalidad de subproceso de chat. Obtiene una instancia de a través de la clase ChatClient y la usa para enviar, recibir, actualizar o eliminar mensajes, agregar, quitar u obtener usuarios, enviar notificaciones de escritura y confirmaciones de lectura. |
Inicio de un subproceso de chat
Use el método createThread
para crear un subproceso de chat.
createThreadRequest
se usa para describir la solicitud de subproceso:
- Utilice
topic
para proporcionar un tema a este chat. Los temas se pueden actualizar después de crear el subproceso de chat mediante la funciónUpdateThread
. - Use
participants
para enumerar los participantes que se van a agregar a la conversación del chat.
Cuando se resuelve, el método createChatThread
devuelve CreateChatThreadResult
. Este modelo contiene una propiedad chatThread
donde se puede acceder al id
del subproceso recién creado. Luego, se puede utilizar id
para obtener una instancia de ChatThreadClient
. A continuación, se puede usar ChatThreadClient
para realizar una operación dentro del subproceso, como enviar mensajes o enumerar participantes.
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>
});
Al actualizar la pestaña del explorador, debería ver lo siguiente en la consola:
Thread created: <thread_id>
Obtención de un cliente de subproceso de chat
El método getChatThreadClient
devuelve un chatThreadClient
para un subproceso que ya existe. Se puede usar para realizar operaciones en el subproceso creado: agregar participantes, enviar un mensaje, etc. threadId es el identificador único de la conversación del chat existente.
let chatThreadClient = chatClient.getChatThreadClient(threadId);
console.log(`Chat Thread client for threadId:${threadId}`);
Agregue este código en lugar del comentario <CREATE CHAT THREAD CLIENT>
en client.js, actualice la pestaña del explorador y compruebe la consola. Debería ver lo siguiente:
Chat Thread client for threadId: <threadId>
Lista de todas las conversaciones de chat
El método listChatThreads
devuelve un PagedAsyncIterableIterator
de tipo ChatThreadItem
. Se puede usar para enumerar todas las conversaciones de chat.
Un iterador de [ChatThreadItem]
es la respuesta que devuelven los subprocesos de lista.
const threads = chatClient.listChatThreads();
for await (const thread of threads) {
// your code here
}
Envío de un mensaje a un subproceso de chat
Utilice el método sendMessage
para enviar un mensaje a un subproceso identificado mediante threadId.
sendMessageRequest
se utiliza para describir la solicitud del mensaje:
- Utilice
content
para proporcionar el contenido del mensaje de chat.
sendMessageOptions
se usa para describir los parámetros opcionales de la operación:
- Utilice
senderDisplayName
para especificar el nombre para mostrar del remitente. - Use
type
para especificar el tipo de mensaje, como "texto" o "html". - Opcionalmente, use
metadata
para incluir otros datos que quiera enviar con el mensaje. Este campo proporciona un mecanismo para que los desarrolladores amplíen la funcionalidad de los mensajes de chat y agreguen información personalizada para su caso de uso. Por ejemplo, al compartir un vínculo de archivo en el mensaje, es posible que quiera agregar "hasAttachment: true" en los metadatos para que la aplicación del destinatario pueda analizarlo y mostrarlo en consecuencia.
SendChatMessageResult
es la respuesta que se devuelve al enviar un mensaje. Contiene un identificador que es el identificador único del mensaje.
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}`);
Agregue este código en lugar del comentario <SEND MESSAGE TO A CHAT THREAD>
en el archivo client.js, actualice la pestaña del explorador y compruebe la consola.
Message sent!, message id:<number>
Recepción de mensajes de chat de un subproceso de chat
Con la señalización en tiempo real, puede suscribirse para escuchar nuevos mensajes entrantes y actualizar los mensajes actuales en la memoria en consecuencia. Azure Communication Services admite una lista de eventos a los que se puede suscribir.
// open notifications channel
await chatClient.startRealtimeNotifications();
// subscribe to new notification
chatClient.on("chatMessageReceived", (e) => {
console.log("Notification chatMessageReceived!");
// your code here
});
Agregue este código en lugar del comentario <RECEIVE A CHAT MESSAGE FROM A CHAT THREAD>
en client.js.
Actualice la pestaña del explorador; debería ver en la consola un mensaje Notification chatMessageReceived
.
También puede recuperar mensajes de chat mediante el sondeo del método listMessages
a intervalos especificados.
const messages = chatThreadClient.listMessages();
for await (const message of messages) {
// your code here
}
Agregue este código en lugar del comentario <LIST MESSAGES IN A CHAT THREAD>
en client.js.
Actualice la pestaña; en la consola debería encontrar la lista de los mensajes enviados en esta conversación del chat.
listMessages
devuelve distintos tipos de mensajes que se pueden identificar mediante chatMessage.type
.
Para obtener más información, consulte Tipos de mensajes.
Adición de un usuario como miembro a la conversación del chat
Una vez que se crea un subproceso de chat, puede agregar y quitar usuarios de este. Al agregar usuarios, les concede acceso para enviar mensajes a la conversación del chat, y agregar o quitar otros participantes.
Antes de llamar al método addParticipants
, asegúrese de que ha adquirido un nuevo token de acceso y una identidad para el usuario. El usuario necesitará ese token de acceso para poder inicializar su cliente de chat.
addParticipantsRequest
describe el objeto de solicitud, donde participants
enumera los participantes que se van a agregar a la conversación del chat.
- El elemento
id
obligatorio es el identificador de la comunicación que se va a agregar al subproceso de chat. displayName
es opcional y es el nombre para mostrar del participante de la conversación.shareHistoryTime
es opcional y es la hora a partir de la cual el historial de chat se compartió con el participante. Para compartir el historial desde el inicio del subproceso de chat, establezca esta propiedad en cualquier fecha igual o anterior a la hora de creación del subproceso. Para no compartir ningún historial anterior a la hora en que se agregó el participante, establézcala en la fecha actual. Para compartir el historial parcialmente, establezca la opción en la fecha de su elección.
const addParticipantsRequest =
{
participants: [
{
id: { communicationUserId: '<NEW_PARTICIPANT_USER_ID>' },
displayName: 'Jane'
}
]
};
await chatThreadClient.addParticipants(addParticipantsRequest);
Reemplace NEW_PARTICIPANT_USER_ID_USER_ID por un identificador de usuario nuevo. Agregue este código en lugar del comentario <ADD NEW PARTICIPANT TO THREAD>
en client.js
Enumeración de usuarios en un subproceso de chat
const participants = chatThreadClient.listParticipants();
for await (const participant of participants) {
// your code here
}
Agregue este código en lugar del comentario <LIST PARTICIPANTS IN A THREAD>
en client.js, actualice la pestaña del explorador y compruebe la consola; debería ver información acerca de los usuarios de un subproceso.
Eliminación de un usuario de un subproceso de chat
En una conversación del chat, los participantes se pueden eliminar de forma similar a como se agregan. Para quitarlos, será preciso realizar un seguimiento de los identificadores de los participantes que se han agregado.
Utilice el método removeParticipant
, donde participant
es el usuario de la comunicación que se va a quitar del subproceso.
await chatThreadClient.removeParticipant({ communicationUserId: <PARTICIPANT_ID> });
await listParticipants();
Reemplace PARTICIPANT_ID por un id. de usuario utilizado en el paso anterior (<REMOVE PARTICIPANT FROM THREAD>
en client.js.
Suscripción al estado de conexión de las notificaciones en tiempo real
La suscripción a eventos realTimeNotificationConnected
y realTimeNotificationDisconnected
permite saber cuándo está activa la conexión al servidor de llamadas.
// 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
});
Código de ejemplo
Busque el código finalizado de este inicio rápido en GitHub.
Requisitos previos
Antes de comenzar, compruebe lo siguiente:
Cree de una cuenta de Azure con una suscripción activa. Para más información, consulte Creación de una cuenta gratuita.
Instale Python 3.7+.
Cree un recurso de Azure Communication Services. Para más información, consulte Inicio rápido: Creación y administración de recursos de Communication Services. Deberá registrar la cadena de conexión y del punto de conexión del recurso para esta guía de inicio rápido.
Un Token de acceso de usuario. Asegúrese de establecer el ámbito en chat y anote la cadena del token, así como la cadena user_Id. También puede usar la CLI de Azure y ejecutar el comando siguiente con la cadena de conexión para crear un usuario y un token de acceso.
az communication identity token issue --scope chat --connection-string "yourConnectionString"
Para más información, consulte Uso de la CLI de Azure para crear y administrar tokens de acceso.
Instalación
Creación de una nueva aplicación de Python
Abra la ventana de comandos o el terminal, cree un nuevo directorio para la aplicación y vaya hasta él.
mkdir chat-quickstart && cd chat-quickstart
Use un editor de texto para crear un archivo llamado start-chat.py en el directorio raíz del proyecto. Agregue la estructura del programa, incluido un control de excepciones básico. En las secciones siguientes agregará todo el código fuente de esta guía de inicio rápido a este archivo.
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)
Instalación del SDK
Use el siguiente comando para instalar el SDK:
pip install azure-communication-chat
Modelo de objetos
Las siguientes clases e interfaces controlan algunas de las características principales de Chat SDK de Azure Communication Services para Python.
Nombre | Descripción |
---|---|
ChatClient |
Esta clase es necesaria para la funcionalidad de chat. Cree una instancia de esta con la información de suscripción y úsela para crear, obtener y eliminar conversaciones. |
ChatThreadClient |
Esta clase es necesaria para la funcionalidad de conversación de chat. Obtenga una instancia mediante ChatClient y úsela para enviar, recibir, actualizar y eliminar mensajes. También puede usarla para agregar, quitar y obtener usuarios, o enviar notificaciones de escritura y confirmaciones de lectura. |
Creación de un cliente de chat
Para crear un cliente de chat, usará el punto de conexión de Communication Services y el token de acceso que se generó como parte de los pasos de requisitos previos.
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>"))
En este inicio rápido no se aborda la creación de un nivel de servicio para administrar tokens para la aplicación de chat, aunque se recomienda. Para más información, consulte la sección "Arquitectura del chat" de Conceptos de chat.
Inicio de un subproceso de chat
Use el método create_chat_thread
para crear un subproceso de chat.
- Use
topic
para proporcionar un tema a la conversación. Puede actualizar el tema después de crear la conversación de chat mediante la funciónupdate_thread
. - Use
thread_participants
para enumerar los elementosChatParticipant
que se van a agregar a la conversación de chat.ChatParticipant
toma el tipoCommunicationUserIdentifier
como un elementouser
.
CreateChatThreadResult
es el resultado devuelto por la creación de una conversación. Puede utilizarlo para capturar el elemento id
de la conversación de chat que se ha creado. A continuación, se puede utilizar el valor de id
para capturar un objeto ChatThreadClient
mediante el método get_chat_thread_client
. Se puede usar ChatThreadClient
para realizar otras operaciones de chat en esta conversación de chat.
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)
Obtención de un cliente de subproceso de chat
El método get_chat_thread_client
devuelve un cliente de subproceso para un subproceso que ya existe. Lo puede utilizar para realizar operaciones en la conversación creada. Por ejemplo, puede agregar participantes y enviar mensajes. thread_id
es el identificador único de la conversación de chat existente.
Se puede usar ChatThreadClient
para realizar otras operaciones de chat en esta conversación de chat.
thread_id = create_chat_thread_result.chat_thread.id
chat_thread_client = chat_client.get_chat_thread_client(thread_id)
Lista de todas las conversaciones de chat
El método list_chat_threads
devuelve un iterador de tipo ChatThreadItem
.
- Utilice
start_time
para especificar el primer punto en el tiempo a partir del cual obtener las conversaciones de chat. - Utilice
results_per_page
para especificar el número máximo de conversaciones de chat que se devuelven por página.
La enumeración de conversaciones devuelve como respuesta un iterador de [ChatThreadItem]
.
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)
Envío de un mensaje a un subproceso de chat
Utilice el método send_message
para enviar un mensaje a una conversación de chat recién creada, identificada mediante thread_id
.
- Utilice
content
para proporcionar el contenido del mensaje de chat. - Utilice
chat_message_type
para especificar el tipo de contenido del mensaje. Los valores posibles sontext
yhtml
. Si no especifica un valor, el valor predeterminado estext
. - Utilice
sender_display_name
para especificar el nombre para mostrar del remitente. - Opcionalmente, use
metadata
para incluir los datos adicionales que quiera enviar con el mensaje. Este campo proporciona un mecanismo para que los desarrolladores amplíen la funcionalidad de los mensajes de chat y agreguen información personalizada para su caso de uso. Por ejemplo, al compartir un vínculo de archivo en el mensaje, es posible que quiera agregar "hasAttachment:true" en los metadatos para que la aplicación del destinatario pueda analizarlo y mostrarlo en consecuencia.
SendChatMessageResult
es la respuesta devuelta al enviar un mensaje. Contiene un identificador, que es el identificador único del mensaje.
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)
Recepción de mensajes de chat de un subproceso de chat
Puede recuperar mensajes de chat mediante el sondeo del método list_messages
a intervalos especificados.
- Utilice
results_per_page
para especificar el número máximo de mensajes que se devuelven por página. - Utilice
start_time
para especificar el primer punto en el tiempo a partir del cual obtener los mensajes.
La enumeración de mensajes devuelve como respuesta un iterador de [ChatMessage]
.
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
devuelve la versión más reciente del mensaje, incluidas las modificaciones o eliminaciones que se hayan producido en este mediante update_message
y delete_message
. En el caso de los mensajes eliminados, ChatMessage.deleted_on
devuelve un valor datetime
que indica cuándo se eliminó el mensaje. En el caso de los mensajes editados, ChatMessage.edited_on
devuelve un valor datetime
que indica cuándo se editó el mensaje. Puede acceder a la hora original de creación del mensaje mediante ChatMessage.created_on
, que se puede usar para ordenar los mensajes.
list_messages
devuelve distintos tipos de mensajes que se pueden identificar mediante ChatMessage.type
.
Para más información, consulte Tipos de mensajes.
Envío de confirmación de lectura
Puede usar el método send_read_receipt
para publicar un evento de confirmación de lectura en una conversación de chat en nombre de un usuario.
- Use
message_id
para especificar el identificador del último mensaje leído por el usuario actual.
content='hello world'
send_message_result = chat_thread_client.send_message(content)
chat_thread_client.send_read_receipt(message_id=send_message_result.id)
Adición de un usuario como miembro a la conversación del chat
Una vez que se crea una conversación de chat, puede agregar y quitar usuarios de ella. Al agregar usuarios, les concede acceso para enviar mensajes a la conversación de chat y para agregar o quitar otros participantes. Antes de llamar al método add_participants
, asegúrese de que ha adquirido un nuevo token de acceso y una identidad para el usuario. El usuario necesita ese token de acceso para inicializar el cliente de chat.
Mediante el método add_participants
se pueden agregar uno o varios usuarios a la conversación de chat, siempre que todos los usuarios dispongan de un nuevo token de acceso e identificación.
Se devuelve list(tuple(ChatParticipant, CommunicationError))
. Cuando un participante se agrega correctamente, se espera una lista vacía. En caso de que se produzca un error al agregar un participante, la lista se rellena con los participantes con errores junto con el error producido.
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)
Enumeración de los participantes en una conversación de un chat
En una conversación, los participantes se pueden enumerar de forma similar a como se agregan.
Use list_participants
para recuperar los participantes de la conversación. Los comandos siguientes son opcionales:
- Use
results_per_page
para especificar el número máximo de participantes que se van a devolver por página. - Use
skip
para omitir los participantes hasta una posición especificada en la respuesta.
La enumeración de participantes devuelve como respuesta un iterador de [ChatParticipant]
.
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)
Ejecución del código
Ejecute la aplicación desde el directorio de la aplicación con el comando python
.
python start-chat.py
Código de ejemplo
Busque el código finalizado de este inicio rápido en GitHub.
Requisitos previos
Una cuenta de Azure con una suscripción activa. Cree una cuenta gratuita.
Kit de desarrollo de Java (JDK), versión 8 o posterior.
Cree un recurso de Azure Communication Services. Para más información, consulte Creación de un recurso de Azure Communication Services. Deberá registrar la cadena de conexión y del punto de conexión del recurso para esta guía de inicio rápido.
Un Token de acceso de usuario. Asegúrese de establecer el ámbito en chat y anote la cadena del token, así como la cadena user_Id. También puede usar la CLI de Azure y ejecutar el comando siguiente con la cadena de conexión para crear un usuario y un token de acceso.
az communication identity token issue --scope chat --connection-string "yourConnectionString"
Para más información, consulte Uso de la CLI de Azure para crear y administrar tokens de acceso.
Instalación
Creación de una aplicación Java
Abra la ventana de terminal o de comandos y navegue hasta el directorio en el que quiere crear la aplicación de Java. Ejecute el siguiente comando para generar el proyecto de Java a partir de la plantilla maven-archetype-quickstart.
mvn archetype:generate -DgroupId=com.communication.quickstart -DartifactId=communication-quickstart -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false
Observará que el objetivo "generar" creó un directorio con el mismo nombre que el objeto artifactId. En este directorio, el elemento src/main/java directory
contiene el código fuente del proyecto, el directorio src/test/java
contiene el origen de la prueba y el archivo pom.xml es el modelo de objetos del proyecto o POM.
Actualice el archivo POM de la aplicación para usar Java 8 o posterior:
<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>
Adición de las referencias de paquete para el SDK de chat
En el archivo POM, haga referencia al paquete azure-communication-chat
con las API de 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>
Para la autenticación, el cliente debe hacer referencia al paquete 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>
Modelo de objetos
Las siguientes clases e interfaces controlan algunas de las características principales de Chat SDK de Azure Communication Services para Java.
Nombre | Descripción |
---|---|
ChatClient | Esta clase es necesaria para la funcionalidad de chat. Cree una instancia de esta con la información de suscripción y úsela para crear, obtener y eliminar subprocesos. |
ChatAsyncClient | Esta clase es necesaria para la funcionalidad de chat asincrónica. Cree una instancia de esta con la información de suscripción y úsela para crear, obtener y eliminar subprocesos. |
ChatThreadClient | Esta clase es necesaria para la funcionalidad de subproceso de chat. Obtiene una instancia de a través de la clase ChatClient y la usa para enviar, recibir, actualizar o eliminar mensajes, agregar, quitar u obtener usuarios, enviar notificaciones de escritura y confirmaciones de lectura. |
ChatThreadAsyncClient | Esta clase es necesaria para la funcionalidad de subproceso de chat asincrónica. Obtiene una instancia de a través de la clase ChatAsyncClient y la usa para enviar, recibir, actualizar o eliminar mensajes, agregar, quitar u obtener usuarios, enviar notificaciones de escritura y confirmaciones de lectura. |
Creación de un cliente de chat
Para crear un cliente de chat, usará el punto de conexión de Communication Services y el token de acceso que se generó como parte de los pasos de requisitos previos. Los tokens de acceso de usuario permiten compilar aplicaciones cliente que se autentiquen directamente en Azure Communication Services. Después de generar estos tokens en el servidor, vuelva a pasarlos a un dispositivo cliente. Debe usar la clase CommunicationTokenCredential del SDK común para pasar el token al cliente de chat.
Más información sobre la arquitectura del chat.
Al agregar las instrucciones de importación, asegúrese de agregar solo las importaciones de los espacios de nombres com.azure.communication.chat y com.azure.communication.chat.models, y no del espacio de nombres com.azure.communication.chat.implementation. En el archivo App.java que se generó a través de Maven, puede usar el código siguiente para empezar con:
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();
}
}
Inicio de un subproceso de chat
Use el método createChatThread
para crear un subproceso de chat.
createChatThreadOptions
se usa para describir la solicitud de subproceso.
- Use el parámetro
topic
del constructor para proporcionar un tema a este chat. El tema puede actualizarse después de crear la conversación de chat mediante la funciónUpdateThread
. - Use
participants
para enumerar los participantes de la conversación que se van a agregar a la misma.ChatParticipant
toma el usuario que ha creado en el inicio rápido de Token de acceso de usuario.
CreateChatThreadResult
es la respuesta devuelta por la creación de una conversación de chat.
Contiene un método getChatThread()
que devuelve el objeto ChatThread
que se puede utilizar para obtener el cliente de la conversación de la que se puede obtener ChatThreadClient
para realizar operaciones en la conversación creada: agregar participantes, enviar mensajes, etc. El objeto ChatThread
también contiene el método getId()
que recupera el identificador único de la conversación.
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();
Lista de las conversaciones de chat
Utilice el método listChatThreads
para recuperar una lista de las conversaciones de chat existentes.
PagedIterable<ChatThreadItem> chatThreads = chatClient.listChatThreads();
chatThreads.forEach(chatThread -> {
System.out.printf("ChatThread id is %s.\n", chatThread.getId());
});
Obtención de un cliente de subproceso de chat
El método getChatThreadClient
devuelve un cliente de subproceso para un subproceso que ya existe. Se puede usar para realizar operaciones en la conversación creada: agregar participantes, enviar un mensaje, etc. chatThreadId
es el identificador único de la conversación del chat existente.
ChatThreadClient chatThreadClient = chatClient.getChatThreadClient(chatThreadId);
Envío de un mensaje a un subproceso de chat
Utilice el método sendMessage
para enviar un mensaje al subproceso creado, identificado mediante chatThreadId.
sendChatMessageOptions
se utiliza para describir la solicitud del mensaje de chat.
- Utilice
content
para proporcionar el contenido del mensaje de chat. - Utilice
type
usa para especificar el tipo de contenido del mensaje de chat, texto o HTML. - Utilice
senderDisplayName
para especificar el nombre para mostrar del remitente. - Opcionalmente, use
metadata
para incluir los datos adicionales que quiera enviar con el mensaje. Este campo proporciona un mecanismo para que los desarrolladores amplíen la funcionalidad de los mensajes de chat y agreguen información personalizada para su caso de uso. Por ejemplo, al compartir un vínculo de archivo en el mensaje, es posible que quiera agregarhasAttachment:true
en los metadatos para que la aplicación del destinatario pueda analizarlo y mostrarlo en consecuencia.
La respuesta sendChatMessageResult
contiene un id
, que es el identificador único del mensaje.
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();
Recepción de mensajes de chat de un subproceso de chat
También puede recuperar mensajes de chat mediante el sondeo del método listMessages
en el cliente de subproceso de chat a intervalos especificados.
chatThreadClient.listMessages().forEach(message -> {
System.out.printf("Message id is %s.\n", message.getId());
});
listMessages
devuelve la versión más reciente del mensaje, incluidas las modificaciones o eliminaciones que se han producido en este mediante .editMessage()
y .deleteMessage()
. En el caso de los mensajes eliminados, chatMessage.getDeletedOn()
devuelve un valor de fecha y hora que indica cuándo se eliminó el mensaje. En el caso de los mensajes editados, chatMessage.getEditedOn()
devuelve un valor de fecha y hora que indica cuándo se editó el mensaje. Es posible acceder a la hora original de creación del mensaje mediante chatMessage.getCreatedOn()
y se puede usar para ordenar los mensajes.
Obtenga más información sobre los tipos de mensaje aquí: Tipos de mensajes.
Envío de confirmación de lectura
Puede usar el método sendReadReceipt
para publicar un evento de confirmación de lectura en un subproceso de chat en nombre de un usuario.
chatMessageId
es el identificador único del mensaje de chat que se leyó.
String chatMessageId = message.getId();
chatThreadClient.sendReadReceipt(chatMessageId);
Mostrar participantes del chat
Use listParticipants
para recuperar una colección paginada que contenga los participantes del subproceso de chat identificado por chatThreadId.
PagedIterable<ChatParticipant> chatParticipantsResponse = chatThreadClient.listParticipants();
chatParticipantsResponse.forEach(chatParticipant -> {
System.out.printf("Participant id is %s.\n", ((CommunicationUserIdentifier) chatParticipant.getCommunicationIdentifier()).getId());
});
Adición de un usuario como participante a la conversación del chat
Una vez que se crea un subproceso de chat, puede agregar y quitar usuarios de este. Al agregar usuarios, les concede acceso para enviar mensajes a la conversación del chat, y agregar o quitar otros participantes. Deberá empezar por obtener un token de acceso y una identidad nuevos para ese usuario. Antes de llamar al método addParticipants, asegúrese de que ha adquirido un token de acceso y una identidad nuevos para ese usuario. El usuario necesitará ese token de acceso para poder inicializar su cliente de chat.
Utilice el método addParticipants
para agregar participantes a la conversación.
communicationIdentifier
es obligatorio y es el elemento CommunicationIdentifier que creó mediante CommunicationIdentityClient en el inicio rápido Token de acceso de usuario.displayName
es opcional y es el nombre para mostrar del participante de la conversación.shareHistoryTime
es opcional y es la hora a partir de la cual el historial de chat se compartió con el participante. Para compartir el historial desde el inicio del subproceso de chat, establezca esta propiedad en cualquier fecha igual o anterior a la hora de creación del subproceso. Para no compartir ningún historial anterior a la hora en que se agregó el participante, establézcala en la fecha actual. Para compartir el historial parcialmente, establezca la opción en la fecha necesaria.
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);
Ejecución del código
Navegue hasta el directorio que contiene el archivo pom.xml y compile el proyecto mediante el siguiente comando mvn
.
mvn compile
A continuación, compile el paquete.
mvn package
Ejecute el siguiente comando mvn
para ejecutar la aplicación.
mvn exec:java -Dexec.mainClass="com.communication.quickstart.App" -Dexec.cleanupDaemonThreads=false
Código de ejemplo
Busque el código finalizado de este inicio rápido en GitHub.
Requisitos previos
Antes de comenzar, compruebe lo siguiente:
Cree de una cuenta de Azure con una suscripción activa. Para más información, consulte Creación de una cuenta gratuita.
Instale Android Studio. Lo usaremos para crear una aplicación de Android a fin de que el inicio rápido instale las dependencias.
Cree un recurso de Azure Communication Services. Para más información, consulte Creación de un recurso de Azure Communication Services. Deberá registrar la cadena de conexión y del punto de conexión del recurso para esta guía de inicio rápido.
Cree dos usuarios de Communication Services y emítales un token de acceso de usuario. Asegúrese de establecer el ámbito en el chat y anote la cadena del token, así como la cadena user_Id. En este inicio rápido, se creará una conversación con un participante inicial y, después, se agregará un segundo participante a esta. También puede usar la CLI de Azure y ejecutar el comando siguiente con la cadena de conexión para crear un usuario y un token de acceso.
az communication identity token issue --scope chat --connection-string "yourConnectionString"
Para más información, consulte Uso de la CLI de Azure para crear y administrar tokens de acceso.
Instalación
Creación de una nueva aplicación de Android
- Abra Android Studio y seleccione
Create a new project
. - En la ventana siguiente, seleccione
Empty Activity
como plantilla del proyecto. - Al elegir las opciones, escriba
ChatQuickstart
como nombre de proyecto. - Haga clic en Siguiente y elija el directorio en el que desea que se cree el proyecto.
Instalación de las bibliotecas
Usaremos Gradle para instalar las dependencias de Communication Services necesarias. Desde la línea de comandos, vaya al directorio raíz del proyecto ChatQuickstart
. Abra el archivo build.gradle de la aplicación y agregue las siguientes dependencias en el destino ChatQuickstart
:
implementation 'com.azure.android:azure-communication-common:' + $azureCommunicationCommonVersion
implementation 'com.azure.android:azure-communication-chat:' + $azureCommunicationChatVersion
implementation 'org.slf4j:slf4j-log4j12:1.7.29'
Consulte https://search.maven.org/artifact/com.azure.android/azure-communication-common y https://search.maven.org/artifact/com.azure.android/azure-communication-chat para obtener los números de versión más recientes.
Exclusión de metarchivos en las opciones de empaquetado del archivo build.gradle raíz
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")
}
}
(Opción alternativa) Para instalar bibliotecas a través de Maven
Para importar la biblioteca en su proyecto mediante el sistema de compilación Maven, agréguela a la sección dependencies
del archivo pom.xml
de la aplicación. Para ello, especifique su identificador de artefacto y la versión que quiere usar:
<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>
Configuración de Azure Functions
Consulte Integración de Azure Functions para más información. Se recomienda la integración con Azure Functions para evitar codificar de forma rígida los parámetros de la aplicación.
Configuración de las constantes de la aplicación:
Cree una clase ApplicationConstants
que almacene todas las constantes de la aplicación:
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;
}
Configuración de los marcadores de posición
Abra y edite el archivo MainActivity.java
. En este inicio rápido, agregaremos el código a MainActivity
y veremos la salida en la consola. En este inicio rápido, no se aborda la creación de una interfaz de usuario. En la parte superior del archivo, importe Azure Communication Common
y Azure Communication Chat
, y otras bibliotecas del sistema:
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;
Copie el código siguiente en la clase MainActivity
del archivo MainActivity.java
:
private ChatAsyncClient chatAsyncClient;
private void log(String msg) {
Log.i(TAG, 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());
}
}
Inicialización de los parámetros de la aplicación
Nota:
Se debe agregar la inicialización de ApplicationConstants
a MainActivity.java
si se cumple cualquiera de las condiciones siguientes: 1. La característica de notificación de inserción NO está habilitada. 2. La versión de la biblioteca de chat de Azure Communication Services para Android es < "2.0.0". De lo contrario, consulte el paso 11 en Notificaciones de inserción en Android. Consulte la aplicación de ejemplo de la versión del SDK que está consumiendo como referencia.
Se devuelven ACS_ENDPOINT
, FIRST_USER_ID
y FIRST_USER_ACCESS_TOKEN
al llamar a la función de Azure. Consulte Integración de Azure Functions para más información. Usamos la respuesta de la llamada a la función de Azure para inicializar la lista de parámetros:
ACS_ENDPOINT
: punto de conexión del recurso de Communication Services.FIRST_USER_ID
ySECOND_USER_ID
: identificadores de usuario válidos de Communication Services generados por el recurso de Communication Services.FIRST_USER_ACCESS_TOKEN
: token de acceso de Communication Services para<FIRST_USER_ID>
.
Bloque de código para inicializar los parámetros de la aplicación mediante una llamada a la función de 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);
}
Creación de un cliente de chat
Reemplace el comentario <CREATE A CHAT CLIENT>
con el código siguiente (coloque las instrucciones de importación en la parte superior del archivo):
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();
Modelo de objetos
Las siguientes clases e interfaces controlan algunas de las características principales de Chat SDK de Azure Communication Services para JavaScript.
Nombre | Descripción |
---|---|
ChatClient/ChatAsyncClient | Esta clase es necesaria para la funcionalidad de chat. Cree una instancia de ella con la información de la suscripción y úsela para crear, obtener y eliminar conversaciones, y para suscribirse a eventos de chat. |
ChatThreadClient/ChatThreadAsyncClient | Esta clase es necesaria para la funcionalidad de subproceso de chat. Obtiene una instancia de a través de la clase ChatClient y la usa para enviar, recibir, actualizar o eliminar mensajes, agregar, quitar u obtener usuarios, enviar notificaciones de escritura y confirmaciones de lectura. |
Inicio de un subproceso de chat
Ahora usaremos ChatAsyncClient
para crear una conversación con un usuario inicial.
Reemplace el comentario <CREATE A CHAT THREAD>
por el código siguiente:
// 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();
Obtención de un cliente de subproceso de chat
Ahora que hemos creado una conversación de chat, obtendremos un elemento ChatThreadAsyncClient
para realizar operaciones en la conversación. Reemplace el comentario <CREATE A CHAT THREAD CLIENT>
por el código siguiente:
ChatThreadAsyncClient chatThreadAsyncClient = new ChatThreadClientBuilder()
.endpoint(endpoint)
.credential(new CommunicationTokenCredential(firstUserAccessToken))
.addPolicy(new UserAgentPolicy(APPLICATION_ID, SDK_NAME, sdkVersion))
.chatThreadId(threadId)
.buildAsyncClient();
Envío de un mensaje a un subproceso de chat
Ahora se enviará un mensaje a ese subproceso.
Reemplace el comentario <SEND A MESSAGE>
por el código siguiente:
// 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();
Recepción de mensajes de chat de un subproceso de chat
Notificaciones en tiempo real
Con la señalización en tiempo real, puede suscribirse a nuevos mensajes entrantes y actualizar los mensajes actuales en la memoria en consecuencia. Azure Communication Services admite una lista de eventos a los que se puede suscribir.
Reemplace el comentario <RECEIVE CHAT MESSAGES>
con el código siguiente (coloque las instrucciones de importación en la parte superior del archivo):
// 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
});
Importante
Problema conocido: al usar Android Chat y Calling SDK juntos en la misma aplicación, la característica de notificaciones en tiempo real de Chat SDK no funciona. Es posible que se produzca un problema de resolución de dependencias. Mientras se trabaja en una solución, para desactivar la característica de notificaciones en tiempo real, agregue la siguiente información de dependencia en el archivo build.gradle de la aplicación y sondee la API GetMessages para que muestre los mensajes entrantes a los usuarios.
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'
Tenga en cuenta que con la actualización anterior, si la aplicación intenta tocar cualquiera de las API de notificación como chatAsyncClient.startRealtimeNotifications()
o chatAsyncClient.addEventHandler()
, se producirá un error en tiempo de ejecución.
Notificaciones de inserción
Consulte las notificaciones push de Android para obtener más información.
Adición de un usuario como miembro a la conversación del chat
Reemplace el comentario <ADD A USER>
por el código siguiente:
// 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);
Enumeración de usuarios en una conversación
Reemplace el comentario <LIST USERS>
con el código siguiente (coloque las instrucciones import en la parte superior del archivo):
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
});
Eliminación de un usuario de un subproceso de chat
Ahora se eliminará el segundo usuario del subproceso.
Reemplace el comentario <REMOVE A USER>
por el código siguiente:
// Using the unique ID of the participant.
chatThreadAsyncClient.removeParticipant(new CommunicationUserIdentifier(secondUserId)).get();
Envío de una notificación de escritura
Reemplace el comentario <SEND A TYPING NOTIFICATION>
por el código siguiente:
chatThreadAsyncClient.sendTypingNotification().get();
Envío de una confirmación de lectura
Se enviará la confirmación de lectura del mensaje enviado anteriormente.
Reemplace el comentario <SEND A READ RECEIPT>
por el código siguiente:
chatThreadAsyncClient.sendReadReceipt(chatMessageId).get();
Enumeración de las confirmaciones de lectura
Reemplace el comentario <READ RECEIPTS>
por el código siguiente:
// 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
});
Ejecución del código
En Android Studio, presione el botón Ejecutar para compilar y ejecutar el proyecto. En la consola, puede ver la salida del código y la salida del registrador de ChatClient.
Código de ejemplo
Busque el código finalizado de este inicio rápido en GitHub.
Requisitos previos
Antes de comenzar, compruebe lo siguiente:
Cree de una cuenta de Azure con una suscripción activa. Para más información, consulte Creación de una cuenta gratuita.
Instalar Visual Studio
Cree un recurso de Azure Communication Services. Para más información, consulte Creación de un recurso de Azure Communication Services. Deberá registrar la cadena de conexión y del punto de conexión del recurso para esta guía de inicio rápido.
Un Token de acceso de usuario. Asegúrese de establecer el ámbito en chat y anote la cadena del token, así como la cadena user_Id. También puede usar la CLI de Azure y ejecutar el comando siguiente con la cadena de conexión para crear un usuario y un token de acceso.
az communication identity token issue --scope chat --connection-string "yourConnectionString"
Para más información, consulte Uso de la CLI de Azure para crear y administrar tokens de acceso.
Instalación
Creación de una aplicación de C#
En una ventana de consola (por ejemplo, cmd, PowerShell o Bash), use el comando dotnet new
para crear una nueva aplicación de consola con el nombre ChatQuickstart
. Este comando crea un sencillo proyecto "Hola mundo" de C# con un solo archivo de origen: Program.cs.
dotnet new console -o ChatQuickstart
Cambie el directorio a la carpeta de la aplicación recién creada y use el comando dotnet build
para compilar la aplicación.
cd ChatQuickstart
dotnet build
Instalar el paquete
Instalación de Chat SDK de Azure Communication Services para .NET
dotnet add package Azure.Communication.Chat
Modelo de objetos
Las siguientes clases controlan algunas de las características principales de Chat SDK de Azure Communication Services para C#.
Nombre | Descripción |
---|---|
ChatClient | Esta clase es necesaria para la funcionalidad de chat. Cree una instancia de esta con la información de suscripción y úsela para crear, obtener y eliminar subprocesos. |
ChatThreadClient | Esta clase es necesaria para la funcionalidad de subproceso de chat. Obtiene una instancia a través de la clase ChatClient y la usa para enviar, recibir, actualizar o eliminar mensajes, agregar, quitar u obtener participantes, enviar notificaciones de escritura y confirmaciones de lectura. |
Creación de un cliente de chat
Para crear un cliente de chat, usará el punto de conexión de Communication Services y el token de acceso que se generó como parte de los pasos de requisitos previos. Debe usar la clase CommunicationIdentityClient
de Identity SDK para crear un usuario y emitir un token para pasarlo al cliente de chat.
Obtenga más información sobre los tokens de acceso de usuario.
Este inicio rápido no habla de la creación de un nivel de servicio para administrar tokens para la aplicación de chat, aunque se recomienda. Más información sobre la arquitectura del chat.
Copie los siguientes fragmentos de código y péguelos en el archivo de código fuente: 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);
}
}
}
Inicio de un subproceso de chat
Use el método createChatThread
en chatClient para crear una conversación de chat.
- Use
topic
para proporcionar un tema a este chat; el tema puede actualizarse después de crear el subproceso de chat mediante la funciónUpdateTopic
. - Utilice la propiedad
participants
para pasar una lista de objetosChatParticipant
que se van a agregar al subproceso de chat. El objetoChatParticipant
se inicializó con un objetoCommunicationIdentifier
. El objetoCommunicationIdentifier
puede ser de tipoCommunicationUserIdentifier
,MicrosoftTeamsUserIdentifier
oPhoneNumberIdentifier
. Por ejemplo, para obtener un objetoCommunicationIdentifier
, deberá pasar un identificador de acceso creado siguiendo las instrucciones de Creación de un usuario
El objeto de respuesta del método createChatThread
contiene los detalles chatThread
. Para interactuar con las operaciones de conversaciones de chat, como agregar participantes, enviar un mensaje, eliminar un mensaje, etc., es necesario crear una instancia del cliente chatThreadClient
con el método GetChatThreadClient
en el cliente 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;
Obtención de un cliente de subproceso de chat
El método GetChatThreadClient
devuelve un cliente de subproceso para un subproceso que ya existe. Se puede usar para realizar operaciones en el subproceso creado: agregar miembros, enviar un mensaje, etc. thread_id es el id. único del subproceso de chat existente.
string threadId = "<THREAD_ID>";
ChatThreadClient chatThreadClient = chatClient.GetChatThreadClient(threadId: threadId);
Lista de todas las conversaciones de chat
Use GetChatThreads
para recuperar todas las conversaciones de chat de las que forma parte el usuario.
AsyncPageable<ChatThreadItem> chatThreadItems = chatClient.GetChatThreadsAsync();
await foreach (ChatThreadItem chatThreadItem in chatThreadItems)
{
Console.WriteLine($"{ chatThreadItem.Id}");
}
Envío de un mensaje a un subproceso de chat
Utilice SendMessage
para enviar un mensaje a una conversación.
- Utilice
content
para proporcionar el contenido del mensaje; es obligatorio. - Utilice
type
para indicar el tipo de contenido del mensaje, como "text" o "html". Si no se especifica, se establecerá "text". - Utilice
senderDisplayName
para especificar el nombre para mostrar del remitente. Si no se especifica, se establecerá una cadena vacía. - Opcionalmente, use
metadata
para incluir los datos adicionales que quiera enviar con el mensaje. Este campo proporciona un mecanismo para que los desarrolladores amplíen la funcionalidad de los mensajes de chat y agreguen información personalizada para su caso de uso. Por ejemplo, al compartir un vínculo de archivo en el mensaje, es posible que quiera agregar "hasAttachment:true" en los metadatos para que la aplicación del destinatario pueda analizarlo y mostrarlo en consecuencia.
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;
Recepción de mensajes de chat de un subproceso de chat
También puede recuperar mensajes de chat mediante el sondeo del método GetMessages
en el cliente de subproceso de chat a intervalos especificados.
AsyncPageable<ChatMessage> allMessages = chatThreadClient.GetMessagesAsync();
await foreach (ChatMessage message in allMessages)
{
Console.WriteLine($"{message.Id}:{message.Content.Message}");
}
GetMessages
toma un parámetro DateTimeOffset
opcional. Si se especifica ese desplazamiento, recibirá los mensajes recibidos, actualizados o eliminados posteriormente. Tenga en cuenta que los mensajes recibidos antes de la hora de desplazamiento, pero editados o eliminados posteriormente, también se devolverán.
GetMessages
devuelve la versión más reciente del mensaje, incluidas las modificaciones o eliminaciones que se han producido en este mediante UpdateMessage
y DeleteMessage
. En el caso de los mensajes eliminados, chatMessage.DeletedOn
devuelve un valor de fecha y hora que indica cuándo se eliminó el mensaje. En el caso de los mensajes editados, chatMessage.EditedOn
devuelve un valor de fecha y hora que indica cuándo se editó el mensaje. Es posible acceder a la hora original de creación del mensaje mediante chatMessage.CreatedOn
y se puede usar para ordenar los mensajes.
GetMessages
devuelve distintos tipos de mensajes que se pueden identificar mediante chatMessage.Type
. Estos tipos son:
Text
: mensaje de chat normal enviado por un miembro del subproceso.Html
: un mensaje de texto con formato. Tenga en cuenta que los usuarios de Communication Services actualmente no pueden enviar mensajes de texto enriquecido. Este tipo de mensaje es compatible con los mensajes enviados desde usuarios a de Teams a usuarios de Communication Services en escenarios de interoperabilidad de Teams.TopicUpdated
: mensaje del sistema que indica que el tema se ha actualizado. (solo lectura).ParticipantAdded
: mensaje del sistema que indica que se han agregado uno o varios participantes a la conversación del chat. (solo lectura).ParticipantRemoved
: mensaje del sistema que indica que se ha eliminado un miembro de la conversación del chat.
Para obtener más información, consulte Tipos de mensajes.
Adición de un usuario como miembro a la conversación del chat
Una vez que se crea un subproceso, puede agregar y quitar usuarios de este. Al agregar usuarios, les concede acceso para poder enviar mensajes a la conversación, y agregar o quitar otros participantes. Antes de llamar a AddParticipants
, asegúrese de que ha adquirido un token de acceso y una identidad nuevos para ese usuario. El usuario necesitará ese token de acceso para poder inicializar su cliente de chat.
Use AddParticipants
para agregar uno o varios participantes a la conversación de chat. A continuación se indican los atributos admitidos para cada participante de la conversación:
communicationUser
es obligatorio y es la identidad del participante de la conversación.displayName
es opcional y es el nombre para mostrar del participante de la conversación.shareHistoryTime
es opcional y es la hora a partir de la cual el historial de chat se compartió con el participante.
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);
Obtención de los participantes de la conversación
Use GetParticipants
para recuperar los participantes de la conversación de chat.
AsyncPageable<ChatParticipant> allParticipants = chatThreadClient.GetParticipantsAsync();
await foreach (ChatParticipant participant in allParticipants)
{
Console.WriteLine($"{((CommunicationUserIdentifier)participant.User).Id}:{participant.DisplayName}:{participant.ShareHistoryTime}");
}
Envío de confirmación de lectura
Use SendReadReceipt
para notificar a otros participantes que el usuario ha leído el mensaje.
await chatThreadClient.SendReadReceiptAsync(messageId: messageId);
Ejecución del código
Ejecute la aplicación desde el directorio de la aplicación con el comando dotnet run
.
dotnet run
Código de ejemplo
Busque el código finalizado de este inicio rápido en GitHub.
Requisitos previos
Antes de comenzar, compruebe lo siguiente:
Cree de una cuenta de Azure con una suscripción activa. Para más información, consulte Creación de una cuenta gratuita.
Instale Xcode y CocoaPods. Va a usar Xcode para crear una aplicación iOS para el inicio rápido y Cocoapods para instalar las dependencias.
Cree un recurso de Azure Communication Services. Para más información, consulte Inicio rápido: Creación y administración de recursos de Communication Services. Deberá registrar la cadena de conexión y del punto de conexión del recurso para esta guía de inicio rápido.
Cree dos usuarios de Azure Communication Services y emítales un token de acceso de usuario. Asegúrese de establecer el ámbito en chat y anote la cadena del token, así como la cadena user_Id. En esta guía de inicio rápido, se creará una conversación con un participante inicial y, después, se agregará un segundo participante a esta. También puede usar la CLI de Azure y ejecutar el comando siguiente con la cadena de conexión para crear un usuario y un token de acceso.
az communication identity token issue --scope chat --connection-string "yourConnectionString"
Para más información, consulte Uso de la CLI de Azure para crear y administrar tokens de acceso.
Instalación
Creación de una aplicación iOS
Abra Xcode y seleccione Create a new Xcode project (Crear un nuevo proyecto en Xcode). A continuación, seleccione iOS para la plataforma y App (Aplicación) para la plantilla.
Para el nombre del proyecto, escriba ChatQuickstart. A continuación, seleccione Storyboard como interfaz, UIKit App Delegate como ciclo de vida y Swift como lenguaje.
Seleccione Next (Siguiente) y elija el directorio en el que desea que se cree el proyecto.
Instalación de las bibliotecas
Utilice Cocoapods para instalar las dependencias de Communication Services necesarias.
Desde la línea de comandos, vaya al directorio raíz del proyecto de iOS ChatQuickstart
. Cree un archivo Podfile con el siguiente comando: pod init
.
Abra el archivo Podfile y agregue las siguientes dependencias al destino ChatQuickstart
:
pod 'AzureCommunicationChat', '~> 1.3.6'
Instale las dependencias con el comando siguiente: pod install
. Tenga en cuenta que esto también crea un área de trabajo de Xcode.
Después de ejecutar pod install
, vuelva a abrir el proyecto en Xcode; para ello, seleccione el área .xcworkspace
recién creada.
Configuración de los marcadores de posición
Abra el área de trabajo ChatQuickstart.xcworkspace
en Xcode y, a continuación, abra ViewController.swift
.
En este inicio rápido, va a agregar el código a viewController
y verá la salida en la consola de Xcode. En este inicio rápido no se aborda la creación de una interfaz de usuario en iOS.
Al principio de viewController.swift
, importe las bibliotecas AzureCommunication
y AzureCommunicationChat
:
import AzureCommunicationCommon
import AzureCommunicationChat
Copie el código siguiente en el método 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)")
}
}
}
Con fines de demostración, usaremos un semáforo para sincronizar el código. En los pasos siguientes, va a reemplazar los marcadores de posición por código de ejemplo mediante la biblioteca de chat de Azure Communication Services.
Creación de un cliente de chat
Para crear un cliente de chat, usará el punto de conexión de Communication Services y el token de acceso que se generó como parte de los pasos de requisitos previos.
Obtenga más información sobre los tokens de acceso de usuario.
Este inicio rápido no habla de la creación de un nivel de servicio para administrar tokens para la aplicación de chat, aunque se recomienda. Más información sobre la arquitectura del chat.
Reemplace el comentario <CREATE A CHAT CLIENT>
por el fragmento de código siguiente:
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
)
Reemplace <ACS_RESOURCE_ENDPOINT>
por el punto de conexión del recurso de Azure Communication Services. Reemplace <ACCESS_TOKEN>
por un token de acceso de Communication Services válido.
Modelo de objetos
Las siguientes clases e interfaces controlan algunas de las características principales de Chat SDK de Azure Communication Services para iOS.
Nombre | Descripción |
---|---|
ChatClient |
Esta clase es necesaria para la funcionalidad de chat. Cree una instancia de ella con la información de la suscripción y úsela para crear, obtener y eliminar conversaciones, y para suscribirse a eventos de chat. |
ChatThreadClient |
Esta clase es necesaria para la funcionalidad de conversación de chat. Obtenga una instancia mediante ChatClient y úsela para enviar, recibir, actualizar y eliminar mensajes. También puede usarla para agregar, quitar y obtener usuarios, y enviar notificaciones de escritura y confirmaciones de lectura. |
Inicio de un subproceso de chat
CreateChatThreadResult
es la respuesta devuelta por la creación de una conversación de chat.
Contiene una propiedad chatThread
que es el objeto ChatThreadProperties
. Este objeto contiene el valor threadId que se puede usar para obtener un ChatThreadClient
para realizar operaciones en el subproceso creado: agregar participantes, enviar mensajes, etc.
Reemplace el comentario <CREATE A CHAT THREAD>
por el fragmento de código siguiente:
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()
Reemplace <USER_ID>
por un identificador de usuario de Communication Services válido.
Aquí va a usar un semáforo para esperar al controlador de finalización antes de continuar. En pasos posteriores, usará el elemento threadId
de la respuesta que se devuelve al controlador de finalización.
Lista de todas las conversaciones de chat
Después de crear una conversación de chat, podemos enumerar todas las conversaciones de chat mediante una llamada al método listChatThreads
en ChatClient
. Reemplace el comentario <LIST ALL CHAT THREADS>
por el código siguiente:
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()
Obtención de un cliente de subproceso de chat
El método createClient
devuelve un ChatThreadClient
para un subproceso que ya existe. Se puede usar para realizar operaciones en el subproceso creado: agregar participantes, enviar un mensaje, etc. threadId es el identificador único de la conversación del chat existente.
Reemplace el comentario <GET A CHAT THREAD CLIENT>
por el código siguiente:
let chatThreadClient = try chatClient.createClient(forThread: threadId!)
Envío de un mensaje a un subproceso de chat
Utilice el método send
para enviar un mensaje a un subproceso identificado mediante threadId.
SendChatMessageRequest
se utiliza para describir la solicitud del mensaje:
- Utilice
content
para proporcionar el contenido del mensaje de chat. - Utilice
senderDisplayName
para especificar el nombre para mostrar del remitente. - Use
type
para especificar el tipo de mensaje, como "texto" o "html". - Opcionalmente, use
metadata
para incluir los datos adicionales que quiera enviar con el mensaje. Este campo proporciona un mecanismo para que los desarrolladores amplíen la funcionalidad de los mensajes de chat y agreguen información personalizada para su caso de uso. Por ejemplo, al compartir un vínculo de archivo en el mensaje, es posible que quiera agregar "hasAttachment:true" en los metadatos para que la aplicación del destinatario pueda analizarlo y mostrarlo en consecuencia.
SendChatMessageResult
es la respuesta que se devuelve al enviar un mensaje. Contiene un identificador que es el identificador único del mensaje.
Reemplace el comentario <SEND A MESSAGE>
por el fragmento de código siguiente:
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()
Envío de una confirmación de lectura
Puede usar el método sendReadReceipt
para publicar un evento de confirmación de lectura en un subproceso de chat en nombre de un usuario.
messageId
es el identificador único del mensaje de chat que se leyó.
Reemplace el comentario <SEND A READ RECEIPT>
por el código siguiente:
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")
}
Recepción de mensajes de chat de un subproceso de chat
Con la señalización en tiempo real, puede suscribirse para escuchar nuevos mensajes entrantes y actualizar los mensajes actuales en la memoria en consecuencia. Azure Communication Services admite una lista de eventos a los que se puede suscribir.
Reemplace el comentario <RECEIVE MESSAGES>
por el código siguiente. Después de habilitar las notificaciones, pruebe a enviar nuevos mensajes para ver 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
}
})
También puede recuperar mensajes de chat mediante el sondeo del método listMessages
a intervalos especificados. Ejecute el siguiente fragmento de código de 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()
Adición de un usuario como miembro a la conversación del chat
Una vez que se crea un subproceso, puede agregar y quitar usuarios de este. Al agregar usuarios, les concede acceso para poder enviar mensajes a la conversación, y agregar o quitar otros participantes. Antes de llamar a add
, asegúrese de que ha adquirido un token de acceso y una identidad nuevos para ese usuario. El usuario necesitará ese token de acceso para poder inicializar su cliente de chat.
Use el método add
de ChatThreadClient
para agregar uno o varios participantes a la conversación de chat. A continuación se indican los atributos admitidos para cada participante de la conversación:
id
es obligatorio y es la identidad del participante de la conversación.displayName
es opcional y es el nombre para mostrar del participante de la conversación.shareHistoryTime
es opcional y es la hora a partir de la cual el historial de chat se compartió con el participante.
Reemplace el comentario <ADD A USER>
por el código siguiente:
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()
Reemplace <USER_ID>
por el identificador de usuario de Communication Services del usuario que se va a agregar.
Enumeración de usuarios en una conversación
Use el método listParticipants
para obtener todos los participantes de una conversación de chat determinada.
Reemplace el comentario <LIST USERS>
por el código siguiente:
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()
Notificaciones de inserción
Las notificaciones de inserción notifican a los clientes los mensajes entrantes de un subproceso de chat en situaciones en las que la aplicación móvil no se ejecuta en primer plano. Actualmente, el envío de notificaciones de inserción de chat con el Centro de notificaciones se admite para el SDK de IOS en la versión 1.3.0. Consulte el artículo Habilitación de notificaciones de inserción en la aplicación de chat para más información.
Ejecución del código
En Xcode, presione el botón Run (Ejecutar) para compilar y ejecutar el proyecto. En la consola, puede ver la salida del código y la salida del registrador de ChatClient.
Nota: Establezca Build Settings > Build Options > Enable Bitcode
en No
. Actualmente, el SDK de AzureCommunicationChat para iOS no admite la habilitación de bitcode, lo cual está en seguimiento en el problema de GitHub siguiente.
Código de ejemplo
Busque el código finalizado de este inicio rápido en GitHub.
Requisitos previos
Una cuenta de Azure con una suscripción activa o también puede crear una cuenta de Azure de forma gratuita.
Un recurso de Azure Communication Services activo o también puede crear un recurso de Communication Services.
Un recurso de Azure Logic Apps activo, o bien crear una aplicación lógica en blanco con el desencadenador que quiera usar. Actualmente, el conector de chat de Communication Services solo proporciona acciones, por lo que la aplicación lógica requiere un desencadenador, como mínimo.
Crear usuario
Complete estos pasos en Power Automate con el flujo de Power Automate abierto en modo de edición.
Para agregar un nuevo paso en el flujo de trabajo mediante el conector de identidad de Communication Services:
En el diseñador, en el paso en el que desee agregar la nueva acción, seleccione Nuevo paso. Como alternativa, para agregar la nueva acción entre pasos, mueva el puntero sobre la flecha entre esos pasos, seleccione el signo más (+) y seleccione Agregar una acción.
En la casilla de búsqueda Seleccionar una operación, introduzca Identidad de Communication Services. En la lista de la lista de acciones, seleccione Crear un usuario.
Escribir la cadena de conexión. Para obtener la dirección URL de la cadena de conexión en Azure Portal, vaya al recurso Azure Communication Services. En el menú de recursos, seleccione Claves y, a continuación, seleccione Cadena de conexión. Seleccione el icono Copiar para copiar la cadena de conexión.
Escriba un nombre para la conexión.
Seleccione Mostrar opciones avanzadas y, a continuación, seleccione el ámbito del token. Esta acción generará un token de acceso y su tiempo de expiración con el ámbito especificado. Esta acción también generará un identificador de usuario que es una identidad de usuario de Communication Services.
En Elemento de ámbitos de token, seleccione chat.
Seleccione Crear. Se muestran el identificador de usuario y un token de acceso.
Crear un hilo de chat
Agregue una nueva acción.
En la casilla de búsqueda Elegir una operación, introduzca Chat de Communication Services. En la lista de acciones, seleccione Crear una conversación de chat.
Escriba la dirección URL del punto de conexión de Communication Services. Para obtener la dirección URL del punto de conexión en Azure Portal, vaya al recurso Azure Communication Services. En el menú de recursos, seleccione Claves y, a continuación, seleccione Punto de conexión.
Escriba un nombre para la conexión.
Seleccione el token de acceso que se generó en la sección anterior y, a continuación, agregue una descripción del tema de conversación de chat. Agregue el usuario creado y escriba un nombre para el participante.
Envío de un mensaje
Agregue una nueva acción.
En la casilla de búsqueda Elegir una operación, introduzca Chat de Communication Services. En la lista de acciones, seleccione Enviar mensaje a la conversación de chat.
Escriba el token de acceso, el identificador de subproceso, el contenido y el nombre.
Enumerar mensajes del hilo del chat
Para comprobar que haya enviado un mensaje correctamente:
Agregue una nueva acción.
En la casilla de búsqueda Elegir una operación, introduzca Chat de Communication Services. En la lista de acciones, seleccione Mostrar mensajes de la conversación de chat.
Escriba el token de acceso y el identificador de subproceso.
Comprobación de la aplicación lógica
Para iniciar manualmente el flujo de trabajo, seleccione Ejecutar en la barra de herramientas del diseñador. El flujo de trabajo crea un usuario, emite un token de acceso para ese usuario y, a continuación, quita el token y elimina al usuario. Para obtener más información, revise Cómo ejecutar el flujo de trabajo.
Ahora, seleccione Enumerar mensajes de conversación de chat. En las salidas de la acción, busque el mensaje que se envió.
Limpieza de recursos de flujo de trabajo
Para limpiar el flujo de trabajo de la aplicación lógica y los recursos relacionados, consulte Limpieza de recursos.
Limpieza de recursos
Si quiere limpiar y quitar una suscripción a Communication Services, puede eliminar el recurso o grupo de recursos. Al eliminar el grupo de recursos, también se elimina cualquier otro recurso que esté asociado a él. Obtenga más información sobre la limpieza de recursos.
Pasos siguientes
En este tutorial, ha aprendido a hacer lo siguiente:
- Creación de un cliente de chat
- Creación de un subproceso con dos usuarios
- Envío de un mensaje al subproceso
- Recepción de mensajes de un subproceso
- Eliminación de usuarios de un subproceso
Puede que también le interese:
- Introducción a la biblioteca de la interfaz de usuario
- Obtener más información sobre los conceptos de chat.
- Familiarícese con el SDK de chat.
- Uso del Chat SDK en la aplicación React Native.