Crie um Assistente de Notas de Reunião com IA em uma Tarde
A arquitetura por trás de todo assistente de reunião com IA: um bot de reunião grava a chamada, webhooks entregam a transcrição, um LLM escreve o resumo. Aqui está todo o pipeline com código.
Todo assistente de reunião com IA — os anotadores, os analisadores de chamadas de vendas, os gravadores de conformidade — é construído sobre o mesmo pipeline de três etapas:
- Captura: um bot entra na reunião e a grava
- Transcrição: a fala se torna texto com atribuição de interlocutor
- Raciocínio: um LLM transforma a transcrição em resumos, itens de ação ou atualizações de CRM
As etapas 1 e 2 são infraestrutura. A etapa 3 é o seu produto. Este guia mostra como reduzir as etapas 1 e 2 a uma única chamada de API para que você possa dedicar seu tempo à etapa 3.
A camada de captura é a parte difícil — bots que sobrevivem a salas de espera, mudanças de layout e chamadas de quatro horas no Zoom, Google Meet e Microsoft Teams. Essa é a parte que você deve comprar, não construir.
A camada de captura: uma requisição POST
import { createBaasClient } from "@meeting-baas/sdk";
const client = createBaasClient({
api_key: process.env.MEETING_BAAS_API_KEY,
api_version: "v2"
});
const { success, data, error } = await client.createBot({
bot_name: "Acme Notetaker",
meeting_url: meetingUrl // Zoom, Google Meet or Microsoft Teams
});A mesma requisição funciona para todas as três plataformas. Com a integração de calendário habilitada, você pula até mesmo esta etapa — os bots são agendados automaticamente para as próximas reuniões dos seus usuários.
A transcrição chega por webhook
Quando a reunião termina, seu webhook recebe a transcrição com atribuição de interlocutor, a lista de participantes e a URL da gravação. Um handler mínimo:
export async function POST(req: Request) {
const rawBody = await req.text();
// Verify the webhook signature over the raw body before parsing —
// see the webhooks documentation for the signing scheme
if (!verifySignature(req.headers, rawBody)) {
return new Response("invalid signature", { status: 401 });
}
const event = JSON.parse(rawBody);
if (event.event === "complete") {
const { bot_id, transcript, participants } = event.data;
// Deduplicate on bot_id so replayed deliveries don't re-run the LLM
if (await alreadyProcessed(bot_id)) return new Response("ok");
await summarize(bot_id, transcript, participants);
}
return new Response("ok");
}A separação de interlocutores está incluída em todas as gravações, e os segmentos são alinhados aos nomes reais dos participantes — seu prompt de LLM recebe "Sarah: vamos lançar na sexta" em vez de "Speaker 2: vamos lançar na sexta". Essa diferença é o que faz a extração de itens de ação realmente funcionar.
A camada de raciocínio: o seu produto
Com uma transcrição limpa e atribuída por interlocutor, a etapa do LLM é um prompt, não um projeto:
async function summarize(botId: string, transcript: Segment[], participants: Participant[]) {
const text = transcript
.map((segment) => `${segment.speaker}: ${segment.text}`)
.join("\n");
const summary = await llm.complete({
prompt: `Summarize this meeting. Extract decisions and action items with owners.\n\n${text}`
});
await saveNotes(botId, summary);
}A partir daqui, a diferenciação é trabalho de produto: e-mails de acompanhamento por participante, enriquecimento de CRM, rastreamento de tópicos em reuniões recorrentes, ou um bot que responde a perguntas ao vivo — a API de bots com voz cobre esse último caso.
Quanto custa para executar
A gravação custa 1 token por hora com separação de interlocutores incluída; a transcrição adiciona 0,25 tokens por hora. Com pacotes de tokens a $0,35–0,50 por token, uma hora de reunião totalmente transcrita custa $0,44–0,63 — antes dos seus custos de LLM, que em uma transcrição de uma hora de reunião são tipicamente um ou dois centavos.
Próximos passos
- Visão geral da API de bot de reunião — a camada de captura em detalhe
- API de transcrição de reunião — idiomas, separação de interlocutores, BYOK
- Guias de plataforma: Zoom · Google Meet · Microsoft Teams
- Documentação da API