Nuestras estadísticas de visitas propias están siempre activas. Google Analytics, que nos ayuda a entender cómo se usan nuestras páginas públicas (no tu espacio de trabajo con sesión iniciada), solo se activa con tu permiso. Consulta nuestra Política de privacidad.

Snowflake Cortex Agents MCP: cómo cargar las quejas en redes junto a las devoluciones

Los conectores MCP de Snowflake solo aceptan OAuth. Ejemplos de acceso externo y coste mensual estimado, con 12 llamadas a la API (Amazon falló).

Ilustración de un cubo de datos de vidrio transparente en el centro, con varias tablas en blanco apiladas dentro. A la izquierda, un embudo lleva al cubo un montón de tarjetas en blanco de redes sociales y de reseñas. A la derecha, un asistente redondo y luminoso lanza dos líneas finas hacia el cubo. Una llega a una capa con forma de globo de diálogo y la otra a una capa con una flecha de devolución.

Si vendes en Amazon o en tu propia tienda en línea, conoces bien el coste de las devoluciones. Cada producto devuelto suma envío, revisión y, muchas veces, una venta perdida. Los datos de ventas y devoluciones ya suelen estar en el almacén de datos de la empresa. Lo que casi nunca está ahí es lo que los clientes dicen del producto en público: las reseñas de Amazon, los hilos de Reddit y los comentarios de TikTok. Este artículo explica cómo poner esas dos cosas juntas en Snowflake y qué pasa cuando lo intentas con datos reales. La National Retail Federation estimó en octubre de 2025 que los consumidores de Estados Unidos devolverían unos 849.900 millones de dólares en mercancía en 2025. Es el 15,8 % de las ventas, y la tasa de las compras en línea es del 19,3 % (nota de prensa de la NRF).

El punto de partida es Snowflake Expedition 2026. El 2026-11-03, Snowflake presentó CoWork, el nuevo nombre de Snowflake Intelligence, y varias funciones nuevas de Cortex Agents (nota de prensa). La que más llama la atención son los conectores MCP, que permiten a un agente llamar a herramientas de un servidor MCP externo (documentación de conectores MCP). La idea surge sola: cargar reseñas y comentarios junto a las tablas de ventas y devoluciones y preguntar al agente qué tema de queja sube a la vez que la tasa de devoluciones.

Probamos la parte de datos de verdad. El 2026-11-06, entre las 00:16 y las 00:36 (hora de Singapur), hicimos 12 llamadas a la API de EveryInfra y guardamos cada petición y cada respuesta. La parte de Snowflake, en cambio, son ejemplos de configuración. En este equipo no tenemos una cuenta de Snowflake, así que no ejecutamos el SQL, los procedimientos ni el agente. Cada dato sobre Snowflake sale de snowflake.com o de docs.snowflake.com, con su fecha de lectura en Referencias.

La respuesta corta es esta. Hoy no puedes añadir el servidor MCP de EveryInfra como conector MCP de Snowflake, porque Snowflake solo acepta OAuth con un tipo de registro de cliente que nuestro servidor todavía no ofrece. Y aunque se pudiera, un conector no resolvería este problema. Lo que devuelve un conector se queda en la conversación y nunca llega a una tabla. El camino que funciona es una integración de acceso externo de Snowflake con un procedimiento almacenado en Python que llama a la API cada día y escribe las reseñas en tablas. Conviene decir desde ya lo que este artículo no muestra: las llamadas a reseñas de Amazon no devolvieron datos esa noche y no tenemos datos de devoluciones, así que aquí hay un plan de montaje y una estimación de coste, no una conclusión sobre qué queja provoca devoluciones. EveryInfra no tiene ninguna colaboración con Snowflake; todo lo que decimos de Snowflake sale de sus documentos y notas de prensa públicos.

Ilustración: a la izquierda, una puerta cerrada con una llave delante que no encaja en la cerradura. A la derecha, una puerta lateral de color verde azulado está abierta y una cinta transportadora pasa por ella, llevando un montón de tarjetas de reseñas en blanco hacia un cubo de vidrio.
La puerta del conector MCP pide un cliente OAuth registrado, y una clave de API no encaja. La puerta lateral del acceso externo deja pasar un solo dominio y lleva los datos directamente a las tablas.

Qué presentó Snowflake en Expedition 2026: snowflake cowork y Cortex Agents

El producto estrella del evento es Snowflake CoWork. La nota de prensa lo describe como un espacio de trabajo con agentes para equipos de negocio, en ai.snowflake.com. Cortex Code, o CoCo, es la herramienta hermana para desarrolladores e ingenieros de datos (nota de prensa de Expedition 2026, página de producto de CoWork).

Otra nota de prensa del mismo día anunció Business Ontology y Cortex AI Gateway. Business Ontology guarda el significado aprobado de los términos de negocio y se lo da a los agentes. Cortex AI Gateway controla cómo los agentes usan modelos, llaman a herramientas y actúan en los sistemas de la empresa (nota de prensa de Business Ontology y AI Gateway). Las dos cosas importan para nuestra pregunta. Un término como «tasa de devoluciones» necesita una sola fórmula aceptada por todos; si no, dos agentes darán dos respuestas distintas.

En este artículo, CoWork es el lugar donde la gente pregunta y Cortex Agents es quien trabaja. Cada asistente de CoWork es un objeto Cortex Agent. Su especificación fija el modelo, las instrucciones y las herramientas. Entre las herramientas están Cortex Analyst, que escribe SQL sobre vistas semánticas, Cortex Search para texto, la ejecución de código, las herramientas personalizadas que llaman a un procedimiento o función, los conectores MCP y la búsqueda web (introducción a Cortex Agents, crear y gestionar agentes).

Por eso la calidad de la respuesta depende sobre todo de las tablas y de la vista semántica. El agente traduce la pregunta a SQL y explica el resultado, pero no puede inventar datos que no estén cargados. La tabla siguiente resume el estado de las dos funciones que importan aquí, tal como lo leímos el 2026-11-06. «No consta» significa que ni la documentación ni la nota de prensa indican un estado.

FunciónEstado el 2026-11-06Fuente
Automations de CoWorkNo constaDocumentación de Automations
Conectores MCP de Cortex AgentsLa documentación no indica estado; solo OAuthDocumentación de conectores

La entrada del blog de CoWork (blog de CoWork) menciona la búsqueda analítica, que está en vista previa. Su ejemplo se parece mucho al nuestro: qué problemas de clientes aparecieron más el mes pasado. Primero reduce el conjunto con Cortex Search y después cuenta y compara con funciones de IA y SQL. La diferencia es que trabaja con documentos que ya están en Snowflake. En nuestro caso, la voz del cliente vive fuera, en Amazon, Reddit y TikTok. El primer trabajo es traerla dentro, con un calendario y con una forma que se pueda cruzar con ventas y devoluciones. Los límites y permisos de las Automations están más abajo, en la sección del correo semanal.

¿Puede snowflake cortex agents mcp conectarse directamente a EveryInfra?

Es la primera idea que se le ocurre a cualquiera. EveryInfra ya tiene un servidor MCP remoto (servidor MCP de EveryInfra), y Cortex Agents ahora puede llamar a servidores MCP externos. ¿Por qué no pegar la dirección del servidor en Snowflake y listo? Comparamos punto por punto lo que pide Snowflake con lo que hace nuestro servidor. La respuesta es que hoy no se puede, y el bloqueo está en cómo se registra el cliente OAuth.

La documentación de Snowflake es clara: Snowflake solo admite OAuth para conectarse a servidores MCP. Un administrador crea una integración de API con API_PROVIDER = external_mcp que guarda la configuración OAuth. Después crea un objeto de servidor MCP externo que apunta a esa integración (documentación de conectores MCP). Hay dos formas de rellenar la configuración OAuth.

La primera es OAuth estándar. Registras una aplicación en el servidor de autorización remoto y obtienes un identificador de cliente, con o sin secreto. También debes registrar en esa aplicación la URL de retorno https://identity.snowflake.com/oauth2/callback. La segunda forma es el registro dinámico de clientes: Snowflake pide por sí mismo un identificador al servidor remoto, y para eso el servidor debe implementar el RFC 7591 (RFC 7591). Los conectores ya preparados son Atlassian, GitHub, Glean, Linear y Salesforce, y el ejemplo de Atlassian usa el registro dinámico.

Captura de la página de documentación de Snowflake sobre conectores MCP, sección Key considerations and best practices. Dos recuadros verde azulado marcan dos líneas. Custom MCP servers dice que se usen servidores personalizados para los puntos MCP que no están en la lista de conectores. OAuth authentication dice que Snowflake solo admite OAuth para conexiones con servidores MCP.
Captura de la documentación de conectores MCP de Snowflake, leída el 2026-11-06 en hora de Singapur. Los recuadros son nuestros. docs.snowflake.com, Cortex Agents MCP connectors

EveryInfra tiene dos direcciones MCP. La habitual, https://api.everyinfra.com/mcp, usa una clave de API en una cabecera Bearer. A las 00:43 (hora de Singapur) del 2026-11-06 pedimos sus metadatos de recurso protegido y de servidor de autorización. Las dos peticiones devolvieron 404, así que esa dirección no ofrece descubrimiento OAuth. La dirección completa, https://api.everyinfra.com/mcp/all, se comporta de otra manera. En el mismo minuto, una petición sin credenciales devolvió 401 con una cabecera WWW-Authenticate.

Esa cabecera apunta a unos metadatos de recurso con el formato del RFC 9728, y esos metadatos nombran auth.everyinfra.com/oidc como servidor de autorización (RFC 9728). Después leímos los metadatos del servidor de autorización, que siguen el RFC 8414 (RFC 8414). Admiten PKCE con S256 y clientes públicos sin secreto. Pero el campo registration_endpoint está vacío, así que no hay registro dinámico. Nuestra documentación pública tampoco ofrece una página donde un cliente registre por su cuenta un cliente OAuth.

Petición (2026-11-06)Hora de SingapurResultado
/.well-known/oauth-protected-resource00:43:08404
/.well-known/oauth-protected-resource/mcp00:43:08404
/.well-known/oauth-authorization-server00:43:09404
POST /mcp/all sin credenciales00:43401 con cabecera WWW-Authenticate
Metadatos de auth.everyinfra.com/oidc00:43PKCE S256, clientes públicos, sin registration_endpoint
Lo que pide SnowflakeEveryInfra `/mcp` (clave de API)EveryInfra `/mcp/all` (probado a las 00:43, hora de Singapur)
Solo OAuthNo, usa una clave BearerSí, 401 con metadatos del RFC 9728
Registro dinámico de clientes (RFC 7591)No aplicaNo, los metadatos no tienen punto de registro
OAuth estándar con cliente y URL de retorno registradosNo aplicaNo hay registro de autoservicio en la documentación pública
Solo herramientas MCPSíSí
Nombre de host sin guiones bajosSíSí

