> ## Documentation Index
> Fetch the complete documentation index at: https://docs.devinenterprise.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Criar PRs após cada chamada

export const UseCaseHero = ({title, description, prompt, category, features, devinUrl, agent, intent, playbookId, type}) => {
  const encodedPrompt = encodeURIComponent(prompt || '');
  const tag = 'docs-use-case-gallery';
  const utm = 'utm_source=docs&utm_medium=use-case-gallery&utm_campaign=hero-cta';
  const agentParams = (agent ? '&agent=' + agent : '') + (intent ? '&intent=' + intent : '') + (playbookId ? '&playbookId=' + playbookId : '');
  const devinHref = type === 'schedule' ? 'https://app.devin.ai/settings/schedules/create?' + utm + agentParams + (prompt ? '&prompt=' + encodedPrompt : '') : type === 'review' ? 'https://app.devin.ai/review?' + utm : agent === 'ada' ? 'https://app.devin.ai/search?' + utm + '&noSubmit=true' + (prompt ? '&prompt=' + encodedPrompt : '') : devinUrl ? devinUrl.includes('?') ? devinUrl + '&' + utm + agentParams : devinUrl + '?' + utm + agentParams : prompt ? 'https://app.devin.ai/?tags=' + tag + '&' + utm + agentParams + '&prompt=' + encodedPrompt : 'https://app.devin.ai/?' + utm + agentParams;
  const buttonLabel = type === 'schedule' ? 'Schedule in Devin ↗' : type === 'review' ? 'Set Up Devin Review ↗' : agent === 'advanced' ? 'Try in Devin ↗' : agent === 'dana' ? 'Try in Dana ↗' : agent === 'ada' ? 'Try in Ask Devin ↗' : 'Try in Devin ↗';
  const featureList = features ? features.split(',').map(f => f.trim()) : [];
  return <div className="uc-hero">
      <div className="uc-hero-inner">
        <div className="uc-hero-left">
          <h1 className="uc-hero-title">{title}</h1>
          <p className="uc-hero-desc">{description}</p>
          <div>
            <a href={devinHref} target="_blank" rel="noopener noreferrer" className="try-in-devin-btn">
              {buttonLabel}
            </a>
          </div>
        </div>
        <div className="uc-hero-meta">
          <div className="uc-meta-item">
            <span className="uc-meta-label">Author</span>
            <span className="uc-meta-value">Cognition</span>
          </div>
          <div className="uc-meta-item">
            <span className="uc-meta-label">Category</span>
            <span className="uc-meta-value">{category}</span>
          </div>
          {featureList.length > 0 && <div className="uc-meta-item">
              <span className="uc-meta-label">Features</span>
              <span className="uc-meta-value">{featureList.join(', ')}</span>
            </div>}
        </div>
      </div>
    </div>;
};

