Skip to main content

Domínios — Chat

O chat é servido por uma API própria, o Semear.Chat.Api, separada das APIs de administração, console e lending. Ela atende as rotas REST em /v5/chats e o hub SignalR em /v5/chats/hub, e aceita o mesmo token de login usado no admin, no console e no lending. Chaves de API não usam o chat.

Como funciona​

  • Grupo: conversa com nome e vários participantes da mesma empresa, criada por quem tem a permissão "Criar conversa em grupo". Quem cria é o dono; administradores alteram o nome, incluem e removem participantes e escolhem outros administradores. Cada alteração aparece na conversa como mensagem do sistema. Quem sai ou é removido deixa de ver o grupo; o histórico de participação é mantido. Se o dono sair, um administrador (ou o participante mais antigo) passa a ser o dono.
  • Conversa direta: liga dois usuários humanos. Pedir de novo uma conversa com a mesma pessoa devolve a conversa que já existe.
  • Quem pode conversar com quem: o usuário só encontra e abre conversa com usuários ativos da própria empresa que estejam dentro do seu nível de acesso do chat. Quando o perfil tem regras de nível próprias do chat, elas valem no lugar do nível de acesso global.
  • Mensagem gravada primeiro: toda mensagem é gravada pela API REST e só depois avisada pelo hub. Quem perde a conexão recupera pela API o que chegou nesse intervalo.
  • Envio sem duplicar: cada mensagem leva um clientMessageId gerado pelo aplicativo. Reenviar com o mesmo identificador devolve a mensagem já gravada.
  • Não lidas: cada participante guarda a última mensagem que leu. São não lidas as mensagens posteriores a ela enviadas por outras pessoas.
  • Anexos: documentos, fotos, vídeos e áudios ficam no armazenamento de arquivos da empresa de quem enviou, na pasta Sistema/Chat. O tipo do anexo é definido pelo tipo do arquivo.
  • Nada é apagado: mensagens só recebem linhas novas; conversa e participação não são excluídas.

Conexão em tempo real​

O aplicativo conecta em /v5/chats/hub informando o token em access_token. O token precisa ter o identificador de chat do usuário (signal_id); tokens emitidos antes dessa mudança são recusados e o usuário precisa entrar de novo.

Eventos enviados pelo hub:

EventoConteúdoQuando
MessageCreatedA mensagem gravadaUma mensagem nova foi gravada numa conversa do usuário, inclusive as enviadas por ele em outra aba.
ConversationUpdatedO id da conversaUma conversa nova incluiu o usuário.
ReadConversa, usuário e última mensagem lidaUm participante leu mensagens.

Endpoints​

MétodoRotaUso
GET/v5/chatsConversas do usuário, das mais recentes para as mais antigas, com a quantidade de não lidas e o outro participante das conversas diretas.
GET/v5/chats/unread-countTotal de mensagens não lidas do usuário.
POST/v5/chats/users/searchUsuários com quem o usuário pode abrir conversa.
POST/v5/chats/directAbre a conversa direta com o usuário informado em userId, ou devolve a que já existe.
GET/v5/chats/{id}Uma conversa do usuário.
POST/v5/chats/groupCria um grupo com name e os participantes em userIds.
PUT/v5/chats/{id}Altera nome e descrição do grupo. Só administradores.
GET/v5/chats/{id}/participantsParticipantes ativos da conversa, com o papel de cada um.
POST/v5/chats/{id}/participantsInclui os usuários de userIds no grupo. Só administradores.
DELETE/v5/chats/{id}/participants/{userId}Remove um participante do grupo. Só administradores; o dono não pode ser removido.
PUT/v5/chats/{id}/participants/{userId}/roleTorna o participante administrador (admin) ou participante comum (member). Só administradores.
POST/v5/chats/{id}/leaveSai do grupo.
POST/v5/chats/{id}/readMarca como lidas as mensagens até messageId; sem messageId, até a última.
GET/v5/chats/{id}/messagesMensagens em ordem de envio. before traz as anteriores a uma mensagem, after as posteriores e limit define a quantidade.
POST/v5/chats/{id}/messagesEnvia uma mensagem de texto com clientMessageId e content.
POST/v5/chats/{id}/attachmentsEnvia um arquivo (formulário com file, clientMessageId e, opcionalmente, content como legenda). Cada arquivo vira uma mensagem.
GET/v5/chats/attachments/{attachmentId}/downloadEndereço temporário para abrir ou baixar o anexo. Só participantes da conversa recebem o endereço.

Configuração​

Configuração da empresa na funcionalidade Chat (1181):

KeyNomeUso
max_message_lengthTamanho Máximo da Mensagem do ChatQuantidade máxima de caracteres de uma mensagem. Sem valor, vale 4000.
max_attachment_size_mbTamanho Máximo do Anexo do Chat (MB)Tamanho máximo de cada arquivo enviado. Sem valor, vale 25.
max_group_participantsMáximo de Participantes por Grupo do ChatQuantidade máxima de participantes de um grupo, contando quem criou. Sem valor, vale 256.

Valores fixos​

ChatConversationType​

CodeKeyNome
1directDireta
2groupGrupo

ChatConversationStatus​

Devolvido em status da conversa como StatusField.

CodeKeyNomeCorSignificado
1activeAtivoVerdeA conversa recebe mensagens.
2closedEncerradaCinzaA conversa pode ser lida, mas não recebe mensagens.

ChatParticipantRole​

CodeKeyNome
1ownerDono
2adminAdministrador
3memberMembro

ChatAttachmentKind​

CodeKeyNome
1documentDocumento
2imageImagem
3videoVídeo
4audioÁudio

ChatMessageType​

CodeKeyNome
1textTexto
2attachmentAnexo
3systemSistema

Mensagens de erro​

CódigoMensagem
1181001Conversa não encontrada
1181002Informe o usuário da conversa
1181003Usuário não encontrado ou inativo
1181004Não é possível abrir uma conversa com você mesmo
1181005Você não tem permissão para conversar com este usuário
1181006Esta conversa está encerrada
1181007Escreva a mensagem
1181008A mensagem passa do tamanho máximo permitido
1181009Identificador da mensagem é obrigatório
1181010Mensagem não encontrada
1181011Sessão sem identificador de chat. Entre novamente no sistema
1181012Selecione o arquivo
1181013O arquivo passa do tamanho máximo permitido no chat
1181014Não foi possível enviar o arquivo
1181015Anexo não encontrado
1181016Informe o nome do grupo
1181017O nome do grupo passa do tamanho máximo permitido
1181018Selecione ao menos um participante
1181019O grupo passa da quantidade máxima de participantes
1181020Esta conversa não é um grupo
1181021Só administradores do grupo podem fazer esta alteração
1181022Participante não encontrado no grupo
1181023O dono do grupo não pode ser removido nem ter o papel alterado
1181024Papel do participante inválido