Skip to main content
En esta guía vas a implementar pagos reales dentro de una app conversacional desplegada en WhatsApp, usando Mercado Pago.
Prerrequisitos:
  • Tener un flujo en Brain Studio listo (por ejemplo, un AI Agent que maneje un proceso de venta).
  • Tener una cuenta de Mercado Pago (para obtener credenciales de prueba y producción).
Usaremos como ejemplo una app que vende tickets de tours: el usuario elige tour, fecha, cantidad de tickets y entrega su correo. Ahora vamos a habilitar cobros con Mercado Pago dentro del mismo flujo. Este tutorial está dividido en tres partes:
  1. Implementación en modo test (DEV)
  2. Prueba en WhatsApp
  3. Paso a producción (PROD)

1. Implementación en modo test (DEV)

Video 1: Instalación y configuración en Brain Studio


Configuración inicial

1

Copia tu Access Token de prueba

¿Primera vez? Consulta la guía paso a paso: Obtención de credenciales de Mercado Pago.
Abre tu cuenta de Mercado Pago y ve a Tus integraciones.
Dashboard Mercado Pago mostrando Tus integraciones, selector de aplicación Jelou y las tarjetas Credenciales de producción y Credenciales de prueba
  • Entra a Credenciales de prueba
  • Copia el Access Token
Este token lo usarás para instalar Mercado Pago en Brain Studio.
Token listo para pegar en Brain Studio.
2

Instala Mercado Pago desde Marketplace

En Brain Studio:
  • Ve a Marketplace
  • Busca Mercado Pago
  • Haz clic en Conectar
  • Pega tu Access Token de prueba
  • Haz clic en Instalar
Modal de Credenciales API en Brain Studio solicitando el Access Token para instalar Mercado Pago
Una vez instalado, verás Mercado Pago disponible en la carpeta Marketplace del panel lateral del Canvas.
Mercado Pago visible en Marketplace.
3

Arrastra y conecta el nodo al Canvas

Conecta el flujo de pago justo después de que el usuario confirme su compra o reserva.
  • Dentro de Brain, busca Mercado Pago en en la carpeta Marketplace del panel lateral, y arrástralo al canvas
  • Conéctalo después del paso donde el usuario confirma su compra o reserva.
A continuación configura los inputs del nodo. Los tres campos obligatorios son: motivo de pago, monto sujeto a impuestos y email del comprador.

Configura Inputs: ¿Qué es cada campo?

Define tres cosas fundamentales al momento del cobro:
  1. Qué estás cobrando (motivo + monto + moneda)
  2. A quién se lo estás cobrando (email comprador)
  3. Bajo qué reglas (ambiente, impuestos, expiración, metadata)
Piensa en esta sección como la definición estructural del pago: lo que Mercado Pago necesita para crear la transacción correctamente.
Panel de configuración de inputs
Los nombres exactos pueden variar ligeramente según tu template, pero el patrón es siempre el mismo:
monto + moneda + impuestos (si aplica) + email comprador + metadata opcional.

Qué debes completar

Antes de entrar al detalle, asegúrate de tener claros estos tres elementos:
  • Un motivo de pago legible (ej: “Tour Valpo Walk - 2 ticket(s)”)
  • Un monto correcto (neto si trabajas con impuestos)
  • Un email comprador válido (en DEV debe ser un test user)
Si estos tres están bien definidos, el resto es configuración.

Resumen de los inputs del nodo

Antes de entrar al detalle, hay dos ideas clave:
  1. Este nodo crea el cobro (con monto, moneda, impuestos, motivo y email).
  2. Este nodo devuelve una respuesta (JSON) que puedes reutilizar después (por ejemplo, para mostrar un comprobante o guardar IDs del pago).

Guardar resultado como

En la parte superior del nodo verás Guardar resultado como. Ahí defines el nombre con el que Brain Studio guardará la respuesta completa del tool como un JSON en Memory.
  • En este tutorial usamos: checkout_response
  • Luego podrás leerlo desde un nodo Código con algo como:
    • const r = $memory.getJson('checkout_response')
Memory vs Context:
  • Memory persiste entre conversaciones (útil para consultar el estado del pago más tarde).
  • Context solo está disponible durante la conversación actual.
Para más detalles, consulta la guía completa.

Detalle de cada input