export const PromptBlock = ({children, type, agent, intent, playbookId}) => {
  var utm = 'utm_source=docs&utm_medium=use-case-gallery&utm_campaign=prompt-block';
  var tag = 'docs-use-case-gallery';
  var agentParams = (agent ? '&agent=' + agent : '') + (intent ? '&intent=' + intent : '') + (playbookId ? '&playbookId=' + playbookId : '');
  var label = type === 'schedule' ? 'Schedule in Devin' : type === 'playbook' ? 'Create Playbook' : type === 'knowledge' ? 'Add to Knowledge' : agent === 'advanced' ? 'Try in Devin' : agent === 'dana' ? 'Try in Dana' : agent === 'ada' ? 'Try in Ask Devin' : 'Try in Devin';
  var buildUrl = function (text) {
    var encoded = encodeURIComponent(text);
    if (type === 'schedule') return 'https://app.devin.ai/settings/schedules/create?' + utm + agentParams + '&prompt=' + encoded;
    if (type === 'playbook') return 'https://app.devin.ai/settings/playbooks/create?' + utm + '&body=' + encoded;
    if (type === 'knowledge') return 'https://app.devin.ai/knowledge?' + utm + '&body=' + encoded;
    if (agent === 'ada') return 'https://app.devin.ai/search?' + utm + '&noSubmit=true&prompt=' + encoded;
    return 'https://app.devin.ai/?tags=' + tag + '&' + utm + agentParams + '&prompt=' + encoded;
  };
  const ref = React.useRef(null);
  const [href, setHref] = React.useState('#');
  React.useEffect(() => {
    if (!ref.current) return;
    var codeEl = ref.current.querySelector('pre code');
    if (codeEl) {
      var text = codeEl.textContent.trim();
      if (text) setHref(buildUrl(text));
    }
    var header = ref.current.querySelector('[data-component-part="code-block-header"]');
    if (header && !header.querySelector('.prompt-block-devin-link')) {
      var link = document.createElement('a');
      link.href = href;
      link.target = '_blank';
      link.rel = 'noopener noreferrer';
      link.className = 'prompt-block-devin-link';
      link.style.cssText = 'display:inline-flex;align-items:center;gap:6px;text-decoration:none;color:#fff;font-size:11px;font-weight:500;padding:4px 10px;border-radius:6px;white-space:nowrap;background:#317CFF;transition:background 0.2s;margin-left:8px;';
      link.innerHTML = '<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg> ' + label;
      link.onmouseenter = function () {
        link.style.background = '#2968D9';
      };
      link.onmouseleave = function () {
        link.style.background = '#317CFF';
      };
      header.appendChild(link);
    }
    var existingLink = ref.current.querySelector('.prompt-block-devin-link');
    if (existingLink && href !== '#') existingLink.href = href;
  });
  return <div className="prompt-block" ref={ref}>{children}</div>;
};

<UseCaseHero title="Crie PRs após cada chamada" description="Um agendamento do Devin de hora em hora consulta o Granola em busca de novas reuniões, extrai tarefas de engenharia das transcrições e inicia sessões filhas para abrir PRs." prompt="Configure um agendamento do Devin de hora em hora que consulte o Granola em busca de novas reuniões por meio do servidor MCP do Granola. Para cada reunião com uma transcrição pronta, extraia tarefas de engenharia e inicie sessões filhas do Devin para abrir PRs. Use uma nota do Knowledge para registrar as reuniões processadas." category="Automações" features="Agendamento, MCP, Playbooks, Avançado" type="schedule" agent="devin" />

