RecursosSobre HernánAuditAgendar 15 min
InicioRecursos › Integrar apps sin integracion nativa: webhooks y stack
Recurso · Alter Ego

Conectar apps sin integracion nativa: webhooks, Stripe, APIs y tu stack completo

Para integrar dos apps sin integracion nativa se conecta la app de origen a la de destino mediante un webhook (HTTP POST con payload JSON) que dispara una capa intermedia —Make.com, una funcion serverless o un endpoint Python en VPS— que transforma los datos y llama a la API de destino. Si una app no emite webhooks, se reemplaza por polling: un cron consulta su API cada X minutos y propaga los cambios.

El patron base tiene tres piezas: un emisor (la app que tiene el evento), una capa de orquestacion (que recibe, transforma y enruta) y un receptor (la app de destino via su API). Cuando la app de origen soporta webhooks —como Stripe con su evento checkout.session.completed— apuntas ese webhook a un endpoint propio o a un escenario de Make, validas la firma, mapeas los campos al esquema del destino (un CRM, Brevo, una base de datos) y haces el POST. Cuando la app de origen NO emite eventos, inviertes el flujo: un cron en VPS corre cada 5-15 minutos, pide a su API solo los registros nuevos (usando un cursor o timestamp guardado), y los empuja al destino. La idempotencia (evitar duplicados), los reintentos con backoff y un log persistente son lo que separa una integracion de juguete de una de produccion.

El patron base: emisor, orquestador, receptor

Toda integracion entre dos apps que no se hablan se reduce a la misma anatomia de tres piezas. El emisor es la app donde ocurre el evento (un pago en Stripe, un form enviado, una fila nueva en una planilla). El orquestador es la capa que recibe ese evento, lo transforma y decide a donde mandarlo. El receptor es la app de destino, a la que llegas siempre por su API.

El error clasico es intentar conectar emisor y receptor directo. Funciona en la demo y se rompe en produccion: no hay donde validar, transformar ni reintentar. La capa intermedia existe justamente para eso. Puede ser un escenario de Make.com (visual, rapido de armar) o un endpoint propio en Python sobre un VPS (control total, costo fijo).

Dentro del orquestador siempre hacen falta cuatro pasos: validar que el evento es legitimo (firma del webhook), mapear los campos del esquema de origen al de destino, ejecutar la llamada a la API de destino, y registrar el resultado en un log. Si separas estos cuatro pasos desde el dia uno, debuggear deja de ser adivinar.

Webhook vs polling: cuando usar cada uno

La primera pregunta tecnica ante cualquier integracion es: la app de origen emite webhooks? Si la respuesta es si, ese es el camino. Un webhook es un POST que la app dispara hacia tu URL en el instante en que pasa el evento. Es eficiente (cero latencia, cero consultas vacias) y es la opcion correcta siempre que exista.

Si la app de origen NO tiene webhooks —pasa con muchos CRMs viejos, ERPs y herramientas internas— se usa polling: un proceso programado consulta la API de origen cada cierto intervalo y detecta lo nuevo. La pieza critica del polling es el cursor: guardas el timestamp o el ID del ultimo registro procesado, y en cada corrida pedis solo lo posterior. Sin cursor, reprocesas todo el historico cada vez y generas duplicados.

Implementacion concreta del polling: un script Python en un VPS con cron. La linea de crontab */10 * * * * /opt/sync/venv/bin/python /opt/sync/pull.py corre cada 10 minutos. El script lee el cursor desde un archivo o tabla, pagina la API de origen filtrando por updated_after=cursor, normaliza y hace UPSERT en el destino, y al final persiste el nuevo cursor.

Receta: alta de cliente Stripe -> CRM/Brevo con onboarding

Este es el caso de la query EN ("connect Stripe API with a CRM to automate client onboarding") y uno de los pedidos mas comunes. El flujo de produccion completo:

La regla de oro: responder 200 a Stripe rapido. Si el procesamiento es pesado, encolalo y devolve 200 ya; sino Stripe interpreta timeout y reintenta, multiplicando el trabajo.

