Llamar a IA externa desde CloudPages y SSJS — cómo hacerlo
El patrón para llamar a un LLM externo desde Marketing Cloud — dónde va la llamada (antes de tiempo, no en render time), cómo manejar auth y fallas, y los guardrails de data, latencia y costo que evitan que rompa una página o un presupuesto. El cómo-hacerlo, con los gotchas incorporados.
A veces el modelo que necesitás no es Einstein y no es Agentforce — es un LLM externo que llamás vos para generar copy, clasificar una respuesta entrante, o resumir un registro. Marketing Cloud te deja hacer esto desde SSJS con HTTPRequest (en un CloudPage o un Script Activity) o desde AMPscript con HTTPPost. La mecánica es fácil. El criterio de ingeniería — dónde va la llamada y cómo falla — es todo el trabajo.
Esta página es el patrón que usa Cleon, con los gotchas (6 al 9) incorporados en vez de atornillados encima.
La única decisión que importa: antes de tiempo, no en render time
La elección más importante es cuándo corre la llamada.
RENDER TIME (evitar) ANTES DE TIEMPO (preferir)
CloudPage / email renderiza Automation / Script Activity corre
→ llama al modelo sincrónicamente → llama al modelo
→ el visitante espera al modelo → escribe el resultado a un DE
→ modelo lento/caído = página rota → el render-time solo lee el DEUna llamada externa en render time hace que la latencia del modelo sea la latencia de tu página y la caída del modelo sea tu caída (gotchas 6 y 7). Generar antes de tiempo, hacia un Data Extension, convierte el render en un lookup de DE simple — rápido, determinístico, y tuyo para reintentar cuando el modelo falla. Default a antes-de-tiempo. Las llamadas en render time son para superficies genuinamente interactivas (un CloudPage estilo chat) donde aceptaste la latencia y construiste el camino de falla.
El patrón (antes de tiempo)
Un Script Activity en una Automation, iterando la audiencia, llamando al modelo, escribiendo el resultado de vuelta:
<script runat="server">
Platform.Load("Core", "1.1.1");
// Los secrets vienen de un DE protegido / Key Management, nunca hard-coded.
var apiKey = lookupApiKey(); // de un DE restringido o Key Mgmt
var endpoint = "https://api.example-llm.com/v1/messages";
try {
var req = new Script.Util.HttpRequest(endpoint);
req.method = "POST";
req.contentType = "application/json";
req.setHeader("Authorization", "Bearer " + apiKey);
req.postData = Stringify({
model: "the-model",
max_tokens: 300,
messages: [{ role: "user", content: buildPrompt(contactRow) }]
});
var res = req.send();
if (res.statusCode == 200) {
var out = Platform.Function.ParseJSON(String(res.content));
writeResultToDE(contactRow.SubscriberKey, out); // cacheá para render time
} else {
logModelError(contactRow.SubscriberKey, res.statusCode);
writeFallbackToDE(contactRow.SubscriberKey); // nunca lo dejes en blanco
}
} catch (e) {
// Nunca dejes que la falla de un contacto aborte toda la corrida.
logModelError(contactRow.SubscriberKey, e.message);
writeFallbackToDE(contactRow.SubscriberKey);
}
</script>El email o la página en render time después lee el valor cacheado con un Lookup simple — sin ninguna dependencia externa en el camino de envío.
Auth y secrets
- Nunca hard-codees la API key en un CloudPage o Code Resource — los CloudPages son direccionables por URL y los Code Resources se copian. Mantené la key en un Data Extension con permisos restringidos o en Key Management, y leela en runtime.
- Tratá la key como cualquier credencial de producción: quién la ve, cómo rota, a quién se le avisa cuando se filtra.
Los tres guardrails que evitan que muerda
Data — qué tiene permitido salir
Mandar data de clientes a un proveedor externo es una decisión de compliance, no técnica. Antes de que cualquier PII salga de Marketing Cloud, confirmá que un acuerdo de procesamiento de datos cubre al proveedor, y confirmá si retiene o entrena con lo que le mandás. Redactá lo que no necesita salir. (Gotcha 6.)
Latencia y falla — la llamada va a estar lenta o caída en algún momento
HTTPRequest es sincrónica y puede timeout. La ubicación antes-de-tiempo contiene el radio de explosión, pero el Script Activity igual necesita: envolver cada llamada en try/catch, chequear el status code, escribir un valor de fallback ante falla (nunca dejar el campo en blanco), y que la falla de un contacto no aborte la corrida. (Gotchas 7 y 9.)
Costo y rate — la factura escala con la audiencia
Una llamada por contacto en un programa de un millón de envíos es un millón de llamadas — una factura por token y un rate limit que escalan los dos con la audiencia (gotcha 9). El patrón antes-de-tiempo ya ayuda: generá una vez, cacheá en un DE, y los re-envíos no cuestan nada. Para la corrida de generación en sí, throttleá para quedarte bajo el rate limit del proveedor (Platform.Function.Sleep entre lotes) y modelá el costo contra el tamaño real de la audiencia antes de lanzar.
El problema de QA que no podés muestrear hasta hacerlo desaparecer
El output de un modelo es no determinístico: el mismo prompt puede devolver copy distinto en dos llamadas, y un spot check de tres previews no va a atrapar el único output malo (gotcha 8). Restringí y validá antes de que salga nada:
- Preferí un set fijo de opciones entre las que el modelo elige por sobre la generación abierta, cuando puedas.
- Validá el output — largo, formato, un filtro de palabras prohibidas / contenido — antes de escribirlo al DE.
- Para cualquier cosa visible al cliente y abierta, un humano aprueba el set generado antes del envío. El patrón antes-de-tiempo lo hace posible: el copy existe en un DE antes del envío, así que puede revisarse.
Cuándo no hacer esto para nada
Si la tarea es "responder preguntas sobre nuestra data de clientes" o "tomar una acción en la plataforma", un LLM externo es la herramienta equivocada — eso es Agentforce, fundamentado y gobernado. Si la tarea es "predecir engagement", eso es Einstein. La IA externa se gana su lugar para tareas de lenguaje autocontenidas donde no querés entregarle a un agente de plataforma tu data y tus acciones. (Ver el Style Guide de IA.)
Relacionado
- Gotchas de IA en Marketing Cloud — gotchas 6–9, incorporados a este patrón
- Agentforce y Marketing Cloud — la alternativa gobernada para data + acciones
- Einstein para Marketing Cloud — la capa de predicción en-plataforma
- Debuggear personalización con IA — cuando el valor generado aterriza mal o en blanco
- Style Guide de IA — Agentforce vs. IA externa, la decisión