A continuación, una guía práctica de qué poner en cada campo (en el mismo orden que verás en el nodo).
CampoQué ponerPara qué sirve
Guardar resultado comocheckout_responseGuarda la respuesta del tool (JSON) en Memory con ese nombre
Tipo de pagopaymentTipo de operación (en la mayoría de casos, se deja default)
AmbienteDEV / PRODDefine si estás probando o cobrando real
Expiración del botón (min)20 (ejemplo)Tiempo máximo para pagar antes de que expire el link/botón
MonedaCLP, MXN, COP, etc.Moneda del cobro
Motivo de pagotexto o variableDescripción legible del cobro (lo verá el usuario / dashboard)
Monto sujeto a impuestosneto (ej: mp_monto_neto)Base imponible (si aplica IVA/impuestos)
Monto libre de impuestos0 o montoParte del cobro exenta/no afecta impuestos
Porcentaje de IVA19 (ejemplo)Porcentaje de impuesto (si aplica)
Metadata del pagoopcionalContexto para trazabilidad (solo lo imprescindible)
Email compradorobligatorioEmail del comprador. En DEV debe ser un test user
Personalizar textos botón de pagoNo / Permite personalizar el mensaje que acompaña al botón de pago (Header/Body/Footer)

Tipo de pago (default: payment)

Déjalo en payment salvo que tu implementación tenga otro tipo habilitado/definido. En un tutorial genérico, payment es lo correcto.

Ambiente (DEV / PROD)

  • DEV: pruebas controladas con credenciales de test.
  • PROD: cobros reales con credenciales productivas.
Cuando pases a PROD, verifica que tu flujo ya maneja bien las salidas (éxito, pendiente, fallido, errores) para no dejar al usuario “colgado”.

Expiración del botón (minutos)

Ejemplo típico: 20. Esto evita pagos fuera de contexto (“lo abrí 3 horas después”) y ayuda a que el flujo conversacional se mantenga coherente.

Moneda

Selecciona la moneda real del cobro según país/operación.
Ejemplos: CLP, MXN, COP, PEN, etc.

Motivo de pago

Es el texto que te permite identificar el cobro con facilidad. Recomendación práctica:
  • Usa una variable legible (ej: mp_descripcion_pago)
  • O un texto claro como: Tour Valpo Walk - 2 ticket(s)
Mientras más “humano” el motivo, menos fricción para soporte: el usuario y el comercio se entienden más rápido cuando algo falla.

Monto sujeto a impuestos + Monto libre de impuestos + IVA

Aquí defines la estructura del monto.
  • Monto sujeto a impuestos: la parte que sí paga IVA (normalmente el neto).
  • Monto libre de impuestos: la parte exenta (si no existe en tu caso, déjalo en 0).
  • Porcentaje de IVA: por ejemplo 19.
Ejemplo típico (venta con IVA):
  • Monto sujeto a impuestos = neto (ej: 20168)
  • Monto libre de impuestos = 0
  • IVA = 19
Si tu caso NO usa impuestos:
  • Usa 0 según corresponda en tu implementación y mantén consistencia con tu cálculo (lo importante es que no “inventes” IVA si no aplica).

Metadata del pago

Este campo es opcional, pero útil; te permite adjuntar contexto para trazabilidad. Recomendación: minimalista y con intención. Solo guarda lo que realmente usarías para:
  • reconciliar pagos
  • debuggear
  • o soporte al usuario
Ejemplos útiles:
  • order_id
  • order_reference_id (si tu backend lo usa)
  • tour_slug
  • user_id

Email comprador (muy importante en DEV)

En modo DEV es de suma importancia que el comprador sea un usuario de prueba, así como lo exige Mercado Pago. En este tutorial asumimos:
  • buyer email = payer email (son el mismo)
En DEV usa el email de test del país correspondiente (más abajo tienes la lista). En PROD, usa el email real del usuario.
Si estás en DEV y pones un email real (no test user), es muy probable que el pago falle o no puedas completarlo.

Personalizar textos botón de pago (opcional)

Por defecto viene en No. Si lo cambias a , el nodo habilita campos extra para personalizar el mensaje que verá el usuario antes de abrir el checkout. Esto es útil cuando quieres que el CTA se sienta más contextual (y menos genérico), sin tocar el flujo ni el checkout en sí.
Personalizar textos botón de pago
boolean
default:"false"
Si seleccionas , se habilitan campos adicionales para personalizar el mensaje que acompaña al botón de pago.Campos que se habilitan al activar:
  • Header (obligatorio)
  • Body (obligatorio)
  • Footer (obligatorio)
