Реализация автоматического транскрибирования Zoom/Google Meet/Teams
Автотранскрибация видеоконференций — популярный корпоративный кейс: из записи совещания автоматически создаётся структурированный протокол с атрибуцией реплик участникам и списком задач.
Подходы к получению аудио
Вариант 1: Скачивание записи — проще, с задержкой:
# Zoom API для скачивания записей
import requests
def download_zoom_recording(meeting_id: str, token: str) -> bytes:
recordings = requests.get(
f"https://api.zoom.us/v2/meetings/{meeting_id}/recordings",
headers={"Authorization": f"Bearer {token}"}
).json()
audio_file = next(
f for f in recordings["recording_files"]
if f["file_type"] == "M4A" # только аудио
)
return requests.get(audio_file["download_url"]).content
Вариант 2: Zoom Webhooks — автозапуск после окончания встречи:
@app.post("/zoom/webhook")
async def zoom_webhook(request: Request):
data = await request.json()
if data["event"] == "recording.completed":
meeting_id = data["payload"]["object"]["id"]
asyncio.create_task(process_meeting_recording(meeting_id))
Вариант 3: Zoom Apps / Teams Bot — встроенный в платформу транскриптор.
Транскрибация с диаризацией
async def transcribe_meeting(audio_path: str, participants: list[str] = None) -> dict:
transcriber = CallTranscriber()
result = await transcriber.transcribe_call(audio_path)
# Генерируем протокол
protocol = await generate_meeting_protocol(result, participants)
return protocol
async def generate_meeting_protocol(transcript: dict, participants: list) -> dict:
"""Генерируем структурированный протокол через LLM"""
full_text = "\n".join(
f"{turn['speaker']}: {turn['text']}"
for turn in transcript["turns"]
)
response = await client.chat.completions.create(
model="gpt-4o",
messages=[{
"role": "system",
"content": "Создай протокол совещания с разделами: Повестка, Ключевые решения, Задачи (с ответственными и сроками), Следующая встреча."
}, {"role": "user", "content": full_text}]
)
return {
"summary": response.choices[0].message.content,
"transcript": transcript,
"participants": participants,
"duration": transcript["duration"]
}
Microsoft Teams через Graph API
# Скачивание записи Teams через Microsoft Graph
def get_teams_recording(meeting_id: str, token: str) -> bytes:
recordings = requests.get(
f"https://graph.microsoft.com/v1.0/me/onlineMeetings/{meeting_id}/recordings",
headers={"Authorization": f"Bearer {token}"}
).json()
# Скачиваем content_url
Сроки: интеграция с одной платформой + транскрипция — 1 неделя. Универсальная система с протоколированием — 2–3 недели.







