Início Rápido: Adicionar o chat ao seu aplicativo
Comece a usar os Serviços de Comunicação do Azure com o SDK de Chat dos Serviços de Comunicação para adicionar chat em tempo real ao seu aplicativo. Neste guia de início rápido, usaremos o SDK de Chat para criar conversas de chat que permitem que os usuários tenham conversas entre si. Para saber mais sobre os conceitos do Chat, acesse a documentação conceitual do chat.
Pré-requisitos
Uma conta do Azure com uma assinatura ativa. Crie uma conta gratuitamente.
Um recurso e uma cadeia de conexão ativos dos Serviços de Comunicação. Crie um recurso dos Serviços de Comunicação.
Instale a CLI do Azure.
Anote seu ponto de extremidade de recurso dos Serviços de Comunicação. É possível obter o ponto de extremidade no portal do Azure. Como alternativa, é possível encontrar a URL do ponto de extremidade na cadeia de conexão. A URL dele é aquela que vem depois de
endpoint=
e começa comhttps://
.Um token de acesso do usuário. Defina o escopo como chat e anote a cadeia de caracteres do token, bem como a cadeia de caracteres da user_id. Você também pode usar a CLI do Azure e executar o comando abaixo com a cadeia de conexão para criar um usuário e um token de acesso.
az communication identity token issue --scope chat --connection-string "yourConnectionString"
Para obter detalhes, confira Usar a CLI do Azure para criar e gerenciar tokens de acesso.
Configurando
Adicionar a extensão
Adicione a extensão dos Serviços de Comunicação do Azure para a CLI do Azure usando o comando az extension
.
az extension add --name communication
Entrar na CLI do Azure
Você precisará entrar na CLI do Azure. Para se conectar, execute o comando az login
no terminal e forneça suas credenciais.
(Opcional) Usar as operações de identidade da CLI do Azure sem transmitir um ponto de extremidade ou token de acesso
Armazenar o ponto de extremidade em uma variável de ambiente
É possível configurar a variável de ambiente AZURE_COMMUNICATION_ENDPOINT
para usar operações de chat da CLI do Azure sem precisar usar --endpoint
a fim de transmitir o ponto de extremidade. Para configurar uma variável de ambiente, abra uma janela do console e selecione o sistema operacional nas guias abaixo. Substitua <yourEndpoint>
pelo seu ponto de extremidade.
Abra uma janela do console e insira o seguinte comando:
setx AZURE_COMMUNICATION_ENDPOINT "<yourEndpoint>"
Depois de adicionar a variável de ambiente, talvez seja necessário reiniciar todos os programas em execução que precisarem ler a variável de ambiente, incluindo a janela do console. Por exemplo, se estiver usando o Visual Studio como seu editor, reinicie-o antes de executar o exemplo.
Armazenar seu token de acesso em uma variável de ambiente
É possível configurar a variável de ambiente AZURE_COMMUNICATION_ACCESS_TOKEN
para usar operações de chat da CLI do Azure sem precisar usar --access-token
para transmitir o token de acesso. Para configurar uma variável de ambiente, abra uma janela do console e selecione o sistema operacional nas guias abaixo. Substitua <yourAccessToken>
por seu token de acesso real.
Abra uma janela do console e insira o seguinte comando:
setx AZURE_COMMUNICATION_ACCESS_TOKEN "<yourAccessToken>"
Depois de adicionar a variável de ambiente, talvez seja necessário reiniciar todos os programas em execução que precisarem ler a variável de ambiente, incluindo a janela do console. Por exemplo, se estiver usando o Visual Studio como seu editor, reinicie-o antes de executar o exemplo.
Operations
Iniciar uma conversa de chat
Use o comando thread create
para criar uma conversa de chat.
az communication chat thread create --topic "<chatTopic>" --endpoint "<endpoint>" --access-token "<token>"
Se você tiver armazenado o ponto de extremidade e o token de acesso em variáveis de ambiente conforme indicado acima, não será preciso transmiti-los ao comando.
az communication chat thread create --topic "<chatTopic>"
- Use
<chatTopic>
para dar um tópico à conversa. É possível atualizar o tópico após a criação da conversa de chat usando o comandothread update-topic
. - Substitua
<endpoint>
pelo ponto de extremidade dos Serviços de Comunicação do Azure. - Substitua
<token>
pelo token de acesso obtido anteriormente por meio da execução do comandoidentity token issue
.
Atualizar o tópico de uma conversa de chat
az communication chat thread update-topic --thread "<chatThreadId>" --topic "<chatTopic>" --endpoint "<endpoint>" --access-token "<token>"
- Substitua
<chatThreadId>
pela ID da conversa de chat. - Substitua
<chatTopic>
pelo novo tópico de chat que você deseja definir. - Substitua
<endpoint>
pelo ponto de extremidade dos Serviços de Comunicação do Azure. - Substitua
<token>
pelo token de acesso obtido anteriormente por meio da execução do comandoidentity token issue
.
Listar todas as conversas de chat
O comando thread list
retorna a lista de conversas de chat de um usuário.
az communication chat thread list --start-time "<startTime>" --endpoint "<endpoint>" --access-token "<token>"
- Opcionalmente, use
<startTime>
para especificar o momento inicial a partir do qual receber mensagens de chat. - Substitua
<endpoint>
pelo ponto de extremidade dos Serviços de Comunicação do Azure. - Substitua
<token>
pelo token de acesso obtido anteriormente por meio da execução do comandoidentity token issue
.
Enviar uma mensagem para uma conversa de chat
Use o comando message send
para enviar uma mensagem para uma conversa de chat que você criou, identificada por threadId
.
az communication chat message send --thread "<chatThreadId>" --display-name "<displayName>" --content "<content>" --message-type "<messageType>" --endpoint "<endpoint>" --access-token "<token>"
- Substitua
<chatThreadId>
pela ID da conversa de chat. - Use
<content>
para fornecer o conteúdo da mensagem de chat. - Use
<messageType>
para especificar o tipo do conteúdo da mensagem. Os valores possíveis sãotext
ehtml
. Se você não especificar um valor, o padrão serátext
. - Opcionalmente, use
<displayName>
para especificar o nome de exibição do remetente. - Substitua
<endpoint>
pelo ponto de extremidade dos Serviços de Comunicação do Azure. - Substitua
<token>
pelo token de acesso obtido anteriormente por meio da execução do comandoidentity token issue
.
Listar mensagens em uma conversa de chat
O comando message list
retorna a lista de mensagens em uma conversa de chat.
az communication chat message list --thread "<chatThreadId>" --start-time "<startTime>" --endpoint "<endpoint>" --access-token "<token>"
- Substitua
<chatThreadId>
pela ID da conversa de chat. - Opcionalmente, use
<startTime>
para especificar o momento inicial a partir do qual receber mensagens de chat. - Substitua
<endpoint>
pelo ponto de extremidade dos Serviços de Comunicação do Azure. - Substitua
<token>
pelo token de acesso obtido anteriormente por meio da execução do comandoidentity token issue
.
Receber mensagens de uma conversa de chat
É possível recuperar mensagens de chat usando o comando message list
.
az communication chat message get --thread "<chatThreadId>" --message-id "<messageId>" --endpoint "<endpoint>" --access-token "<token>"
- Substitua
<chatThreadId>
pela ID da conversa de chat. - Substitua
<messageId>
pela ID da mensagem que será recuperada. - Substitua
<endpoint>
pelo ponto de extremidade dos Serviços de Comunicação do Azure. - Substitua
<token>
pelo token de acesso obtido anteriormente por meio da execução do comandoidentity token issue
.
Enviar confirmação de leitura
Use o comando message receipt send
para postar um evento de confirmação de leitura em uma conversa em nome de um usuário.
az communication chat message receipt send --thread "<chatThreadId>" --message-id "<messageId>" --endpoint "<endpoint>" --access-token "<token>"
- Substitua
<chatThreadId>
pela ID da conversa de chat. - Substitua
<messageId>
para especificar a ID da mensagem mais recente lida pelo usuário atual. - Substitua
<endpoint>
pelo ponto de extremidade dos Serviços de Comunicação do Azure. - Substitua
<token>
pelo token de acesso obtido anteriormente por meio da execução do comandoidentity token issue
.
Adicionar um usuário como participante ao thread de chat
Depois de criar uma conversa de chat, você poderá adicionar usuários a ela e removê-los dela. Ao adicionar usuários, você permite a eles acesso para enviar mensagens à conversa de chat e adicionar ou remover outros participantes. Antes de chamar o comando participant add
, verifique se você adquiriu um token de acesso e uma identidade para esse usuário.
az communication chat participant add --thread "<chatThreadId>" --user "<userId>" --display-name "<displayName>" --start-time "<startTime>" --endpoint "<endpoint>" --access-token "<token>"
- Substitua
<chatThreadId>
pela ID da conversa de chat. - Substitua
<userId>
por seu userId. - Opcionalmente, use
<displayName>
para especificar o nome de exibição do remetente. - Opcionalmente, use
<startTime>
para especificar o momento inicial a partir do qual receber mensagens de chat. - Substitua
<endpoint>
pelo ponto de extremidade dos Serviços de Comunicação do Azure. - Substitua
<token>
pelo token de acesso obtido anteriormente por meio da execução do comandoidentity token issue
.
Listar participantes do thread em um thread de chat
Assim como adicionar um participante, você também pode listar participantes de uma conversa.
Use o comando participant list
para recuperar os participantes da conversa.
az communication chat participant list --thread "<chatThreadId>" --skip "<skip>" --endpoint "<endpoint>" --access-token "<token>"
- Substitua
<chatThreadId>
pela ID da conversa de chat. - Opcionalmente, use o
<skip>
para pular participantes até uma posição especificada na resposta. - Substitua
<endpoint>
pelo ponto de extremidade dos Serviços de Comunicação do Azure. - Substitua
<token>
pelo token de acesso obtido anteriormente por meio da execução do comandoidentity token issue
.
Remover um participante de uma conversa de chat
É possível remover um participante de uma conversa de chat usando o comando 'participant remove'.
az communication chat participant remove --thread "<chatThreadId>" --user "<userId>" --endpoint "<endpoint>" --access-token "<token>"
- Substitua
<chatThreadId>
pela ID da conversa de chat. - Substitua
<userId>
pela ID de usuário que será removida da conversa de chat. - Substitua
<endpoint>
pelo ponto de extremidade dos Serviços de Comunicação do Azure. - Substitua
<token>
pelo token de acesso obtido anteriormente por meio da execução do comandoidentity token issue
.
Pré-requisitos
Antes de começar, é preciso:
Criar uma conta do Azure com uma assinatura ativa. Para obter detalhes, confira Criar uma conta gratuitamente.
Instalar as versões de LTS Ativo e de LTS de Manutenção do Node.js.
Criar um recurso dos Serviços de Comunicação do Azure. Para obter detalhes, confira Criar um recurso dos Serviços de Comunicação do Azure. Você precisará registrar o ponto de extremidade e a cadeia de conexão do recurso para este guia de início rápido.
Crie três Usuários dos Serviços de Comunicação do Azure e emita para eles um Token de Acesso do Usuário. Defina o escopo como chat e anote a cadeia de caracteres do token, bem como a cadeia de caracteres da user_id. A demonstração completa cria um thread com dois participantes iniciais e adiciona um terceiro participante ao thread. Você também pode usar a CLI do Azure e executar o comando abaixo com a cadeia de conexão para criar um usuário e um token de acesso.
az communication identity token issue --scope chat --connection-string "yourConnectionString"
Para obter detalhes, confira Usar a CLI do Azure para criar e gerenciar tokens de acesso.
Configurando
Criar um aplicativo Web
Primeiro, abra o terminal ou a janela de comando para criar um diretório para seu aplicativo e navegue até ele.
mkdir chat-quickstart && cd chat-quickstart
Execute npm init -y
para criar um arquivo package.json com as configurações padrão.
npm init -y
Instalar os pacotes
Use o comando npm install
para instalar os SDKs dos Serviços de Comunicação abaixo 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
A opção --save
lista a biblioteca como uma dependência no arquivo package.json.
Configurar o framework de aplicativos
Este guia de início rápido usa o pacote para agrupar os ativos do aplicativo. Execute o seguinte comando para instalá-lo e listá-lo como uma dependência de desenvolvimento em seu package.json:
npm install parcel --save-dev
Crie um arquivo index.html no diretório raiz do projeto. Usaremos esse arquivo como modelo para adicionar a funcionalidade de chat usando o SDK de Chat da Comunicação do Azure 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>
Crie um arquivo no diretório raiz do projeto chamado client.js para conter a lógica do aplicativo deste guia de início rápido.
Criar um cliente de chat
Para criar um cliente de chat no aplicativo Web, você usará o ponto de extremidade do Serviço de Comunicação e o token de acesso que foi gerado como parte das etapas de pré-requisito.
Os tokens de acesso do usuário permitem que você crie aplicativos cliente que se autenticam diretamente nos Serviços de Comunicação do Azure. Este guia de início rápido não abrange a criação de uma camada de serviço para gerenciar tokens no seu aplicativo de chat. Confira os conceitos de chat para obter mais informações sobre a arquitetura de chat e os tokens de acesso do usuário para obter mais informações sobre tokens de acesso.
Dentro de client.js, use o ponto de extremidade e o token de acesso no código abaixo para adicionar funcionalidade de chat usando o SDK de Chat de Comunicação do Azure 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!');
- Substitua endpointUrl pelo ponto de extremidade de recurso dos Serviços de Comunicação, confira Criar um recurso de Serviços de Comunicação do Azure se você ainda não tiver feito isso.
- Substitua userAccessToken pelo token que você emitiu.
Executar o código
Execute o comando a seguir para executar o aplicativo:
npx parcel index.html
Abra o navegador e navegue até http://localhost:1234/. No console de ferramentas para desenvolvedores do navegador, você verá o seguinte:
Azure Communication Chat client created!
Modelo de objeto
As classes e as interfaces a seguir lidam com alguns dos principais recursos do SDK de Chat dos Serviços de Comunicação do Azure para JavaScript.
Nome | Descrição |
---|---|
ChatClient | Essa classe é necessária para a funcionalidade de chat. Crie uma instância dela com suas informações de assinatura e use-a para criar, obter, excluir threads e assinar eventos de chat. |
ChatThreadClient | Essa classe é necessária para a funcionalidade de conversa de chat. Obtenha uma instância por meio de ChatClient e use-a para enviar/receber/atualizar/excluir mensagens, adicionar/remover/obter usuários e enviar notificações de digitação e confirmações de leitura. |
Iniciar uma conversa de chat
Use o método createThread
para criar uma conversa de chat.
createThreadRequest
é usado para descrever a solicitação de conversa:
- Use
topic
para fornecer um tópico para esse chat. Os tópicos podem ser atualizados após a conversa do chat ser criada usando a funçãoUpdateThread
. - Use
participants
para listar os participantes a serem adicionados ao thread de chat.
Quando resolvido, o método createChatThread
retorna um CreateChatThreadResult
. Esse modelo contém uma propriedade chatThread
na qual você pode acessar o id
do thread recém-criado. Você pode usar o id
para obter uma instância de um ChatThreadClient
. O ChatThreadClient
pode então ser usado para executar a operação dentro do thread, como enviar mensagens ou listar 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>
});
Ao atualizar a guia do navegador, você verá a seguinte mensagem no console:
Thread created: <thread_id>
Obter um cliente de conversa de chat
O método getChatThreadClient
retorna um chatThreadClient
para uma conversa que já existe. Ele pode ser usado para executar operações no thread criado: adicionar participantes, enviar mensagens etc. threadId é a ID exclusiva do thread de chat existente.
let chatThreadClient = chatClient.getChatThreadClient(threadId);
console.log(`Chat Thread client for threadId:${threadId}`);
Adicione este código no lugar do comentário <CREATE CHAT THREAD CLIENT>
em client.js, atualize a guia do navegador e verifique o console. Você verá:
Chat Thread client for threadId: <threadId>
Listar todas as conversas de chat
O método listChatThreads
retorna um PagedAsyncIterableIterator
do tipo ChatThreadItem
. Ele pode ser usado para listar todas as conversas de chat.
Um iterador de [ChatThreadItem]
é a resposta retornada pela listagem de threads
const threads = chatClient.listChatThreads();
for await (const thread of threads) {
// your code here
}
Enviar uma mensagem para uma conversa de chat
Use o método sendMessage
para enviar uma mensagem a uma conversa identificada por threadId.
sendMessageRequest
é usado para descrever a solicitação da mensagem:
- Use
content
para fornecer o conteúdo da mensagem de chat;
sendMessageOptions
é usado para descrever os parâmetros opcionais da operação:
- Use
senderDisplayName
para especificar o nome de exibição do remetente; - Use
type
para especificar o tipo de mensagem, como 'texto' ou 'html'; - Use
metadata
opcionalmente para incluir outros dados que você queira enviar junto com a mensagem. Este campo fornece um mecanismo para os desenvolvedores estenderem a funcionalidade de mensagens de chat e adicionarem informações personalizadas para o caso de uso específico. Por exemplo, ao compartilhar um link de arquivo na mensagem, pode ser interessante adicionar "hasAttachment:true" nos metadados para que o aplicativo do destinatário possa analisá-la e exibi-la de acordo.
SendChatMessageResult
é a resposta retornada do envio de uma mensagem; ela contém uma ID, que é a ID exclusiva da mensagem.
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}`);
Adicione este código no lugar do comentário <SEND MESSAGE TO A CHAT THREAD>
em client.js, atualize a guia do navegador e verifique o console.
Message sent!, message id:<number>
Receber mensagens de chat de uma conversa de chat
Com a sinalização em tempo real, você pode criar assinaturas para escutar as novas mensagens de entrada e atualizar as mensagens atuais na memória de acordo. Os Serviços de Comunicação do Azure dão suporte a uma lista de eventos que você pode assinar.
// open notifications channel
await chatClient.startRealtimeNotifications();
// subscribe to new notification
chatClient.on("chatMessageReceived", (e) => {
console.log("Notification chatMessageReceived!");
// your code here
});
Adicione este código no lugar do comentário <RECEIVE A CHAT MESSAGE FROM A CHAT THREAD>
em client.js.
Atualize a guia do navegador e você verá uma mensagem Notification chatMessageReceived
no console.
Como alternativa, você pode recuperar mensagens de chat sondando o método listMessages
em intervalos especificados.
const messages = chatThreadClient.listMessages();
for await (const message of messages) {
// your code here
}
Adicione este código no lugar do comentário <LIST MESSAGES IN A CHAT THREAD>
em client.js.
Atualize a guia e, no console, você encontrará a lista de mensagens enviadas nesse thread de chat.
listMessages
retorna diferentes tipos de mensagens, que podem ser identificadas por chatMessage.type
.
Para obter mais detalhes, confira Tipos de mensagem.
Adicionar um usuário como participante ao thread de chat
Depois que uma conversa de chat é criada, você pode adicionar e remover usuários nela. Ao adicionar usuários, você permite a eles acesso para enviar mensagens ao thread de chat e adicionar/remover outros participantes.
Antes de chamar o método addParticipants
, adquira um novo token de acesso e uma identidade para esse usuário. O usuário precisará desse token de acesso para inicializar o cliente de chat.
addParticipantsRequest
descreve o objeto de solicitação, em que participants
lista os participantes a serem adicionados ao thread de chat;
id
, obrigatório, é o identificador de comunicação a ser adicionado ao thread de chat.displayName
, opcional, é o nome de exibição do participante do thread.shareHistoryTime
, opcional, é a hora a partir da qual o histórico de chats é compartilhado com o participante. Para compartilhar o histórico desde o início da conversa de chat, defina essa propriedade como qualquer data igual ou inferior à hora de criação da conversa. Para não compartilhar nenhum histórico anterior ao momento em que o participante foi adicionado, defina-a como a data atual. Para compartilhar o histórico parcial, defina-a como a data de sua escolha.
const addParticipantsRequest =
{
participants: [
{
id: { communicationUserId: '<NEW_PARTICIPANT_USER_ID>' },
displayName: 'Jane'
}
]
};
await chatThreadClient.addParticipants(addParticipantsRequest);
Substitua NEW_PARTICIPANT_USER_ID por uma nova ID de usuário. Adicione este código no lugar do comentário <ADD NEW PARTICIPANT TO THREAD>
em client.js
Listar os usuários de uma conversa de chat
const participants = chatThreadClient.listParticipants();
for await (const participant of participants) {
// your code here
}
Adicione este código no lugar do comentário <LIST PARTICIPANTS IN A THREAD>
em client.js, atualize a guia do navegador e verifique o console. Você verá informações sobre os usuários de uma conversa.
Remover um usuário de uma conversa de chat
Assim como adicionar um participante, você pode remover participantes de um thread de chat. Para removê-los, acompanhe as IDs dos participantes que você adicionou.
Use o método removeParticipant
, em que participant
é o usuário de comunicação a ser removido da conversa.
await chatThreadClient.removeParticipant({ communicationUserId: <PARTICIPANT_ID> });
await listParticipants();
Substitua PARTICIPANT_ID por uma ID de usuário usada na etapa anterior (<NEW_PARTICIPANT_USER_ID>).
Adicione este código no lugar do comentário <REMOVE PARTICIPANT FROM THREAD>
em client.js.
Assinar o status de conexão de notificações em tempo real
Assinatura para eventos realTimeNotificationConnected
e realTimeNotificationDisconnected
permite que você saiba quando a conexão com o servidor de chamada está ativa.
// 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
});
Exemplo de código
Encontre o código finalizado para este guia de início rápido no GitHub.
Pré-requisitos
Antes de começar, é preciso:
Criar uma conta do Azure com uma assinatura ativa. Para obter detalhes, confira Criar uma conta gratuitamente.
Instale o Python 3.7+.
Criar um recurso dos Serviços de Comunicação do Azure. Para obter detalhes, confira Início Rápido: criar e gerenciar recursos dos Serviços de Comunicação. Você precisará registrar o ponto de extremidade e a cadeia de conexão do recurso para este guia de início rápido.
Um token de acesso do usuário. Defina o escopo como chat e anote a cadeia de caracteres do token, bem como a cadeia de caracteres da user_id. Você também pode usar a CLI do Azure e executar o comando abaixo com a cadeia de conexão para criar um usuário e um token de acesso.
az communication identity token issue --scope chat --connection-string "yourConnectionString"
Para obter detalhes, confira Usar a CLI do Azure para criar e gerenciar tokens de acesso.
Configurando
Criar um novo aplicativo Python
Abra a janela Comando ou o terminal para criar um diretório para o seu aplicativo e acesse-o.
mkdir chat-quickstart && cd chat-quickstart
Use um editor de texto para criar um arquivo chamado start-chat.py no diretório raiz do projeto. Adicione a estrutura do programa, incluindo um tratamento de exceções básico. Nas seções a seguir, você adicionará todo o código-fonte deste guia de início rápido a esse arquivo.
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)
Instalar o SDK
Use o seguinte comando para instalar o SDK:
pip install azure-communication-chat
Modelo de objeto
As classes e as interfaces a seguir lidam com alguns dos principais recursos do SDK de Chat dos Serviços de Comunicação do Azure para Python.
Nome | Descrição |
---|---|
ChatClient |
Essa classe é necessária para a funcionalidade de chat. Crie uma instância dela com suas informações de assinatura e use-a para criar, obter e excluir conversas. |
ChatThreadClient |
Essa classe é necessária para a funcionalidade de conversa de chat. Você obtém uma instância por meio do ChatClient e a usa para enviar, receber, atualizar ou excluir mensagens. Você também pode usá-la para adicionar, remover e obter usuários, enviar notificações de digitação e confirmações de leitura. |
Criar um cliente de chat
Para criar um cliente de chat, use o ponto de extremidade dos Serviços de Comunicação e o token de acesso gerado como parte das etapas de pré-requisito.
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>"))
Este início rápido não abrange a criação de uma camada de serviço para gerenciar tokens em seu aplicativo de chat, embora isso seja recomendado. Para obter mais informações, confira a seção "Arquitetura de chat" dos Conceitos de chat.
Iniciar uma conversa de chat
Use o método create_chat_thread
para criar uma conversa de chat.
- Use
topic
para dar um tópico à conversa. Atualize o tópico após a criação da conversa de chat usando a funçãoupdate_thread
. - Use
thread_participants
para listar oChatParticipant
a ser adicionado à conversa de chat. OChatParticipant
usa o tipoCommunicationUserIdentifier
comouser
.
CreateChatThreadResult
é o resultado retornado da criação de uma conversa. Use-o para buscar a id
da conversa de chat criada. Em seguida, essa id
pode ser usada para buscar um objeto ChatThreadClient
usando o método get_chat_thread_client
. Use ChatThreadClient
para executar outras operações de chat nessa conversa 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)
Obter um cliente de conversa de chat
O método get_chat_thread_client
retorna um cliente de conversa para uma conversa que já existe. Você pode usá-lo para executar operações na conversa criada. Por exemplo, você pode adicionar participantes e enviar mensagens. thread_id
é a ID exclusiva da conversa de chat existente.
Use ChatThreadClient
para executar outras operações de chat nessa conversa de chat.
thread_id = create_chat_thread_result.chat_thread.id
chat_thread_client = chat_client.get_chat_thread_client(thread_id)
Listar todas as conversas de chat
O método list_chat_threads
retorna um iterador do tipo ChatThreadItem
.
- Use
start_time
para especificar o ponto mais antigo no tempo e obter conversas de chat. - Use
results_per_page
para especificar o número máximo de conversas de chat retornadas por página.
Um iterador de [ChatThreadItem]
é a resposta retornada pela listagem de conversas.
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)
Enviar uma mensagem para uma conversa de chat
Use o método send_message
para enviar uma mensagem para uma conversa de chat recém-criada, identificada pela thread_id
.
- Use
content
para fornecer o conteúdo da mensagem de chat. - Use
chat_message_type
para especificar o tipo do conteúdo da mensagem. Os valores possíveis sãotext
ehtml
. Se você não especificar um valor, o padrão serátext
. - Use
sender_display_name
para especificar o nome de exibição do remetente. - Use
metadata
opcionalmente para incluir dados adicionais que você queira enviar junto com a mensagem. Este campo fornece um mecanismo para os desenvolvedores estenderem a funcionalidade de mensagens de chat e adicionarem informações personalizadas para o caso de uso específico. Por exemplo, ao compartilhar um link de arquivo na mensagem, pode ser interessante adicionar "hasAttachment:true" nos metadados para que o aplicativo do destinatário possa analisá-la e exibi-la de acordo.
SendChatMessageResult
é a resposta retornada do envio de uma mensagem. Ela contém uma ID, que é a ID exclusiva da mensagem.
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)
Receber mensagens de chat de uma conversa de chat
Recupere mensagens de chat sondando o método list_messages
em intervalos especificados.
- Use
results_per_page
para especificar o número máximo de mensagens retornadas por página. - Use
start_time
para especificar o ponto mais antigo no tempo e obter mensagens.
Um iterador de [ChatMessage]
é a resposta retornada pela listagem de mensagens.
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
retorna a última versão da mensagem, incluindo as edições ou as exclusões ocorridas na mensagem usando update_message
e delete_message
. Para as mensagens excluídas, ChatMessage.deleted_on
retorna um valor de datetime
indicando quando a mensagem foi excluída. Para as mensagens editadas, ChatMessage.edited_on
retorna um valor de datetime
indicando quando a mensagem foi editada. Acesse a hora original da criação da mensagem usando ChatMessage.created_on
, que pode ser usado para ordenar as mensagens.
list_messages
retorna diferentes tipos de mensagens, que podem ser identificadas por ChatMessage.type
.
Para obter mais informações, confira Tipos de mensagem.
Enviar confirmação de leitura
Use o método send_read_receipt
para postar um evento de confirmação de leitura em uma conversa, em nome de um usuário.
- Use
message_id
para especificar a ID da mensagem mais recente lida pelo usuário atual.
content='hello world'
send_message_result = chat_thread_client.send_message(content)
chat_thread_client.send_read_receipt(message_id=send_message_result.id)
Adicionar um usuário como participante ao thread de chat
Depois de criar uma conversa de chat, você poderá adicionar usuários a ela e removê-los dela. Ao adicionar usuários, você permite a eles acesso para enviar mensagens à conversa de chat e adicionar ou remover outros participantes. Antes de chamar o método add_participants
, adquira um novo token de acesso e uma identidade para esse usuário. O usuário precisará desse token de acesso para inicializar o cliente de chat.
Adicione um ou mais usuários à conversa de chat usando o método add_participants
, desde que um novo token de acesso e uma identidade sejam disponibilizados a todos os usuários.
Um list(tuple(ChatParticipant, CommunicationError))
é retornado. Quando o participante é adicionado com êxito, uma lista vazia é esperada. Caso você encontre um erro ao adicionar um participante, a lista é preenchida com os participantes com falha, junto com o erro encontrado.
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)
Listar participantes do thread em um thread de chat
Assim como adicionar um participante, você também pode listar participantes de uma conversa.
Use list_participants
para recuperar os participantes do thread de chat. Os dois seguintes comandos são opcionais:
- Use
results_per_page
para especificar o número máximo de participantes a serem retornados por página. - Use
skip
para ignorar os participantes até uma posição especificada na resposta.
Um iterador de [ChatParticipant]
é a resposta retornada pela listagem de participantes.
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)
Executar o código
Execute o aplicativo do seu diretório de aplicativo com o comando python
.
python start-chat.py
Exemplo de código
Encontre o código finalizado para este guia de início rápido no GitHub.
Pré-requisitos
Uma conta do Azure com uma assinatura ativa. Crie uma conta gratuitamente.
JDK (Java Development Kit) versão 8 ou superior.
Criar um recurso dos Serviços de Comunicação do Azure. Para obter detalhes, confira Criar um recurso dos Serviços de Comunicação do Azure. Você precisará registrar o ponto de extremidade e a cadeia de conexão do recurso para este guia de início rápido.
Um token de acesso do usuário. Defina o escopo como chat e anote a cadeia de caracteres do token, bem como a cadeia de caracteres da user_id. Você também pode usar a CLI do Azure e executar o comando abaixo com a cadeia de conexão para criar um usuário e um token de acesso.
az communication identity token issue --scope chat --connection-string "yourConnectionString"
Para obter detalhes, confira Usar a CLI do Azure para criar e gerenciar tokens de acesso.
Configurando
Criar um aplicativo Java
Abra o terminal ou a janela de comando e navegue até o diretório no qual você deseja criar o seu aplicativo Java. Execute o comando abaixo para gerar o projeto Java no modelo maven-archetype-quickstart.
mvn archetype:generate -DgroupId=com.communication.quickstart -DartifactId=communication-quickstart -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false
Você observará que a meta 'gerar' criou um diretório com o mesmo nome que artifactId. Nesse diretório, o src/main/java directory
contém o código-fonte do projeto, o diretório src/test/java
contém a fonte de teste e o arquivo pom.xml é o Modelo de Objeto do Projeto ou POM do projeto.
Atualize o arquivo POM do seu aplicativo para usar o Java 8 ou superior:
<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>
Adicionar as referências de pacote ao SDK de Chat
Em seu arquivo POM, referencie o pacote azure-communication-chat
com as APIs do 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 autenticação, o cliente precisa fazer referência ao pacote 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 objeto
As classes e as interfaces a seguir lidam com alguns dos principais recursos do SDK de Chat dos Serviços de Comunicação do Azure para Java.
Nome | Descrição |
---|---|
ChatClient | Essa classe é necessária para a funcionalidade de chat. Crie uma instância dela com suas informações de assinatura e use-a para criar, obter e excluir conversas. |
ChatAsyncClient | Essa classe é necessária para a funcionalidade de Chat assíncrona. Crie uma instância dela com suas informações de assinatura e use-a para criar, obter e excluir conversas. |
ChatThreadClient | Essa classe é necessária para a funcionalidade de conversa de chat. Obtenha uma instância por meio de ChatClient e use-a para enviar/receber/atualizar/excluir mensagens, adicionar/remover/obter usuários e enviar notificações de digitação e confirmações de leitura. |
ChatThreadAsyncClient | Essa classe é necessária para a funcionalidade de Conversa de Chat assíncrona. Obtenha uma instância por meio de ChatAsyncClient e use-a para enviar/receber/atualizar/excluir mensagens, adicionar/remover/obter usuários, enviar notificações de digitação e confirmações de leitura. |
Criar um cliente de chat
Para criar um cliente de chat, você usará o ponto de extremidade do Serviço de Comunicação e o token de acesso que foi gerado como parte das etapas de pré-requisito. Os tokens de acesso do usuário permitem que você crie aplicativos cliente que se autenticam diretamente nos Serviços de Comunicação do Azure. Depois de gerar esses tokens no servidor, transmita-os novamente para um dispositivo cliente. Você precisa usar a classe CommunicationTokenCredential do SDK Comum para passar o token para seu cliente de chat.
Saiba mais sobre a Arquitetura de Chat
Ao adicionar as instruções de importação, lembre-se de adicionar somente importações dos namespaces com.azure.communication.chat e com.azure.communication.chat.models, e não do namespace com.azure.communication.chat.implementation. No arquivo App.java que foi gerado pelo Maven, você pode usar o seguinte código para começar:
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();
}
}
Iniciar uma conversa de chat
Use o método createChatThread
para criar uma conversa de chat.
createChatThreadOptions
é usado para descrever a solicitação de conversa.
- Use o parâmetro
topic
do construtor para fornecer um tópico a esse chat; o tópico pode ser atualizado depois que a conversa de chat é criada por meio da funçãoUpdateThread
. - Use
participants
para listar os participantes do thread a serem adicionados a ele.ChatParticipant
usa o usuário que você criou no guia de início rápido do Token de Acesso do Usuário.
CreateChatThreadResult
é a resposta retornada pela criação de um thread de chat.
Ele contém um método getChatThread()
que retorna o objeto ChatThread
. Esse objeto pode ser usado a fim de obter o cliente da conversa do qual é possível coletar o ChatThreadClient
para executar operações na conversa criada: adicionar participantes, enviar mensagem etc. O objeto ChatThread
também contém o método getId()
que recupera a ID exclusiva da conversa.
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();
Listar threads de chat
Use o método listChatThreads
para recuperar uma lista de threads de chat existentes.
PagedIterable<ChatThreadItem> chatThreads = chatClient.listChatThreads();
chatThreads.forEach(chatThread -> {
System.out.printf("ChatThread id is %s.\n", chatThread.getId());
});
Obter um cliente de conversa de chat
O método getChatThreadClient
retorna um cliente de conversa para uma conversa que já existe. Ele pode ser usado para executar operações no thread criado: adicionar participantes, enviar mensagens etc. chatThreadId
é a ID exclusiva do thread de chat existente.
ChatThreadClient chatThreadClient = chatClient.getChatThreadClient(chatThreadId);
Enviar uma mensagem para uma conversa de chat
Use o método sendMessage
para enviar uma mensagem à conversa criada, identificada por chatThreadId.
sendChatMessageOptions
é usado para descrever a solicitação de mensagem de chat.
- Use
content
para fornecer o conteúdo da mensagem de chat. - Use
type
para especificar o tipo de conteúdo de mensagem de chat, TEXTO ou HTML. - Use
senderDisplayName
para especificar o nome de exibição do remetente. - Use
metadata
opcionalmente para incluir dados adicionais que você queira enviar junto com a mensagem. Este campo fornece um mecanismo para os desenvolvedores estenderem a funcionalidade de mensagens de chat e adicionarem informações personalizadas para o caso de uso específico. Por exemplo, ao compartilhar um link de arquivo na mensagem, é possível adicionarhasAttachment:true
nos metadados para que o aplicativo do destinatário possa analisá-lo e exibi-lo adequadamente.
A resposta sendChatMessageResult
contém um id
, que é a ID exclusiva da mensagem.
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();
Receber mensagens de chat de uma conversa de chat
Você pode recuperar mensagens de chat sondando o método listMessages
no cliente da conversa de chat em intervalos especificados.
chatThreadClient.listMessages().forEach(message -> {
System.out.printf("Message id is %s.\n", message.getId());
});
listMessages
retorna a última versão da mensagem, incluindo as edições ou as exclusões que ocorreram na mensagem usando .editMessage()
e .deleteMessage()
. Para mensagens excluídas, chatMessage.getDeletedOn()
retorna um valor datetime que indica quando a mensagem foi excluída. Para as mensagens editadas, chatMessage.getEditedOn()
retorna um datetime indicando quando a mensagem foi editada. A hora original da criação da mensagem pode ser acessada usando chatMessage.getCreatedOn()
e pode ser usada para ordenar as mensagens.
Leia mais sobre os tipos de mensagem aqui: Tipos de mensagem.
Enviar confirmação de leitura
Use o método sendReadReceipt
para postar um evento de confirmação de leitura em um thread de chat, em nome de um usuário.
chatMessageId
é a ID exclusiva da mensagem de chat lida.
String chatMessageId = message.getId();
chatThreadClient.sendReadReceipt(chatMessageId);
Listar participantes do chat
Use listParticipants
para recuperar uma coleção paginada que contém os participantes do thread 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());
});
Adicionar um usuário como participante ao thread de chat
Depois que uma conversa de chat é criada, você pode adicionar e remover usuários nela. Ao adicionar usuários, você permite a eles acesso para enviar mensagens ao thread de chat e adicionar/remover outros participantes. Você precisará começar obtendo um novo token de acesso e uma identidade para esse usuário. Antes de chamar o método addParticipants, verifique se você adquiriu um novo token de acesso e uma nova identidade para esse usuário. O usuário precisará desse token de acesso para inicializar o cliente de chat.
Use o método addParticipants
para adicionar participantes ao thread.
communicationIdentifier
, obrigatório, é o CommunicationIdentifier que você criou por CommunicationIdentityClient no início rápido do Token de Acesso do Usuário.displayName
, opcional, é o nome de exibição do participante do thread.shareHistoryTime
, opcional, é a hora a partir da qual o histórico de chats é compartilhado com o participante. Para compartilhar o histórico desde o início da conversa de chat, defina essa propriedade como qualquer data igual ou inferior à hora de criação da conversa. Para não compartilhar nenhum histórico anterior ao momento em que o participante foi adicionado, defina-a como a data atual. Para compartilhar o histórico parcial, defina-o como a data necessária.
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);
Executar o código
Navegue até o diretório que contém o arquivo pom.xml e compile o projeto usando o comando mvn
a seguir.
mvn compile
Em seguida, compile o pacote.
mvn package
Execute o comando mvn
a seguir para executar o aplicativo.
mvn exec:java -Dexec.mainClass="com.communication.quickstart.App" -Dexec.cleanupDaemonThreads=false
Exemplo de código
Encontre o código finalizado para este guia de início rápido no GitHub.
Pré-requisitos
Antes de começar, é preciso:
Criar uma conta do Azure com uma assinatura ativa. Para obter detalhes, confira Criar uma conta gratuitamente.
Instalar o Android Studio. Usaremos o Android Studio a fim de criar um aplicativo Android para o início rápido para instalar dependências.
Criar um recurso dos Serviços de Comunicação do Azure. Para obter detalhes, confira Criar um recurso dos Serviços de Comunicação do Azure. Você precisará registrar o ponto de extremidade e a cadeia de conexão do recurso para este guia de início rápido.
Crie dois Usuários dos Serviços de Comunicação e emita para eles um Token de Acesso do Usuário. Defina o escopo como chat e anote a cadeia de caracteres do token e a cadeia de caracteres da user_id. Neste guia de início rápido, criaremos um thread com um participante inicial e adicionaremos um segundo participante a ele. Você também pode usar a CLI do Azure e executar o comando abaixo com a cadeia de conexão para criar um usuário e um token de acesso.
az communication identity token issue --scope chat --connection-string "yourConnectionString"
Para obter detalhes, confira Usar a CLI do Azure para criar e gerenciar tokens de acesso.
Configurando
Criar um aplicativo Android
- Abra o Android Studio e selecione
Create a new project
. - Na próxima janela, selecione
Empty Activity
como o modelo do projeto. - Ao escolher as opções, insira
ChatQuickstart
como o nome do projeto. - Clique em avançar e escolha o diretório em que você deseja que o projeto seja criado.
Instalar as bibliotecas
Usaremos Gradle para instalar as dependências necessárias dos Serviços de Comunicação. Na linha de comando, navegue para dentro do diretório raiz do projeto ChatQuickstart
. Abra o arquivo build.gradle do aplicativo e adicione as seguintes dependências ao 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'
Confira https://search.maven.org/artifact/com.azure.android/azure-communication-common e https://search.maven.org/artifact/com.azure.android/azure-communication-chat para obter os números de versão mais recentes.
Exclua os metarquivos nas opções de empacotamento na raiz build.gradle
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")
}
}
(Alternativa) Para instalar bibliotecas por meio do Maven
Para importar a biblioteca para seu projeto usando o sistema de build do Maven, adicione-a à seção dependencies
do arquivo pom.xml
do seu aplicativo, especificando a ID de artefato e a versão que você deseja 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>
Configurar a Função do Azure
Confira a integração do Azure Functions para obter detalhes. É altamente recomendável integrar-se ao Azure Function para evitar o hard-coding dos parâmetros de aplicativo.
Configurar constantes de aplicativo:
Crie uma classe ApplicationConstants
que armazena todas as constantes de aplicativo:
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;
}
Configurar os espaços reservados
Abra e edite o arquivo MainActivity.java
. Neste guia de início rápido, adicionaremos nosso código a MainActivity
e veremos a saída no console. Este guia de início rápido não aborda a criação de uma interface do usuário. Na parte superior do arquivo, importe Azure Communication Common
, Azure Communication Chat
e as outras bibliotecas:
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 o seguinte código para a classe MainActivity
no arquivo 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());
}
}
Inicializar parâmetros de aplicativo
Observação
A inicialização ApplicationConstants
precisará ser adicionada a MainActivity.java
se QUALQUER uma das seguintes condições for atendida: 1. O recurso de notificação por push NÃO está habilitado. 2. A versão da biblioteca do Chat de Comunicação do Azure para Android é < '2.0.0'. Caso contrário, consulte a etapa 11 em notificações por push do Android. Consulte o aplicativo de exemplo da versão do SDK que você está consumindo para referência.
ACS_ENDPOINT
, FIRST_USER_ID
e FIRST_USER_ACCESS_TOKEN
são retornados da chamada ao Azure Function. Confira a integração do Azure Functions para obter detalhes. Usamos a resposta de chamar o Azure Function para inicializar a lista de parâmetros:
ACS_ENDPOINT
: o ponto de extremidade do recurso dos Serviços de Comunicação.FIRST_USER_ID
eSECOND_USER_ID
: as IDs de usuário válidas dos Serviços de Comunicação geradas pelo recurso dos Serviços de Comunicação.FIRST_USER_ACCESS_TOKEN
: o token de acesso dos Serviços de Comunicação para<FIRST_USER_ID>
.
Bloco de código para inicializar os parâmetros de aplicativo chamando a Função do 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);
}
Criar um cliente de chat
Substitua o comentário <CREATE A CHAT CLIENT>
pelo seguinte código (coloque as instruções de importação na parte superior do arquivo):
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 objeto
As classes e as interfaces a seguir lidam com alguns dos principais recursos do SDK de Chat dos Serviços de Comunicação do Azure para JavaScript.
Nome | Descrição |
---|---|
ChatClient/ChatAsyncClient | Essa classe é necessária para a funcionalidade de chat. Crie uma instância dela com suas informações de assinatura e use-a para criar, obter, excluir threads e assinar eventos de chat. |
ChatThreadClient/ChatThreadAsyncClient | Essa classe é necessária para a funcionalidade de conversa de chat. Obtenha uma instância por meio de ChatClient e use-a para enviar/receber/atualizar/excluir mensagens, adicionar/remover/obter usuários e enviar notificações de digitação e confirmações de leitura. |
Iniciar uma conversa de chat
Usaremos nosso ChatAsyncClient
para criar um thread com um usuário inicial.
Substitua o comentário <CREATE A CHAT THREAD>
pelo código a seguir:
// 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();
Obter um cliente de conversa de chat
Agora que criamos um thread de chat, obteremos um ChatThreadAsyncClient
para executar operações dentro do thread. Substitua o comentário <CREATE A CHAT THREAD CLIENT>
pelo código a seguir:
ChatThreadAsyncClient chatThreadAsyncClient = new ChatThreadClientBuilder()
.endpoint(endpoint)
.credential(new CommunicationTokenCredential(firstUserAccessToken))
.addPolicy(new UserAgentPolicy(APPLICATION_ID, SDK_NAME, sdkVersion))
.chatThreadId(threadId)
.buildAsyncClient();
Enviar uma mensagem para uma conversa de chat
Enviaremos a mensagem para essa conversa agora.
Substitua o comentário <SEND A MESSAGE>
pelo código a seguir:
// 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();
Receber mensagens de chat de uma conversa de chat
Notificações em tempo real
Com a sinalização em tempo real, você pode assinar novas mensagens de entrada e atualizar as mensagens atuais na memória de acordo. Os Serviços de Comunicação do Azure dão suporte a uma lista de eventos que você pode assinar.
Substitua o comentário <RECEIVE CHAT MESSAGES>
pelo seguinte código (coloque as instruções de importação na parte superior do arquivo):
// 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 conhecido: durante o uso conjunto do SDK de Chat e de Chamada do Android no mesmo aplicativo, o recurso de notificações em tempo real do SDK de Chat não funciona. Você poderá receber um problema de resolução de dependência. Enquanto trabalhamos em uma solução, desative o recurso de notificações em tempo real adicionando as informações a seguir de dependência ao arquivo build.gradle do aplicativo e sonde a API GetMessages para exibir as mensagens de entrada para os usuários.
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'
Observe, com a atualização acima, que se o aplicativo tentar acessar qualquer API de notificação como chatAsyncClient.startRealtimeNotifications()
ou chatAsyncClient.addEventHandler()
, haverá um erro de runtime.
Notificações por push
Confira as notificações por push do Android para obter detalhes.
Adicionar um usuário como participante ao thread de chat
Substitua o comentário <ADD A USER>
pelo código a seguir:
// 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);
Listar os usuários em um thread
Substitua o comentário <LIST USERS>
pelo seguinte código (coloque as instruções de importação na parte superior do arquivo):
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
});
Remover um usuário de uma conversa de chat
Removeremos o segundo usuário da conversa agora.
Substitua o comentário <REMOVE A USER>
pelo seguinte código:
// Using the unique ID of the participant.
chatThreadAsyncClient.removeParticipant(new CommunicationUserIdentifier(secondUserId)).get();
Enviar uma notificação de digitação
Substitua o comentário <SEND A TYPING NOTIFICATION>
pelo seguinte código:
chatThreadAsyncClient.sendTypingNotification().get();
Enviar uma confirmação de leitura
Enviaremos a confirmação de leitura para a mensagem enviada acima.
Substitua o comentário <SEND A READ RECEIPT>
pelo seguinte código:
chatThreadAsyncClient.sendReadReceipt(chatMessageId).get();
Listar confirmações de leitura
Substitua o comentário <READ RECEIPTS>
pelo seguinte código:
// 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
});
Executar o código
No Android Studio, pressione o botão Executar para criar e executar o projeto. No console, você pode exibir a saída do código e a saída do agente do ChatClient.
Exemplo de código
Encontre o código finalizado para este guia de início rápido no GitHub.
Pré-requisitos
Antes de começar, é preciso:
Criar uma conta do Azure com uma assinatura ativa. Para obter detalhes, confira Criar uma conta gratuitamente.
Instalar o Visual Studio
Criar um recurso dos Serviços de Comunicação do Azure. Para obter detalhes, confira Criar um recurso dos Serviços de Comunicação do Azure. Você precisará registrar o ponto de extremidade e a cadeia de conexão do recurso para este guia de início rápido.
Um token de acesso do usuário. Defina o escopo como chat e anote a cadeia de caracteres do token, bem como a cadeia de caracteres da user_id. Você também pode usar a CLI do Azure e executar o comando abaixo com a cadeia de conexão para criar um usuário e um token de acesso.
az communication identity token issue --scope chat --connection-string "yourConnectionString"
Para obter detalhes, confira Usar a CLI do Azure para criar e gerenciar tokens de acesso.
Configurando
Criar um aplicativo em C#
Em uma janela de console (como cmd, PowerShell ou Bash), use o comando dotnet new
para criar um novo aplicativo do console com o nome ChatQuickstart
. Esse comando cria um projeto simples C# "Olá, Mundo" com um arquivo de origem único: Program.cs.
dotnet new console -o ChatQuickstart
Altere o seu diretório para a pasta de aplicativo recém-criada e use o comando dotnet build
para compilar o seu aplicativo.
cd ChatQuickstart
dotnet build
Instalar o pacote
Instalar o SDK de Chat de Comunicação do Azure para .NET
dotnet add package Azure.Communication.Chat
Modelo de objeto
As classes a seguir lidam com alguns dos principais recursos do SDK de Chat dos Serviços de Comunicação do Azure para C#.
Nome | Descrição |
---|---|
ChatClient | Essa classe é necessária para a funcionalidade de chat. Crie uma instância dela com suas informações de assinatura e use-a para criar, obter e excluir conversas. |
ChatThreadClient | Essa classe é necessária para a funcionalidade de conversa de chat. Obtenha uma instância por meio de ChatClient e use-a para enviar/receber/atualizar/excluir mensagens, adicionar/remover/obter participantes e enviar notificações de digitação e confirmações de leitura. |
Criar um cliente de chat
Para criar um cliente de chat, você usará o ponto de extremidade dos Serviços de Comunicação e o token de acesso que foi gerado como parte das etapas de pré-requisito. Você precisa usar a classe CommunicationIdentityClient
do SDK de Identidade para criar um usuário e emitir um token a ser passado para o cliente de chat.
Saiba mais sobre os tokens de acesso do usuário.
Este início rápido não abrange a criação de uma camada de serviço para gerenciar tokens relacionados ao aplicativo de chat, embora isso seja recomendado. Saiba mais sobre a Arquitetura de Chat
Copie os seguintes snippets de código e cole-os no arquivo de origem: 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);
}
}
}
Iniciar uma conversa de chat
Use o método createChatThread
no chatClient para criar uma conversa de chat.
- Use
topic
para fornecer um tópico a esse chat; o tópico pode ser atualizado depois que a conversa de chat é criada por meio da funçãoUpdateTopic
. - Use a propriedade
participants
para passar uma lista de objetosChatParticipant
a serem adicionados ao thread de chat. O objetoChatParticipant
é inicializado com um objetoCommunicationIdentifier
.CommunicationIdentifier
poderia ser do tipoCommunicationUserIdentifier
,MicrosoftTeamsUserIdentifier
ouPhoneNumberIdentifier
. Por exemplo, para obter um objetoCommunicationIdentifier
, é necessário transmitir uma ID de acesso que tenha sido criada seguindo as instruções em Criar um usuário
O objeto de resposta do método createChatThread
contém os detalhes de chatThread
. Para interagir com as operações do thread de chat, por exemplo, adicionar participantes, enviar uma mensagem, excluir uma mensagem etc., uma instância de cliente de chatThreadClient
precisa criar uma instância usando o método GetChatThreadClient
no 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;
Obter um cliente de conversa de chat
O método GetChatThreadClient
retorna um cliente de conversa para uma conversa que já existe. Ele pode ser usado para executar operações na conversa criada: adicionar membros, enviar mensagens etc. threadId é a ID exclusiva da conversa de chat existente.
string threadId = "<THREAD_ID>";
ChatThreadClient chatThreadClient = chatClient.GetChatThreadClient(threadId: threadId);
Listar todas as conversas de chat
Use GetChatThreads
para recuperar todas as conversas de chat das quais o usuário faz parte.
AsyncPageable<ChatThreadItem> chatThreadItems = chatClient.GetChatThreadsAsync();
await foreach (ChatThreadItem chatThreadItem in chatThreadItems)
{
Console.WriteLine($"{ chatThreadItem.Id}");
}
Enviar uma mensagem para uma conversa de chat
Use SendMessage
para enviar uma mensagem para uma conversa.
- Use
content
para fornecer o conteúdo da mensagem, que é obrigatório. - Use
type
para o tipo de conteúdo da mensagem, como "Text" ou "HTML". Se não for especificado, a opção "Text" será a usada. - Use
senderDisplayName
para especificar o nome de exibição do remetente. Se não for especificado, uma cadeia de caracteres vazia será a usada. - Use
metadata
opcionalmente para incluir dados adicionais que você queira enviar junto com a mensagem. Este campo fornece um mecanismo para os desenvolvedores estenderem a funcionalidade de mensagens de chat e adicionarem informações personalizadas para o caso de uso específico. Por exemplo, ao compartilhar um link de arquivo na mensagem, pode ser interessante adicionar "hasAttachment:true" nos metadados para que o aplicativo do destinatário possa analisá-la e exibi-la de acordo.
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;
Receber mensagens de chat de uma conversa de chat
Você pode recuperar mensagens de chat sondando o método GetMessages
no cliente da conversa de chat em intervalos especificados.
AsyncPageable<ChatMessage> allMessages = chatThreadClient.GetMessagesAsync();
await foreach (ChatMessage message in allMessages)
{
Console.WriteLine($"{message.Id}:{message.Content.Message}");
}
GetMessages
usa um parâmetro DateTimeOffset
opcional. Se esse deslocamento for especificado, você receberá mensagens que foram recebidas, atualizadas ou excluídas depois dele. Observe que as mensagens recebidas antes da hora de deslocamento, mas editadas ou removidas depois dela, também serão retornadas.
GetMessages
retorna a última versão da mensagem, incluindo as edições ou as exclusões que ocorreram na mensagem usando UpdateMessage
e DeleteMessage
. Para mensagens excluídas, chatMessage.DeletedOn
retorna um valor datetime que indica quando a mensagem foi excluída. Para as mensagens editadas, chatMessage.EditedOn
retorna um datetime indicando quando a mensagem foi editada. A hora original da criação da mensagem pode ser acessada usando chatMessage.CreatedOn
e pode ser usada para ordenar as mensagens.
GetMessages
retorna diferentes tipos de mensagens que podem ser identificadas por chatMessage.Type
. Esses tipos são:
Text
: mensagem de chat normal enviada por um membro da conversa.Html
: uma mensagem de texto formatada. Observe que os usuários dos Serviços de Comunicação não podem enviar mensagens RichText no momento. Há suporte para esse tipo de mensagem nas mensagens enviadas de usuários do Teams para os usuários dos Serviços de Comunicação em cenários de interoperabilidade do Teams.TopicUpdated
: mensagem do sistema que indica que o tópico foi atualizado. (readonly)ParticipantAdded
: mensagem do sistema que indica que um ou mais participantes foram adicionados à conversa do chat.(readonly)ParticipantRemoved
: mensagem do sistema que indica que um participante foi removido do thread de chat.
Para obter mais detalhes, confira Tipos de mensagem.
Adicionar um usuário como participante ao thread de chat
Depois que uma conversa é criada, você pode adicionar e remover usuários dela. Quando você adiciona usuários, você concede a eles acesso para poderem enviar mensagens para a conversa e adicionar/remover outro participante. Para chamar AddParticipants
, verifique se você adquiriu um novo token de acesso e uma identidade para esse usuário. O usuário precisará desse token de acesso para inicializar o cliente de chat.
Use AddParticipants
para adicionar um ou mais participantes à conversa de chat. A seguir, estão os atributos com suporte para participantes de cada conversa:
communicationUser
, obrigatório, é a identidade do participante da conversa.displayName
, opcional, é o nome de exibição do participante do thread.shareHistoryTime
, opcional, é o horário no qual o histórico do chat é compartilhado com o 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);
Obter participantes da conversa
Use GetParticipants
para recuperar os participantes da conversa de chat.
AsyncPageable<ChatParticipant> allParticipants = chatThreadClient.GetParticipantsAsync();
await foreach (ChatParticipant participant in allParticipants)
{
Console.WriteLine($"{((CommunicationUserIdentifier)participant.User).Id}:{participant.DisplayName}:{participant.ShareHistoryTime}");
}
Enviar confirmação de leitura
Use SendReadReceipt
para notificar outros participantes de que a mensagem foi lida pelo usuário.
await chatThreadClient.SendReadReceiptAsync(messageId: messageId);
Executar o código
Execute o aplicativo do seu diretório de aplicativo com o comando dotnet run
.
dotnet run
Exemplo de código
Encontre o código finalizado para este guia de início rápido no GitHub.
Pré-requisitos
Antes de começar, é preciso:
Criar uma conta do Azure com uma assinatura ativa. Para obter detalhes, confira Criar uma conta gratuitamente.
Instale o Xcode e o CocoaPods. Você usa o Xcode a fim de criar um aplicativo iOS para o início rápido e o CocoaPods para instalar as dependências.
Criar um recurso dos Serviços de Comunicação do Azure. Para obter detalhes, confira Início Rápido: criar e gerenciar recursos dos Serviços de Comunicação. Você precisará registrar o ponto de extremidade e a cadeia de conexão do recurso para este guia de início rápido.
Crie dois usuários nos Serviços de Comunicação do Azure e emita para eles um Token de Acesso do Usuário. Defina o escopo como chat e anote a cadeia de caracteres do token, bem como a cadeia de caracteres da user_id. Neste início rápido, você criará uma conversa com um participante inicial e depois adicionará um segundo participante a ela. Você também pode usar a CLI do Azure e executar o comando abaixo com a cadeia de conexão para criar um usuário e um token de acesso.
az communication identity token issue --scope chat --connection-string "yourConnectionString"
Para obter detalhes, confira Usar a CLI do Azure para criar e gerenciar tokens de acesso.
Configurando
Criar um aplicativo iOS
Abra o Xcode e selecione Crie um novo projeto Xcode. Em seguida, selecione iOS como a plataforma e Aplicativo como o modelo.
Em nome do projeto, insira ChatQuickstart. Em seguida, selecione Storyboard como a interface, Representante de Aplicativo UIKit como o ciclo de vida e Swift como a linguagem.
Selecione Avançar e escolha o diretório em que deseja que o projeto seja criado.
Instalar as bibliotecas
Use o CocoaPods para instalar as dependências necessárias dos Serviços de Comunicação.
Por meio da linha de comando, acesse o diretório raiz do projeto iOS ChatQuickstart
. Crie um Podfile com o seguinte comando: pod init
.
Abra o Podfile e adicione as seguintes dependências ao destino ChatQuickstart
:
pod 'AzureCommunicationChat', '~> 1.3.6'
Instale as dependências com o seguinte comando: pod install
. Observe que isso também cria um workspace do Xcode.
Depois de executar pod install
, reabra o projeto no Xcode selecionando o .xcworkspace
recém-criado.
Configurar os espaços reservados
Abra o workspace ChatQuickstart.xcworkspace
no Xcode e depois abra ViewController.swift
.
Neste início rápido, você adicionará o seu código em viewController
e verá a saída no console do Xcode. Este início rápido não aborda a criação de uma interface do usuário no iOS.
Na parte superior de viewController.swift
, importe as bibliotecas AzureCommunication
e AzureCommunicationChat
:
import AzureCommunicationCommon
import AzureCommunicationChat
Copie o seguinte código ao 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)")
}
}
}
Para fins de demonstração, usaremos um semáforo para sincronizar o seu código. Nas etapas a seguir, você substituirá os espaços reservados pelo código de exemplo usando a biblioteca de Chat dos Serviços de Comunicação do Azure.
Criar um cliente de chat
Para criar um cliente de chat, você usará o ponto de extremidade dos Serviços de Comunicação e o token de acesso que foi gerado como parte das etapas de pré-requisito.
Saiba mais sobre os tokens de acesso do usuário.
Este início rápido não abrange a criação de uma camada de serviço para gerenciar tokens relacionados ao aplicativo de chat, embora isso seja recomendado. Saiba mais sobre a Arquitetura de Chat
Substitua o comentário <CREATE A CHAT CLIENT>
pelo snippet de código abaixo:
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
)
Substitua <ACS_RESOURCE_ENDPOINT>
pelo ponto de extremidade do recurso dos Serviços de Comunicação do Azure. Substitua <ACCESS_TOKEN>
por um token de acesso válido dos Serviços de Comunicação.
Modelo de objeto
As classes e as interfaces a seguir lidam com alguns dos principais recursos do SDK de Chat dos Serviços de Comunicação do Azure para iOS.
Nome | Descrição |
---|---|
ChatClient |
Essa classe é necessária para a funcionalidade de chat. Crie uma instância dela com suas informações de assinatura e use-a para criar, obter, excluir threads e assinar eventos de chat. |
ChatThreadClient |
Essa classe é necessária para a funcionalidade de conversa de chat. Você obtém uma instância por meio do ChatClient e a usa para enviar, receber, atualizar ou excluir mensagens. Você também pode usá-la para adicionar, remover e obter usuários, enviar notificações de digitação e confirmações de leitura. |
Iniciar uma conversa de chat
CreateChatThreadResult
é a resposta retornada pela criação de um thread de chat.
Ele contém uma propriedadechatThread
que é o objetoChatThreadProperties
. Este objeto contém o threadId que pode ser usado para obter ChatThreadClient
operações de execução no thread criado: Adicionar participantes, enviar mensagem, etc.
Substitua o comentário <CREATE A CHAT THREAD>
pelo snippet de código abaixo:
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()
Substitua <USER_ID>
por uma ID de usuário válida dos Serviços de Comunicação.
Você está usando um semáforo aqui para aguardar o manipulador de conclusão antes de continuar. Em etapas posteriores, você usará o threadId
da resposta retornada ao manipulador de conclusão.
Listar todas as conversas de chat
Depois de criar uma conversa de chat, podemos listar todas as conversas de chat chamando o método listChatThreads
em ChatClient
. Substitua o comentário <LIST ALL CHAT THREADS>
pelo código a seguir:
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()
Obter um cliente de conversa de chat
O método createClient
retorna um ChatThreadClient
para uma conversa que já existe. Ele pode ser usado para executar operações no thread criado: adicionar participantes, enviar mensagens etc. threadId é a ID exclusiva do thread de chat existente.
Substitua o comentário <GET A CHAT THREAD CLIENT>
pelo código a seguir:
let chatThreadClient = try chatClient.createClient(forThread: threadId!)
Enviar uma mensagem para uma conversa de chat
Use o método send
para enviar uma mensagem a uma conversa identificada por threadId.
SendChatMessageRequest
é usado para descrever a solicitação da mensagem:
- Use
content
para fornecer o conteúdo da mensagem de chat - Use
senderDisplayName
para especificar o nome de exibição do remetente - Use
type
para especificar o tipo de mensagem, como 'texto' ou 'html' - Use
metadata
opcionalmente para incluir dados adicionais que você queira enviar junto com a mensagem. Este campo fornece um mecanismo para os desenvolvedores estenderem a funcionalidade de mensagens de chat e adicionarem informações personalizadas para o caso de uso específico. Por exemplo, ao compartilhar um link de arquivo na mensagem, pode ser interessante adicionar "hasAttachment:true" nos metadados para que o aplicativo do destinatário possa analisá-la e exibi-la de acordo.
SendChatMessageResult
é a resposta retornada do envio de uma mensagem; ela contém uma ID, que é a ID exclusiva da mensagem.
Substitua o comentário <SEND A MESSAGE>
pelo snippet de código abaixo:
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()
Enviar uma confirmação de leitura
Use o método sendReadReceipt
para postar um evento de confirmação de leitura em um thread de chat, em nome de um usuário.
messageId
é a ID exclusiva da mensagem de chat lida.
Substitua o comentário <SEND A READ RECEIPT>
pelo código abaixo:
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")
}
Receber mensagens de chat de uma conversa de chat
Com a sinalização em tempo real, você pode criar assinaturas para escutar as novas mensagens de entrada e atualizar as mensagens atuais na memória de acordo. Os Serviços de Comunicação do Azure dão suporte a uma lista de eventos que você pode assinar.
Substitua o comentário <RECEIVE MESSAGES>
pelo código abaixo. Depois de habilitar as notificações, tente enviar novas mensagens para ver o 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
}
})
Como alternativa, você pode recuperar mensagens de chat sondando o método listMessages
em intervalos especificados. Veja o seguinte snippet de código para 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()
Adicionar um usuário como participante ao thread de chat
Depois que uma conversa é criada, você pode adicionar e remover usuários dela. Quando você adiciona usuários, você concede a eles acesso para poderem enviar mensagens para a conversa e adicionar/remover outro participante. Para chamar add
, verifique se você adquiriu um novo token de acesso e uma identidade para esse usuário. O usuário precisará desse token de acesso para inicializar o cliente de chat.
Use o add
método deChatThreadClient
para adicionar um ou mais participantes à conversa de chat. A seguir, estão os atributos com suporte para participantes de cada conversa:
id
, obrigatório, é a identidade do participante da conversa.displayName
, opcional, é o nome de exibição do participante do thread.shareHistoryTime
, opcional, é o horário no qual o histórico do chat é compartilhado com o participante.
Substitua o comentário <ADD A USER>
pelo código a seguir:
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()
Substitua <USER_ID>
pela ID de usuário dos Serviços de Comunicação do usuário a ser adicionado.
Listar os usuários em um thread
Use o listParticipants
método para obter todos os participantes de uma conversa de chat específica.
Substitua o comentário <LIST USERS>
pelo seguinte código:
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()
Notificações por push
As notificações por push alertam clientes sobre mensagens de entrada em uma thread de chat em situações em que o aplicativo móvel não está sendo executado no primeiro plano. Atualmente, o envio de notificações por chat por push com o Hub de Notificação só tem suporte para SDK do IOS na versão 1.3.0. Consulte o artigo Habilitar Notificação por Push em seu aplicativo de chat para obter detalhes.
Executar o código
No Xcode, pressione o botão Executar para criar e executar o projeto. No console, você pode exibir a saída do código e a saída do agente do ChatClient.
Observação: Defina Build Settings > Build Options > Enable Bitcode
como No
. No momento, o SDK do AzureCommunicationChat para iOS não permite habilitar o bitcode, o problema do GitHub a seguir está acompanhando essa situação.
Exemplo de código
Encontre o código finalizado para este guia de início rápido no GitHub.
Pré-requisitos
Uma conta do Azure com uma assinatura ativa ou crie uma conta do Azure gratuitamente.
Um recurso ativo dos Serviços de Comunicação do Azure ou crie um recurso dos Serviços de Comunicação.
Um recurso ativo dos Aplicativos Lógicos do Azure, ou crie um aplicativo lógico em branco com o gatilho que você quer usar. No momento, o conector de Chat dos Serviços de Comunicação oferece somente ações, portanto seu aplicativo lógico requer um gatilho, no mínimo.
Criar usuário
Conclua essas etapas no Power Automate com seu fluxo do Power Automate aberto no modo de edição.
Para adicionar uma nova etapa no seu fluxo de trabalho usando o conector de Identidade dos Serviços de Comunicação:
No designer, na etapa em que você deseja adicionar a nova ação, selecione Nova etapa. Como alternativa, para adicionar a nova ação entre as etapas, mova o ponteiro sobre a seta entre essas etapas, selecione o sinal de adição (+) e, em seguida, selecione Adicionar uma ação.
Na caixa de pesquisa Escolher uma operação, insira a Identidade dos Serviços de Comunicação. Na lista de ações, selecione Criar um usuário.
Insira a cadeia de conexão. Para obter a URL da cadeia de conexão no portal do Azure, vá para o recurso Serviços de Comunicação do Azure. No menu de recursos, selecione Chaves e, em seguida, selecione Cadeia de conexão. Selecione o ícone de cópia para copiar a cadeia de conexão primária.
Insira um nome para a conexão.
Selecione Mostrar opções avançadas e, em seguida, selecione o escopo do token. A ação fera um token de acesso e o tempo de expiração com o escopo especificado. Essa ação também gera uma ID de usuário que é uma identidade de usuário dos Serviços de Comunicação.
Em Item dos Escopos de Token, selecione chat.
Selecione Criar. A ID de usuário e um token de acesso são mostrados.
Crie uma conversa de chat
Adicione uma nova ação.
Na caixa de pesquisa Escolher uma operação, insira o Chat dos Serviços de Comunicação. Na lista de ações, selecione Criar uma conversa de chat.
Insira a URL do ponto de extremidade dos Serviços de Comunicação. Para obter a URL do ponto de extremidade no portal do Azure, vá para o recurso Serviços de Comunicação do Azure. No menu de recursos, selecione Chaves e, em seguida, selecione Ponto de extremidade.
Insira um nome para a conexão.
Selecione o token de acesso gerado na seção anterior e adicione uma descrição do tópico da conversa de chat. Adicione o usuário criado e insira um nome para o participante.
Enviar uma mensagem
Adicione uma nova ação.
Na caixa de pesquisa Escolher uma operação, insira o Chat dos Serviços de Comunicação. Na lista de ações, selecione Enviar uma mensagem para a conversa de chat.
Insira o token de acesso, a ID da conversa, o conteúdo e o nome.
Lieste as mensagens de thread de chat
Para verificar se você enviou uma mensagem corretamente:
Adicione uma nova ação.
Na caixa de pesquisa Escolher uma operação, insira o Chat dos Serviços de Comunicação. Na lista de ações, selecione Listar mensagens da conversa de chat.
Insira o token de acesso e a ID da conversa.
Como testar o seu aplicativo lógico
Para executar manualmente o fluxo de trabalho, selecione Executar na barra de ferramentas do designer. O fluxo de trabalho cria um usuário, emite um token de acesso para esse usuário e, em seguida, remove o token e exclui o usuário. Para obter mais informações, confira Como executar seu fluxo de trabalho.
Agora, selecione Listar mensagens da conversa de chat. Nas saídas da ação, verifique a mensagem que foi enviada.
Limpar os recursos do fluxo de trabalho
Para limpar o fluxo de trabalho do aplicativo lógico e os recursos relacionados, examine como limpar os recursos dos Aplicativos Lógicos.
Limpar os recursos
Se quiser limpar e remover uma assinatura dos Serviços de Comunicação, exclua o recurso ou o grupo de recursos. Excluir o grupo de recursos também exclui todos os recursos associados a ele. Saiba mais sobre como limpar recursos.
Próximas etapas
Neste guia de início rápido, você aprendeu a:
- Criar um cliente de chat
- Criar uma conversa com dois usuários
- Enviar uma mensagem para a conversa
- Receber mensagens de uma conversa
- Remover usuários de uma conversa
Você também pode querer:
- Introdução à Biblioteca de interface do usuário
- Saber mais sobre os conceitos de chat
- Familiarize-se com o SDK de Chat
- Usando o SDK do Chat em seu aplicativo React Native.