La especificación MCP no obliga a usar OAuth. La versión 2025-06-18 dice que la autorización es opcional. Si un servidor la ofrece, debe publicar metadatos según los RFC 9728 y 8414, y el registro dinámico es una recomendación, no una obligación (autorización MCP, 2025-06-18). Un servidor con clave de API cumple la especificación, y un cliente que solo acepta OAuth también. Simplemente no encajan entre sí.

Snowflake tiene un segundo lugar para servidores MCP externos. En Cortex AI Gateway, un administrador puede añadir un servidor MCP personalizado. Su documentación también exige OAuth, una URL que termine en /mcp y el rol ACCOUNTADMIN (aplicaciones personalizadas de AI Gateway). Nuestra dirección con OAuth termina en /mcp/all, y la que termina en /mcp solo acepta clave. Ninguna dirección cumple las dos condiciones a la vez.

Supongamos que el problema del registro desaparece. Aun así, un conector no sirve para este trabajo. Cada persona pulsa Connect en CoWork, inicia sesión en la página remota y aprueba el acceso. A partir de ahí, el agente llama a las herramientas remotas durante la conversación, y los resultados se quedan en esa conversación (uso de conectores MCP en CoWork). Cada persona que pregunta necesita su propia cuenta de EveryInfra. Y, sobre todo, ninguna reseña llega a una tabla, así que el agente no puede cruzar tres meses de reseñas con tres meses de devoluciones.

Una pregunta sobre tendencias necesita historia, y la historia vive en tablas. Los conectores sirven para otro tipo de preguntas, como «de qué discute la gente ahora mismo bajo este vídeo». Esa pregunta es puntual y no necesita guardar nada. Encontramos cuatro maneras de conectar Snowflake con una API de datos externa. La tabla las ordena según dos criterios: si los datos llegan a una tabla y si hace falta OAuth.

CaminoLos datos llegan a una tablaNecesita OAuthÚtil paraFuente
Conector MCP (objeto de servidor MCP externo)No, solo en la conversaciónSíPreguntas puntualesConectores
Integración de acceso externo, procedimiento y tareaSíNo, la clave va en un secretoCargas diarias, nuestra opciónAcceso a redes externas
Recolector fuera de Snowflake y SnowpipeSíNoEquipos que ya tienen recolectoresSnowpipe
MCP externo en el SDK de agentes de Cortex CodeNo, salvo que tu código escriba en tablasNo, admite cabecerasDesarrolladores que prueban en códigoSDK de agentes

En el cuarto camino, una herramienta de desarrollo de Snowflake permite poner la clave de la API en una cabecera (documentación del SDK). Pero vive en el código del desarrollador, no en la interfaz de negocio de CoWork. El resto del artículo sigue el segundo camino, porque escribe datos en tablas según un calendario y bajo el control de acceso normal de Snowflake.

El camino que funciona: acceso externo y un procedimiento almacenado (ejemplo de configuración)

Todo el flujo cabe en un dibujo. La API de EveryInfra recoge reseñas y comentarios públicos de Amazon, Reddit y TikTok. Dentro de Snowflake, una tarea programada llama una vez al día a un procedimiento almacenado. El procedimiento llama a la API a través de una integración de acceso externo, guarda cada respuesta tal cual y luego la despliega en tablas de reseñas. Tus datos de ventas y el informe de devoluciones de FBA se cargan en otras dos tablas, como ya haces hoy. Encima van una vista semántica y un Cortex Agent, y el equipo de negocio pregunta desde CoWork.

Flujo animado en cinco etapas de izquierda a derecha. La primera es la API de EveryInfra, con amazon/reviews, reddit/search y tiktok/comments debajo. La segunda es la integración de acceso externo de Snowflake, con una regla que solo deja pasar api.everyinfra.com y un secreto con la clave. La tercera son dos tareas programadas, una que envía peticiones asíncronas y otra que recoge resultados. La cuarta son cuatro tablas: reseñas, menciones sociales, ventas y devoluciones. La quinta es una vista semántica y un Cortex Agent, junto a un globo que pregunta qué tema de queja sube con la tasa de devoluciones. Unos puntos verde azulado avanzan por las flechas.

Una integración de acceso externo es la forma estándar de Snowflake para que procedimientos y funciones salgan a internet. Usa tres objetos. La regla de red dice a qué hosts y puertos puede llegar el código. El secreto guarda la credencial. La integración une las dos cosas y se concede a roles concretos (introducción al acceso a redes externas, crear y usar una integración de acceso externo).

Nuestra regla solo deja pasar api.everyinfra.com. Aunque alguien cambie el código del procedimiento, no podrá llegar a otro host. La clave queda en el secreto, así que el código nunca la lleva en texto plano y el rol que ejecuta el procedimiento no puede leerla. En el ejemplo, voc es el nombre de la base de datos, por «voz del cliente».

sql
-- 1. Permitir tráfico de salida a un solo host
CREATE OR REPLACE NETWORK RULE voc.raw.everyinfra_egress
  MODE = EGRESS
  TYPE = HOST_PORT
  VALUE_LIST = ('api.everyinfra.com');

-- 2. Guardar la clave de la API. Crea una clave aparte en la consola de EveryInfra
--    con su propio límite de llamadas por minuto.
CREATE OR REPLACE SECRET voc.raw.everyinfra_key
  TYPE = GENERIC_STRING
  SECRET_STRING = '<clave de la API de EveryInfra>';

-- 3. Unir la regla y el secreto
CREATE OR REPLACE EXTERNAL ACCESS INTEGRATION everyinfra_access
  ALLOWED_NETWORK_RULES = (voc.raw.everyinfra_egress)
  ALLOWED_AUTHENTICATION_SECRETS = (voc.raw.everyinfra_key)
  ENABLED = TRUE;

-- 4. Concederla solo al rol de carga
GRANT USAGE ON INTEGRATION everyinfra_access TO ROLE voc_loader;
GRANT READ ON SECRET voc.raw.everyinfra_key TO ROLE voc_loader;

La sintaxis sigue la referencia SQL de Snowflake (CREATE NETWORK RULE, CREATE SECRET, CREATE EXTERNAL ACCESS INTEGRATION). Crear la integración requiere un privilegio de cuenta, así que normalmente lo hace un administrador una sola vez. Después, el rol de carga solo necesita uso sobre la integración y lectura sobre el secreto. La página de ejemplos de Snowflake muestra procedimientos completos que llaman a APIs externas con un secreto (ejemplos de acceso a redes externas).

El procedimiento tiene una decisión de diseño que cambia la factura: esperar cada resultado o enviar la petición y volver más tarde. La API de EveryInfra admite las dos cosas. Una llamada síncrona mantiene la conexión abierta hasta que llegan los datos; en nuestra prueba, la llamada más lenta a reseñas de Amazon la mantuvo 67 segundos. Una llamada asíncrona añade "mode": "async" al cuerpo de la petición. La API responde con un estado 202 y un identificador de tarea en unos dos segundos, y el resultado se recoge después con GET /api/v1/jobs/{job_id} (Documentación).

En Snowflake, esa diferencia se convierte en dinero. El procedimiento corre en un almacén, y el almacén cobra cada segundo que está encendido, también los segundos de espera. Por eso dividimos la carga en dos procedimientos y dos tareas. Uno solo envía las peticiones y termina en segundos. El otro recoge las tareas que ya acabaron. La tabla resume todos los objetos de Snowflake de este montaje.

ObjetoPara qué sirveQuién suele crearlo
Regla de red everyinfra_egressPermite la salida hacia un solo hostAdministrador de la cuenta
Secreto everyinfra_keyGuarda la clave de la APIAdministrador de la cuenta
Integración everyinfra_accessUne la regla y el secretoAdministrador de la cuenta
Procedimiento submit_pullsEnvía tareas asíncronas por cada fila de la listaIngeniero de datos
Procedimiento collect_resultsRecoge las tareas terminadasIngeniero de datos
Tareas t_submit y t_collectEjecutan los dos procedimientos con calendarioIngeniero de datos
Vista semántica voc_returnsDefine temas, semanas y medidas de devoluciónIngeniero de analítica
Agente con VocAnalystResponde preguntas en CoWorkIngeniero de analítica
sql
CREATE OR REPLACE PROCEDURE voc.raw.submit_pulls()
  RETURNS VARIANT
  LANGUAGE PYTHON
  RUNTIME_VERSION = '3.11'
  PACKAGES = ('snowflake-snowpark-python', 'requests')
  HANDLER = 'run'
  EXTERNAL_ACCESS_INTEGRATIONS = (everyinfra_access)
  SECRETS = ('ei' = voc.raw.everyinfra_key)
AS
$$
import json, requests, _snowflake

API = "https://api.everyinfra.com/api/v1/social"

def run(session):
    key = _snowflake.get_generic_secret_string("ei")
    headers = {"Authorization": f"Bearer {key}", "Content-Type": "application/json"}
    # watchlist: una fila por URL de producto, URL de vídeo o palabra clave
    rows = session.sql(
        "SELECT watch_id, platform, action, params FROM voc.raw.watchlist WHERE active"
    ).collect()
    submitted = 0
    for r in rows:
        body = {"platform": r["PLATFORM"], "action": r["ACTION"],
                "params": json.loads(r["PARAMS"]), "mode": "async"}
        resp = requests.post(API, headers=headers, json=body, timeout=30)
        payload = resp.json()
        session.sql(
            """INSERT INTO voc.raw.jobs
               (watch_id, job_id, http_status, charged_usd, first_payload, submitted_at)
               SELECT ?, ?, ?, ?, PARSE_JSON(?), CURRENT_TIMESTAMP()""",
            params=[r["WATCH_ID"], payload.get("job_id"), resp.status_code,
                    (payload.get("billing") or {}).get("charged_usd"), json.dumps(payload)],
        ).collect()
        submitted += 1
    return {"submitted": submitted}
$$;

El procedimiento sigue la guía de Snowflake para procedimientos en Python. La cláusula SECRETS asocia el secreto a un nombre, el código lo lee con _snowflake.get_generic_secret_string y PACKAGES declara los paquetes externos (procedimientos almacenados en Python). Hay dos detalles que conviene copiar. El primero: guarda la primera respuesta completa. En ella aparece el cargo exacto en dólares, y con eso puedes cuadrar cada mes con la facturación de EveryInfra.

El segundo: no reintentes el mismo objetivo dentro del procedimiento. La API no cobra los parámetros erróneos, los objetivos no disponibles temporalmente ni los resultados vacíos, y la respuesta explica el motivo. Deja que lo intente la ejecución del día siguiente. Nuestras respuestas 503 de Amazon decían justamente que reintentar enseguida el mismo producto probablemente no serviría de nada.