Cuando esta opción está activa, puedes modificar completamente el mensaje que verá el usuario antes de abrir el checkout.
Ejemplo de mensaje con textos personalizados y botón de pago de Mercado Pago en WhatsApp

Emails de prueba por país (modo test / DEV)

En DEV, Mercado Pago solo procesa pagos si el Email comprador pertenece a un test user del país correspondiente.
Copia el que necesites y pégalo directamente en el campo Email comprador del nodo.
Usa siempre el test user del mismo país que las credenciales que estás probando.
Si estás en DEV y el pago falla sin razón aparente, revisa primero que el email sea un test user válido.

Configuración del nodo: Outputs

El nodo expone distintas salidas según el estado del pago.
Flujo del nodo Jelou Pay mostrando salidas Pago Exitoso, Pago Pendiente, Pago Fallido, Error Code, Error Http y Envío correcto de CTA conectadas a nodos Texto, Botones y soporte

Mapa rápido de outputs

  • Envío correcto de CTA → El botón fue enviado al usuario (aún no existe resultado de pago).
  • Pago Exitoso → El pago fue aprobado.
  • Pago Pendiente → El pago fue iniciado pero aún no acreditado.
  • Pago Fallido → El pago fue rechazado o no completado.
  • Error Code / Error Http → Error técnico del flujo o del request.
CTA significa que el botón de pago se envió correctamente. Las demás salidas representan el resultado real de la transacción.

Outputs y qué conectar

OutputQué significaQué conectar ()
Envío correcto de CTAEl botón fue enviado correctamenteAI Agent de soporte post-CTA
Pago ExitosoEl pago fue aprobadoCódigo (normalización) → Texto (recibo)
Pago PendienteEl pago está en procesoTexto informativo + seguimiento
Pago FallidoEl pago fue rechazadoTexto + opción de reintento
Error CodeError en tu flujoBloque de manejo de error
Error HttpError en requestBloque de manejo de error

Envío correcto de CTA (Success)

Significa que se envió el botón de pago al usuario, pero aún no ha realizado una acción dentro del Webview que determine el estado de la transacción (Aprobada, Rechazada, Pendiente, Error). Recomendación: conecta un AI Agent de soporte post-CTA. Así, cuando el usuario reciba el botón de pago, tendrá a alguien al otro lado: un agente con el contexto adecuado que puede responder dudas frecuentes, tranquilizar y ayudar a completar el pago sin reiniciar la venta.
Conversación en WhatsApp: agente ofrece proceder al pago, usuario acepta, agente envía botón de Mercado Pago y mensaje de soporte; usuario pregunta si aceptan tarjeta de crédito y agente responde de forma amable

Prompt de ejemplo

El prompt está pensado para un AI Agent en la salida Envío correcto de CTA, con la herramienta Gmail (Marketplace) conectada para enviar tickets de soporte por correo cuando el usuario lo pida. Puedes copiarlo y ajustar el tono o las reglas a tu marca.
Eres “Soporte de Pago”, un asistente de ayuda para completar pagos dentro de WhatsApp.

Contexto: el usuario acaba de recibir un botón (CTA) para pagar. Tu rol NO es vender ni recalcular montos: solo ayudar a completar el pago o resolver problemas del botón.

────────────────────
COMPORTAMIENTO CLAVE
────────────────────
- Este agente puede ejecutarse sin que el usuario haya escrito nada.
- Si NO hay una pregunta o problema explícito del usuario en el último mensaje, envía SOLO este mensaje proactivo (una vez) y luego quédate en modo reactivo:

“Si tienes cualquier duda con tu pago, escríbeme por aquí y te ayudo.”

- Si el usuario SÍ escribe (pregunta/problema), responde directo, breve y claro.
- No reinicies la venta. No recalcules montos. No generes nuevos enlaces. No inventes información.
- Máximo 1 emoji por mensaje.

────────────────────
QUÉ SOPORTAS
────────────────────
- Cómo pagar desde el botón.
- No abre el botón / error al cargar.
- Pago pendiente.
- Pago rechazado.
- Problemas con tarjeta / método de pago.