<div className="uc-detail-wrapper">
  <Tip>Não quer configurar isso manualmente? Cole o link desta página em uma sessão do Devin e peça para ele configurar tudo para você.</Tip>

  O Granola grava suas reuniões e as transforma em notas, resumos e transcrições. Depois de conectar o Granola MCP, o Devin pode usar esses artefatos de reunião da mesma forma que um colega de equipe faria: ler o que foi discutido, identificar próximos passos concretos de engenharia e iniciar o trabalho.

  Execute isso como uma programação por hora e as tarefas podem começar assim que você terminar uma chamada. Todo o ciclo é executado dentro da sua instância do Devin, usando uma programação, o Granola MCP, Knowledge e sessões filhas.

  ```
  Sessão agendada do Devin (a cada hora)
    → Listar reuniões recentes do Granola via MCP
    → Para cada nova reunião (da mais antiga para a mais recente):
        → Buscar metadados, notas, resumo de IA e transcrição
        → Identificar tarefas de engenharia a partir da discussão
        → Iniciar sessões filhas do Devin para tarefas concretas
        → Registrar a reunião processada no Knowledge
  ```

  <Steps>
    <Step title="Conectar o MCP da Granola">
      Devin precisa de acesso às suas reuniões no Granola para ler transcrições e notas.

      1. Vá para **Configurações > Conexões > servidores MCP** e procure por **Granola**
      2. Clique em **Ativar** e se autentique — isso concede ao Devin acesso de leitura às suas reuniões, transcrições e notas
      3. Clique em **Test listing tools** para verificar se a conexão está funcionando

      Depois de conectado, Devin pode chamar `list_meetings`, `get_meetings` e `get_meeting_transcript` para buscar dados da reunião durante uma sessão. Saiba mais sobre [como configurar servidores MCP](/pt-BR/work-with-devin/mcp).
    </Step>

    <Step title="Crie uma nota do Knowledge para processed-meetings">
      Devin usa uma única nota no [Knowledge](/pt-BR/product-guides/knowledge) para registrar quais reuniões já foram processadas. Isso evita processamento duplicado nas execuções horárias.

      Vá para **Configurações > Knowledge** e crie uma nova nota:

      * **Nome**: `Granola Post-call Processor Meeting Log`
      * **Trigger**: `Ao executar a sessão agendada do processador pós-chamada do Granola, use esta nota para acompanhar as reuniões que já foram processadas.`
      * **Corpo**:

      ```json Granola Post-call Processor Meeting Log theme={null}
      {
        "last_processed_meeting_id": null,
        "last_processed_meeting_time": null,
        "last_processed_title": null,
        "updated_at": null
      }
      ```

      A sessão agendada registra, nesta nota, cada reunião processada com sucesso, para que a próxima execução retome de onde a anterior parou.
    </Step>

    <Step title="Escreva o playbook do Operador de pós-chamada">
      Crie um [playbook](/pt-BR/product-guides/creating-playbooks) que diga ao Devin como processar cada reunião. Vá para [**Configurações > Playbooks**](https://app.devin.ai/settings/playbooks/create?utm_source=docs\&utm_medium=use-case-gallery) e crie um novo playbook:

      <PromptBlock type="playbook">
        ```txt Operador pós-chamada theme={null}
        Transforme uma reunião concluída no Granola em trabalho de engenharia concreto.
        Leia a transcrição, identifique todas as tarefas de código acionáveis e
        inicie sessões filhas do Devin para abrir PRs. Tenha forte viés para ação —
        se algo puder virar uma PR, inicie.

        Para cada reunião:
        1. Leia a transcrição, o resumo gerado por IA e quaisquer notas privadas
        2. Identifique todas as tarefas de engenharia mencionadas ou implícitas:
           - Correções de bugs discutidas
           - Solicitações de funcionalidades com detalhes suficientes para serem especificadas
           - Refatorações ou melhorias acordadas
           - Tarefas de pesquisa/investigação
           - Atualizações de documentação
           - Mudanças de infraestrutura ou DevOps
        3. Para cada tarefa, escreva uma especificação concreta:
           - Em qual(is) repo(s) trabalhar
           - O que a mudança deve fazer
           - Critérios de aceitação
           - Contexto-chave da reunião (cite com moderação)
        4. Inicie uma sessão filha do Devin para cada tarefa concreta o suficiente para
           gerar uma PR. Inclua a especificação completa como prompt.
        5. Para tarefas vagas demais para uma PR, liste-as como ações recomendadas
           com o contexto ausente indicado.
        6. Retorne um resumo estruturado das sessões iniciadas e
           recomendações.

        Não inicie sessões para ideias vagas. Se uma tarefa precisar de
        esclarecimento, liste-a como uma recomendação.
        ```
      </PromptBlock>

      Anote o ID do playbook após salvar — você vai referenciá-lo no prompt de agendamento.
    </Step>

    <Step title="Crie a programação horária">
      Vá para [**Configurações > Agendamentos**](/pt-BR/product-guides/scheduled-sessions) e clique em **Criar agendamento**.

      * **Nome**: `Granola post-call processor`
      * **Frequência**: A cada hora (`0 * * * *`)
      * **Agente**: Devin — isso permite que o Devin crie sessões filhas para cada tarefa, para que as correções sejam executadas em paralelo
      * **Canal do Slack** (opcional): Selecione um canal para que sua equipe seja notificada quando as reuniões forem processadas e PRs forem abertos
      * **Prompt**:

      <PromptBlock type="schedule" agent="devin">
        ```txt Granola post-call processor theme={null}
        Execute o processador pós-chamada do Granola.

        Use o servidor MCP do Granola e a nota do Knowledge chamada
        "Granola Post-call Processor Meeting Log".

        1. Verifique o log de reuniões para encontrar o último ID/horário de reunião processado.
        2. Liste as reuniões do Granola das últimas 24 horas.
        3. Selecione as reuniões posteriores à reunião mais recente no log. Ordene da mais antiga para a mais recente.
        4. Para cada reunião:
           a. Busque os metadados, as notas privadas e o resumo gerado por IA via MCP
           b. Busque a transcrição completa via MCP
           c. Se a transcrição não estiver disponível, PARE o processamento do lote
              aqui — não avance. A próxima execução tentará novamente.
           d. Execute o playbook do Operador Pós-chamada nesta reunião
           e. Inicie sessões filhas do Devin para tarefas concretas de engenharia
           f. Registre essa reunião processada na nota do Knowledge
        5. Publique um resumo no Slack: reuniões processadas, sessões iniciadas
           e quaisquer reuniões ignoradas devido à ausência de transcrições.

        Se não houver novas reuniões desde a reunião mais recente no log, encerre silenciosamente.
        ```
      </PromptBlock>

      Defina **bypass approval** como `true` se quiser uma operação totalmente autônoma — sem necessidade de aprovações manuais para ferramentas MCP, atualizações do Knowledge ou criação de sessões filhas.
    </Step>

    <Step title="O que uma execução típica gera">
      A cada hora, Devin processa novas reuniões e abre PRs direcionados. Veja como é a saída de uma sessão real:

      ```
      Processada 1 nova reunião do Granola desde a última entrada no registro de reuniões:

      Reunião: "Backend API planning" (2026-04-29 14:00)

      Sessões filhas iniciadas (3):
      1. Fix N+1 query in /api/invoices endpoint
         Repo: acme/api-server
         PR: Eager-load invoice line items to fix timeout
         Sessão: https://app.devin.ai/sessions/abc123

      2. Add rate limiting to webhook endpoints
         Repo: acme/api-server
         PR: Per-key rate limits on /webhooks/*
         Sessão: https://app.devin.ai/sessions/def456

      3. Update API docs for new billing endpoints
         Repo: acme/docs
         PR: Add billing endpoint reference docs
         Sessão: https://app.devin.ai/sessions/ghi789

      Ações recomendadas (1):
      - Investigar o fluxo de renovação do auth token — mencionado como "às vezes
        instável", mas nenhum erro específico ou repo identificado. Necessita de mais
        contexto da equipe.

      Registro de reuniões do Knowledge atualizado para "Backend API planning" (2026-04-29).
      ```

      Cada sessão filha é executada de forma independente e abre seu próprio PR, com o contexto da reunião incorporado à descrição.
    </Step>

    <Step title="Ajuste e refine">
      Após alguns dias de execuções, revise o que está funcionando e faça ajustes:

      **Lide com atrasos nas transcrições.** O agendamento para de processar quando encontra uma reunião cuja transcrição ainda não está pronta — isso evita pular reuniões com processamento atrasado. Se você perceber que as transcrições estão demorando com frequência, aumente o intervalo do agendamento ou adicione uma margem de atraso ao prompt.

      **Defina o escopo por tipo de reunião.** Nem toda reunião gera trabalho de engenharia. Adicione filtros ao prompt para pular certos tipos de reunião:

      <PromptBlock agent="advanced">
        ```txt Filtrar reuniões por tipo theme={null}
        Atualize o prompt do agendamento: pule reuniões com títulos contendo
        "1:1", "standup" ou "social". Processe apenas reuniões que
        provavelmente envolvam discussões de engenharia — sessões de planejamento,
        triagem de bugs, revisões de design e chamadas com clientes.
        ```
      </PromptBlock>

      **Aprenda com os resultados.** Depois de algumas semanas, peça ao Devin para analisar quais sessões filhas resultaram em PRs mesclados e quais foram fechadas sem mesclagem. Use esse feedback para refinar os critérios de extração de tarefas do playbook:

      <PromptBlock agent="advanced">
        ```txt Analisar resultados pós-chamada e atualizar playbook theme={null}
        Analise todas as sessões filhas iniciadas pelo processador pós-chamada
        do Granola nas últimas 2 semanas. Para cada sessão, verifique se
        o PR foi mesclado ou fechado.

        Identifique padrões — quais tipos de tarefa produzem consistentemente
        PRs que podem ser mesclados, quais são vagos demais e onde o playbook
        precisa de mais contexto. Em seguida, sugira atualizações para o playbook
        do Operador pós-chamada com base nesses aprendizados.
        ```
      </PromptBlock>
    </Step>
  </Steps>
</div>