El recolector tiene la misma forma. Lee los identificadores de tarea pendientes en voc.raw.jobs y pregunta el estado de cada uno. Se salta las tareas en running o en finalizing, escribe los resultados terminados en voc.raw.api_responses y los marca como recogidos. En nuestra propia prueba, al principio solo tratamos running como «sin terminar». Resultado: leímos una tarea demasiado pronto, cuando todavía se estaba cerrando. Incluye los dos estados en la comprobación.

Programa el envío a las 02:00 (hora de Singapur) cada día, y el recolector a las 02:20 y a las 03:20, para que la segunda pasada recoja lo que falte. No pongas el recolector cada pocos minutos. Cada vez que el almacén se reanuda cobra al menos 60 segundos, así que las ejecuciones frecuentes sobre todo pagan tiempo ocioso. También recomendamos una suspensión automática de 60 segundos en vez de los 10 minutos por defecto.

sql
CREATE OR REPLACE TASK voc.raw.t_submit
  WAREHOUSE = voc_xs_wh
  SCHEDULE = 'USING CRON 0 2 * * * Asia/Singapore'
AS
  CALL voc.raw.submit_pulls();

CREATE OR REPLACE TASK voc.raw.t_collect
  WAREHOUSE = voc_xs_wh
  SCHEDULE = 'USING CRON 20 2,3 * * * Asia/Singapore'
AS
  CALL voc.raw.collect_results();

ALTER TASK voc.raw.t_collect RESUME;
ALTER TASK voc.raw.t_submit RESUME;

La sintaxis de las tareas está en CREATE TASK y en la introducción a las tareas. También puedes quitar WAREHOUSE y usar una tarea sin servidor, que Snowflake cobra según el cómputo real; la tabla de consumo le asigna un multiplicador de 0,9 (tabla de consumo de servicios).

Cuatro tablas: reseñas, menciones sociales, ventas y devoluciones

Tres reglas dan forma a las tablas. Guarda cada respuesta en bruto tal como llegó. En las tablas desplegadas, guarda solo los campos que usa el análisis. Y deja fuera los datos personales siempre que puedas. La API devuelve nombres y avatares de quienes escriben las reseñas, y el análisis de devoluciones nunca los usa. Al dejarlos fuera ahorras espacio y te quitas una pregunta de privacidad. Abajo están las cuatro tablas principales y una tabla de correspondencias. Ventas y devoluciones vienen de tus propios sistemas, así que solo mostramos su estructura.

sql
-- Respuestas en bruto: una fila por respuesta de la API, en VARIANT
CREATE TABLE IF NOT EXISTS voc.raw.api_responses (
  job_id        STRING,
  platform      STRING,
  action        STRING,
  fetched_at    TIMESTAMP_TZ,
  payload       VARIANT
);

-- Reseñas de Amazon (desplegadas desde amazon/reviews)
CREATE TABLE IF NOT EXISTS voc.core.reviews (
  review_id            STRING PRIMARY KEY,
  asin                 STRING,
  country              STRING,
  rating               NUMBER(3,1),
  title                STRING,
  body                 STRING,
  posted_at            TIMESTAMP_TZ,
  is_verified_purchase BOOLEAN,
  helpful_count        NUMBER,
  variant              STRING,
  fetched_at           TIMESTAMP_TZ
);

-- Menciones sociales: comentarios de TikTok y publicaciones de Reddit
CREATE TABLE IF NOT EXISTS voc.core.social_mentions (
  platform      STRING,          -- tiktok o reddit
  source_id     STRING,          -- id del comentario o de la publicación
  source_url    STRING,          -- URL del vídeo o de la publicación
  community     STRING,          -- comunidad de Reddit, vacío en TikTok
  product_key   STRING,          -- clave de product_map
  body          STRING,
  like_count    NUMBER,
  reply_count   NUMBER,
  is_reply      BOOLEAN,
  posted_at     TIMESTAMP_TZ,
  fetched_at    TIMESTAMP_TZ,
  themes        ARRAY,           -- etiquetas de AI_CLASSIFY
  PRIMARY KEY (platform, source_id)
);

-- Ventas diarias, desde tu sistema de pedidos
CREATE TABLE IF NOT EXISTS voc.core.sales_daily (
  sale_date     DATE,
  sku           STRING,
  asin          STRING,
  units_ordered NUMBER,
  PRIMARY KEY (sale_date, sku)
);

-- Informe de devoluciones de FBA (GET_FBA_FULFILLMENT_CUSTOMER_RETURNS_DATA)
CREATE TABLE IF NOT EXISTS voc.core.fba_returns (
  return_date           TIMESTAMP_TZ,
  order_id              STRING,
  sku                   STRING,
  asin                  STRING,
  fnsku                 STRING,
  quantity              NUMBER,
  fulfillment_center_id STRING,
  detailed_disposition  STRING,
  reason                STRING,
  status                STRING,
  customer_comments     STRING,
  return_themes         ARRAY
);

-- Correspondencias: qué ASIN, SKU, vídeos y palabras pertenecen a un producto
CREATE TABLE IF NOT EXISTS voc.core.product_map (
  product_key   STRING,
  asin          STRING,
  sku           STRING,
  tiktok_urls   ARRAY,
  reddit_terms  ARRAY
);

La tabla de devoluciones copia el informe de devoluciones de clientes de FBA de Amazon SP-API. El tipo de informe es GET_FBA_FULFILLMENT_CUSTOMER_RETURNS_DATA. Sus campos son fecha de devolución, pedido, SKU, ASIN, FNSKU, nombre del producto, cantidad, centro logístico, disposición, motivo, estado, número de placa y comentarios del cliente, y la documentación dice que Amazon lo actualiza a diario (tipos de informe de FBA en SP-API).

La columna de comentarios del cliente es la que más importa aquí. Es texto libre, igual que un comentario de TikTok. Si clasificas los dos con la misma lista de temas, las dos fuentes se alinean por tema. La columna de motivo usa códigos fijos de Amazon, mucho más gruesos que un tema como «la tapa gotea», así que por sí sola no dice qué tema empuja las devoluciones.

La tabla siguiente relaciona los campos de la API con las columnas. Los nombres de campo salen del catálogo de EveryInfra en GET /api/v1/social/catalog, leído el 2026-11-06 (catálogo).

CapacidadCampos de la APIColumnaNota
amazon/reviewsreview_id, product_asin, countryreviews.review_id, asin, countrySin duplicados por id de reseña
amazon/reviewsrating, title, text, posted_atrating, title, body, posted_atPuntuación de 1 a 5
amazon/reviewsis_verified_purchase, helpful_count, variantMismos nombresColor y tamaño van en variant
amazon/reviewsauthor_name, author_id, author_avatar_urlNo se guardanDatos personales que el análisis no usa
tiktok/commentsid, text, like_count, reply_count, is_reply, posted_atColumnas equivalentes de social_mentionsCada comentario principal trae hasta 2 respuestas
tiktok/commentsauthor_username, author_idNo se guardanMismo motivo
reddit/searchid, url, title y text, community, like_count, comment_countsource_id, source_url, body, community, like_count, reply_countTítulo y cuerpo en un solo texto
reddit/searchauthor_usernameNo se guardaMismo motivo

El despliegue solo necesita SQL. Selecciona las filas de api_responses por plataforma, usa LATERAL FLATTEN sobre payload:results y haz un MERGE en la tabla de destino por identificador. Cuando vuelves a descargar el mismo vídeo, los comentarios antiguos actualizan sus «me gusta» y los nuevos se añaden. Más adelante verás que volver a descargar el mismo vídeo meses después es el paso más útil de todo el montaje.

Una ida y vuelta real: REST, asíncrono y MCP

No pudimos ejecutar la parte de Snowflake. Pero el procedimiento envía las mismas peticiones a la misma API que usamos en nuestro equipo y recibe el mismo formato de respuesta. El 2026-11-06, entre las 00:16 y las 00:36 (hora de Singapur), hicimos 12 llamadas con una clave de prueba. Cubren las tres capacidades del artículo y dos búsquedas que nos ayudaron a elegir objetivos. De cada llamada guardamos la petición, la hora de inicio y fin, el estado HTTP, la duración y el cargo.

#Hora de SingapurCapacidadModoResultadoDuraciónCargo
100:16:52amazon/search, portable blenderSíncrono10 productos, 9 de Ninja42,14 s0,002236 USD
200:17:41amazon/reviews, producto B0C2FF4JD1Síncrono503, no disponible temporalmente (sin cobro)60,12 s0 USD
300:18:41amazon/reviews, producto B0CN3S2SW2Síncrono50358,57 s0 USD
400:19:47amazon/reviews, producto B09B8V1LZ3Síncrono0 filas, reembolsado67,25 s0 USD
500:20:55reddit/search, portable blender, recientesSíncrono14 publicaciones6,56 s0,000556 USD
600:21:13tiktok/search, ninja blast portable blender reviewSíncrono10 vídeos3,78 s0,000556 USD
700:21:21tiktok/comments, vídeo de barato contra caroSíncrono200 comentarios52,30 s0,000556 USD
800:22:13walmart/reviews, página de productoSíncrono0 filas, reembolsado54,34 s0 USD
900:24:22amazon/reviews, producto B0D2YYHN1BSíncrono50319,48 s0 USD
1000:25:26reddit/search, ninja blastMCP7 publicaciones7,62 s0,000556 USD
1100:27:36tiktok/comments, vídeo de prueba de un productoAsíncrono202, listo en unos 100 s, 73 comentariosEnvío 1,95 s0,000556 USD
1200:36:23amazon/reviews, B0C2FF4JD1 otra vezSíncrono50338,42 s0 USD

Seis de las 12 llamadas se cobraron, por un total de 0,005016 USD. Las otras seis devolvieron 503 o un resultado vacío, y no se cobró ninguna. La URL de Walmart de la llamada 8 la adivinamos a partir del nombre del producto, así que el resultado vacío es culpa nuestra. Aun así, confirma que el reembolso por resultado vacío también se aplica a las reseñas de Walmart.

Captura de respuestas reales de nuestra API, una tarjeta de código clara en tres partes. La primera es el envío asíncrono: POST https://api.everyinfra.com/api/v1/social con plataforma tiktok, acción comments y modo async, que devolvió 202 en 1,95 segundos con estado running, un identificador de tarea y una URL de consulta; un recuadro verde azulado marca el cargo de 0,000556 dólares. La segunda es un extracto de la tarea terminada: estado succeeded, 73 comentarios, y la fecha, los «me gusta» y el texto de los dos primeros, con el autor oculto. La tercera es una respuesta de reseñas de Amazon con estado 503, motivo access_blocked, reintento tras 900 segundos y cargo 0.
Captura del envío asíncrono y su resultado a las 00:27 (hora de Singapur) del 2026-11-06, y de una respuesta 503 a las 00:17. Los datos de autor están ocultos. Respuesta de la API de EveryInfra

