Falta el disparador de envío de formularios de HubSpot - No se puede usar webhook

Estoy buscando migrar de Relay a n8n. Configuré tanto OAuth como la clave de servicio API de Hubspot en Relay y la conexión OAuth pudo establecer el primer paso como un disparador de envío de formulario de Hubspot. Veo que eso aún no es posible en n8n, aunque tiene acceso a la misma infraestructura exacta.

Solicitud de función: ¿Se puede agregar el evento de disparador de envío de formulario de Hubspot como un disparador de Hubspot ya que claramente ha sido posible en Relay?

Pregunta a la comunidad: No tengo la cuenta empresarial en Hubspot necesaria para un paso de webhook alternativo para disparar basándome en envíos de formularios. Tampoco puedo disparar según contacto creado porque los clientes existentes a veces completan estos formularios de Hubspot. El asistente de IA de n8n me está señalando que configure una credencial separada de la API de desarrollador de Hubspot. Cuando genero eso en Hubspot, obtengo el token de API pero n8n quiere el ID de aplicación, ID de cliente, etc., que la API de desarrollador no proporciona. Puedo agregar esas propiedades de ID de cliente e ID de aplicación si creo una aplicación de Hubspot en el mercado público, pero eso no parece correcto. No quiero que esto sea público de ninguna manera.

¿Algún consejo o ayuda aquí?

Para envíos de formularios específicamente, la ruta más limpia sin una cuenta empresarial es la herramienta de automatización Workflows de nivel gratuito de HubSpot: construye un flujo de trabajo simple activado por “Form submitted” (Formulario enviado), luego añade una acción Webhook apuntando a tu URL de nodo Webhook de n8n. Esto funciona en los niveles Starter/Pro, no solo Enterprise, y evita todo el lío de registro de aplicaciones de Developer API en el que te estás metiendo con client ID/app ID. No necesitas una aplicación pública del marketplace para esto, los webhooks de flujo de trabajo interno de HubSpot no lo requieren. Esto evita la necesidad de la característica de suscripción de webhook empresarial por completo.

Desafortunadamente, Hubspot cambió esto después de lanzar Data Hub y no puedes realizar una acción webhook en flujos de trabajo con los niveles Starter o Pro de Sales Hub o Marketing Hub. Quizás me estoy perdiendo algo, pero aquí es donde se indica explícitamente en Hubspot. y nuevamente en la parte superior de esta página. Me encantaría si me estuviera perdiendo algo aquí :slight_smile:

"Enviar un webhook (Data Hub Professional y Enterprise solamente)

| Activar un webhook a una aplicación externa. Esto permite que tu flujo de trabajo se comunique con esta aplicación externa. Por ejemplo, los webhooks pueden enviar la información de una empresa de HubSpot (formateada en JSON) a un CRM externo. Esta acción se puede usar con todos los tipos de flujo de trabajo.

Obtén más información sobre activar webhooks.

"
1 me gusta

Buena observación, esa acción ahora requiere Data Hub Pro. Ya que la acción de webhook del flujo de trabajo está descontinuada, cambia a polling en lugar de pushing: crea una Private App de HubSpot con el scope de formularios, luego usa un Schedule Trigger de n8n más un nodo HTTP Request llamando a GET https://api.hubapi.com/marketing/v3/forms/{formId}/submissions con el token de la Private App como autenticación Bearer. Almacena el último submittedAt o id procesado (una Data Table o incluso un simple Set/IF comparado con la ejecución anterior) para que solo reenvíes nuevos envíos a tu paso de CRM. Esto evita tanto el requisito del webhook de Data Hub como el registro de aplicación pública que intentabas evitar. Prueba primero el nodo HTTP Request por sí solo y confirma que la respuesta incluya un array de results con timestamps de submittedAt que puedas filtrar.

¡Gracias, es una buena idea! Incluso podría configurarlo para que se ejecute cada 15 minutos y, si solo está configurado para capturar entradas nuevas, definitivamente podría funcionar. Lo intentaré. ¡Gracias!

Ya que vas a probar la ruta de sondeo cada 15 minutos, haría un flujo de trabajo pequeño con puntos de control en lugar de un flujo directo «sondeo → CRM». De esa manera, un reintento o fallo parcial no duplicará los envíos de formularios.