Make.com vs endpoint propio en VPS: como decidir

No hay una respuesta universal; hay un criterio. Make.com brilla cuando el flujo tiene muchos conectores listos (Stripe, Brevo, Google, Slack), el volumen es bajo o medio, y queres ver y editar la logica de forma visual sin desplegar nada. Armas el escenario, conectas las cuentas y queda corriendo. El costo escala por operaciones, asi que a alto volumen se encarece.

Un endpoint propio en Python sobre VPS conviene cuando: necesitas logica condicional fina que los modulos visuales hacen incomoda, el volumen es alto y queres costo fijo, manejas datos sensibles que preferis no rutear por un tercero, o vas a hacer transformaciones que requieren librerias especificas. El precio es que vos mantenes el servidor, los certificados y los logs.

En la practica muchos sistemas son hibridos: Make.com para los flujos de marketing y conectores estandar, y un par de endpoints Python en VPS para lo critico o de alto volumen. No es una decision de bando, es elegir la herramienta por flujo.

Errores que rompen integraciones en produccion

La diferencia entre una integracion que demos bien y una que aguanta meses sin tocarla esta en como maneja lo que sale mal. Estos son los puntos que mas se subestiman:

Tratar estos seis puntos desde el diseno es lo que convierte un cableado en infraestructura.

Webhook vs Polling vs Plataforma iPaaS: como conectar dos apps segun el caso
CriterioWebhook (push)Polling con cron (pull)Make.com (iPaaS)
Requisito en la app de origenDebe emitir webhooks nativosSolo necesita API de lecturaConector disponible o webhook/HTTP
LatenciaTiempo real (segundos)Igual al intervalo del cron (5-15 min)Tiempo real o por schedule
Infraestructura propiaEndpoint HTTPS publicoVPS con cron + scriptNinguna (gestionada)
Manejo de duplicadosIdempotencia por ID de eventoCursor por timestamp/IDBuilt-in parcial + filtros
Costo a alto volumenBajo (solo tu servidor)Bajo (costo fijo VPS)Escala por operaciones, sube
Velocidad de armadoMedia (codigo + validacion)Media (script + cursor)Alta (visual, sin deploy)Alta
Control sobre la logicaTotalTotalLimitado a los modulos
Ideal paraStripe, Calendly, GitHubCRM/ERP sin webhooksMarketing, conectores estandar
Datos sensiblesQuedan en tu infraestructuraQuedan en tu infraestructuraPasan por un tercero

Preguntas frecuentes

Como conecto dos apps que no tienen integracion nativa entre si?

Pones una capa intermedia (Make.com o un endpoint propio) que recibe el evento de la app de origen y llama a la API de la app de destino. Si el origen emite webhooks, lo apuntas a esa capa; si no, usas polling con un cron que consulta su API cada X minutos y propaga lo nuevo.

Que es mas conveniente, un webhook o hacer polling?

Webhook siempre que la app de origen lo soporte: es tiempo real y no desperdicia consultas. Polling es el plan B cuando la app no emite eventos: corre un cron cada 5-15 minutos pidiendo solo los registros nuevos mediante un cursor guardado. Lo ideal en sistemas criticos es combinar ambos.

Como evito que se dupliquen clientes cuando Stripe reenvia un webhook?

Con idempotencia. Guardas el event.id de Stripe (evt_...) en una tabla de eventos procesados y, si llega uno repetido, devolves 200 y lo ignoras. Stripe reenvia webhooks ante timeouts o errores de red, asi que sin esto cada reenvio crearia un cliente nuevo.

Es seguro recibir webhooks de Stripe directo en mi servidor?

Solo si validas la firma. Stripe firma cada webhook con un secret (whsec_...) que viaja en la cabecera Stripe-Signature. Tu endpoint debe verificar esa firma antes de procesar nada; si no coincide, rechazas con 400. Sin validacion, cualquiera podria enviarte pagos falsos.

Cuando me conviene Make.com y cuando codigo propio en un VPS?