La primera parte de la captura es lo que recibe el procedimiento de envío: un 202 en 1,95 segundos con el identificador de tarea, y el cargo de 0,000556 USD ya indicado en la respuesta. La segunda parte es lo que recibe el recolector. El estado pasó de running a finalizing y luego a succeeded. Consultamos más o menos cada 8 segundos, 12 veces en total, y la tarea terminó unos 100 segundos después del envío. La tercera parte muestra un fallo: estado 503, motivo access_blocked, reintento sugerido tras 900 segundos y cargo 0. Al procedimiento le basta con ramificar según el código de estado y estos campos.

La llamada 10 sirve de comparación. Hizo la misma búsqueda en Reddit con la herramienta MCP everyinfra_call_api. Devolvió 7 publicaciones en 7,62 segundos, como un resultado de herramienta de 18.619 caracteres dentro de una respuesta de 19.490 bytes. Si un Cortex Agent hiciera esa llamada a través de un conector MCP, esos 18.619 caracteres entrarían en el contexto del modelo como tokens de entrada. Con los datos ya cargados en una tabla, el agente solo paga las pocas filas que lee. Por eso preferimos «primero cargar, luego preguntar» frente a «consultar en vivo en cada conversación».

Gráfico de barras horizontales con 12 barras, una por llamada real, en un eje de 0 a 120 segundos. Seis barras verde azulado son las llamadas cobradas: búsqueda en Amazon 42,14 segundos, búsqueda en Reddit 6,56, búsqueda en TikTok 3,78, comentarios de TikTok síncronos 52,30, búsqueda en Reddit por MCP 7,62 y envío asíncrono de comentarios de TikTok 1,95. Seis barras grises son las no cobradas: cuatro errores y un resultado vacío de reseñas de Amazon entre 19 y 67 segundos, y un resultado vacío de Walmart a 54,34 segundos. El subtítulo indica de 00:16 a 00:36, hora de Singapur, del 2026-11-06.

Este gráfico de tiempos decide cómo se reparte el coste en Snowflake. Por tamaño de datos, las tres capacidades son ligeras: una llamada de comentarios de TikTok con 200 comentarios pesó 71.228 bytes, y una búsqueda en Reddit, unos 30.000. Por tiempo de espera, una llamada síncrona de reseñas o comentarios tarda a menudo entre 50 y 70 segundos. Un almacén cobra por segundo, con un mínimo de 60 segundos cada vez que se reanuda (introducción a los almacenes, coste de cómputo). Durante una llamada síncrona, el almacén pasa casi todo el tiempo esperando a la red. La sección de costes lo convierte en dólares.

Prueba 1: cuántos comentarios de TikTok hablan de un fallo del producto

Elegimos una categoría que casi todo el mundo conoce: las batidoras portátiles. La llamada 1 usó amazon/search con «portable blender». Nueve de los 10 primeros resultados eran productos de Ninja, con precios entre 19,95 y 59,99 USD (API de datos de Amazon, búsqueda de Amazon). La llamada 6 usó tiktok/search con «ninja blast portable blender review». De los 10 vídeos que devolvió, tomamos los dos con más comentarios y descargamos sus comentarios con tiktok/comments (API de datos de TikTok, API de comentarios de TikTok, API de búsqueda de TikTok).

El primer vídeo es una prueba de batidora «barata contra cara» publicada el 2025-07-27. Cuando la descargamos tenía 2.586.703 reproducciones y 251 comentarios, y recibimos 200, el máximo de una llamada. El segundo es un vídeo de prueba de un solo producto publicado el 2026-01-20, con 208.916 reproducciones y 98 comentarios. Recibimos 73, de los que 17 eran respuestas. En este artículo no nombramos a ninguno de los dos creadores.

VídeoPublicadoReproduccionesComentarios en el vídeoRecibidosRespuestasFallos del productoPorcentaje
Barata contra cara2025-07-272.586.7032512002342,0 %
Prueba de un producto2026-01-20208.9169873171317,8 %

Primero probamos el atajo más habitual: una lista de palabras clave. Batería, gotea, se rompió, devolví, caro, muy pequeña. Un comentario que contuviera alguna contaba como queja. En el primer vídeo, la lista coincidió con 42 de los 200 comentarios. Luego leímos cada comentario a mano. Solo 4 de los 42 describían un fallo de la batidora, así que la regla de palabras clave acertó el 9,5 % de las veces.

La razón se ve enseguida. Los comentarios de un vídeo «barato contra caro» son sobre todo bromas sobre el formato, con peticiones para probar versiones baratas y caras de otras cosas. Treinta comentarios coincidieron con «caro» o con una palabra de precio, y solo 7 decían que la batidora no valía lo que cuesta. En Snowflake, las etiquetas de tema tienen que salir de un modelo, y antes hay que definir por escrito qué es un «fallo del producto». La tabla muestra nuestras etiquetas manuales para los 42 comentarios que encontró la lista.

Etiqueta manualComentarios
No habla del producto (bromas, otros temas)29
Solo una queja de precio7
Fallo del producto4
Dudoso2
Total de coincidencias42

Nuestra regla manual fue estricta. Un comentario cuenta solo si dice que este producto tuvo un problema. Los tipos son tapa o derrame, batería corta, sin fuerza con hielo o fruta congelada, falta una pieza, difícil de limpiar y se rompió pronto. Un «no vale la pena, la devolví» general también cuenta. Las quejas de precio, las comparaciones de marcas, las bromas y los emojis no cuentan. Con esa regla, los dos vídeos se ven muy distintos.

Gráfico de barras horizontales apiladas con dos barras. La de arriba es el vídeo de barata contra cara, con 2,59 millones de reproducciones: 4 de 200 comentarios describen un fallo, un 2,0 %. La de abajo es el vídeo de prueba de un producto, con 209.000 reproducciones: 13 de 73 comentarios describen un fallo, un 17,8 %. El verde azulado marca los comentarios sobre fallos y el gris, el resto.

El vídeo con diez veces más reproducciones tiene solo un 2,0 % de comentarios sobre fallos. El vídeo pequeño de prueba tiene un 17,8 %. La razón es el público. Un vídeo comparativo atrae a gente que mira por diversión. Un vídeo de prueba atrae a quien ya tiene el producto o piensa comprarlo, y esa es la gente que escribe «a mí también se me derramó». Para el diseño en Snowflake, elegir bien los vídeos de product_map importa más que el número de comentarios por vídeo.

Por el mismo precio de 0,000556 USD por llamada, el vídeo de prueba dio casi nueve veces más señal. Esa elección también se puede automatizar: busca con tiktok/search y quédate con los vídeos cuyo texto incluya palabras como «review», «trying» u «honest» y que tengan entre decenas y cientos de comentarios. En los dos vídeos juntos, 17 de 273 comentarios describían un fallo. Así se reparten por tema.

TemaComentariosEjemplo (texto original, autor oculto)Me gusta
Tapa o derrame6The way I just gasped when it spilled. Were you supposed to open it from the top instead?79
Batería3the batteries do not last long enough to make a full smoothie9
Queja general, devuelta2Not worth it, returned after a week0
Sin fuerza con hielo o fruta congelada2It's not. I returned mine. Barely could get through frozen fruit97
Falta una pieza2ours both didn't come with the blade cap0
Se rompió pronto1they are shit, lasts 2 spins1
Difícil de limpiar1Hard to wash0
Gráfico de barras horizontales con siete temas de más a menos comentarios: tapa o derrame 6 en verde azulado, batería 3, queja general 2, sin fuerza con fruta congelada 2, falta una pieza 2, se rompió pronto 1, difícil de limpiar 1. El subtítulo dice que la mayoría de los comentarios sobre la tapa vienen de no saber cómo abrirla, y que 2 comentarios dicen que devolvieron el producto.

La tapa y los derrames forman el grupo más grande. El comentario con más «me gusta» de ese grupo, 79, pregunta si había que abrir la tapa por arriba. Otro dice que a quien lo escribió le pasó lo mismo la primera vez, porque no pensó en usar el tapón. Un comentario del 2026-01-22 avisa de que no hay que usar el botón de la tapa, porque se rompe y no venden recambio. Este tipo de problema es distinto de una queja de batería o de motor. A menudo se arregla con mejores instrucciones, otro embalaje u otras fotos del producto, y entonces la tasa de devoluciones puede bajar rápido.

Eso es justo lo que busca la pregunta «qué tema de queja sube con las devoluciones». Cuando un tema coincide con un pico de devoluciones, la acción es concreta. Guarda también los «me gusta» en la tabla. Un «yo la devolví» con 97 «me gusta» y una queja con 0 no representan al mismo número de personas. En la vista semántica, define dos medidas: el número de comentarios y un recuento ponderado por «me gusta», y pide al agente que dé las dos.

En Snowflake, AI_CLASSIFY puede poner las etiquetas. Usa los siete temas más «no es un fallo del producto» como categorías, activa la salida con varias etiquetas y añade una descripción de la tarea que excluya las quejas de precio y las bromas. La documentación recomienda no pasar de unas 20 categorías y acepta ejemplos (documentación de AI_CLASSIFY).

Para un equipo que trabaja en español hay una nota importante. La documentación de AI_CLASSIFY dice que funciona mejor con texto en inglés y que con otros idiomas el resultado puede empeorar. Nuestros comentarios de prueba estaban en inglés, pero si sigues reseñas de Amazon en España o México, o vídeos de TikTok en español, no des por bueno el resultado sin revisarlo. Etiqueta a mano unos 100 comentarios en español, pasa AI_CLASSIFY por encima y compara. Si muchas etiquetas no coinciden, tienes dos salidas: escribir las categorías y la descripción en inglés con ejemplos en español, o dejar que un modelo más potente dentro de Cortex Agents juzgue cada comentario, con un coste mayor.

Además, la descripción de la tarea y las categorías cuentan como tokens en cada fila. Por eso el número real de tokens por fila es mayor que la longitud del comentario, y conviene medirlo con una muestra antes de lanzar la carga completa.

sql
UPDATE voc.core.social_mentions
SET themes = AI_CLASSIFY(
      body,
      ['lid_or_spill', 'battery', 'weak_on_ice', 'missing_part',
       'breaks_quickly', 'hard_to_clean', 'general_negative', 'not_a_product_issue'],
      {'output_mode': 'multi',
       'task_description': 'Label only comments that report a problem with this blender. Price complaints, jokes and brand comparisons are not_a_product_issue.'}
    ):labels
WHERE themes IS NULL;

Aplica la misma clasificación a la columna customer_comments de la tabla de devoluciones y guarda el resultado en return_themes. Así los dos lados usan los mismos temas, el mismo modelo y la misma descripción, y la comparación por tema tiene sentido. AI_SENTIMENT también puede puntuar cada comentario de negativo a positivo (documentación de AI_SENTIMENT). Aquí ayuda menos, porque la pregunta es qué problema hay, no cuánto enfado.

Prueba 2: qué devuelve una búsqueda en Reddit