Si el usuario reporta un problema:
1) Pide una descripción corta.
2) Si ayuda, pide captura de pantalla (puede enviar imágenes).
3) Ofrece generar un ticket por correo. NO generes ticket sin “sí” explícito.

────────────────────
TICKET POR CORREO (GMAIL TOOL)
────────────────────
Si el usuario confirma que quiere ticket, usa la herramienta de Gmail para enviar un correo a: [email protected]

Asunto:
[Ticket Pago] Operación {operation_id si existe} | Ref {order_reference_id si existe}

Cuerpo:
- Email comprador/payer
- Qué pasó (texto del usuario)
- Estado mencionado (pendiente/rechazado/error)
- Fecha y hora actual
- IDs útiles si existen: operation_id / order_id / order_reference_id
- Adjunta evidencia si el usuario envió imágenes

Luego confirma:
“Listo. Generé el ticket y te contactaremos por correo.”

────────────────────
CIERRE / FIN DE LA TAREA
────────────────────
Si el usuario dice que ya pagó y no necesita más ayuda (ej. “listo”, “gracias”, “era eso”), responde corto y cierra:
“Perfecto. Si necesitas algo más, aquí estaré.”

Pago Exitoso

El pago fue aprobado. Recomendación:
  1. Conecta un nodo Código para normalizar y guardar lo mínimo en Context.
  2. Luego un nodo Texto que muestre el comprobante corto (receipt line).

Ejemplo: Código de normalización

Este nodo lee checkout_response desde memoria y guarda en contexto solo lo reutilizable.
normalizar-pago.js
// Lee checkout_response (guardado en Memory) y mapea lo mínimo a Context
const r = $memory.getJson('checkout_response')
if (!r) throw new Error('checkout_response no existe en memory.')

const pl = r?.paymentLinkResponse
if (!pl) throw new Error('checkout_response.paymentLinkResponse no existe (revisa memory).')

const gw = pl.gateway_response || {}
const md = pl.metadata || gw.metadata || {}

// buyer email = payer email (en demo coincide)
const email = String(gw?.payer?.email || md.email || '')

// Identificadores y datos reutilizables
$context.set('pay_operation_id', String(gw.id || '')) // "Número de operación" en Mercado Pago
$context.set('pay_amount', Number(pl.amount || 0))
$context.set('pay_currency', String(pl.currency || 'CLP'))
$context.set('pay_email', email)
$context.set('pay_concept', String(gw.description || md.concept || ''))
$context.set('pay_status', String(gw.status || 'approved'))

// Receipt line (mensaje postpago)
$context.set(
  'pay_receipt',
  `Listo ✅ Pago aprobado.\n\nN° de operación Mercado Pago: ${String(gw.id || '')}`
)
Si utilizas este código, puedes imprimir el mensaje al usuario en nodo Texto de salida, pega esta expresión:
{{$context.pay_receipt}}
Diagrama: salida Pago Exitoso del nodo Jelou Pay conectada al nodo Código, y este al nodo Texto con pay_receipt

Pago Pendiente

El pago quedó pendiente. Recomendación:
  • Conecta un nodo Texto con una explicación breve.
  • Luego deriva al flujo que venga después (espera, seguimiento, soporte, etc.).
Mantén el mensaje simple: el objetivo es no confundir y no empujar a un segundo pago sin contexto.

Pago Fallido

El pago falló (rechazo / no acreditado). Recomendación:
  • Conecta un nodo Texto claro y breve.
  • Ofrece reintento o cambio de método.
  • Si el usuario sigue con problemas, deriva al soporte.

Error Code / Error Http

Errores técnicos de tu flujo (código) o del request HTTP. Recomendación:
  • Conecta un bloque de manejo de error.
  • Muestra un mensaje breve + opción de reintento + soporte.
  • Evita exponer detalles técnicos al usuario final.

2. Prueba en WhatsApp

Cuando ya tengas el nodo configurado (inputs + outputs conectados), es momento de probar el flujo completo desde WhatsApp.
Importante: La experiencia de pago se abre en un WebView dentro de WhatsApp. Por eso, para validar el pago de punta a punta, la prueba debe hacerse desde WhatsApp (no desde el preview de mensajes del Canvas).

Video 2: Prueba desde WhatsApp (DEV)


Cómo iniciar la prueba desde WhatsApp

En Brain Studio puedes iniciar una prueba real en WhatsApp en segundos.
1