Una forma de n8n viable:

  1. Trigger de programación — cada 15 minutos.
  2. Solicitud HTTP: listar envíos de formularios de HubSpot — usa un token de Aplicación Privada de HubSpot como Authorization: Bearer ...; llamá al endpoint de envíos para el formulario específico que te interesa.
  3. Código: filtrar solo envíos nuevos — comparar submittedAt / id de envío con un punto de control guardado.
  4. Dividir en lotes — procesar cada nuevo envío de uno en uno.
  5. Pasos de CRM / posteriores — crear/actualizar lo que estabas haciendo en Relay.
  6. Código: guardar punto de control solo después del éxito — actualizar la marca de tiempo/id procesada más reciente al final, no antes del paso de CRM.

Para el nodo de Código de filtro/punto de control, este es el patrón que usaría:

const staticData = $getWorkflowStaticData('global');
const lastSubmittedAt = staticData.lastSubmittedAt || '1970-01-01T00:00:00.000Z';

const submissions = $json.results || [];
const fresh = submissions
  .filter((submission) => new Date(submission.submittedAt) > new Date(lastSubmittedAt))
  .sort((a, b) => new Date(a.submittedAt) - new Date(b.submittedAt));

return fresh.map((submission) => ({
  json: {
    hubspotSubmissionId: submission.id || submission.submissionId,
    submittedAt: submission.submittedAt,
    formId: submission.formId,
    fields: submission.values || submission.submittedValues || [],
    raw: submission,
  },
}));

Luego, después de que el paso de CRM posterior tenga éxito, agregá un nodo de Código final:

const staticData = $getWorkflowStaticData('global');
const newest = $input.all()
  .map((item) => item.json.submittedAt)
  .filter(Boolean)
  .sort()
  .at(-1);

if (newest) staticData.lastSubmittedAt = newest;
return $input.all();

Una trampa: los datos estáticos del flujo de trabajo se guardan de forma confiable en ejecuciones de trigger activo, así que probá el nodo HTTP manualmente, pero probá el comportamiento del punto de control con el flujo de trabajo activado. Si necesitás reprocesar una ventana fallida, borrá temporalmente lastSubmittedAt o movelo hacia atrás unos minutos.

Nota transparente: construí este modelo de sondeo con puntos de control con FlowForge AI y lo adapté a tu restricción de HubSpot/Data Hub. El constructor está aquí si querés generar una versión JSON de n8n más completa: FlowForge AI — Build Smarter Workflows with AI

1 me gusta

Si los webhooks del flujo de trabajo de HubSpot están restringidos para tu cuenta, evitaría la ruta de aplicación pública para esto. Un token de aplicación privada es suficiente para un flujo de trabajo de sondeo interno.

El patrón de respaldo es:

  1. Crear una aplicación privada de HubSpot con los alcances mínimos de CRM y formularios que necesites
  2. En n8n, usa un Schedule Trigger en lugar de un disparador de HubSpot
  3. Usa HTTP Request con el token de portador de la aplicación privada
  4. Consulta envíos de formularios recientes o contactos modificados recientemente
  5. Filtra por los IDs de formulario específicos que te importan
  6. Almacena un cursor para que cada envío se procese una sola vez
  7. Mantén una tabla de deduplicación con clave form_submission_id si está disponible, o por form_id más submitted_at más email/contact id

La parte importante es separar contacto creado de formulario enviado. Tienes razón en que contacto creado pasará por alto los contactos existentes que envíen un nuevo formulario. Sondear envíos de formularios y luego deduplicar por identidad de envío es el sustituto más seguro hasta que n8n tenga un disparador nativo de envío de formularios de HubSpot.

También diseñaría la primera versión para ejecutarse cada 2 a 5 minutos en lugar de intentar simular un disparador verdaderamente instantáneo. Para la mayoría de los flujos de trabajo de formularios eso es lo suficientemente cercano, y evita depender de una acción de webhook de HubSpot que puede desaparecer con un cambio de plan.

Antes de construirlo, confirmaría:

  1. Qué formularios exactos de HubSpot deberían activar flujos de trabajo
  2. Si cada formulario se asigna a la misma acción descendente o a ramas diferentes
  3. Qué campo demuestra que un envío es nuevo
  4. Dónde se deben almacenar los IDs de envío procesados en n8n

Esto te proporciona un flujo de trabajo privado interno sin crear una aplicación pública del mercado.