Muchos equipos ven Reddit como el sitio de las opiniones sinceras, así que miramos si podía completar lo de TikTok. La llamada 5 usó reddit/search con «portable blender», ordenado por lo más reciente, y devolvió 14 publicaciones. La llamada 10 buscó «ninja blast» por MCP y devolvió 7 (API de datos de Reddit, API de búsqueda de Reddit). Esta capacidad busca siempre en el último mes y devuelve hasta 25 publicaciones por llamada. Nuestras 14 publicaciones solo cubrían del 2026-10-30 al 2026-11-05 (UTC), y las 7, del 3 al 5 de noviembre.

Leímos cada publicación. Ninguna de las 21 hablaba de si una batidora funciona bien. De las 14 de «portable blender», 10 eran ofertas, casi todas en comunidades de chollos como r/priceglitch, con títulos del tipo «Ninja Blast Max Portable Blender, Twist & Go, 22oz» más un color y un precio. Hubo ofertas el 2026-10-31, el 2026-11-01 y el 2026-11-05, y resúmenes diarios de ofertas de Amazon el 2026-11-02 y el 2026-11-03. Las otras 4 no tenían nada que ver: una persona preguntaba por un ThinkPad portátil y dos publicaciones de comunidades del programa 3D Blender preguntaban por portátiles.

BúsquedaPublicacionesOfertasSin relaciónOpiniones del productoFechas (UTC)
portable blender (REST)1410402026-10-30 a 2026-11-05
ninja blast (MCP)74302026-11-03 a 2026-11-05
Gráfico de barras horizontales apiladas con dos barras. Portable blender, 14 publicaciones: 10 ofertas, 4 sin relación, 0 opiniones del producto. Ninja blast por MCP, 7 publicaciones: 4 ofertas, 3 sin relación, 0 opiniones. El subtítulo dice que la búsqueda ordenó por lo más reciente, que las 14 publicaciones solo cubren del 30 de octubre al 5 de noviembre, y que las publicaciones sin relación son coincidencias como el programa 3D Blender, la serie Ninjago y un videojuego.

De las 7 de «ninja blast», 4 eran ofertas y 3 coincidían por casualidad: una hablaba de un videojuego y dos eran de una comunidad de la serie de animación Ninjago. Esto no quiere decir que Reddit no sirva. Quiere decir que una palabra corta ordenada por lo más reciente es la consulta equivocada. Para cargar Reddit en Snowflake, haz tres cambios.

Primero, juzga la relevancia solo por el título y exige que «blender» vaya detrás de portable, personal, smoothie o una marca; nuestra primera regla buscaba «blender» en el cuerpo y contó publicaciones de 3D como si fueran del producto. Segundo, guarda las ofertas como una categoría aparte, porque son datos útiles: cuántas veces aparece una batidora en comunidades de chollos en un mes, y a qué precio, puede ir junto a tu tabla de ventas para ver si una semana de oferta trae un pico de devoluciones. Tercero, las opiniones reales suelen estar en unas pocas comunidades, como las de batidos o comida para deportistas; usa reddit/comments en los hilos de esas comunidades en lugar de buscar en todo el sitio.

Prueba 3: las reseñas de Amazon devolvieron 503, y no se cobró nada

Los datos que más queríamos eran las reseñas de Amazon, porque reseñas y devoluciones vienen de la misma plataforma y de los mismos compradores. Pero nuestras cinco llamadas a amazon/reviews no devolvieron ninguna reseña (API de reseñas de Amazon). A las 00:17, 00:18 y 00:24 (hora de Singapur), tres productos distintos de Ninja y Hamilton Beach devolvieron 503 con el motivo access_blocked. Eso significa que las reseñas de ese producto no estaban disponibles temporalmente, no se cobró nada y la respuesta sugiere reintentar tras 900 segundos.

Hora de SingapurProductoEstado HTTPMotivoDuraciónCargo
00:17:41B0C2FF4JD1503access_blocked60,12 s0 USD
00:18:41B0CN3S2SW2503access_blocked58,57 s0 USD
00:19:47B09B8V1LZ3200Resultado vacío, reembolsado67,25 s0 USD
00:24:22B0D2YYHN1B503access_blocked19,48 s0 USD
00:36:23B0C2FF4JD1503access_blocked38,42 s0 USD

A las 00:19 (hora de Singapur) probamos un producto más antiguo: devolvió 200 con 0 filas, y la llamada se reembolsó como resultado vacío. A las 00:36, 19 minutos después del primer intento, volvimos a llamar al primer producto y obtuvimos otro 503. Las cinco llamadas muestran charged_usd igual a 0. Lo contamos tal cual porque una tarea diaria en Snowflake se encontrará con lo mismo.

Con las reglas de EveryInfra, los objetivos no disponibles temporalmente o que piden iniciar sesión devuelven 503 con un motivo y una sugerencia de reintento. Nunca devuelven un 200 vacío que diga que no hay reseñas. Para el cargador, esa diferencia es clave. Un 503 significa «hoy no hay datos, prueba mañana», y un 200 vacío significa «aquí de verdad no hay nada». Si el procedimiento mezcla las dos cosas, la vista semántica mostrará días falsos «sin quejas» para algunos productos, y el agente sacará conclusiones equivocadas.

Guarda el estado HTTP y el motivo en la tabla jobs, despliega solo las respuestas con estado 200 y añade a la vista semántica una medida de «días sin datos», para que el agente diga qué días faltan. El catálogo también indica que amazon/reviews devuelve solo las reseñas destacadas que se ven en la página del producto: normalmente una docena, con un máximo de 100 por llamada, en 11 tiendas de Amazon. Incluso en un buen día, no son todas las reseñas, sino las que Amazon elige mostrar. Sirven para ver qué dicen las quejas más visibles, pero no para contarlas todas; para eso, tus datos de Seller Central y los comentarios del informe de devoluciones de FBA son más completos.

Pregunta al Cortex Agent: qué tema de queja sube con la tasa de devoluciones

Con las tablas listas, crea una vista semanal. Cada fila tiene un producto, un tema y una semana, con el número de menciones sociales, las unidades devueltas y las unidades vendidas. La tasa de devolución de un tema es el número de unidades devueltas por ese tema dividido entre las unidades vendidas esa semana.

sql
CREATE OR REPLACE VIEW voc.core.theme_returns_weekly AS
WITH mentions AS (
  SELECT s.product_key,
         DATE_TRUNC('week', s.posted_at)::DATE AS week_start,
         t.value::STRING AS theme,
         COUNT(*) AS mentions,
         SUM(1 + COALESCE(s.like_count, 0)) AS weighted_mentions
  FROM voc.core.social_mentions s,
       LATERAL FLATTEN(input => s.themes) t
  WHERE t.value::STRING <> 'not_a_product_issue'
  GROUP BY 1, 2, 3
),
returns AS (
  SELECT pm.product_key,
         DATE_TRUNC('week', f.return_date)::DATE AS week_start,
         COALESCE(t.value::STRING, 'unclassified') AS theme,
         SUM(f.quantity) AS returned_units
  FROM voc.core.fba_returns f
  JOIN (SELECT DISTINCT product_key, asin FROM voc.core.product_map) pm
    ON pm.asin = f.asin,
       LATERAL FLATTEN(input => f.return_themes, OUTER => TRUE) t
  GROUP BY 1, 2, 3
),
sales AS (
  SELECT pm.product_key,
         DATE_TRUNC('week', d.sale_date)::DATE AS week_start,
         SUM(d.units_ordered) AS units_sold
  FROM voc.core.sales_daily d
  JOIN (SELECT DISTINCT product_key, asin FROM voc.core.product_map) pm
    ON pm.asin = d.asin
  GROUP BY 1, 2
),
theme_weeks AS (
  SELECT COALESCE(m.product_key, r.product_key) AS product_key,
         COALESCE(m.week_start, r.week_start) AS week_start,
         COALESCE(m.theme, r.theme) AS theme,
         COALESCE(m.mentions, 0) AS mentions,
         COALESCE(m.weighted_mentions, 0) AS weighted_mentions,
         COALESCE(r.returned_units, 0) AS returned_units
  FROM mentions m
  FULL OUTER JOIN returns r
    ON r.product_key = m.product_key
   AND r.week_start = m.week_start
   AND r.theme = m.theme
)
SELECT tw.product_key, tw.week_start, tw.theme,
       tw.mentions, tw.weighted_mentions, tw.returned_units,
       s.units_sold,
       tw.returned_units / NULLIF(s.units_sold, 0) AS theme_return_rate
FROM theme_weeks tw
LEFT JOIN sales s
  ON s.product_key = tw.product_key AND s.week_start = tw.week_start;

Tres decisiones de esta vista evitan que se pierdan devoluciones. Primero, menciones y devoluciones se unen con un full outer join por producto, semana y tema, y las ventas se añaden después por producto y semana. Así, si en una semana las redes solo hablan de la tapa, las devoluciones por batería de esa semana siguen teniendo su propia fila. Segundo, OUTER => TRUE conserva las devoluciones sin comentario o sin tema, con la etiqueta unclassified. Tercero, un ASIN puede corresponder a varios SKU en product_map, así que la vista une con pares distintos de producto y ASIN; si no, devoluciones y ventas se contarían más de una vez. Un aviso: un comentario puede llevar dos temas, así que las filas por tema pueden sumar más unidades que las devueltas de verdad. Para la tasa total, suma fba_returns directamente en lugar de sumar filas por tema.

Después, crea una vista semántica encima para que Cortex Analyst sepa qué significa cada columna y cuáles son medidas (introducción a las vistas semánticas, CREATE SEMANTIC VIEW). Define al menos cuatro medidas: menciones del tema, menciones ponderadas por «me gusta», unidades devueltas por tema y tasa de devolución por tema. Las dimensiones son producto, tema y semana. Añade sinónimos en español, como «gotea», «se derrama» y «tapa» para lid_or_spill, porque son las palabras que tu equipo escribirá de verdad.

La especificación del agente es YAML. Lo mínimo es una herramienta Cortex Analyst sobre esta vista semántica; nosotros añadimos una herramienta personalizada que devuelve los comentarios con más «me gusta» de un producto y un tema. La estructura sigue CREATE AGENT. La documentación de Cortex Agents dice que los parámetros de una herramienta personalizada no pueden ser de tipo objeto, así que mantenlos simples (introducción a Cortex Agents).

yaml
models:
  orchestration: claude-sonnet-5-5
orchestration:
  budget:
    seconds: 120
    tokens: 40000
instructions:
  orchestration: >
    For questions about complaint themes and returns, use VocAnalyst on weekly data.
    Compare each theme's mentions with the same week and the next 1 to 4 weeks of
    theme_return_rate. Report weeks with missing review data. Never treat a missing
    week as zero complaints.
  response: >
    Answer in the user's language. Give the theme, the weeks, both raw and
    like-weighted mention counts, and the return rate change. Quote at most two
    comments from TopComments, without author names.
  sample_questions:
    - question: "¿Qué tema de queja sube a la vez que la tasa de devoluciones?"
    - question: "¿Las quejas sobre la tapa de la Ninja Blast siguieron a las devoluciones en las últimas cuatro semanas?"
