LançamentoCódigo / SDK · Pronto p/ usoHabr AI→ original

Bot com Chrome anonimo no Docker gravou 1.170 reunioes e entrega resumos em 4,6 minutos

Um autor do Habr criou um bot interno para reunioes como alternativa ao Copilot. Em quatro meses, ele gravou cerca de 1.170 reunioes e 920 horas de fala de 93 organizadores. A mediana entre o fim da gravacao e a entrega de um resumo com tarefas e de 4,6 minutos. O reconhecimento e a diarizacao rodam em servidores proprios, e o audio nao sai do perimetro da empresa. Ha dois fluxos: um bot instalado na equipe para reunioes de canal do Teams e um Chrome anonimo em um container para todo o resto.

Processado por IA de Habr AI; editado por Hamidun News
Bot com Chrome anonimo no Docker gravou 1.170 reunioes e entrega resumos em 4,6 minutos
Fonte: Habr AI. Colagem: Hamidun News.
Ouvir artigo
Ficha técnica e números-chave
ParâmetroDados
Fonte originalHabr AI ↗
Editor-chefe
Dado-chave #1A transcricao nativa do Teams em russo perde dois tercos do texto: 26–37 palavras por minuto contra 99–108
Dado-chave #2Os nomes obtidos dos arquivos VTT do Teams, combinados com a diarizacao, atribuem o nome correto a 94–99% dos segmentos
Dado-chave #3A Graph API nao enxerga o Exchange on-prem, por isso foi necessario ler o calendario via EWS

Os acordos feitos em uma reuniao costumam durar exatamente ate a reuniao seguinte. Ninguem registra uma ata e, uma semana depois, os participantes se lembram de cerca de 10% do que foi dito. O segundo problema e mais recente: a empresa usa agentes de IA, mas eles so conhecem o que foi registrado e indexado. Tudo o que foi decidido por voz simplesmente nao existe para eles. O autor do artigo no Habr decidiu fechar as duas lacunas com um assistente de reunioes proprio e apresentou numeros de producao.

Por que nao usar o Copilot ou a transcricao nativa

O Copilot funciona apenas para quem tem uma assinatura, o que inviabiliza a automacao para todas as equipes sem intervencao manual. Ele tambem nao cobre tenants externos, Telemost, MTS Link ou TrueConf. Alem disso, a empresa queria processar em servidores proprios o audio das reunioes com clientes.

A transcricao nativa do Teams em russo tambem nao atendeu as expectativas do autor. Nas mesmas reunioes, ela produziu 26–37 palavras por minuto, enquanto o ritmo normal de uma conversa profissional fica perto de 100 e o pipeline do autor entregou 99–108. O Teams tambem escreve termos tecnicos de forma fonetica: representa “add button” como “ed batton.” A amostra e pequena, e o autor reconhece que a comparacao serve como referencia, nao como benchmark.

Dois fluxos em vez de um

Uma solucao universal nao foi possivel porque existem dois tipos de reuniao no Teams.

As reunioes de canal —dailies, planejamentos e retrospectivas— sao gravadas automaticamente por politica e armazenadas no SharePoint. Elas nao tem um chat de grupo convencional: a conversa fica em uma thread sob a publicacao raiz do canal, e convidados anonimos nao podem acessa-la. Por isso, um bot e instalado na equipe. Ele le o canal e captura o evento de servico CallRecording com status Success. Em seguida, baixa o MP4, converte-o em WAV de 16 kHz, envia o arquivo para reconhecimento e publica o resumo na thread da reuniao. Isso exige a permissao RSC ChannelMessage.Read.Group, concedida pelo proprietario da equipe sem que um administrador precise liberar acesso para todo o tenant.

Todas as outras reunioes ficam a cargo do “Assistente de Reunioes.” Ele e adicionado ao convite como um participante comum e, no inicio da reuniao, um Chrome anonimo rodando no Docker entra na chamada. A gravacao ocorre somente com consentimento explicito: se o assistente foi convidado e admitido, ele grava; caso contrario, nao. Os fluxos sao fisicamente separados, com registros, aplicativos e permissoes proprios, de modo que o vazamento da chave de um nao compromete o outro.

Armadilhas que vale a pena lembrar

Condicao de corrida na gravacao. Inicialmente, o estado era armazenado em arquivos JSON e, na primeira semana, o listener e um cron de contingencia enviaram a mesma gravacao duas vezes. A solucao foi usar Postgres com INSERT … ON CONFLICT DO NOTHING e SELECT … FOR UPDATE; a operacao claim retorna um de quatro modos: new, retake, attach ou skip.

