Adaptador web-client
Puppeteer + Chrome dentro de Xvfb. Sem chave SDK Teams, sem consentimento admin no seu tenant — bot entra na URL como qualquer convidado anônimo.
bot api · microsoft teams
disponível hojeColoque URL teams.microsoft.com ou teams.live.com em POST /v1/bots; entramos via cliente web como convidado anônimo, capturamos áudio por falante, e emitimos webhook assinado com rota do manifesto na saída.
visão geral
Apenas cliente web, por design. Sem chave de SDK nativo Teams necessária, sem app instalável Teams para registrar, sem consentimento de admin no seu tenant. O bot dirige um Chrome pilotado por Puppeteer que carrega teams.microsoft.com/meetingjoin com a URL postada, preenche o form de entrada com seu displayName, e pousa na sala de espera para o host admitir. Mesmo container Docker, mesmo orquestrador, mesmo contrato de webhook que adaptadores Meet e Zoom.
Captions + nomes. Teams envia eventos de caption finalizados através de canal de dados que interceptamos dentro do Chrome do bot — não raspamos o DOM da UI de captions, então captions não caem quando participantes redimensionam janelas ou movem painéis. Nomes reais de participantes vêm do painel People (que Teams mantém estável através de redesigns de UI); áudio é por falante indexado pelo mapeamento SSRC do WebRTC igual o adaptador Meet.
O que ainda não está aqui. Sem caminho de bot de compliance ainda — esse é o item de roadmap Q4 /product/compliance-recording-api. Sem Teams Live Events (broadcast, não reunião). Sem reuniões legacy Skype-for-Business (depreciado pela MS de qualquer forma). Para tudo mais — reuniões Teams agendadas, sessões meet-now ad-hoc, reuniões de canal, breakout rooms (sala única) — o adaptador web lida hoje, no mesmo $0,30/h plano que Meet e Zoom.
o que você recebe
Puppeteer + Chrome dentro de Xvfb. Sem chave SDK Teams, sem consentimento admin no seu tenant — bot entra na URL como qualquer convidado anônimo.
Tapamos o WebSocket de eventos de caption do Teams dentro da página para captions serem estáveis através de redesigns de UI e redimensionamentos.
Nomes reais de participantes do painel People, juntados a áudio por falante via SSRC do WebRTC. Sem anonimato 'speaker_2' no JSONL.
Bot espera na sala de espera para o organizador admitir. Sub-código lobby_timeout no webhook se ninguém admite na janela configurada.
Captura de aba VP9 e mensagens de chat entrantes, mesmo formato que saídas Meet/Zoom. Drop-in se já consome a API do bot.
host_denied_admission, lobby_timeout, removed_from_meeting, meeting_ended, recording_disabled — surgem no webhook de finalização.