tools:
  - tool_spec:
      type: cortex_analyst_text_to_sql
      name: VocAnalyst
      description: Weekly social complaint themes, returns and sales by product.
  - tool_spec:
      type: generic
      name: TopComments
      description: Returns the most liked comments for one product and one theme.
      input_schema:
        type: object
        properties:
          product_key: {type: string, description: Product key from product_map}
          theme: {type: string, description: One theme label}
        required: [product_key, theme]
tool_resources:
  VocAnalyst:
    semantic_view: voc.core.voc_returns
  TopComments:
    type: procedure
    identifier: voc.core.top_comments
    execution_environment:
      type: warehouse
      warehouse: voc_xs_wh

«Subir a la vez» necesita un significado preciso. Las instrucciones piden al agente comparar la misma semana y las cuatro siguientes, y nuestros propios datos muestran por qué: las quejas y las devoluciones no ocurren al mismo tiempo. El vídeo comparativo se publicó el 2025-07-27, y sus 4 comentarios sobre fallos llegaron 6, 44, 245 y 245 días después. El vídeo de prueba se publicó el 2026-01-20; solo 2 de sus 13 comentarios sobre fallos llegaron la primera semana, y el resto se repartió entre marzo y septiembre. Los dos comentarios que mencionan una devolución son de marzo de 2026, uno 245 días después de su vídeo y otro 52 días después.

Comentario (autor oculto)TemaFechaDías tras el vídeoMe gusta
Pregunta si la tapa se abre por arribaTapa o derrame2026-01-20079
No uses el botón de la tapa, se rompeTapa o derrame2026-01-2225
Dice que todo el mundo la criticaQueja general2026-03-014023
La devolvió, no puede con fruta congeladaSin fuerza con hielo2026-03-135297
La batería no da para un batido enteroBatería2026-03-14539
Las dos llegaron sin el tapón de la cuchillaFalta una pieza2026-07-311920
Compró otra unidad para tener tapa de recambioTapa o derrame2026-09-122350
Gráfico de columnas apiladas. El eje horizontal es el mes del comentario: agosto y septiembre de 2025, y enero, marzo, abril, julio y septiembre de 2026. El eje vertical son los comentarios sobre fallos, de 0 a 8. Marzo de 2026 es el más alto con 8 comentarios, entre se rompió pronto, queja general, sin fuerza con fruta congelada, batería, tapa y difícil de limpiar. Enero de 2026 tiene 2 de tapa, abril 3 y los demás meses 1 cada uno. Tapa o derrame va en verde azulado. El subtítulo dice que la mayoría llega uno o dos meses después del vídeo, así que una sola descarga pierde las quejas posteriores.

Este gráfico cambia el diseño en Snowflake de dos maneras. Primero, nunca descargues un vídeo una sola vez. Una descarga solo en la primera semana habría perdido 3 comentarios sobre fallos del primer vídeo y 11 del segundo. Por eso la watchlist debe volver a descargar los mismos vídeos cada semana o cada mes, y el MERGE añade los comentarios nuevos. Segundo, cruzar quejas y devoluciones de la misma semana probablemente no mostrará nada. Los compradores usan el producto un tiempo antes de quejarse y devolverlo, así que deja que los datos encuentren el desfase en lugar de suponerlo.

También hay que ser honestos con el volumen. Dos vídeos dieron 17 comentarios sobre fallos en 14 meses, así que casi todas las semanas tienen cero. Una correlación con datos tan escasos no significa nada. Para que el agente tenga una base sólida, sigue entre 20 y 30 vídeos de prueba por producto, además de las reseñas de Amazon y los comentarios de devolución. Empieza por meses y pasa a semanas cuando haya datos suficientes. Este límite viene del volumen de datos, no de Snowflake, y cualquier herramienta lo tendría. Por eso las instrucciones piden al agente que diga qué semanas no tienen datos: un «hay muy pocos datos» honesto es mejor que una tendencia inventada a partir de tres comentarios.

Cuánto cuesta un mes: la API y Snowflake

Empecemos con un plan concreto y luego pongamos precio. Una marca sigue 20 ASIN y 20 vídeos de TikTok, y descarga sus reseñas o comentarios una vez al día. Busca 5 palabras clave en Reddit cada día y 5 en TikTok cada semana para encontrar vídeos nuevos. En 30 días son 1.370 llamadas a la API. El coste de la API usa los precios del catálogo leídos el 2026-11-06, así que es un precio real.

Cada línea de Snowflake es una estimación, y la tabla explica el método. Los precios salen de la tabla de consumo de servicios vigente desde el 2026-11-04 y del precio bajo demanda de la edición Standard en AWS US East: 2,00 USD por crédito de plataforma y 2,00 USD por crédito de IA a la tarifa global (tabla de consumo, precios, precios de Cortex AI).

ConceptoMétodoAl mes
API de EveryInfra600 amazon/reviews × 0,001389 USD + 600 tiktok/comments × 0,000556 + 150 reddit/search × 0,000556 + 20 tiktok/search × 0,0005561,26 USD
Almacén esperando respuestas (síncrono, en serie)Tiempos medidos: reseñas de Amazon 67,25 s (la más lenta de nuestras 5 llamadas, un resultado vacío; con los 19,48 a 60,12 s de las llamadas 503, esta línea queda entre 24,61 y 38,16 USD), comentarios de TikTok 52,3 s, Reddit 7,62 s, búsqueda de TikTok 3,78 s. Total 20,27 horas × 1 crédito por hora en XS × 2 USD40,54 USD
Almacén esperando (síncrono, 10 en paralelo)Lo mismo, dividido entre 104,05 USD
Almacén (asíncrono, dos tareas)Unos 46 envíos al día × 2 s, más 2 recogidas con el mínimo de 60 s, más 60 s de espera antes de la suspensión tras cada una de las 3 ejecuciones. Unos 392 s al día, 3,3 horas al mesUnos 6,5 USD
Etiquetas con AI_CLASSIFY10.000 comentarios × unos 150 tokens = 1,5 millones de tokens × 1,62 créditos de IA por millón × 2 USD4,86 USD
Preguntas al Cortex Agent (Sonnet 5.5)50 preguntas × 20.000 tokens de entrada y 1.500 de salida, a 1,30 de entrada y 6,50 de salida por millón3,58 USD
Preguntas al Cortex Agent (Haiku 5.5)Lo mismo, a 0,065 de entrada y 0,325 de salida0,18 USD
SQL del agente en el almacén50 consultas × mínimo de 60 s × 2 USD por crédito y hora1,67 USD
Almacenamiento1 GB a 23 USD por TB al mesUnos 0,02 USD
Gráfico de barras horizontales en escala logarítmica con ocho costes mensuales: API de EveryInfra 1,26 dólares en verde azulado; almacén esperando en serie 40,54 dólares, la barra más larga; 10 llamadas en paralelo 4,05; etiquetas con AI_CLASSIFY 4,86; Cortex Agent con 50 preguntas en Sonnet 5.5 3,58 y en Haiku 5.5 0,18; SQL del agente en el almacén 1,67; y 1 GB de almacenamiento 0,022. El subtítulo dice que la API es un precio real y el resto son estimaciones a partir de la tabla de consumo de Snowflake, no mediciones.

La segunda fila es la que hay que mirar. La API cuesta 1,26 USD al mes. Pero si el procedimiento usa el código más sencillo, una llamada síncrona detrás de otra, el almacén funciona más de 20 horas al mes. Eso son unos 40,54 USD, 32 veces el coste de la API. Con 10 llamadas en paralelo o con el diseño asíncrono de dos tareas, esa línea baja a entre 4 y 7 USD.

En nuestra estimación, las llamadas en paralelo son lo más barato, pero tienes que gestionar hilos y tiempos de espera en Python. El diseño asíncrono cuesta dos o tres dólares más y, a cambio, ninguna petición se corta por esperar demasiado y una tarea fallida se repite sola al día siguiente. Preferimos el diseño asíncrono. En total, el diseño en serie cuesta unos 51,93 USD al mes y el diseño en paralelo, unos 15,44 USD. En la región de Singapur, el crédito Standard cuesta 2,50 USD, así que multiplica por 1,25 las líneas del almacén. En la edición Enterprise, el precio bajo demanda en US East es de 3,00 USD por crédito, con la misma proporción.

Diseño de cargaTotal al mes (estimado, con Sonnet 5.5)
Síncrono en serieUnos 51,93 USD
Síncrono, 10 en paraleloUnos 15,44 USD
Asíncrono, dos tareasUnos 17,90 USD

El modelo es la segunda palanca. La orquestación de Cortex Agent se cobra por tokens, y los precios de la tabla de consumo varían mucho. Para las mismas 50 preguntas, Sonnet 5.5 cuesta unos 3,58 USD y Haiku 5.5 unos 0,18 USD. Opus 5.5 cuesta 2,60 por millón de tokens de entrada y 13,00 por millón de salida, el doble que Sonnet. La tabla recoge los precios que importan en este artículo, en créditos de IA por millón de tokens. Las funciones de IA cobran por el total de tokens, sin separar entrada y salida.

Modelo o funciónEntradaSalidaUso en este artículo
claude-sonnet-5-5 (CoWork, Agents)1,306,50Orquestación, valor por defecto de la tabla de costes
claude-haiku-5-5 (CoWork, Agents)0,0650,325Orquestación barata
claude-opus-5-5 (CoWork, Agents)2,6013,00No hace falta para informes rutinarios
openai-gpt-6.1-sol (CoWork, Agents)1,306,50Mismo precio que Sonnet
AI_CLASSIFY1,62 (total)Temas de comentarios y notas de devolución
AI_SENTIMENT1,60 (total)Puntuación de sentimiento, opcional
AI_AGG1,85 (total)Resumen de textos por tema, opcional

Los 20.000 tokens de entrada por pregunta son una suposición nuestra: incluyen la vista semántica, las instrucciones y una o dos rondas de resultados de herramientas. Si el agente llama muchas veces a herramientas en una conversación, o lee comentarios largos, el número real sube. Después del lanzamiento, la vista CORTEX_AGENT_USAGE_HISTORY da los números reales. Las preguntas de CoWork aparecen en SNOWFLAKE_COWORK_USAGE_HISTORY, y ninguna de las dos vistas incluye las peticiones de la otra (vista de uso de Cortex Agent, vista de uso de CoWork).

