El módulo Formularios web le permite diseñar un formulario dentro de Axentra (un "contáctanos", una "solicitud de cotización", etc.), conectarlo a su propio sitio pegando una URL, y recibir cada respuesta dentro del ERP. No hace falta programar ni contratar un servicio externo de formularios: usted arma el formulario aquí, pega la URL de envío en el <form> HTML que ya tiene en su página, y las respuestas llegan protegidas contra bots por Cloudflare Turnstile y limitadas a los dominios que usted autorice.
Se administra desde Formularios en el menú principal (permiso forms.form.view).
su-empresa.axentra.com.do/e-forms/<uuid>.action de un <form> en el sitio del cliente.El endpoint /e-forms/<uuid> es una de las pocas excepciones REST del sistema (junto a /healthz, la recepción DGII y el webhook de Uber Eats). Vive en el contenedor de su empresa, así que sus respuestas nunca se mezclan con las de otro inquilino.
Contáctanos) y descripción opcional para su referencia.email, telefono). Debe ser única dentro del formulario. Se autocompleta a partir de la etiqueta la primera vez.El límite de 8 campos es intencional: un formulario web es para captar un contacto o una solicitud, no para reemplazar un Typeform. Si necesita más, considere dos formularios o el flujo de contactos del ERP.
| Tipo | Uso | Lleva opciones |
|---|---|---|
| Texto | Nombre, asunto, texto corto | No |
| Correo electrónico | No | |
| Teléfono | Número de contacto | No |
| Número | Cantidad, presupuesto | No |
| URL | Sitio web, enlace | No |
| Texto largo | Mensaje, comentario | No |
| Lista desplegable | Elegir una opción de una lista | Sí |
| Casilla | Sí/No (acepto términos) | No |
| Opciones (radio) | Elegir una opción visible | Sí |
| UTM (oculto) | Atribución de campañas y vendedores; el visitante no lo ve | No |
Los valores llegan ya convertidos al tipo declarado: los campos Número se guardan como número, las Casillas como verdadero/falso, y el resto como texto.
El tipo UTM (oculto) es un campo invisible que se llena solo con los parámetros utm_* que traía el visitante en el enlace con el que llegó (por ejemplo ?utm_source=instagram o el enlace de referido de un vendedor). El visitante nunca lo ve ni lo escribe: la página lo completa automáticamente al cargar.
Después de agregar un campo UTM, vuelva a copiar el snippet. Los campos UTM solo funcionan con el código que genera la pestaña Endpoint del formulario: ese snippet incluye los campos ocultos y el código que los llena. Un
<form>escrito a mano, o un snippet pegado antes de agregar el campo UTM, nunca lo enviará. Cada vez que agregue o cambie campos UTM, copie el snippet actualizado y reemplácelo en su sitio.
Reglas de los campos UTM:
utm_ y usar solo minúsculas, números y guion bajo (ej. utm_source, utm_campaign, utm_code).utm_source toma el valor de ?utm_source=...), con una excepción: la clave utm_code se llena con el parámetro utm_track_code, que es el enlace de referido de un vendedor. Ver Ventas.Atención: la atribución depende de textos escritos a mano. La conexión entre el enlace, el formulario y el vendedor se hace por coincidencia exacta de cadenas de texto, y un error de tipeo no produce ningún mensaje de error: el formulario se ve bien, el envío entra bien, el pago se cobra bien... y la venta simplemente llega sin vendedor ni campaña. Los tres puntos donde un typo rompe la cadena en silencio:
- La clave del campo en el formulario debe ser exactamente
utm_codepara atribuir vendedores.utm_codigooutm_codse guardan como un dato más y no atribuyen nada (las mayúsculas ni siquiera se pueden guardar: el editor las rechaza).- El parámetro del enlace debe ser exactamente
utm_track_code. Un enlace conutm_trackcodeoutm_trackno se reconoce.- El valor del enlace debe coincidir con el código de referido registrado en el vendedor (aquí sí se ignoran mayúsculas y minúsculas). Un código que no exista o pertenezca a un vendedor inactivo se descarta sin aviso.
Use siempre el botón Copiar enlace de referido del vendedor (en Ventas → Vendedores) en lugar de armar el enlace a mano, y verifique la cadena completa con una prueba real antes de repartir enlaces.
utm_code debe aparecer en el payload.Si el paso 3 muestra el campo vacío, el problema está en el enlace, en la clave del campo o en un snippet desactualizado. Si el paso 3 está bien pero el paso 4 no muestra vendedor, el código del enlace no coincide con ningún vendedor activo.
En el detalle del formulario, la pestaña Endpoint muestra la URL de envío (POST) y un snippet de ejemplo. Copie la URL y péguela en el action de su <form>:
<form action="https://su-empresa.axentra.com.do/e-forms/UUID-DEL-FORMULARIO" method="POST">
<input name="nombre" type="text" required />
<input name="email" type="email" required />
<textarea name="mensaje"></textarea>
<!-- Widget de Cloudflare Turnstile: aporta el token anti-bot -->
<div class="cf-turnstile" data-sitekey="SU-SITE-KEY"></div>
<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script>
<button type="submit">Enviar</button>
</form>
name de cada <input> debe coincidir con la clave (key) del campo en Axentra.cf-turnstile-response con el token que Axentra valida.Cada envío se valida contra Cloudflare Turnstile antes de guardarse. Turnstile es la alternativa gratuita y sin fricción a reCAPTCHA: la mayoría de los visitantes legítimos pasan sin resolver nada.
turnstile.cloudflare.com → Add site.
data-sitekey).Mientras no configure Turnstile, el endpoint responde 503 forms_not_configured y no acepta envíos. Para probar en desarrollo, Cloudflare ofrece claves de prueba que siempre pasan (site key 1x00000000000000000000AA, secret 1x0000000000000000000000000000000AA).
Cada formulario tiene una lista de orígenes permitidos: los dominios desde los que se aceptan envíos. Axentra compara la cabecera Origin del navegador contra esta lista.
https://ejemplo.com): solo esos sitios pueden enviar; el resto se rechaza y no recibe cabecera CORS (el navegador bloquea la petición).Esto evita que alguien copie su URL de envío y bombardee su formulario desde otro sitio.
En el detalle del formulario, la pestaña Respuestas muestra cada envío recibido:
La lista está paginada (controles anterior/siguiente, "Página X de Y") - nunca carga miles de respuestas de golpe.
Cada respuesta aceptada dispara una notificación en tiempo real: la campana del ERP incrementa en el momento en que entra el envío, sin recargar. Si tiene abierta la pestaña Respuestas del formulario, la nueva fila aparece sola.
| Permiso | Qué permite |
|---|---|
forms.form.view |
Ver la lista de formularios y su detalle |
forms.form.create |
Crear formularios nuevos |
forms.form.update |
Editar un formulario y su configuración |
forms.form.delete |
Eliminar un formulario |
forms.submission.view |
Ver las respuestas recibidas |
Por defecto ADMIN tiene todos estos permisos. Puede dar solo forms.submission.view a un rol de ventas o soporte que deba leer los mensajes sin poder alterar los formularios.
Aún no ha configurado Cloudflare Turnstile. Vaya a Formularios → Configuración Turnstile y guarde su site key y secret key.
Revise que el origen de su sitio esté en la lista de orígenes permitidos del formulario (o déjela vacía mientras prueba). Recuerde que el origen incluye el esquema: https://ejemplo.com, no ejemplo.com.
El atributo name de cada <input> debe coincidir exactamente con la clave (key) del campo en Axentra (distingue mayúsculas y minúsculas).
La notificación viaja por una suscripción en tiempo real; requiere el permiso forms.submission.view. Verifique también que el formulario esté activo.
Repase la cadena de atribución con la lista de verificación de la sección Campos UTM. Las causas más comunes, en orden: la clave del campo no es exactamente utm_code, el enlace no usa exactamente utm_track_code, o el código del enlace no coincide con el código de referido de un vendedor activo.
No pasa nada: los parámetros utm_* desconocidos se descartan en silencio y el envío entra normal. Nunca se pierde un contacto por un campo UTM de más.