Crie um Assistente de Notas de Reunião com IA em uma Tarde

LLazare Rossillon

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.

Crie um Assistente de Notas de Reunião com IA em uma Tarde
August 13, 2026

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:

  1. Captura: um bot entra na reunião e a grava
  2. Transcrição: a fala se torna texto com atribuição de interlocutor
  3. 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

Similar blogstutorial