Resolución N° 5.616/2024. Más información

Facturar ventas de Zoho con ARCA en n8n

Cómo conectar ventas de Zoho con Afip SDK en n8n para autorizar facturas electrónicas de ARCA y devolver CAE, PDF y estado fiscal al CRM o ERP.


Facturar ventas de Zoho con ARCA en n8n

Descargá el workflow zoho-arca-invoice.json para importarlo en n8n y adaptarlo a tu cuenta de Zoho.


Zoho puede significar varias cosas: Zoho CRM, Zoho Inventory, Zoho Books o Zoho Commerce. Para facturación electrónica, conviene elegir un módulo como fuente de verdad y no dejar que varios módulos disparen la misma factura.

En este tutorial usamos Zoho Inventory o Books como caso principal, porque ya trabajan con contactos, sales orders, items e invoices. n8n consulta Zoho por API, emite con Afip SDK y escribe el resultado fiscal de vuelta.

Documentación útil:

Cómo funciona la integración

  1. Una venta queda aprobada en Zoho.
  2. n8n se dispara por Webhook, workflow de Zoho o cron.
  3. n8n consulta Sales Order, Invoice o Contact por API.
  4. n8n valida campos fiscales argentinos.
  5. Afip SDK emite la factura en ARCA.
  6. n8n actualiza Zoho con CAE, número de comprobante y PDF.

Paso 1: elegir el módulo fuente

Definí una sola fuente para facturar:

  • Zoho Inventory Sales Orders: útil si el negocio maneja stock y fulfillment.
  • Zoho Books Invoices: útil si el documento comercial ya nace como factura interna.
  • Zoho CRM Deals: útil sólo si CRM dispara el proceso, pero la factura debería salir desde Books/Inventory o un ERP.

No hagas que CRM, Books e Inventory disparen Afip SDK al mismo tiempo.

Paso 2: autenticar Zoho en n8n

Zoho usa OAuth 2.0. En n8n podés:

  • Usar un nodo Zoho si cubre el módulo que necesitás.
  • Usar HTTP Request con OAuth configurado.
  • Guardar organization_id como variable de entorno.

Para Zoho Inventory:

GET https://www.zohoapis.com/inventory/v1/salesorders/{{ $json.salesorder_id }}?organization_id={{ $env.ZOHO_ORGANIZATION_ID }}
Authorization: Zoho-oauthtoken {{ $env.ZOHO_ACCESS_TOKEN }}

La región puede cambiar: .com, .eu, .in, etc. Usá el dominio de tu cuenta.

Paso 3: disparar el workflow

Opciones:

  • Webhook desde una custom function de Zoho.
  • Schedule Trigger que busca órdenes con estado aprobado y campo arca_status vacío.
  • Trigger manual para pruebas.

En producción, conviene agregar campos propios en Zoho:

  • arca_status.
  • arca_cae.
  • arca_invoice_number.
  • arca_pdf_url.

Paso 4: mapear contacto y datos fiscales

El contacto debe tener campos argentinos:

  • CUIT o DNI.
  • Razón social.
  • Condición frente al IVA.
  • Domicilio fiscal.

Si esos campos no existen, crealos como custom fields en Zoho. No dependas de notas o texto libre.

Ejemplo de normalización:

const sale = $json.salesorder || $json.invoice;
const customer = sale.customer || {};

return [{
  json: {
    externalId: `zoho:${sale.salesorder_id || sale.invoice_id}`,
    customerName: customer.company_name || customer.customer_name,
    taxId: customer.custom_field_hash?.cf_cuit,
    ivaCondition: customer.custom_field_hash?.cf_condicion_iva,
    totalAmount: Number(sale.total),
    items: (sale.line_items || []).map((item) => ({
      sku: item.sku,
      description: item.name,
      quantity: Number(item.quantity),
      unitPrice: Number(item.rate),
      taxName: item.tax_name,
      taxPercentage: item.tax_percentage,
    })),
  },
}];

Paso 5: emitir con Afip SDK

Usá los nodos:

  1. Obtener autorización wsfe.
  2. FECompUltimoAutorizado.
  3. FECAESolicitar.
  4. Generar el PDF con el template de Afip SDK.

Clave de idempotencia:

zoho:{module}:{id}

Por ejemplo zoho:salesorder:123456789.

Paso 6: actualizar Zoho

Después de emitir:

  • Actualizá custom fields del documento.
  • Adjuntá o enlazá el PDF.
  • Cambiá arca_status a authorized.
  • Guardá errores con arca_error si ARCA rechaza.

Si Zoho Books ya genera una invoice comercial, no intentes reemplazarla. Relacionala con la factura fiscal de ARCA.

Errores comunes

  • Disparar desde CRM y desde Books al mismo tiempo.
  • No crear custom fields fiscales.
  • Usar customer name como razón social sin validación.
  • No contemplar dominios regionales de Zoho.
  • No guardar el CAE estructurado en Zoho.

Cierre

Zoho funciona bien cuando se define un único módulo fuente. n8n debe tomar ese documento, convertirlo a payload fiscal argentino, emitir con Afip SDK y devolver el estado a Zoho.

Conéctate a ARCA hoy mismo

Evitá la complejidad de ARCA. Con Afip SDK integrás tu sistema en minutos y te enfocás en hacer crecer tu negocio.