> ## 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.

# Crea PR dopo ogni chiamata

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="Crea PR dopo ogni chiamata" description="Una pianificazione oraria di Devin controlla Granola per nuove riunioni, estrae le attività di ingegneria dalle trascrizioni e avvia sessioni figlie per scrivere PR." prompt="Configura una pianificazione oraria di Devin che controlli Granola per nuove riunioni tramite il server MCP di Granola. Per ogni riunione con una trascrizione pronta, estrai le attività di ingegneria e avvia sessioni figlie di Devin per aprire PR. Usa una nota di Knowledge per registrare le riunioni già elaborate." category="Automazioni" features="Agendamento, MCP, Playbook, Avanzate" type="schedule" agent="devin" />

<div className="uc-detail-wrapper">
  <Tip>Preferisci non configurarlo manualmente? Incolla un collegamento a questa pagina in una sessione di Devin e chiedigli di configurare tutto per te.</Tip>

  Granola registra le tue riunioni e le trasforma in note, riepiloghi e trascrizioni. Una volta connesso il Granola MCP, Devin può utilizzare questi elementi delle riunioni esattamente come farebbe un collega: leggere ciò che è stato discusso, individuare attività di follow-up tecniche concrete e iniziare a lavorare.

  Esegui questa pianificazione ogni ora e le attività possono iniziare non appena esci da una chiamata. L'intero ciclo viene eseguito all'interno della tua istanza di Devin, utilizzando una pianificazione, il Granola MCP, Knowledge e le child sessions.

  ```
  Sessione pianificata di Devin (ogni ora)
    → Elenca le riunioni Granola recenti tramite MCP
    → Per ogni nuova riunione (dalla più vecchia alla più recente):
        → Recupera metadati, note, riepilogo AI, trascrizione
        → Identifica le attività tecniche dalla discussione
        → Avvia sessioni figlie di Devin per le attività concrete
        → Registra la riunione elaborata in Knowledge
  ```

  <Steps>
    <Step title="Collega il MCP di Granola">
      Devin deve poter accedere alle tue riunioni su Granola per leggere trascrizioni e note.

      1. Vai su **Settings > Connections > server MCP** e cerca **Granola**
      2. Fai clic su **Enable** ed effettua l'autenticazione: in questo modo Devin ottiene l'accesso in sola lettura alle tue riunioni, trascrizioni e note
      3. Fai clic su **Test listing tools** per verificare che la connessione funzioni correttamente

      Una volta connesso, Devin può chiamare `list_meetings`, `get_meetings` e `get_meeting_transcript` per recuperare i dati delle riunioni durante una sessione. Scopri di più su [come configurare i server MCP](/it/work-with-devin/mcp).
    </Step>

    <Step title="Crea una nota di Knowledge denominata processed-meetings">
      Devin usa una singola nota [Knowledge](/it/product-guides/knowledge) per registrare quali riunioni sono già state elaborate. Questo evita elaborazioni duplicate tra un run orario e l'altro.

      Vai a **Settings > Knowledge** e crea una nuova nota:

      * **Nome**: `Granola Post-call Processor Meeting Log`
      * **Trigger**: `Quando esegui la sessione pianificata di Granola post-call processor, usa questa nota per tenere traccia delle riunioni già elaborate.`
      * **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
      }
      ```

      La sessione pianificata registra in questa nota ogni riunione elaborata con successo, così il run successivo riprende da dove si era fermato il precedente.
    </Step>

    <Step title="Scrivi il playbook dell'Operatore post-chiamata">
      Crea un [playbook](/it/product-guides/creating-playbooks) che indichi a Devin come gestire ogni riunione. Vai a [**Settings > Playbooks**](https://app.devin.ai/settings/playbooks/create?utm_source=docs\&utm_medium=use-case-gallery) e crea un nuovo playbook:

      <PromptBlock type="playbook">
        ```txt Operatore post-call theme={null}
        Trasforma una riunione Granola conclusa in attività di sviluppo concrete.
        Leggi la trascrizione, individua ogni task di codice attuabile e avvia
        sessioni figlie di Devin per aprire PR. Privilegia nettamente l'azione:
        se qualcosa può diventare una PR, falla partire.

        Per ogni riunione:
        1. Leggi la trascrizione, il riepilogo dell'AI ed eventuali note private
        2. Individua ogni attività di ingegneria menzionata o implicita:
           - Correzioni di bug discusse
           - Richieste di funzionalità con dettagli sufficienti per definirne le specifiche
           - Refactoring o miglioramenti concordati
           - Attività di ricerca/indagine
           - Aggiornamenti della documentazione
           - Modifiche all'infrastruttura o al DevOps
        3. Per ogni attività, scrivi una specifica concreta:
           - In quale/i repo lavorare
           - Cosa deve fare la modifica
           - Criteri di accettazione
           - Contesto chiave emerso nella riunione (cita con parsimonia)
        4. Avvia una sessione figlia di Devin per ogni attività abbastanza concreta da
           produrre una PR. Includi la specifica completa come prompt.
        5. Per le attività troppo vaghe per una PR, elencale come azioni consigliate
           indicando il contesto mancante.
        6. Restituisci un riepilogo strutturato delle sessioni avviate e delle
           raccomandazioni.

        Non avviare sessioni per idee vaghe. Se un'attività richiede
        chiarimenti, elencala invece come raccomandazione.
        ```
      </PromptBlock>

      Annota l'ID del playbook dopo averlo salvato: ti servirà nel prompt di pianificazione.
    </Step>

    <Step title="Crea la pianificazione oraria">
      Vai a [**Settings > Agendamento**](/it/product-guides/scheduled-sessions) e fai clic su **Crea pianificazione**.

      * **Nome**: `Granola post-call processor`
      * **Frequenza**: Ogni ora (`0 * * * *`)
      * **Agent**: Devin — questo consente a Devin di avviare sessioni figlie per ogni attività, in modo che le correzioni vengano eseguite in parallelo
      * **Canale Slack** (facoltativo): Seleziona un canale così il tuo team riceverà notifiche quando le riunioni vengono elaborate e vengono aperte PR
      * **Prompt**:

      <PromptBlock type="schedule" agent="devin">
        ```txt Granola post-call processor theme={null}
        Esegui il processore post-call di Granola.

        Usa il server MCP di Granola e la nota di Knowledge chiamata
        "Granola Post-call Processor Meeting Log".

        1. Verifica il registro delle riunioni per trovare l'ultimo ID/orario della riunione elaborata.
        2. Elenca le riunioni di Granola delle ultime 24 ore.
        3. Seleziona le riunioni successive all'ultima riunione nel registro. Ordinale dalla più vecchia alla più recente.
        4. Per ogni riunione:
           a. Recupera metadati, note private e riepilogo AI tramite MCP
           b. Recupera la trascrizione completa tramite MCP
           c. Se la trascrizione non è disponibile, INTERROMPI l'elaborazione del batch
              qui — non andare avanti. La prossima esecuzione riproverà.
           d. Esegui il playbook Post-call Operator per questa riunione
           e. Avvia sessioni figlie di Devin per attività di ingegneria specifiche
           f. Registra questa riunione elaborata nella nota di Knowledge
        5. Pubblica un riepilogo su Slack: riunioni elaborate, sessioni avviate,
           ed eventuali riunioni saltate a causa di trascrizioni mancanti.

        Se non ci sono nuove riunioni dopo l'ultima riunione nel registro, termina senza fare nulla.
        ```
      </PromptBlock>

      Imposta **bypass approval** su `true` se vuoi un funzionamento completamente autonomo — non saranno necessarie approvazioni manuali per gli strumenti MCP, gli aggiornamenti di Knowledge o la creazione di sessioni figlie.
    </Step>

    <Step title="Output tipico di una run">
      Ogni ora, Devin elabora le eventuali nuove riunioni e apre pull request (PR) mirate. Ecco l'output di una sessione reale:

      ```
      Elaborata 1 nuova riunione Granola dall'ultima voce del registro riunioni:

      Riunione: "Backend API planning" (2026-04-29 14:00)

      Sessioni figlie avviate (3):
      1. Fix N+1 query in /api/invoices endpoint
         Repo: acme/api-server
         PR: Eager-load invoice line items to fix timeout
         Session: https://app.devin.ai/sessions/abc123

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

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

      Azioni consigliate (1):
      - Analizzare il flusso di aggiornamento dell'auth token — indicato come "a volte
        instabile" ma senza un errore specifico o un repo identificato. Necessita di maggiore
        contesto dal team.

      Registro riunioni Knowledge aggiornato a "Backend API planning" (2026-04-29).
      ```

      Ogni sessione figlia funziona in modo indipendente e apre la propria pull request (PR) con il contesto della riunione già integrato nella descrizione.
    </Step>

    <Step title="Affina e itera">
      Dopo alcuni giorni di run, rivedi cosa funziona e apporta eventuali modifiche:

      **Gestisci i ritardi delle trascrizioni.** La pianificazione interrompe l'elaborazione quando incontra una riunione la cui trascrizione non è ancora pronta: in questo modo evita di saltare riunioni con trascrizioni in ritardo. Se noti che le trascrizioni arrivano regolarmente in ritardo, aumenta l'intervallo della pianificazione oppure aggiungi un buffer di attesa al prompt.

      **Definisci l'ambito in base al tipo di riunione.** Non tutte le riunioni generano attività di ingegneria. Aggiungi filtri al prompt per saltare determinati tipi di riunione:

      <PromptBlock agent="advanced">
        ```txt Filtra le riunioni per tipo theme={null}
        Aggiorna il prompt della pianificazione: salta le riunioni con titoli che contengono
        "1:1", "standup" o "social". Elabora solo le riunioni che
        probabilmente includono discussioni di ingegneria — sessioni di pianificazione,
        triage dei bug, revisioni di progettazione e call con i clienti.
        ```
      </PromptBlock>

      **Impara dai risultati.** Dopo un paio di settimane, chiedi a Devin di analizzare quali sessioni figlie hanno prodotto PR di cui è stato eseguito il merge e quali sono state chiuse senza merge. Usa questo feedback per affinare i criteri di estrazione delle attività del playbook:

      <PromptBlock agent="advanced">
        ```txt Analizza gli esiti post-call e aggiorna il playbook theme={null}
        Esamina tutte le sessioni figlie avviate dal processore post-call
        di Granola nelle ultime 2 settimane. Per ogni sessione, verifica se
        la PR è stata sottoposta a merge o chiusa.

        Individua i pattern ricorrenti — quali tipi di attività producono con costanza
        PR su cui è possibile eseguire il merge, quali sono troppo vaghi e dove il playbook
        richiede più contesto. Poi suggerisci aggiornamenti al playbook
        dell'Operatore post-call sulla base di questi riscontri.
        ```
      </PromptBlock>
    </Step>
  </Steps>
</div>
