Skip to content
Documentation
Command

/start-10-4.es

Lesson command

From plugin
ai-agent-camp
345200 skills8 agents200 commands
Install
$ npx -y skills add minicoohei/ai-agent-camp --agent claude-code

How it fires

How this command gets triggered: by you, by Claude, or both.

  • Fires itselfClaude auto-loads it when your prompt matches the work.
  • You can call itInvoke it directly when you want it.
  • Slash command/start-10-4.es

Context preview

What this command does when you run it.

Lesson command

Command definition

start-10-4.es.md
description: "Lesson command"
chapter: "courses/aiagent/lesson03-core/module10-gas"
duration: "~25 min"
prerequisites: ["start-10-1"]
level: "intermediate"
tags: ["gas", "gmail", "sheets", "automation", "clasp"]
nonInteractiveMode: deferred

๐ŸŽ“ Lesson 10-4: Busqueda y extraccion de correos con GmailApp โ†’ Organizacion en hoja de calculo

๐Ÿ“ Lo que hara en esta sesion

**Lesson 10-4: Busqueda y extraccion de correos con GmailApp โ†’ Organizacion en hoja de calculo**!

| Elemento | Contenido | |------|------| | Objetivo | Buscar y extraer correos con GmailApp de GAS y organizarlos automaticamente en una hoja de calculo | | Duracion | ~25 min | | Habilidades utilizadas | GAS (GmailApp, SpreadsheetApp), clasp | | Requisitos previos | Lesson 10-1 completada (clasp autenticado) |

**Flujo de la sesion:** 1. Agregar scope de Gmail a appsscript.json 2. Buscar correos con GmailApp.search() 3. Extraer informacion de hilos/mensajes 4. Escribir datos en hoja de calculo con SpreadsheetApp 5. Configurar trigger de ejecucion periodica

Al final de esta sesion, tendra un script de GAS completo que busca y extrae correos automaticamente y los organiza en una hoja de calculo.

> **๐Ÿ’ก Consejo**: Si la respuesta de la IA se detiene a mitad de camino, escriba "por favor continue" o "siga adelante" para reanudar.

---

๐ŸŽฏ Verificacion de preparacion

Primero verifiquemos que todo este listo.

**Configuracion de AskQuestion:**

{
  "title": "๐ŸŽฏ Verificacion previa a la sesion",
  "questions": [{
    "id": "readiness",
    "prompt": "Esta listo/a?",
    "options": [
      {"id": "ready", "label": "Listo! Comencemos"},
      {"id": "check_prereq", "label": "Verificar requisitos previos"},
      {"id": "different_lesson", "label": "Ir a otra leccion"}
    ]
  }]
}

(ready โ†’ Ir al Step 1) (check_prereq โ†’ Verificar que Lesson 10-1 este completada. Verificar estado de autenticacion con `clasp login --status`) (different_lesson โ†’ Mostrar lista de modulos)

---

๐Ÿš€ Step 1: Agregar scope de Gmail a appsscript.json

{
  "title": "๐Ÿš€ Step 1: Agregar scope de Gmail",
  "questions": [{
    "id": "step_action",
    "prompt": "Se agregara el scope de lectura de Gmail a appsscript.json.",
    "options": [
      {"id": "practice", "label": "Continuar"},
      {"id": "review", "label": "Ver el appsscript.json actual"},
      {"id": "skip", "label": "Omitir"}
    ]
  }]
}

**Indicaciones tras la seleccion:**

Agregar lo siguiente a `oauthScopes` en `gas-example/appsscript.json`:

{
  "timeZone": "Asia/Tokyo",
  "dependencies": {},
  "exceptionLogging": "STACKDRIVER",
  "runtimeVersion": "V8",
  "oauthScopes": [
    "https://www.googleapis.com/auth/gmail.readonly",
    "https://www.googleapis.com/auth/spreadsheets",
    "https://www.googleapis.com/auth/script.scriptapp"
  ]
}

Despues de agregar, desplegar con `clasp push`:

cd gas-example && npx -y @google/clasp push

**Resultado esperado**: El scope `gmail.readonly` se agrega a `appsscript.json` y el push se realiza correctamente.

---

๐Ÿš€ Step 2: Buscar correos con GmailApp.search()

{
  "title": "๐Ÿš€ Step 2: Busqueda de correos",
  "questions": [{
    "id": "step_action",
    "prompt": "Se creara una funcion para buscar correos usando GmailApp.search().",
    "options": [
      {"id": "practice", "label": "Continuar"},
      {"id": "review", "label": "Ver sintaxis de consultas de busqueda de Gmail"},
      {"id": "skip", "label": "Omitir"}
    ]
  }]
}

**Indicaciones tras la seleccion:**

Crear la funcion `searchEmails` en `gas-example/Gmail.gs`:

function searchEmails(query, maxResults) {
  query = query || "is:unread newer_than:7d";
  maxResults = maxResults || 50;
  var threads = GmailApp.search(query, 0, maxResults);
  Logger.log("Resultados de busqueda: " + threads.length + " hilos");
  return threads;
}

**Ejemplos de consultas de busqueda de Gmail:**

| Consulta | Significado | |--------|------| | `is:unread` | Correos no leidos | | `newer_than:7d` | Ultimos 7 dias | | `from:example@company.com` | Remitente especifico | | `subject:reunion` | Asunto que contiene "reunion" | | `has:attachment` | Con archivo adjunto | | `is:unread newer_than:3d` | Condicion compuesta |

`clasp push` โ†’ `clasp open` para abrir el editor de GAS, ejecutar `searchEmails` y verificar los logs.

**Resultado esperado**: Se muestra en los logs el numero de hilos encontrados.

---

๐Ÿš€ Step 3: Extraccion de informacion de correos

{
  "title": "๐Ÿš€ Step 3: Extraccion de informacion de correos",
  "questions": [{
    "id": "step_action",
    "prompt": "Se extraera informacion de los hilos (remitente, asunto, fecha, cuerpo).",
    "options": [
      {"id": "practice", "label": "Continuar"},
      {"id": "review", "label": "Ver la API de GmailMessage"},
      {"id": "skip", "label": "Omitir"}
    ]
  }]
}

**Indicaciones tras la seleccion:**

Agregar la funcion `extractEmailData`:

function extractEmailData(threads) {
  var data = [];
  threads.forEach(function(thread) {
    var messages = thread.getMessages();
    var lastMessage = messages[messages.length - 1];
    data.push({
      subject: lastMessage.getSubject(),
      from: lastMessage.getFrom(),
      date: lastMessage.getDate(),
      body: lastMessage.getPlainBody().substring(0, 200),
      isUnread: lastMessage.isUnread(),
      messageCount: messages.length
    });
  });
  return data;
}

**Metodos principales:**

| Metodo | Contenido obtenido | |---------|---------| | `getSubject()` | Asunto | | `getFrom()` | Remitente | | `getDate()` | Fecha y hora | | `getPlainBody()` | Cuerpo (texto) | | `isUnread()` | Si esta no leido | | `getMessages().length` | Numero de mensajes en el hilo |

**Resultado esperado**: La informacion de correos se extrae como un array de objetos.

---

๐Ÿš€ Step 4: Escribir datos en hoja de calculo

{
  "title": "๐Ÿš€ Step 4: Escribir en la hoja",
  "questions": [{
    "id": "step_action
Read more
Ships withai-agent-camp

AI Agent Training for Non-Engineers - Complete Guide to Claude Code / Cursor / Codex ### โš ๏ธ Before you clone Official repository (maintained by the authors): Running AI agents from this repo grants them shell, file-write, and external-API permissions on your

Get the whole plugin