Pular para o conteúdo principal

Canais

Os canais levam as conversas da equipe ao Libre WebUI: salas públicas e privadas, além de mensagens diretas, com tópicos, reações, itens fixados, acompanhamento de não lidas, anexos de arquivo e respostas de @model — tudo sobre as mesmas bases persistentes e criptografadas do chat.

Tipos de canal e participação​

TipoQuem pode verQuem participa
publicTodos podem navegarQualquer pessoa pode entrar por conta própria
privateSomente membrosO proprietário convida os membros
dmSomente os dois participantesAberta automaticamente; sempre exatamente duas pessoas

A participação é a única autoridade sobre o conteúdo do canal: toda leitura e gravação — inclusive downloads de anexos e entrega de eventos ao vivo — verifica primeiro se quem chamou é membro, e quem não é membro recebe um 404 que não revela a existência do recurso. A função de administrador global não concede deliberadamente acesso ao conteúdo dos canais.

Quem cria um canal público ou privado é seu proprietário. Proprietários podem renomear, arquivar, convidar (em canais privados), remover membros, moderar mensagens e excluir o canal; para sair, um proprietário exclui o canal, nunca o abandona. Mensagens diretas são desduplicadas por par: abrir uma DM com a mesma pessoa sempre leva à mesma conversa.

A linha do tempo​

As mensagens formam uma linha do tempo persistente e ordenada, lida com cursores keyset (created_at mais o ID da mensagem) em qualquer direção, para que a paginação nunca pule nem duplique entradas.

  • Publicações idempotentes. O cliente fornece a identidade da mensagem; uma solicitação repetida chega à mesma entrada da linha do tempo exatamente uma vez.
  • Exclusão com marcador. Excluir uma mensagem limpa seu conteúdo, mas mantém a entrada na linha do tempo, para que os tópicos nunca fiquem sem referência e a ordem nunca mude. Autores excluem as próprias mensagens; proprietários do canal podem moderar qualquer uma.
  • Edições são exclusivas do autor e recebem um marcador editedAt.
  • Tópicos têm apenas um nível. Qualquer mensagem raiz pode conter um tópico; respostas a respostas são rejeitadas. Mensagens raiz exibem contagens de respostas em tempo real.
  • Reações são únicas por usuário e por emoji, contadas sem duplicatas.
  • Itens fixados são organizados pelos membros e listados por canal.

Nomes e descrições de canais e o conteúdo das mensagens são criptografados em repouso com o mesmo limite aplicado às mensagens de chat.

Estado de não lidas​

Cada participação mantém um cursor monotônico de leitura. As contagens de não lidas são calculadas no servidor por canal (suas próprias mensagens nunca são consideradas não lidas), e POST /api/channels/:channelId/read avança o cursor — ele nunca retrocede, portanto um cliente desatualizado não pode ressuscitar mensagens já lidas.

Entrega em tempo real​

Toda alteração da linha do tempo é acrescentada ao fluxo persistente de eventos channel:<id> e distribuída por GET /api/channels/:channelId/events (SSE). A participação é verificada novamente antes de cada entrega; assim, remover um membro encerra de forma segura seu fluxo ao vivo. A linha do tempo SQL continua sendo a fonte definitiva: quem perdeu eventos simplesmente relê a linha do tempo — o registro serve para entrega, não como fonte da verdade.

Anexos​

Os arquivos são enviados primeiro (POST /api/channels/:channelId/attachments), ficam brevemente em um cache compartilhado de reivindicações e são anexados quando a mensagem é publicada; uma reivindicação de upload é de uso único e expira após 15 minutos se não for usada. Os bytes do blob pertencem a quem fez o upload (e consomem sua cota), e cada solicitação de download verifica novamente a participação no canal.

Respostas de @model​

O campo de composição pode direcionar uma mensagem a um modelo. A resposta aparece imediatamente como uma mensagem pendente de autoria do modelo e é concluída por uma tarefa persistente executada estritamente sob a identidade do membro que a iniciou: o acesso a modelos, as credenciais de provedor e o roteamento dessa pessoa — nunca os do proprietário do canal nem de outro membro. Um membro removido enquanto uma menção está na fila não pode mantê-la ativa: a tarefa verifica novamente a participação antes de gerar e registra uma falha visível. Falhas do modelo aparecem na própria resposta, em vez de desaparecerem em uma fila.

Uma menção também alcança o membro mencionado por e-mail quando ele ativou Menções em canais em Configurações → Notificações e um administrador configurou o servidor de saída de e-mails (veja Notificações).

As respostas do modelo usam como contexto a conversa recente do canal (até 30 mensagens).

Ferramentas de chat estão conectadas: quando o membro que mencionou passa pela liberação do recurso de ferramentas e tem um catálogo não vazio, a resposta executa o mesmo loop de ferramentas em várias rodadas que um turno de chat executa, contra os servidores de ferramentas e as ferramentas integradas visíveis para esse membro. Um canal não vincula nenhuma persona, então nenhum vínculo de ferramentas de persona restringe o catálogo.

Ninguém está acompanhando uma menção da forma como se acompanha um chat, então uma chamada de ferramenta com efeito colateral é recusada de imediato a menos que o membro já tenha uma aprovação permanente para ela. A resposta informa isso, e o modelo é instruído a executá-la a partir de um chat. Ferramentas de leitura executam sem pedir permissão, exatamente como no chat. Aprovações permanentes têm escopo por canal: uma decisão "permitir neste chat" nunca vale para um canal, e uma aprovação de um canal nunca vaza para outro canal nem para o chat. Como só é possível executar sem supervisão o trabalho somente leitura, repetir uma tarefa de menção é seguro.

A resposta carrega um resumo limitado das chamadas que fez (no máximo 12, com argumentos truncados e prévias de resultado), exibido como um painel expansível "Ferramentas usadas" abaixo da mensagem. Recuperação de conhecimento e pesquisa na web ainda não estão conectadas às menções de canal.

Limites​

LimiteValor
Canais criados por usuário50
Membros por canal200
Mensagens por canal50.000
Tamanho da mensagem8.000 caracteres
Anexos por mensagem5 × 10 MB
Reações por mensagem200

Limites funcionais​

  • Indicadores de presença e estado de digitação não estão implementados.
  • A exportação do conteúdo dos canais e as políticas de retenção seguem o procedimento de backup da instância; ainda não há exportação por canal.
  • Menções geram avisos pelo serviço de notificações do aplicativo; ainda não há uma preferência de notificação por canal além de sair do canal.