meeting-transcript-extract
SkillWeb & browsingUse when you need to extract a Teams meeting transcript from the browser.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the meeting-transcript-extract skill
What this skill tells your AI
The instructions your AI receives, as published by gonzalezpazmonica/savia in .claude/skills/meeting-transcript-extract/SKILL.md and read by ahel’s review.
Última actualización: 2026-04-24
/meeting-transcript-extract — Teams transcript extractor via CDP
Objetivo
Capturar transcripciones de reuniones en Teams web sin depender de permisos de descarga VTT. Funciona para reuniones donde el usuario fue organizador O simplemente asistente. Resuelve el gap de SharePoint Stream player cuando devuelve "elemento no existe" para reuniones ajenas.
Pre-requisitos
- Browser-daemon ejecutándose (verificar con
scripts/ensure-daemons-auth.sh). - Cuenta autenticada:
- Puerto 9222 → cuenta1.
- Puerto 9223 → cuenta2.
- Tab de Teams abierto en
teams.microsoft.com/v2/con sesión activa.
Invocación
# Listar chats disponibles (dry-run)
python scripts/extract-teams-transcripts.py --port 9223 --out-dir /tmp/test
# Procesar todos los chats de reunión
python scripts/extract-teams-transcripts.py \
--port 9223 \
--out-dir projects/{slug}_main/{slug}-monica/meetings/raw \
--batch
# Procesar un chat específico (match diacritic-insensitive)
python scripts/extract-teams-transcripts.py \
--port 9223 \
--out-dir projects/{slug}_main/{slug}-monica/meetings/raw \
--substring "Demo OCV"
Pipeline técnico
- List chats: expandir sección Chats del tree en Teams, scroll progresivo, filtrar por chats que empiecen con
[oRevisi(reuniones). - Click chat: double-click programático via
Input.dispatchMouseEvent. - Buscar botón Transcripción: si no aparece, probar Ver resumen primero (activa el Recap pane que a veces expone la transcripción).
- Esperar iframe
xplatplugins.aspx: el Recap de Teams carga la transcripción en este iframe del tenant owner. El iframe es target CDP independiente (type=iframe). - Scroll iframe + dedupe: encontrar el container con mayor
scrollHeight-clientHeight, scroll porclientHeight*0.85cada paso, capturarinnerTexty deduplicar líneas. Parar en 3 stalls consecutivos o end-of-scroll. - Save:
{out-dir}/YYYYMMDD-teams-{slug}.transcript.txtcon header (title + extracted timestamp).
Estados de salida por reunión
ok— transcripción capturada y guardada.chat_not_found— el chat no aparece en la vista.no_transcript_btn— la reunión no tiene grabación / transcripción disponible.no_transcript_after_resumen— click en Ver resumen no expuso el botón.empty— iframe accesible pero sin texto útil (<100 chars).
Limitaciones conocidas
- Chats Daily recurrentes: solo se captura la última reunión recap; para anteriores hay que scrollear el historial del chat (no implementado).
- Reuniones >30 días: pueden haberse purgado de Teams.
- Tenant URLs: se infieren del iframe. Los valores reales NUNCA se hardcodean.
- Teams migrado a
teams.cloud.microsoft: si el browser usa esta URL sin navegación explícita a/v2/, el chat list puede estar vacío. Forzar navegación ateams.microsoft.com/v2/.
Integración con /project-update
En Fase 2 (Digestión), invocar post-digest de emails para los chats de meeting con actividad nueva en los últimos 7 días. El skill meeting-digest puede consumir los .transcript.txt generados.
Anti-patrones
- NUNCA hardcodear tenant URLs, user principals, o identidades. Descubrir empíricamente.
- NUNCA asumir permisos: si el click devuelve
no_transcript_btn, marcar como processed con status; no reintentar. - NUNCA inventar dominios.
Validación 2026-04-24
8 transcripciones capturadas en una pasada (~384 KB texto):
- Reuniones propias del usuario: OK vía SP Stream directo.
- Reuniones con el usuario como asistente: OK vía Teams iframe (breakthrough — SharePoint Stream directo denegaba acceso, Teams iframe lo expone vía Recap).
- Reuniones sin grabación: detectadas y skipped con status
no_transcript_btn.
Signals
- GitHub stars
- 50
- Forks
- 12
- Last commit
- Sep 2026
ahel recommends instead
Advanced
- Catalog kind
- skill
- Gateway key
meeting-transcript-extract-gonzalezpazmonica- Source
- github.com/gonzalezpazmonica/savia