Cada petición de salida del procedimiento aparece en la vista EXTERNAL_ACCESS_HISTORY, que puede llevar hasta 3 horas de retraso (historial de acceso externo). Crúzala por hora con los valores charged_usd de voc.raw.jobs y podrás comprobar cada mes las llamadas y el gasto de los dos lados. Snowflake también permite fijar presupuestos de recursos por agente y cuotas por usuario (presupuestos de recursos de Cortex Agents). En EveryInfra, da a esta clave su propio límite de llamadas por minuto. Con un límite en cada lado, una tarea rota no puede hacer decenas de miles de llamadas en una noche.

Hay una línea de la tabla de consumo que se malinterpreta con facilidad. «Cortex Tools» cobra 8 créditos de IA por cada 1.000 llamadas a herramientas cuando agentes de terceros acceden a puntos fuera de Snowflake, y nada cuando acceden a puntos de Snowflake. En nuestro diseño, quien llama a la API de EveryInfra es un procedimiento de Snowflake, no un agente; el agente solo lee tablas de Snowflake, así que no incluimos esa línea. Si cambias a conectores MCP y dejas que el agente llame a herramientas externas en las conversaciones, la documentación no dice si esta línea se aplica ni cómo se cuenta. Pregunta a tu equipo de cuenta de Snowflake antes de lanzar. Una cuenta nueva puede probar todo con la prueba gratuita: la página de precios indica 30 días y 400 USD en créditos.

Un correo semanal con las snowflake cowork automations

Con los datos y el agente listos, el último paso es que la respuesta llegue a tiempo a quien la necesita. Las Automations de CoWork hacen justo eso. Programas una pregunta, por ejemplo cada lunes a las 09:00: «¿Qué tema de queja subió con la tasa de devoluciones en las últimas cuatro semanas?». El resultado llega por correo (documentación de Automations). Antes conviene conocer los límites que indica la documentación.

Límite documentadoValorEfecto en un informe semanal de quejas
Frecuencia máximaUna vez por horaNinguno, el informe es semanal
EntregaSolo correo, a direcciones verificadasCada destinatario verifica su correo antes
Historial60 díasGuarda las respuestas en una tabla si necesitas más
PermisosLos de quien la creaEl correo puede incluir cualquier tabla que esa persona pueda leer
EXECUTE AGENT TASKConcedido a PUBLIC por defectoRetíralo y concédelo por rol si hace falta

Ninguno de estos límites bloquea nuestro caso. Las quejas y las devoluciones se miran por semanas, así que una ejecución por hora sobra. Que la entrega sea solo por correo impide publicar directamente en Slack, aunque la nota de prensa dice que Snowflake for Slack ya está en vista previa pública (nota de prensa de Expedition 2026). Lo que de verdad hay que vigilar son los permisos. Como EXECUTE AGENT TASK está concedido a PUBLIC, cualquier persona de la cuenta puede crearse una automatización, y esa automatización corre con sus permisos. Si alguien puede leer todas las ventas, puede enviarlas a cualquier dirección que escriba. Si eso no es aceptable, un administrador debe retirar el privilegio a PUBLIC y concederlo por rol.

Límites de esta prueba

Todo lo de Snowflake es un ejemplo de configuración. Aquí no tenemos una cuenta de Snowflake y no ejecutamos este SQL, estos procedimientos ni esta especificación de agente. La sintaxis sigue docs.snowflake.com tal como lo leímos el 2026-11-06. Snowflake acaba de publicar una versión grande este mes, así que la sintaxis y los límites pueden cambiar. Ejecuta cada bloque en tu propia cuenta antes de depender de él.

En la tabla de costes, solo la API es un precio real. Cada línea de Snowflake es una estimación a partir de precios públicos y de nuestras suposiciones. Las dos mayores incógnitas son el número real de tokens por comentario clasificado y el número real de tokens por pregunta al agente. Para comentarios en español, añade una tercera: cuánto empeora AI_CLASSIFY fuera del inglés.

En el lado de los datos, esta vez ninguna de las 5 llamadas a reseñas de Amazon devolvió reseñas. Por eso el análisis de temas usa solo 273 comentarios de TikTok, en inglés. Una sola persona los etiquetó a mano con la regla de arriba y nadie revisó las etiquetas una segunda vez. Los 17 comentarios sobre fallos bastan para decir que la tapa y los derrames merecen atención, pero no para estimar la tasa real de fallos del producto. Este artículo solo da la estructura de las tablas de ventas y devoluciones, sin números reales ni inventados. La respuesta a «qué tema de queja sube con las devoluciones» llegará con tus propios datos.

Un último límite tiene que ver con EveryInfra. Hoy nuestro servidor MCP no se puede añadir como conector de Snowflake, por las razones de arriba. El camino del acceso externo no depende de eso y es el que recomendamos. Pero si tu equipo quiere una conexión de un clic dentro de CoWork, todavía no es posible. Volveremos a comprobar este estado cuando se publique el artículo.

En qué se diferencia de nuestros artículos anteriores

El blog de EveryInfra tiene varios artículos sobre leer reseñas con herramientas de IA, y cada uno responde a una pregunta distinta. En tareas programadas de Claude Cowork, Claude Cowork prepara cada semana una tabla de precios y reseñas de la competencia. En Claude Managed Agents para revisar reseñas cada noche, un agente alojado lee cada noche las reseñas nuevas de tres plataformas. Qwen Agent con MCP añade un servidor MCP propio a un agente de Bailian para comparar precios. Y DeepSeek V4 en Claude Code para limpiar reseñas limpia y etiqueta 695 reseñas con un modelo barato y calcula el coste.

ArtículoDónde acaban los datosPregunta que responde
Tareas programadas de Claude CoworkUna tabla semanal en un archivoQué cambió en precios y reseñas de la competencia
Claude Managed Agents cada nocheUn resumen del agenteQué reseñas malas llegaron anoche
Qwen Agent con MCPLa conversación del agenteDónde está más barato un producto
DeepSeek V4 en Claude CodeUn archivo de reseñas etiquetadasCuánto cuesta limpiar reseñas con un modelo barato
Este artículoTablas de Snowflake junto a ventas y devolucionesQué queja nos cuesta dinero

Este artículo se diferencia en dónde acaban los datos y junto a qué. En los anteriores, las reseñas se quedan dentro de un agente o de un archivo, y la pregunta es «de qué se queja la gente últimamente». Aquí, las reseñas entran en el almacén de datos de la empresa, con los mismos permisos y las mismas definiciones de negocio que las ventas y las devoluciones. La pregunta pasa a ser «qué queja nos cuesta dinero de verdad». El precio es una factura más de almacén y un conjunto de tablas, unos quince dólares al mes por marca según el cálculo de arriba. Si tus ventas y devoluciones aún no están en Snowflake, los enfoques anteriores son más ligeros. Si ya están ahí, este montaje permite que las quejas se crucen con los números financieros por primera vez.

Cambios recientes

El 2026-11-04 entró en vigor la nueva tabla de consumo de servicios de Snowflake. Todos los precios de modelos, los de las funciones de IA y la línea «Cortex Tools» de este artículo vienen de esa versión (tabla de consumo). Ese mismo día, una nota de versión añadió la ejecución en segundo plano al servidor MCP gestionado por Snowflake. Las herramientas CORTEX_AGENT_RUN y CODING_AGENT ganaron un argumento background que devuelve un identificador al instante. Los servidores con esas herramientas reciben automáticamente tres herramientas más: ASYNC_AGENT_RUN_STATUS, ASYNC_AGENT_RUN_CANCEL y AGENT_RUN_RESULT. Un nuevo parámetro content_cel_filter permite pedir primero un esquema y leer después solo las partes necesarias (nota de versión del 4 de noviembre de 2026).

FechaCambioFuente
2026-11-04Ejecución en segundo plano en el servidor MCP gestionadoNota de versión
2026-11-04Nueva tabla de consumo de serviciosTabla de consumo

Preguntas frecuentes sobre snowflake cortex agents mcp y snowflake cowork

¿El snowflake cortex agents mcp server es lo mismo que un conector MCP?

No, van en direcciones opuestas. Fuente: sugerencia de búsqueda de Google «snowflake cortex agents mcp server». El servidor MCP gestionado por Snowflake convierte a Snowflake en servidor: clientes externos llaman por MCP a tus agentes, a Cortex Search, a Cortex Analyst y a SQL. Sus tipos de herramienta son CORTEX_AGENT_RUN, CODING_AGENT, CORTEX_SEARCH_SERVICE_QUERY, CORTEX_ANALYST_MESSAGE, SYSTEM_EXECUTE_SQL y GENERIC, y la documentación recomienda OAuth en lugar de tokens fijos (servidor MCP gestionado por Snowflake, CREATE MCP SERVER).

Un conector MCP convierte a Snowflake en cliente, para que Cortex Agents y CoWork llamen a un servidor MCP externo, solo con OAuth (documentación de conectores). Este artículo necesita la segunda dirección y, al final, usa acceso externo en lugar de MCP.

¿En qué se diferencian snowflake cowork y CoCo (Cortex Code)?

Fuente: sugerencia de búsqueda de Google «snowflake cowork vs coco». Según la nota de prensa del 2026-11-03, CoWork es para equipos de negocio, que preguntan en lenguaje natural en ai.snowflake.com, abren paneles y programan automatizaciones. CoCo es para desarrolladores e ingenieros de datos, que lo usan para escribir código y crear objetos de datos; un analista también puede describirle un panel para crearlo (nota de prensa de Expedition 2026, documentación de Cortex Code). En este artículo, los ingenieros de datos crean las tablas, los procedimientos y la vista semántica con CoCo o con SQL, y el equipo de negocio pregunta y recibe el informe semanal en CoWork.

¿Puede Cortex Agents llamar a una API externa con una clave en lugar de OAuth?

Sí, pero no mediante un conector MCP. Fuente: la duda que plantea la línea «solo OAuth» de la documentación de conectores de Snowflake. Guarda la clave en un secreto de tipo GENERIC_STRING con una integración de acceso externo, escribe un procedimiento en Python que llame a la API y añádelo al agente como herramienta personalizada. Cuando el agente lo llama, el procedimiento corre en un almacén y se cobra por tiempo de almacén (acceso a redes externas, introducción a Cortex Agents). Preferimos una tarea programada que cargue tablas, para que ninguna pregunta tenga que esperar a la API.

¿Funciona AI_CLASSIFY con comentarios en español?

Funciona, pero compruébalo antes. Fuente: las notas de uso de la documentación de AI_CLASSIFY de Snowflake. La documentación dice que el texto en inglés da los mejores resultados y que otros idiomas pueden ir peor (documentación de AI_CLASSIFY). Etiqueta a mano unos 100 comentarios en español y compara. Donde las categorías no coincidan, haz más concretas la descripción y los ejemplos, o deja que un modelo más potente de Cortex Agents juzgue cada comentario, con un coste mayor.

¿EveryInfra cobra las llamadas que fallan o vuelven vacías?

