---
name: shopify-auditoria-canales
description: "Solo lectura: muestra en qué canales de venta está publicado cada producto y señala los productos activos que no están publicados donde deberían. Úsala después de importar productos o cuando sospeches que algo no aparece en tu tienda online."
---

## Propósito
Consulta todos los productos activos y las publicaciones (canales de venta) en las que son visibles. Señala los productos que están activos pero no aparecen en canales clave (p. ej., Tienda online, Google Shopping, Meta). Evita la pérdida silenciosa de ventas por productos que existen en el catálogo pero son invisibles en los canales de venta. Solo lectura, sin mutaciones.

## Requisitos
- Sesión autenticada de Shopify CLI: `shopify store auth --store <tu-tienda>.myshopify.com --scopes read_products,read_publications`
- Las consultas se ejecutan con `shopify store execute`.
- Permisos (scopes) de API: `read_products`, `read_publications`

## Parámetros

| Parámetro | Tipo | Obligatorio | Predeterminado | Descripción |
|-----------|------|-------------|----------------|-------------|
| store | string | sí | — | Dominio de la tienda (p. ej., mitienda.myshopify.com) |
| required_channels | array | no | ["Online Store"] | Nombres de los canales en los que deberían estar todos los productos activos |
| format | string | no | human | Formato de salida: `human` o `json` |

## Seguridad

> ℹ️ Skill de solo lectura: no ejecuta mutaciones. Puedes usarla en cualquier momento sin riesgo.

## Pasos

1. **OPERACIÓN:** `publications` — consulta
   **Entradas:** `first: 50`
   **Resultado esperado:** Todas las publicaciones (canales de venta) disponibles con `id`, `name`

2. **OPERACIÓN:** `products` — consulta
   **Entradas:** `query: "status:active"`, `first: 250`, campos `publishedOnCurrentPublication`, `resourcePublications { publication { name } }`, cursor de paginación
   **Resultado esperado:** Productos activos con su estado de publicación por canal

3. Para cada producto: revisa si aparece en cada canal de `required_channels` y márcalo si falta en alguno

## Operaciones GraphQL

```graphql
# publications:query — validada con api_version 2025-01
query SalesChannels {
  publications(first: 50) {
    edges {
      node {
        id
        name
        supportsFuturePublishing
        app {
          title
        }
      }
    }
  }
}
```

```graphql
# products:query — validada con api_version 2025-01
query ProductPublications($after: String) {
  products(first: 250, after: $after, query: "status:active") {
    edges {
      node {
        id
        title
        handle
        status
        resourcePublications(first: 20) {
          edges {
            node {
              publication {
                id
                name
              }
              publishDate
              isPublished
            }
          }
        }
      }
    }
    pageInfo {
      hasNextPage
      endCursor
    }
  }
}
```

## Seguimiento de la sesión

**Claude DEBE mostrar lo siguiente en cada etapa. Es obligatorio.**

**Al iniciar**, muestra:
```
╔════════════════════════════════════════════════╗
║  SKILL: Productos que no están en tus canales  ║
║  Tienda: <dominio de la tienda>                ║
║  Inicio: <AAAA-MM-DD HH:MM UTC>                ║
╚════════════════════════════════════════════════╝
```

**Después de cada paso**, muestra:
```
[N/TOTAL] <CONSULTA|MUTACIÓN>  <OperationName>
          → Parámetros: <resumen breve de las entradas clave>
          → Resultado: <cantidad o desenlace>
```

**Al terminar**, muestra:

Para `format: human` (predeterminado):
```
══════════════════════════════════════════════
AUDITORÍA DE CANALES DE VENTA
  Productos activos:              <n>
  Canales de venta encontrados:   <n>
  Productos con canales faltantes: <n>

  No están en "Online Store":
    "<título del producto>"  (<handle>)
  Archivo: publication_audit_<fecha>.csv
══════════════════════════════════════════════
```

Para `format: json`, muestra:
```json
{
  "skill": "shopify-auditoria-canales",
  "store": "<dominio>",
  "active_products": 0,
  "channels_found": 0,
  "missing_channel_count": 0,
  "output_file": "publication_audit_<fecha>.csv"
}
```

## Formato de salida
Archivo CSV `publication_audit_<AAAA-MM-DD>.csv` con las columnas:
`product_id`, `title`, `handle`, `channel_name`, `is_published`, `publish_date`, `issue`

## Manejo de errores
| Error | Causa | Solución |
|-------|-------|----------|
| `THROTTLED` | Se superó el límite de solicitudes de la API | Espera 2 segundos y reintenta hasta 3 veces |
| No se encuentra el canal | El canal requerido no está instalado o cambió de nombre | Reporta el canal como faltante en el resumen |
| No hay productos activos | Catálogo vacío | Termina con 0 resultados |

## Buenas prácticas
- Ejecútala después de cualquier importación masiva de productos: no siempre se publican en todos los canales por defecto.
- Si vendes en varios canales, agrega todos los canales importantes a `required_channels` para detectar productos que falten en cualquiera de ellos.
- Que un producto no esté publicado en un canal puede ser intencional (p. ej., artículos solo para mayoristas): revisa la lista marcada antes de publicar.
- Combínala con `shopify-calidad-fichas-producto`: los productos con fichas poco completas deberían corregirse antes de publicarlos en más canales.