Abre el panel Probar

En la esquina superior derecha del Canvas, haz clic en Probar.
Panel Probar proyecto en Brain Studio con la opción Prueba desde WhatsApp e ingreso de número de teléfono
Si aún no tienes un canal de WhatsApp conectado/habilitado, esta es la forma más rápida de validar el flujo de pago.
2

Ingresa tu número y envía el primer mensaje

  • Selecciona tu prefijo (ej. CL +56)
  • Ingresa tu número
  • Envía el primer mensaje para comenzar la conversación de prueba
Desde ese punto, el flujo corre como si fuera un usuario real.
3

Completa el pago en el WebView

Cuando el bot te envíe el botón Proceder al pago, ábrelo desde WhatsApp.Ahí verás el WebView del checkout y podrás probar tarjetas de prueba, estados (aprobado/rechazado) y todo el manejo de salidas.
En algunos países, si el usuario tiene instalada en su equipo la App de Mercado Pago, el checkout webview intentará abrirla automáticamente como primera opción de pagos. Sin embargo, para pagos en DEV esta opción no está habilitada, por lo que se debe cerrar y retornar a WhatsApp para ingresar la tarjeta de prueba.

Tarjetas de prueba por país

Para que puedas probar distintos escenarios (pago aprobado, pago rechazado, etc.), Mercado Pago publica tarjetas de prueba por país.
En DEV, recuerda dos cosas:
  • Usa credenciales de prueba.
  • Usa un test user válido en el campo Email comprador (del mismo país de tus credenciales).
En cada enlace encontrarás números de tarjeta, CVV y casos de aprobación/rechazo:
Si quieres testear bien tu flujo, prueba al menos 2 casos: uno aprobado y uno rechazado. Así validas que tus outputs (Pago Exitoso / Fallido) están conectados correctamente.

3. Paso a producción (PROD)

Pasar a PROD es básicamente cambiar dos cosas: credenciales y datos reales. La experiencia en WhatsApp se mantiene igual, pero ahora el pago impacta tu cuenta productiva.

Video 3: Configuración en producción + pago real

1

Obtener credenciales productivas

En Mercado Pago, ve a Credenciales de producción y copia tu Access Token productivo.
Este token se asocia a tu cuenta productiva. Úsalo solo cuando estés listo para cobrar real.
2

Actualizar credenciales en Marketplace

Para evitar confusiones (y dejarlo explícito), reinstalaremos la integración con el token correcto:
  • Ve a Marketplace
  • Abre Mercado Pago
  • Presiona Eliminar integración
  • Presiona Instalar nuevamente
  • Pega tu Access Token de producción
  • Presiona Instalar
3

Cambiar el ambiente del nodo a PROD

En el nodo Jelou Pay: Enviar link de pagos:
  • Cambia Ambiente de DEV a PROD
A partir de este punto, el flujo intentará generar cobros reales.
4

Reemplazar el Email comprador por el email real del flujo

En DEV, usamos un test user para el campo Email comprador. En PROD, ese mismo campo debe venir desde tu flujo (el email real del usuario).Si en la etapa de test dejaste un test user “quemado” en el input, ahora reemplázalo por tu variable.
En este tutorial, el email se captura durante la conversación (AI Agent) y se normaliza como variable antes de llegar al nodo de pago. Lo importante es que en PROD el campo Email comprador quede conectado a ese dato real.
5

(Opcional) Personalizar textos del botón de pago

Si quieres que el CTA se sienta más contextual (sin cambiar el checkout), activa Personalizar textos botón de pago.
  • Cambia el selector a
  • Completa Header, Body y Footer (obligatorios)
Esto solo personaliza el mensaje previo al checkout dentro de WhatsApp. La lógica del pago y el WebView no cambian.
6

Probar pago real

Realiza un pago real (wallet o tarjeta) y verifica:
  • Estado aprobado
  • Número de operación (operation ID)
  • Registro visible en tu dashboard de Mercado Pago
Las transacciones en producción consumen créditos de Brain Studio por intento, además de las comisiones del proveedor. Si estás validando por primera vez, haz un cobro pequeño y revisa el dashboard antes de escalar.

Próximos pasos


Con estos pasos tienes el flujo funcionando en test y producción. Desde aquí puedes registrar operaciones, emitir comprobantes, enviar tickets automáticos por email o integrar más proveedores según tu caso.