No. Fuente: las respuestas de nuestras 12 llamadas reales. Los parámetros erróneos, los objetivos no disponibles temporalmente (estado 503) y los resultados vacíos no se cobran, y cada respuesta cobrada indica el importe exacto. Las 6 llamadas de este artículo que no devolvieron datos muestran charged_usd igual a 0. En modo asíncrono el cargo se hace al enviar, y una tarea que falla después se reembolsa sobre ese mismo cargo.

Cómo empezar

  1. Regístrate en EveryInfra y sigue el inicio rápido. Crea una clave de API solo para Snowflake, con su propio límite por minuto.
  2. Llama una vez con curl a cada URL de producto, URL de vídeo y palabra clave. Revisa los campos y el número de filas antes de añadirlos a la tabla watchlist.
  3. En Snowflake, crea la regla de red, el secreto y la integración de acceso externo de los ejemplos. Después crea los dos procedimientos y las dos tareas.
  4. Tras unos días de cargas, crea la vista semanal y la vista semántica. Etiqueta comentarios y notas de devolución con los mismos temas de AI_CLASSIFY.
  5. Crea el Cortex Agent y hazle algunas preguntas en CoWork. Cuando indique bien las semanas sin datos, programa la automatización semanal.

Todas las capacidades de datos están en el catálogo de EveryInfra. La configuración del MCP remoto está en la página del servidor MCP y los precios por llamada, en la página de precios.

Referencias

  1. Nota de prensa de Snowflake, Expedition 2026: CoCo y CoWork, leída el 2026-11-06: https://www.snowflake.com/en/news/press-releases/expedition-2026-coco-cowork/
  2. Nota de prensa de Snowflake, Business Ontology y Cortex AI Gateway, leída el 2026-11-06: https://www.snowflake.com/en/news/press-releases/expedition-2026-business-ontology-ai-gateway/
  3. Blog de Snowflake, agentes de IA, datos gobernados y contexto de negocio, leído el 2026-11-06: https://www.snowflake.com/en/blog/ai-agents-governed-data-business-context/
  4. Blog de Snowflake, Snowflake CoWork añade Profiles, Dashboards y Automations, leído el 2026-11-06: https://www.snowflake.com/en/blog/snowflake-cowork-profiles-automations-dashboards
  5. Blog de Snowflake, agentes en la nube y automatizaciones de CoCo, leído el 2026-11-06: https://www.snowflake.com/en/blog/snowflake-coco-cloud-agents-automations/
  6. Página de producto de Snowflake CoWork, leída el 2026-11-06: https://www.snowflake.com/en/product/snowflake-cowork/
  7. Opciones de precios de Snowflake, leídas el 2026-11-06: https://www.snowflake.com/en/pricing-options/
  8. Tabla de consumo de servicios de Snowflake, vigente desde el 2026-11-04, leída el 2026-11-06: https://www.snowflake.com/legal-files/CreditConsumptionTable.pdf
  9. Documentación de Snowflake, conectores MCP de Cortex Agents, leída el 2026-11-06: https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-agents-mcp-connectors
  10. Documentación de Snowflake, conectores MCP, sección de límites, leída el 2026-11-06: https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-agents-mcp-connectors#limitations
  11. Documentación de Snowflake, Cortex Agents, leída el 2026-11-06: https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-agents
  12. Documentación de Snowflake, crear y gestionar agentes, leída el 2026-11-06: https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-agents-manage
  13. Documentación de Snowflake, CREATE AGENT, leída el 2026-11-06: https://docs.snowflake.com/en/sql-reference/sql/create-agent
  14. Documentación de Snowflake, API Run de Cortex Agents, leída el 2026-11-06: https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-agents-run
  15. Documentación de Snowflake, presupuestos de recursos de Cortex Agents, leída el 2026-11-06: https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-agents-resource-budgets
  16. Documentación de Snowflake, herramienta de ejecución de código, leída el 2026-11-06: https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-agents-code-execution-tool
  17. Documentación de Snowflake, servidor MCP gestionado por Snowflake, leída el 2026-11-06: https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-agents-mcp
  18. Documentación de Snowflake, CREATE MCP SERVER, leída el 2026-11-06: https://docs.snowflake.com/en/sql-reference/sql/create-mcp-server
  19. Nota de versión de Snowflake del 4 de noviembre de 2026, ejecuciones en segundo plano y herramientas auxiliares, leída el 2026-11-06: https://docs.snowflake.com/en/release-notes/2026/other/2026-11-04-mcp-async-agent-tools
  20. Documentación de Snowflake, aplicaciones y servidores MCP personalizados en Cortex AI Gateway, leída el 2026-11-06: https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-ai-gateway/tools/admin-custom-apps
  21. Documentación de Snowflake, SDK de agentes de Cortex Code: MCP y herramientas personalizadas, leída el 2026-11-06: https://docs.snowflake.com/en/user-guide/cortex-code-agent-sdk/mcp-custom-tools
  22. Documentación de Snowflake, Cortex Code, leída el 2026-11-06: https://docs.snowflake.com/en/user-guide/cortex-code/cortex-code
  23. Documentación de Snowflake, Snowflake CoWork, leída el 2026-11-06: https://docs.snowflake.com/en/user-guide/snowflake-cortex/snowflake-cowork
  24. Documentación de Snowflake, Automations de CoWork, leída el 2026-11-06: https://docs.snowflake.com/en/user-guide/snowflake-cortex/snowflake-cowork/automations
  25. Documentación de Snowflake, precios de Cortex AI, leída el 2026-11-06: https://docs.snowflake.com/en/user-guide/snowflake-cortex/pricing
  26. Documentación de Snowflake, funciones de Cortex AI, leída el 2026-11-06: https://docs.snowflake.com/en/user-guide/snowflake-cortex/aisql
  27. Documentación de Snowflake, AI_CLASSIFY, leída el 2026-11-06: https://docs.snowflake.com/en/sql-reference/functions/ai_classify
  28. Documentación de Snowflake, AI_SENTIMENT, leída el 2026-11-06: https://docs.snowflake.com/en/sql-reference/functions/ai_sentiment
  29. Documentación de Snowflake, introducción a las vistas semánticas, leída el 2026-11-06: https://docs.snowflake.com/en/user-guide/views-semantic/overview
  30. Documentación de Snowflake, CREATE SEMANTIC VIEW, leída el 2026-11-06: https://docs.snowflake.com/en/sql-reference/sql/create-semantic-view
  31. Documentación de Snowflake, introducción al acceso a redes externas, leída el 2026-11-06: https://docs.snowflake.com/en/developer-guide/external-network-access/external-network-access-overview
  32. Documentación de Snowflake, crear y usar una integración de acceso externo, leída el 2026-11-06: https://docs.snowflake.com/en/developer-guide/external-network-access/creating-using-external-network-access
  33. Documentación de Snowflake, ejemplos de acceso a redes externas, leída el 2026-11-06: https://docs.snowflake.com/en/developer-guide/external-network-access/external-network-access-examples
  34. Documentación de Snowflake, CREATE NETWORK RULE, leída el 2026-11-06: https://docs.snowflake.com/en/sql-reference/sql/create-network-rule
  35. Documentación de Snowflake, CREATE SECRET, leída el 2026-11-06: https://docs.snowflake.com/en/sql-reference/sql/create-secret
  36. Documentación de Snowflake, CREATE EXTERNAL ACCESS INTEGRATION, leída el 2026-11-06: https://docs.snowflake.com/en/sql-reference/sql/create-external-access-integration
  37. Documentación de Snowflake, procedimientos almacenados en Python, leída el 2026-11-06: https://docs.snowflake.com/en/developer-guide/stored-procedure/python/procedure-python-overview
  38. Documentación de Snowflake, CREATE TASK, leída el 2026-11-06: https://docs.snowflake.com/en/sql-reference/sql/create-task
  39. Documentación de Snowflake, introducción a las tareas, leída el 2026-11-06: https://docs.snowflake.com/en/user-guide/tasks-intro
  40. Documentación de Snowflake, Snowpipe, leída el 2026-11-06: https://docs.snowflake.com/en/user-guide/data-load-snowpipe-intro
  41. Documentación de Snowflake, introducción a los almacenes, leída el 2026-11-06: https://docs.snowflake.com/en/user-guide/warehouses-overview
  42. Documentación de Snowflake, coste de cómputo, leída el 2026-11-06: https://docs.snowflake.com/en/user-guide/cost-understanding-compute
  43. Documentación de Snowflake, vista CORTEX_AGENT_USAGE_HISTORY, leída el 2026-11-06: https://docs.snowflake.com/en/sql-reference/account-usage/cortex_agent_usage_history
  44. Documentación de Snowflake, vista SNOWFLAKE_COWORK_USAGE_HISTORY, leída el 2026-11-06: https://docs.snowflake.com/en/sql-reference/account-usage/snowflake_cowork_usage_history_view
  45. Documentación de Snowflake, vista EXTERNAL_ACCESS_HISTORY, leída el 2026-11-06: https://docs.snowflake.com/en/sql-reference/account-usage/external_access_history
  46. Especificación MCP, autorización, versión 2025-06-18, leída el 2026-11-06: https://modelcontextprotocol.io/specification/2025-06-18/basic/authorization
  47. IETF RFC 9728, OAuth 2.0 Protected Resource Metadata, leído el 2026-11-06: https://datatracker.ietf.org/doc/html/rfc9728
  48. IETF RFC 8414, OAuth 2.0 Authorization Server Metadata, leído el 2026-11-06: https://datatracker.ietf.org/doc/html/rfc8414
  49. IETF RFC 7591, OAuth 2.0 Dynamic Client Registration Protocol, leído el 2026-11-06: https://datatracker.ietf.org/doc/html/rfc7591
  50. Documentación de Amazon SP-API, tipos de informe de FBA, leída el 2026-11-06: https://developer-docs.amazon/sp-api/docs/report-type-values-fba
  51. National Retail Federation, devoluciones de casi 850.000 millones de dólares en 2025, leída el 2026-11-06: https://nrf.com/media-center/press-releases/consumers-expected-to-return-nearly-850-billion-in-merchandise-in-2025
  52. Analytics India Magazine, Snowflake presenta Business Ontology y Cortex AI Gateway, leída el 2026-11-06: https://analyticsindiamag.com/ai-news/snowflake-introduces-business-ontology-cortex-ai-gateway-to-bring-ai-agents-into-enterprise-workflows
  53. Catálogo de capacidades de EveryInfra, GET /api/v1/social/catalog, leído el 2026-11-06: https://api.everyinfra.com/api/v1/social/catalog
  54. Dirección del MCP remoto de EveryInfra, probada el 2026-11-06: https://api.everyinfra.com/mcp
  55. Metadatos de recurso protegido de la dirección MCP completa de EveryInfra, probados el 2026-11-06: https://api.everyinfra.com/.well-known/oauth-protected-resource/mcp/all

Referencia BL-97