📌 Requisitos previos
- ERPNext funcionando en
https://erp.tudominio.com(según la guía anterior). - n8n funcionando en
https://n8n.tudominio.como similar. - Ambos contenedores en la misma red Docker (en tu caso,
mqtt_network; si usaste la rederp_networkde la guía base, deberás crear una red común o conectarlos).
🔗 1. Asegurar que los contenedores están en la misma red Docker
Para que n8n pueda comunicarse con ERPNext usando el nombre del contenedor (erpnext-web), deben compartir red.
Opción A – Si tu n8n ya está en una red existente (por ejemplo mqtt_network):
Conecta el contenedor de ERPNext a esa red:
bash
docker network connect mqtt_network erpnext-web
(Los demás servicios como db, redis, etc., no necesitan ser accesibles desde n8n).
Opción B – Crear una red común dedicada (si no usas mqtt_network):
bash
docker network create integration_net docker network connect integration_net erpnext-web docker network connect integration_net n8n
Verifica la conectividad desde n8n:
bash
docker exec -it n8n wget -qO- http://erpnext-web:8000/api/method/ping
Deberías recibir "message":"pong". Si falla, revisa que el nombre del contenedor de ERPNext sea exactamente erpnext-web y que el puerto 8000 esté escuchando dentro del contenedor (está mapeado a 127.0.0.1:8000 en el host, pero internamente es 0.0.0.0:8000).
🔑 2. Obtener credenciales de API en ERPNext
- Accede a
https://erp.tudominio.comcon el usuarioAdministrator. - Busca en la barra superior “API” y selecciona API Key.
- Crea un nuevo API Key (puedes llamarlo “n8n_integration”).
- Copia el API Key y el API Secret; solo se muestran una vez.
- (Opcional) En la configuración del DocType “User”, asigna a este par de claves los roles necesarios (por ejemplo, “System Manager” para pruebas controladas; en producción limita los permisos).
⚙️ 3. Configurar el nodo en n8n
🌐 Opción recomendada: Nodo HTTP Request
Es el método más universal y robusto. Usa autenticación “Generic Credential Type” o directamente “Header Auth”, pero la autenticación por token de Frappe se pasa como cabecera personalizada. Sigue estos pasos:
- Añade un nodo HTTP Request.
- Método: según la operación (GET, POST, PUT, DELETE).
- URL: la endpoint de ERPNext. Las URLs base son:
http://erpnext-web:8000/api/resource/{DocType}(para CRUD de documentos)http://erpnext-web:8000/api/method/{function}(para métodos remotos)
Ejemplo:http://erpnext-web:8000/api/resource/Customer - En Headers añade:
Authorizationcon valortoken <API_Key>:<API_Secret>
(Ejemplo:token 4f9e8e5c2b1a4d3:1a2b3c4d5e6f7a8b)Content-Type: application/json(cuando envíes datos)
- Para probar, usa un GET a
http://erpnext-web:8000/api/method/frappe.auth.get_logged_user; deberías recibir el nombre de usuario.
🧩 Alternativa: Nodo ERPNext (comunitario)
Si tu instancia de n8n tiene disponible el nodo “ERPNext” (instalado desde la comunidad), configúralo así:
- Host:
http://erpnext-web:8000 - API Key: el key del paso anterior
- API Secret: el secret del paso anterior
- SSL: desactivado (conexión http interna)
Luego selecciona la operación deseada (Get, Create, Update, Delete) y el DocType.
📦 4. Ejemplo práctico: crear un Cliente en ERPNext desde n8n
Supongamos que tienes un formulario web y quieres crear un cliente en ERPNext.
- Nodo Webhook (o el trigger que uses) recibe los datos.
- Nodo Set (o Function) para mapear los campos al formato que espera ERPNext.
- Nodo HTTP Request con:
- Método: POST
- URL:
http://erpnext-web:8000/api/resource/Customer - Headers:
Authorization: token <key>:<secret>Content-Type: application/json
- Body (JSON):json{ “customer_name”: “Nombre del cliente”, “customer_type”: “Company”, “customer_group”: “All Customer Groups”, “territory”: “All Territories” }
- Ejecuta el flujo y comprueba en ERPNext que el cliente se ha creado.
🔄 5. Sincronización inversa: exportar datos de ERPNext a hojas de cálculo o bases de datos
Puedes usar n8n para leer datos de ERPNext y guardarlos en Google Sheets, Excel o PostgreSQL. Ejemplo:
- Nodo Schedule Trigger o Webhook.
- Nodo HTTP Request (GET) a
http://erpnext-web:8000/api/resource/Sales Order?filters=[["status","=","Draft"]]&fields=["name","customer","grand_total"]. - Nodo Item Lists (o Function) para iterar los resultados.
- Nodo Google Sheets o PostgreSQL para escribir las filas.
La API de ERPNext permite filtros avanzados, limitación, paginación, etc. Documentación completa: Frappe API.
🧪 6. Solución de problemas comunes
- Error de conexión: comprueba que ambos contenedores estén en la misma red Docker (paso 1) y que el nombre del contenedor sea correcto.
- 401 Unauthorized: revisa que la cabecera
Authorizationtenga el formato exacto:token <API_Key>:<API_Secret>(sin espacios extra, los dos puntos juntos). - 403 Forbidden: el usuario asociado a la API Key no tiene permisos suficientes sobre el DocType. Otorga los roles adecuados en ERPNext (por ejemplo, “System Manager” o roles específicos).
- 404 Not Found: verifica la ruta de la API. Usa la barra de herramientas de Frappe (dentro de ERPNext) para explorar los DocTypes y métodos disponibles.
- Errores de campos: los nombres de campo son los mismos que ves en la interfaz de ERPNext, pero sin espacios (ejemplo:
customer_nameen lugar de “Customer Name”). Puedes usar el endpoint/api/method/frappe.client.get_metapara obtener los campos de un DocType.
✅ Nota final
Esta configuración te permite automatizar completamente los procesos entre tu app .NET, n8n y ERPNext. Recuerda que puedes crear flujos avanzados combinando webhooks, MQTT (ya tienes Mosquitto), IA (Ollama) y la API de ERPNext. La clave es la conectividad Docker y la API de Frappe bien documentada.
Si en el futuro necesitas exponer la API de ERPNext al exterior (para tu app .NET, por ejemplo), basta con añadir en Nginx un bloque location /api que haga proxy hacia el contenedor, similar a como haces con los estáticos, y usar el mismo dominio o un subdominio. Pero por ahora, la comunicación interna es suficiente para la integración con n8n.