meetbot.dev

bot api · microsoft teams

доступно сегодня

Microsoft Teams, записан.

Drop a teams.microsoft.com or teams.live.com URL into POST /v1/bots; we join via the web client as an anonymous guest, capture per-speaker audio, and emit a signed webhook with the manifest path on exit.

обзор

Зачем это существует.

Только web-клиент, по дизайну. Ключ нативного Teams SDK не нужен, нет устанавливаемого Teams-приложения для регистрации, нет admin consent в вашем тенанте. Бот управляет Puppeteer-пилотируемым Chrome, который загружает teams.microsoft.com/meetingjoin с переданным URL, заполняет форму входа вашим displayName и попадает в лобби для впуска хостом. Тот же Docker-контейнер, тот же оркестратор, тот же контракт webhook, что и у адаптеров Meet и Zoom.

Субтитры + имена. Teams отправляет события финализированных субтитров через data-канал, который мы перехватываем внутри Chrome бота — мы не DOM-скрапим UI субтитров, поэтому они не падают, когда участники меняют размер окна или двигают панели. Реальные имена участников приходят из People-панели (которую Teams держит стабильной через свои UI-редизайны); аудио по участнику привязано к WebRTC SSRC mapping, как в адаптере Meet.

Чего пока нет. Нет пути compliance-бота — это пункт дорожной карты Q4 на /product/compliance-recording-api. Нет Teams Live Events (broadcast, не meeting). Нет legacy-встреч Skype-for-Business (deprecated MS в любом случае). Для всего остального — запланированных встреч Teams, ad-hoc meet-now сессий, встреч в каналах, breakout rooms (одна комната) — web-адаптер справляется сегодня, по той же плоской ставке $0.30/ч, что и Meet и Zoom.

что вы получаете

Контракт, по пунктам.

item

Web-client adapter

Puppeteer + Chrome внутри Xvfb. Без ключа Teams SDK, без admin consent в вашем тенанте — бот заходит во встречу по URL как любой анонимный гость.

item

Captions data-channel intercept

Перехватываем WebSocket событий субтитров Teams внутри страницы, чтобы субтитры были стабильны через UI-редизайны и изменения размера окна.

item

People-pane name mapping

Реальные имена участников из People-панели, соединённые с аудио по участнику через WebRTC SSRC. Никаких 'speaker_2' анонимок в JSONL.

item

Lobby + admit

Бот ждёт в лобби, пока организатор его впустит. Sub-code lobby_timeout на webhook, если никто не впускает в заданном окне.

item

Tab video + chat

VP9-захват вкладки и входящие сообщения чата, та же форма, что и выходы Meet/Zoom. Drop-in, если уже потребляете bot API.

item

Sub-codes on exit

host_denied_admission, lobby_timeout, removed_from_meeting, meeting_ended, recording_disabled — приходят на webhook завершения.