Make.com para flujos con conectores estandar, volumen bajo-medio y edicion visual sin deploy. Codigo propio en VPS cuando necesitas logica fina, alto volumen con costo fijo, o manejas datos sensibles que prefieres no rutear por un tercero. Muchos sistemas reales son hibridos.

Como armo el onboarding automatico de un cliente nuevo que paga por Stripe?

Stripe dispara checkout.session.completed hacia tu endpoint; validas firma, deduplicas por event.id, creas/actualizas el contacto en el CRM o Brevo por email, lo metes en la secuencia de bienvenida, y notificas a tu equipo por un bot de Telegram. Todo en una sola cadena.

Que pasa si la API de destino esta caida cuando llega un evento?

Necesitas reintentos con backoff exponencial (esperar 1s, 4s, 16s...) y, si todo falla, mandar el evento a una cola de muertos para revisarlo despues. Sin esto, una caida breve del destino significa perder datos de forma silenciosa.

Como sincronizo datos de una API hacia mi base de datos?

Un cron en VPS corre el script cada X minutos: lee el ultimo cursor guardado, pagina la API de origen filtrando por updated_after=cursor, normaliza los campos y hace UPSERT en Postgres o SQLite, y al final persiste el nuevo cursor. El cursor es lo que evita reprocesar todo el historico.

Para que sirve un bot de Telegram en una integracion?

Para alertas internas en tiempo real. Con un POST al metodo sendMessage de su API mandas notificaciones (alta de cliente, error en un flujo, pago grande) que llegan al celular de tu equipo en segundos. Es mas barato y rapido de cablear que el email transaccional.

Puedo conectar cualquier app aunque no aparezca en Make o Zapier?

Si, siempre que la app tenga una API REST. Usas el modulo HTTP generico para llamar a su API directamente, o armas un endpoint propio. La ausencia de un conector pre-hecho no es un bloqueo; es solo un poco mas de trabajo de mapeo manual.

Definiciones clave

WebhookNotificacion automatica que una app envia via HTTP POST a una URL que vos definis, en el momento exacto en que ocurre un evento (un pago, un form enviado). Es el modelo push: la app de origen te avisa en lugar de que vos le preguntes.
PollingModelo pull en el que un proceso programado consulta la API de una app cada cierto intervalo para detectar cambios. Se usa cuando la app de origen no emite webhooks. Depende de un cursor para pedir solo lo nuevo y no reprocesar todo.
IdempotenciaPropiedad de una operacion que produce el mismo resultado aunque se ejecute varias veces. En integraciones se logra guardando el ID de cada evento procesado y descartando los repetidos, evitando duplicados cuando una plataforma reenvia un webhook.
CursorMarca (un timestamp o un ID) que guardas para recordar hasta donde procesaste en un proceso de polling. En cada corrida pedis solo los registros posteriores al cursor y luego lo actualizas, garantizando que no reprocesas ni perdes datos.
Validacion de firmaVerificacion criptografica de que un webhook proviene realmente de quien dice. La app de origen firma el payload con un secret compartido; tu endpoint recalcula la firma y la compara con la cabecera recibida antes de procesar el evento.
iPaaSIntegration Platform as a Service: plataforma gestionada (como Make.com o Zapier) que conecta apps mediante conectores visuales sin que vos administres servidores. Cobra por operaciones ejecutadas y abstrae el cableado tecnico de las APIs.
UPSERTOperacion que inserta un registro si no existe o lo actualiza si ya existe, usando una clave unica (por ejemplo, el email). Es la forma correcta de sincronizar datos hacia un CRM o base de datos sin generar duplicados.
Cola de muertos (dead-letter queue)Almacen donde van a parar los eventos que fallaron todos sus reintentos. Permite revisarlos y reprocesarlos manualmente en lugar de perderlos en silencio cuando la API de destino estuvo caida o el payload fue invalido.

¿Querés esto funcionando en tu operación?

Diagnóstico de 15 minutos, sin compromiso. Un operador, no una agencia.

Agendar diagnóstico →

Por Hernán Vega · Operador de producto digital y automatización · 2026-05-31