Becos sem saida com transcricoes. A permissao RSC ChannelMeetingTranscript.Read.Group retornava 403, o SharePoint nao aceitava um token app-only sem certificado e o endpoint onlineMeetings/transcripts da Graph exige uma application access policy para o organizador. Por isso, a base do pipeline passou a ser o MP4 com reconhecimento proprio, enquanto o VTT do Teams funciona como fonte auxiliar.

Nomes dos participantes. O numero de falantes —a dica num_speakers— e os nomes sao extraidos do arquivo VTT. Depois, os segmentos sao associados aos clusters de diarizacao pelo atraso temporal. Em tres reunioes verificadas manualmente, 94–99% dos segmentos receberam o nome correto. Qualquer falha vira “Anonimo”: uma fala atribuida a pessoa errada e pior do que uma fala anonima.

A Graph API tambem nao enxerga o calendario no Exchange on-prem, o que obrigou o uso do EWS. A sessao do publicador baseado em navegador expirava silenciosamente por causa de um cookie de sessao, e o detector de participante ativo capturava apenas um quarto da fala ate a implementacao trocar eventos por consultas de estado.

O que isso significa na pratica

Se voce esta construindo algo parecido, a conclusao e direta. Nao tente cobrir todas as plataformas com uma unica solucao: e mais barato atender reunioes de canal do Teams com um bot instalado na equipe e lidar com o restante por meio da presenca na conversa. Armazene o estado em um banco de dados com bloqueios, nao em arquivos. Adapte os prompts de resumo ao tipo de reuniao —daily, retrospectiva ou planejamento— e carregue-os a cada envio, para que possam ser alterados sem reinicializacao. Acima de tudo, as transcricoes indexadas pela plataforma dao aos agentes memoria das decisoes tomadas por voz. Essa e a base para agentes proativos.

Tambem existem limitacoes. O fluxo 1 nao oferece suporte a canais privados; em reunioes externas, alguem precisa admitir o bot a partir do lobby; e o proprio Teams tem bugs que podem fazer o bot parar de receber atualizacoes do canal (issue #11106 do msteams-docs). Alem disso, os numeros vem de uma unica empresa e nao foram verificados de forma independente, mas quatro meses em producao com 93 organizadores constituem um argumento convincente.

História

Perguntas frequentes sobre a notícia

Por que nao usar o Copilot ou a transcricao nativa?

O Copilot funciona apenas para quem tem uma assinatura, o que inviabiliza a automacao para todas as equipes sem intervencao manual. Ele tambem nao cobre tenants externos, Telemost, MTS Link ou TrueConf. Alem disso, a empresa queria processar em servidores proprios o audio das reunioes com clientes. A transcricao nativa do Teams em russo tambem nao atendeu as expectativas do autor.

O que se sabe sobre Dois fluxos em vez de um?

Uma solucao universal nao foi possivel porque existem dois tipos de reuniao no Teams. As reunioes de canal —dailies, planejamentos e retrospectivas— sao gravadas automaticamente por politica e armazenadas no SharePoint. Elas nao tem um chat de grupo convencional: a conversa fica em uma thread sob a publicacao raiz do canal, e convidados anonimos nao podem acessa-la. Por isso, um bot e instalado na equipe. Ele le o canal e captura o evento de servico CallRecording com status Success.

O que se sabe sobre Armadilhas que vale a pena lembrar?

Condicao de corrida na gravacao. Inicialmente, o estado era armazenado em arquivos JSON e, na primeira semana, o listener e um cron de contingencia enviaram a mesma gravacao duas vezes. A solucao foi usar Postgres com INSERT … ON CONFLICT DO NOTHING e SELECT … FOR UPDATE; a operacao claim retorna um de quatro modos: new, retake, attach ou skip. Becos sem saida com transcricoes.

ZK
Zhemal Khamidun — CPO da Alpina Digital, gerente de produto do AlpinaGPT. Cria produtos de IA desde 2019. O Hamidun News é um projeto pessoal que virou um agregador em produção com mais de 6.000 leitores.
✦ Hands-On AI Engineering · Hamidun Academy

Build & Ship Production AI Agents Without Boilerplate Code

Start your free 72-hour trial at Hamidun Academy (academy.hamidun.com) — interactive lessons on Claude Code & Cursor, live Tech Radar, and production agent templates.

Start 72h Free Trial →Vibe-Coding Intensive
O que você acha?
Carregando comentários…