Volver
Documentación
v3.0.0

Tango eCommerce para WooCommerce

Documentación completa — versión 3.0.0

Guía rápida

  1. Instalá y activá el plugin. Al activarse crea sus tablas, las opciones por defecto y las tareas programadas.
  2. Entrá a Tango eCommerce en el menú lateral. Si todavía no hay credenciales, se abre el asistente de configuración.
  3. Paso 1 · Conexión: elegí la API (Tango eCommerce o Tango Tiendas) y cargá las credenciales. El asistente prueba la conexión antes de avanzar.
  4. Paso 2 · Depósito y listas: elegí depósitos, lista de precios, condición de venta y talonario de pedido.
  5. Paso 3 · Sincronización: activá stock, precios, pedidos e importación de productos nuevos, y elegí el intervalo.
  6. Paso 4 · Notificaciones: copiá la URL del webhook y cargala en Tango.
  7. Paso 5 · Productos: vinculá por SKU o importá el catálogo, y activá la integración.
  8. Revisá el Panel y usá Diagnóstico › Verificar con Tango para confirmar que todo esté en verde.

Novedades de la versión 3.0

Tango Tiendas para WooCommerce ahora se llama Tango eCommerce para WooCommerce. La versión 3.0.0 suma soporte para la API de Tango eCommerce (Delta 6, vía Tango Connect) y mantiene Tango Tiendas como API legada. Al actualizar desde v2 la tienda sigue en modo Tango Tiendas: leé la sección Migración desde v2 antes de actualizar, porque hay cambios de comportamiento en pedidos.
  • Modo Tango eCommerce (Delta 6): credenciales Llave + Token de desarrollador + IdEmpresa + Cuenta de Integración API, con selector de modo en Configuración › Conexión.
  • Asistente de configuración en 5 pasos que se abre en la primera visita sin credenciales y se puede retomar.
  • Panel con alertas, estado de conexión, cobertura de vinculación, pedidos con error, último webhook y botones Sincronizar ahora / Sincronización completa.
  • Configuración por pestañas (Conexión, Sincronización, Pedidos, Webhooks, Avanzado) y Herramientas: liberar bloqueos, exportar/importar configuración en JSON (sin secretos), abrir el asistente.
  • Diagnóstico renovado con Verificar con Tango, Reparar tareas programadas y Copiar informe para soporte.
  • Stock: múltiples depósitos (suma), stock centralizado (solo eCommerce), descuento opcional de pedidos pendientes, stock de kits y opción para poner en 0 los productos vinculados que no aparecen en Tango.
  • Precios: lista de precios de oferta opcional con fechas de vigencia y control de IVA entre la lista y la tienda (solo eCommerce).
  • Sincronización incremental con checkpoint y corrida completa periódica.
  • Pedidos: forma de cobro por medio de pago, talonario de pedido y de factura, pagos solo cuando corresponde, reintento automático con esperas crecientes, verificación antes de reenviar (evita duplicados) y Reenviar como nuevo pedido para pedidos rechazados.
  • Jerarquía de estados de Tango: los estados atrasados ya no hacen retroceder un pedido.
  • Facturas: descarga a través del sitio que renueva la URL de Tango cuando vence, visible en el admin y en "Mi cuenta".
  • Checkout por bloques: campos DNI / CUIT y condición frente al IVA, con validación de dígito verificador del CUIT.
  • Seguridad: credenciales encriptadas con libsodium, campos secretos enmascarados, webhook con respuesta 401 explícita.
  • WP-CLI: comandos wp tango catalog … para sincronizar, ver estado y listar productos sin vincular.
  • Filtros para desarrolladores para personalizar pedidos, estados, checkout y la API.

1. Introducción

Tango eCommerce para WooCommerce es un plugin de WordPress que conecta una tienda WooCommerce con Tango Gestión / Tango Punto de Venta. Sincroniza productos, stock, precios y contenido desde Tango, envía los pedidos de la tienda a Tango y trae de vuelta su estado y la factura electrónica.

1.1 Dos APIs de Tango

Tango eCommerce (recomendada)Tango Tiendas (legado)
Versión de TangoDelta 6 o superiorDelta 4 / Delta 5
Servidorhttps://{llave}.connect.axoft.com/api/eCommerce/ (vía Tango Connect)https://tiendas.axoft.com/api/Aperture/
CredencialesLlave + Token de desarrollador + IdEmpresa + Cuenta de Integración APIAccess Token
Cancelación de órdenes notificada por Tango (OrderCancelled)SíNo
Stock centralizado / control de IVA de la listaSíNo

Las instalaciones nuevas arrancan en modo Tango eCommerce. Las que vienen de v2 con un Access Token cargado siguen en modo Tango Tiendas hasta que se cambie a mano.

1.2 Qué hace

  • Productos: importación inicial del catálogo, alta automática de artículos nuevos y vinculación de productos existentes por SKU, código alternativo o código de barras.
  • Stock: suma de uno o varios depósitos, stock centralizado (eCommerce), descuento opcional de pedidos pendientes y cálculo de stock de kits.
  • Precios: precio regular desde una lista de Tango y, opcionalmente, precio de oferta desde otra lista con sus fechas de vigencia. Control de IVA entre la lista y la tienda.
  • Contenido y categorías: título, descripciones y categoría gestionada por Tango.
  • Pedidos: envío automático y asíncrono (no frena el checkout), forma de cobro por medio de pago, pagos solo cuando corresponde, cancelación, reintentos automáticos y reenvío manual.
  • Estados y facturas: el estado de Tango se refleja en WooCommerce; la factura en PDF queda disponible en el pedido, en los emails y en "Mi cuenta", y el enlace se renueva solo cuando la URL de Tango vence.
  • Checkout: campos DNI / CUIT (con validación de dígito verificador) y condición frente al IVA, en el checkout clásico y en el de bloques.
  • Administración: asistente de configuración, panel con alertas, diagnóstico con informe para soporte, registro de actividad exportable, cajas "Tango eCommerce" en la edición de pedidos y productos, exportación/importación de la configuración.
  • Compatible con HPOS (High-Performance Order Storage). Sin carga extra en el frontend para los visitantes: las clases se cargan solo cuando hacen falta.

2. Requisitos

2.1 En Tango (modo Tango eCommerce)

  • Tango Gestión o Tango Punto de Venta Delta 6 o superior.
  • Producto eCommerce activo en Tango Billing.
  • Empresa vinculada con Tango Connect y con eCommerce.
  • Una Cuenta de Integración API creada en la puesta en marcha de eCommerce.

2.2 En Tango (modo Tango Tiendas, legado)

  • Tango Gestión o Tango Punto de Venta Delta 4 / Delta 5.
  • Licencia Tango Tiendas Full activa y empresa asociada en Nexo › Tiendas.
  • Módulo de Tesorería.

2.3 En el sitio

ComponenteMínimo
WordPress5.8 (probado hasta 6.8)
WooCommerce5.0 (probado hasta 10.2)
PHP7.4
Action SchedulerIncluido en WooCommerce. Necesario para enviar pedidos y procesar webhooks en segundo plano.
Salida HTTPSTLS 1.2 o superior hacia Tango.
Certificado SSLNecesario para recibir webhooks: Tango solo notifica a URLs HTTPS con TLS 1.2+.
libsodium (extensión sodium de PHP)Recomendado: con ella las credenciales se guardan encriptadas.
Se recomienda un cron real del servidor en lugar de WP-Cron. Ver Solución de problemas › Configurar un cron real del servidor.

3. Instalación

  1. Copiá la carpeta wc-tango-tiendas en wp-content/plugins/ (o subí el ZIP desde Plugins › Añadir nuevo › Subir plugin).
  2. Activá el plugin. Al activarse crea sus tablas, las opciones por defecto y las tareas programadas.
  3. Entrá a Tango eCommerce en el menú lateral. Si todavía no hay credenciales, se abre el asistente de configuración.
La carpeta del plugin sigue siendo wc-tango-tiendas. Desinstalar el plugin no borra tablas ni opciones.

4. Asistente de configuración

El asistente (Tango eCommerce › Asistente de configuración, slug wc-tango-setup) tiene 5 pasos. Cada paso se guarda por separado: podés saltear uno, salir y retomarlo. También se abre desde Configuración › Avanzado › Herramientas › Abrir asistente.

4.1 Paso 1: Conexión

Elegí la API y cargá las credenciales. Al guardar, el asistente prueba la conexión y no avanza si falla.

Tango eCommerce: cuatro datos

DatoDónde se obtienePara qué se usa
Llave TangoNúmero de llave del sistema Tango, con la barra (ej. 123456/000). En Tango: Administrador General › Administrador de licencias, en los datos de la licencia. La empresa tiene que tener Tango Connect activo.Arma la URL de Tango Connect: 123456/000 → https://123456-000.connect.axoft.com/api/eCommerce/
Token de desarrolladorEn el menú web de Tango (Tango Nexo): menú de usuario › Desarrollador › Generar. Copiá el «Token de desarrollador» completo.Header ApiAuthorization.
IdEmpresaEntrá al menú web de Tango con la empresa de la tienda: es el número que sigue a company/ en la dirección del navegador (en …/company/117/menu/10023 es 117). También es la columna IDEmpresa de la tabla Empresa en la base de diccionario. Es numérico.Header Company.
Cuenta de Integración APIEn Tango: Ventas › eCommerce › Cuentas de integración API (creada en la puesta en marcha de eCommerce). Escribí el nombre exacto, con mayúsculas y espacios.Parámetro ?Cuenta= en el envío de pedidos. Sin ella Tango rechaza los pedidos.

Cada credencial muestra en pantalla dónde encontrarla en Tango y un enlace a la guía oficial de Axoft.

Tango Tiendas (legado)

Pegá el Access Token, que se obtiene en Tango Tiendas (Nexo) desde la opción Api › Obtener, con un nombre de referencia.

Probar conexión valida la llave, el token y el IdEmpresa (con POST Dummy). La Cuenta de Integración API se valida en modo best-effort: se envía a Order/Batch un lote vacío, que Tango siempre rechaza (nunca crea órdenes); si la respuesta es "cuenta is not registered", la prueba falla. Cualquier otra respuesta no confirma ni descarta la cuenta, así que la verificación definitiva es el primer pedido.

4.2 Paso 2: Depósito y listas

Elegí (se cargan desde Tango):

  • Depósitos que abastecen la tienda: uno o varios. Con varios, el stock publicado es la suma. Sin selección se usan todos.
  • Lista de precios que se publica.
  • Condición de venta (habitualmente 1 = Contado).
  • Talonario de pedido (0 = el predeterminado de la Cuenta de Integración).

4.3 Paso 3: Sincronización

Activá o desactivá stock, precios, pedidos e importación de productos nuevos, y elegí cada cuántos minutos corre la sincronización periódica.

4.4 Paso 4: Notificaciones (webhook)

Copiá la URL de notificaciones (incluye un secreto, no la compartas) y cargala en Tango siguiendo los pasos de la sección Webhooks. Si el sitio no usa HTTPS, el paso avisa que Tango no va a poder notificar; podés seguir y configurarlo después. La sincronización periódica funciona igual sin webhook.

4.5 Paso 5: Productos

  • Vincular por SKU: si ya tenés productos en WooCommerce. No crea nada.
  • Importar productos: crea los artículos que faltan, con stock y precio. Activa la integración y hay que mantener la pestaña abierta mientras corre.
  • Activar la integración al finalizar: con la integración activa empiezan a enviarse pedidos y a sincronizarse stock y precios.

Al finalizar vas al Panel.

5. Configuración

Tango eCommerce › Configuración (admin.php?page=wc-tango-settings&tab=<pestaña>). Cada pestaña se guarda por separado: guardar una no modifica las otras.

5.1 Conexión

Ajuste (opción)DefaultDescripción
Integración activa (wc_tango_enabled)NoCon la integración desactivada no se envían pedidos ni se actualizan stock y precios. Las credenciales se conservan.
Modo de API (wc_tango_api_mode)ecommerce (tiendas si se actualizó desde v2 con token)Tango eCommerce o Tango Tiendas (legado).
Llave Tango (wc_tango_ecom_key)—Formato 000000/000. Se muestra la URL resultante.
Token de desarrollador (wc_tango_ecom_api_token)—Secreto, se guarda encriptado. Se muestra enmascarado.
IdEmpresa (wc_tango_ecom_company_id)—Numérico.
Cuenta de Integración API (wc_tango_ecom_account)—Nombre exacto de la cuenta.
Stock centralizado (wc_tango_ecom_centralize_stock)NoSolo eCommerce. Pide los saldos centralizados (Centraliza=true) cuando la empresa centraliza el stock de varias sucursales. Si no, Tango devuelve los saldos de la sucursal local.
Access Token (wc_tango_access_token)—Solo Tango Tiendas. Secreto, se guarda encriptado.

El botón Probar conexión usa lo escrito en el formulario sin guardarlo; los campos secretos vacíos usan el valor guardado. En eCommerce también intenta validar la Cuenta de Integración API. Dejar vacío un campo secreto y guardar no lo borra.

5.2 Sincronización

Ajuste (opción)DefaultDescripción
Stock (wc_tango_sync_stock)SíActualiza el stock de los productos vinculados desde los depósitos elegidos.
Precios (wc_tango_sync_prices)SíActualiza el precio regular desde la lista elegida.
Importar productos nuevos (wc_tango_auto_import_new)SíCrea en WooCommerce los artículos nuevos de Tango (cada 15 minutos).
Depósitos (wc_tango_warehouse_code)Vacío (= todos)Códigos separados por coma. Con varios, el stock es la suma.
Lista de precios (wc_tango_price_list_number)1Lista que se publica como precio regular.
Lista de precios de oferta (wc_tango_sale_price_list_number)Vacío (= sin oferta)El precio de esa lista, dentro de sus fechas de vigencia, se publica como precio de oferta. Si es igual a la lista regular se ignora. Las ofertas cargadas a mano se respetan.
Si la lista y la tienda difieren en IVA (wc_tango_price_tax_mode)none (Avisar)Solo eCommerce. Avisar: publica el precio tal cual y deja una advertencia. Convertir (adjust): ajusta con la tasa estándar base de la tienda.
Sincronización periódica cada (wc_tango_stock_cron_interval)5 minEntre 1 y 60. Aplica a stock, precios, estados de pedidos y contenido. Con webhook funcionando alcanza con 15 a 30 minutos.
Sincronización completa de stock y precios cada (wc_tango_catalog_full_sync_hours)24 hEntre 0 y 168. Entre corridas completas solo se piden los cambios recientes. 0 = solo la primera corrida es completa.

5.3 Pedidos

Ajuste (opción)DefaultDescripción
Enviar pedidos a Tango (wc_tango_sync_orders)SíEnvío automático. Los que fallan por un error temporal se reintentan solos (hasta 5 intentos).
Enviar pedidos aún no pagados (wc_tango_send_unpaid_orders)SíEnvía también los pedidos en espera (transferencia, pago pendiente); el pago se informa después como modificación. Desactivado: el pedido se envía recién cuando se paga.
Talonario de pedido (wc_tango_counterfoil)0Talonario con el que Tango genera el pedido (OrderCounterfoil). 0 = el predeterminado de la Cuenta de Integración.
Talonario de factura (wc_tango_invoice_counterfoil)0Opcional. Talonario con que Tango factura (InvoiceCounterfoil). 0 = no se envía.
Condición de venta (wc_tango_sale_condition)1Código de condición de venta de Tango.
¿La condición de venta es Contado? (wc_tango_sale_condition_is_cash)auto (Detectar desde Tango)Solo con Contado se informan los pagos del pedido. "Detectar" usa el dato Cash de la condición (se guarda 12 h en caché).
Provincia por defecto (wc_tango_default_province_code)0 (CABA)Se usa si no se reconoce la provincia del cliente; queda advertencia en el registro y nota en el pedido.
Enviar la lista de precios en el pedido (wc_tango_send_price_list)NoEnvía PriceListNumber para que Tango tome el desglose impositivo de esa lista. Si la lista no existe, Tango deja la orden observada.
Forma de cobro predeterminada (wc_tango_default_payment_method)A02Para los medios de pago sin asignación.
Medios de pago (wc_tango_payment_method_map)VacíoForma de cobro de Tango para cada medio de pago de WooCommerce: A01…A10 (Formas de cobro Web API), MPA (MercadoPago), PPA (PayPal), PUA (PayU), TPA (Todo Pago). Los disponibles dependen de lo configurado en Tango.

Refrescar datos de Tango borra la caché de condiciones de venta y del IVA de las listas (12 h). Usalo si cambiaste algo de eso en Tango.

5.4 Webhooks

No tiene opciones de formulario. Muestra la URL de notificaciones con el botón Copiar, Generar secreto nuevo (invalida la URL anterior: hay que actualizarla en Tango), las instrucciones según el modo, los eventos a tildar, la última notificación recibida y la cola de Action Scheduler. Ver la sección Webhooks.

5.5 Avanzado

Ajuste (opción)DefaultDescripción
Descontar pedidos pendientes (wc_tango_discount_pending_orders)NoResta del stock publicado las cantidades comprometidas en pedidos pendientes de Tango (DiscountPendingOrders=true).
Poner en 0 el stock de productos vinculados que no aparecen en Tango (wc_tango_zero_missing_stock)Sí en instalaciones nuevas; No en las actualizadas desde v2Solo en la sincronización completa de stock y solo si la lectura terminó sin errores ni cortes. Los kits no se tocan.
Estrategia de detección (wc_tango_sync_strategy)hybridSolo Tango Tiendas. Híbrida (incremental + revisión completa periódica) o solo incremental (legacy). En eCommerce siempre se combina incremental con revisión completa.
Revisión completa del catálogo cada (wc_tango_full_scan_interval)6 hEntre 1 y 48. Recorre todo el catálogo para detectar artículos nuevos que la consulta incremental no devolvió.
Artículos con escala (wc_tango_import_scale_articles)simplesimple: cada combinación talle/color se importa como producto simple. skip: no se importan (se vinculan a mano con variaciones).
Origen de la categoría (wc_tango_category_fallback_mode)official_onlySolo la clasificación oficial de Tango, o clasificación oficial y, si falta, la descripción adicional (la parte anterior al primer " - ": GOMITAS - MOGUL → GOMITAS).
Modo depuración (wc_tango_debug_mode)NoRegistra el detalle de cada llamada en WooCommerce › Estado › Registros (fuente wc-tango-tiendas). Genera mucho volumen.

Herramientas (al pie de Avanzado)

  • Liberar bloqueos: cada sincronización toma un bloqueo para no correr dos veces a la vez; si un proceso se cortó, el bloqueo puede quedar hasta 10 minutos. También muestra y libera los bloqueos de pedidos.
  • Exportar / importar configuración: JSON con todos los ajustes, sin credenciales ni secretos (máximo 512 KB al importar).
  • Abrir asistente.

6. Webhooks (notificaciones de Tango)

Tango avisa a una URL de tu sitio cada vez que cambia el stock, un precio o el estado de un pedido. El webhook no es obligatorio, pero es muy recomendado: sin él los cambios tardan hasta el próximo intervalo de sincronización.

6.1 URL de notificaciones

ModoURL
Tango eCommercehttps://tu-sitio/wp-json/wct/v1/wh?k=<clave>
Tango Tiendashttps://tu-sitio/wp-json/wc-tango/v1/webhook?secret=<secreto> (sin cambios desde v2)
  • En eCommerce la URL es corta porque Tango acepta hasta 80 caracteres en «URL de notificaciones»; <clave> son los primeros 16 caracteres del secreto. Configuración › Webhooks y el asistente avisan si la URL igual supera los 80 caracteres (el dominio es demasiado largo para Tango).
  • Las dos rutas están siempre activas y procesan lo mismo.
  • Autenticación: el secreto completo por ?secret= o por el header X-Tango-Webhook-Secret, o la clave corta por ?k=. Si falta o no coincide la respuesta es 401. Un GET a la URL responde 200 (Tango lo usa para validar la URL).
  • Procesamiento: el webhook responde 200 de inmediato y el trabajo se hace en Action Scheduler (grupo wc-tango-tiendas). Las notificaciones repetidas se ignoran mientras haya una igual en cola (y, para pedidos, durante 2 minutos). Si la consulta a Tango falla por un error temporal se reprograma hasta 3 veces.
  • Con la integración desactivada responde 200 (disabled) y no procesa nada.
Tango solo notifica a URLs HTTPS con TLS 1.2 o superior. Sin certificado SSL válido no hay webhooks. La URL incluye un secreto: no la compartas. Si se filtró, usá Generar secreto nuevo y actualizala en Tango.

6.2 Configurarlo en Tango eCommerce

  1. En Tango, abrí Ventas › eCommerce › Cuentas de integración API y editá la cuenta que usa la tienda.
  2. Activá Envía notificaciones y pegá la URL de Configuración › Webhooks en URL de notificaciones.
  3. Tildá todas las notificaciones de órdenes (Observada, Procesada, Rechazada, Facturada, Cancelada, Factura disponible) y las de actualización de Precios y Saldos (y Saldos centralizados si usás stock centralizado). Guardá.
  4. Modificá el stock o el precio de un artículo vinculado y verificá en Configuración › Webhooks que llegue la notificación.

6.3 Configurarlo en Tango Tiendas

  1. En Tango Tiendas, entrá a API › Notificaciones.
  2. Pegá la URL y tildá los eventos de stock, precios, pedidos y facturas (todos los de la tabla de abajo salvo OrderCancelled).
  3. Guardá y verificá en Configuración › Webhooks que llegue la primera notificación.

6.4 Tópicos

TópicoModoAcción
StockProductUpdateAmbosLee el saldo por Id, ignora otros depósitos y recalcula el SKU (y sus kits).
PriceProductUpdateAmbosLee el precio por Id; solo aplica la lista configurada (y la de oferta).
OrderProcessedAmbosEstado EN PROCESO.
OrderObservedAmbosEstado OBSERVADA (queda advertencia en el registro).
OrderRejectedAmbosEstado RECHAZADA.
OrderBilledAmbosTrae la factura y pasa a FACTURADA (eCommerce) o FINALIZADA (Tiendas).
InvoiceFileAmbosTrae número y PDF de la factura.
OrderCancelledSolo eCommerceEstado CANCELADA.
ProductUpdate, ProductContentUpdate, ProductDescriptionUpdateSi lleganSe aceptan (no figuran en la documentación de eCommerce): reconcilian el contenido del producto.

7. Productos

7.1 Vinculación

Un producto o variación de WooCommerce está vinculado con un artículo de Tango cuando el plugin puede resolver su SKU de Tango. Orden de resolución:

  1. Tabla de vínculos {prefix}tango_product_map.
  2. Meta _tango_sku_code (campo SKU en Tango del producto o de la variación).
  3. SKU nativo de WooCommerce.

Vincular por SKU compara el SKU de WooCommerce con el código, el código alternativo y el código de barras de Tango. Los productos sin vincular no reciben stock, precios ni contenido. También podés vincular a mano desde la caja Tango eCommerce del producto (Vincular manualmente, buscando en Tango). En productos variables, cada variación necesita su propio SKU en Tango.

7.2 Importación inicial

Productos › Importar productos lee el catálogo de Tango página por página y crea como productos simples publicados los artículos habilitados que no existen, con precio (mismas reglas que la sincronización de precios) y stock (mismas reglas que la de stock, incluidos kits). Guarda el código de barras en _barcode. Corre por lotes desde el navegador.

Si la importación quedó trabada, en Productos, en la tarjeta de progreso, usá Cerrar y reiniciar estado.

7.3 Productos nuevos

Cada 15 minutos, hasta 50 por corrida (requiere Importar productos nuevos activo):

  • Tango eCommerce: consulta incremental por fecha de actualización (relee un día, porque Tango compara por día) más una revisión completa cada wc_tango_full_scan_interval horas. La primera corrida es siempre completa.
  • Tango Tiendas: estrategia híbrida (últimas 24 h + revisión completa periódica) o incremental.
  • El artículo tiene que estar habilitado en Tango y tener SKU.
  • Productos › Solo en Tango › Escanear Tango ahora lista los artículos sin producto en WooCommerce.

7.4 Artículos con escala (talle/color)

No se crean productos variables automáticamente (la API no devuelve el artículo base). Según wc_tango_import_scale_articles, se importan como simples (simple) o se omiten (skip); para usar variaciones hay que vincular cada variación a mano con su SKU de Tango.

7.5 Contenido

En cada intervalo de sincronización, para los productos vinculados, Tango es la fuente del título (Description), la descripción corta (AdditionalDescription) y la descripción larga. La reconciliación es incremental y solo escribe cuando algo cambió.

Los cambios hechos a mano en WooCommerce al título o las descripciones de un producto vinculado se pisan cuando se relee ese artículo. Hacé esos cambios en Tango.

7.6 Categorías

La categoría gestionada por Tango se resuelve por la clasificación oficial (ProductsFolderClassifier + ProductsFolder) y, si está habilitado, por la descripción adicional. Las categorías asignadas a mano se conservan. Para recalcular los productos ya vinculados: Productos › Resincronizar categorías (corre en segundo plano con Action Scheduler).

8. Stock (Tango › WooCommerce)

  • Multi-depósito: se consulta cada depósito configurado y el stock de un SKU es la suma de la cantidad física (Quantity) de esos depósitos. Sin depósitos configurados se usan todos.
  • Stock centralizado (solo eCommerce): con la opción activa se piden los saldos centralizados. Sin ella, Tango devuelve los saldos de la sucursal local.
  • Pedidos pendientes: solo si Descontar pedidos pendientes está activo se resta la cantidad comprometida (EngagedQuantity).
  • Kits: Tango no informa stock de kits. El plugin lo calcula como el mínimo de piso(disponible del componente / cantidad por kit). La composición de los kits se guarda 12 h; un cambio de stock de un componente recalcula sus kits. Si un componente no está en los depósitos configurados, el kit queda en 0.
  • El resultado se redondea hacia abajo a un entero y nunca es negativo. Se escribe con las funciones de WooCommerce y activa "Gestionar inventario" en el producto.
  • Frecuencia: tiempo real con el webhook StockProductUpdate; corrida periódica incremental (solo saldos modificados desde la última corrida exitosa) y una corrida completa cada wc_tango_catalog_full_sync_hours horas.

8.1 Poner en 0 los productos que no aparecen en Tango

Con Poner en 0 el stock de productos vinculados que no aparecen en Tango activo (default en instalaciones nuevas), una corrida completa y sin cortes pone en 0 los productos vinculados explícitamente (tabla de vínculos o campo SKU en Tango) cuyo SKU no vino en la lectura de los depósitos configurados. Los vinculados solo por coincidencia de SKU nativo y los kits no se tocan. El resultado queda en el mensaje de la última corrida de stock.

Desactivada (default al actualizar desde v2), esos productos conservan el último stock, como en v2.

Antes de activarla, revisá que los depósitos configurados sean los correctos: los productos vinculados que no aparezcan en ellos quedan en 0.

9. Precios (Tango › WooCommerce)

  • Se actualiza el precio regular desde la lista configurada. Solo se escriben los productos cuyo precio cambió, con las funciones de WC_Product.
  • Ofertas manuales: nunca se tocan. Si dejan de ser menores que el regular, WooCommerce deja de mostrarlas como oferta.
  • Lista de oferta (opcional): su precio vigente se publica como precio de oferta con las fechas de vigencia de Tango (las ofertas futuras quedan programadas). Las ofertas gestionadas por Tango cuyo SKU ya no está en la lista se quitan en las corridas completas.
  • Control de IVA (solo eCommerce): se compara IvaIncluded de la lista con "Precios con impuestos" de WooCommerce; según wc_tango_price_tax_mode se avisa o se convierte con la tasa estándar base. En Tango Tiendas no hay dato para comparar.
  • Frecuencia: igual que stock (webhook PriceProductUpdate + incremental + completa periódica).
Si cambiaste el IVA de la lista en Tango, usá Configuración › Pedidos › Refrescar datos de Tango (caché de 12 h). Las fechas de vigencia asumen que Tango y WordPress están en la misma zona horaria.

10. Pedidos (WooCommerce › Tango)

10.1 Cuándo se envían

  • Cuando el pedido llega a un estado enviable: Procesando, En espera o Completado (filtro wc_tango_sendable_statuses). También al confirmarse el pago y al terminar el checkout (clásico y por bloques).
  • Con Enviar pedidos aún no pagados desactivado, solo se envían pedidos pagados.
  • El envío siempre es asíncrono (Action Scheduler): nunca frena el checkout ni el admin. Sin Action Scheduler el pedido no se envía y queda una nota.
  • Cada pedido se envía una sola vez; un bloqueo por pedido evita envíos dobles.
  • Con Enviar pedidos a Tango desactivado no sale ningún pedido automático, tampoco los que ya estaban en cola ni los reintentos. Un envío encolado que corre con la opción apagada queda en ERROR reintentable ([tango_sync_disabled], sin gastar intentos, con nota en el pedido) y se envía solo unos 5 minutos después de reactivar la opción. Los botones manuales de la caja del pedido siguen funcionando.

10.2 Qué se envía

DatoOrigen
OrderID / OrderNumberID y número del pedido de WooCommerce. Después de un reenvío como nuevo pedido, OrderID pasa a {ID}-R{n}.
RenglonesSKU en Tango (o SKU de WooCommerce), código de producto, código de variante, cantidad y precio unitario con impuestos.
ClienteCustomerID (ID del cliente, o del pedido si es invitado), DNI/CUIT, tipo de documento (96 DNI, 80 CUIT si tiene 11 dígitos), condición frente al IVA (CF por defecto), email, nombre, razón social, dirección separada en calle y número, provincia, teléfono.
EnvíoDirección de envío (o de facturación), costo, provincia, días de entrega lunes a viernes.
TotalesTotal, TotalDiscount (cupones y cargos negativos), FinancialSurcharge (cargos), validados con Total = Σ renglones + envío + recargos − descuentos y redondeo a 2 decimales "al par". Las diferencias se absorben como recargo/descuento con advertencia en el pedido.
DepósitoPrimer depósito configurado (WarehouseCode).
TalonariosOrderCounterfoil e InvoiceCounterfoil si están configurados.
Lista de preciosPriceListNumber si está activo "Enviar la lista de precios". Si esa lista no incluye IVA, los importes van netos y Tango calcula los impuestos.
ComentarioNota del cliente (hasta 280 caracteres).

Provincias: el código de provincia de WooCommerce (Argentina) se traduce a la tabla de provincias de Tango (0 CABA, 1 Buenos Aires, 2 Catamarca, 3 Córdoba, 4 Corrientes, 5 Entre Ríos, 6 Jujuy, 7 Mendoza, 8 La Rioja, 9 Salta, 10 San Juan, 11 San Luis, 12 Santa Fe, 13 Santiago del Estero, 14 Tucumán, 16 Chaco, 17 Chubut, 18 Formosa, 19 Misiones, 20 Neuquén, 21 La Pampa, 22 Río Negro, 23 Santa Cruz, 24 Tierra del Fuego; el 15 no existe). También reconoce nombres escritos a mano. Si no la reconoce usa la provincia por defecto y lo avisa.

10.3 Formas de cobro y pagos

  • Los pagos (CashPayments, PaidTotal) solo se informan si la condición de venta es Contado y el pedido está pagado. En cualquier otro caso se envía PaidTotal = 0.
  • Forma de cobro: la asignada al medio de pago en Configuración › Pedidos, o la predeterminada (A02). Por ejemplo, MPA para MercadoPago.
  • PaymentID: el ID de transacción de la pasarela si es numérico (por ejemplo MercadoPago); si no, {ID de pedido}1 (con el número de reenvío intercalado si el pedido se reenvió como nuevo).
  • Contra reembolso (cod) cuenta como pagado recién cuando el pedido está Completado (filtro wc_tango_unpaid_gateways).
  • Pedido enviado sin pago que después se paga: se reenvía como modificación con el pago, siempre que en Tango siga INGRESADA o RECIBIDA. Si ya avanzó, queda una nota para registrar el cobro a mano en Tango.
  • Un solo pago por pedido (CashPayments con el total). No se informan pagos parciales ni en cuotas.

10.4 Errores, reintentos y backoff

  • Si el envío falla, el pedido queda con estado local ERROR, una nota con el detalle (errores de validación listados por campo) y el error en la pantalla Pedidos.
  • Reintento automático (cada 15 minutos) para errores temporales o de configuración: falta de conexión, 429, 5xx, credenciales inválidas, cuenta no registrada. Espera 5, 10, 20 y 40 minutos entre intentos; máximo 5 intentos.
  • Los errores de datos (400 con errors, isOk:false, SKU faltante, sin email, totales) no se reintentan solos y salen de la cola: corregí el dato y usá Reintentar. Un reintento manual reinicia el contador de intentos.
  • Pedidos › Reintentar pedidos con error respeta esas esperas.
Tipo de error¿Se reintenta solo?Qué hacer
Red, 429, 5xxSíNada; se reintenta.
401, cuenta no registrada, faltan credencialesSíCorregí la configuración; el próximo reintento lo envía.
tango_sync_disabledSí, al reactivar Enviar pedidos a Tango (no gasta intentos)Reactivá la opción; sale en unos 5 minutos.
400 con errors, isOk:false, SKU faltante, sin email, totalesNo (sale de la cola)Corregí el dato y usá Reintentar en el pedido.

10.5 Verificación antes de reenviar

Si el envío terminó en timeout, error 5xx o respuesta ilegible, Tango pudo haber recibido el pedido igual. El plugin guarda el OrderID y, antes de reenviar, consulta a Tango: si el pedido está, lo marca como recibido ("el pedido sí llegó a Tango a pesar del error de envío; no se reenvía") y no lo duplica. Si esa consulta también falla, cuenta como un intento más. La consulta periódica y los webhooks hacen lo mismo.

10.6 Reenvío y modificación

Reenviar (caja del pedido o pantalla Pedidos) manda el pedido de nuevo con el mismo OrderID, lo que Tango toma como modificación. Solo se acepta mientras el pedido está INGRESADA o RECIBIDA. El CustomerID se mantiene entre envíos.

10.7 Pedido rechazado: reenviar como nuevo pedido

Si Tango rechazó el pedido, el botón pasa a ser Reenviar como nuevo pedido: se corrige el dato y se envía como una orden nueva con OrderID {ID}-R{n} (por ejemplo 1234-R1; filtro wc_tango_resubmit_order_id), porque Tango no acepta reenviar un OrderID rechazado. Los IDs de pago y envío también cambian. Los OrderID anteriores quedan en la meta _tango_order_ref_history y en una nota del pedido. Solo es manual.

10.8 Pedidos enviados con la otra API

Un pedido enviado con Tango Tiendas no se puede modificar ni cancelar por Tango eCommerce (ni al revés). Si cambiás de modo de API, esos pedidos dejan de consultarse; al intentar reenviarlos o cancelarlos queda la nota "Este pedido se envió con Tango Tiendas; gestionalo manualmente en Tango" y se gestionan directamente en Tango. Si volvés al modo anterior, el pedido vuelve a gestionarse normalmente.

10.9 Cancelación

  • Desde WooCommerce: al pasar el pedido a Cancelado se envía en segundo plano el pedido completo (el último payload enviado) con CancelOrder=true, CancelDate y CancelReason. No se envía si Tango ya lo tiene cancelado, anulado o rechazado. Tango acepta la cancelación con el pedido RECIBIDA (o EN PROCESO / FINALIZADA, solo para pasarlo a CANCELADA). Con otros estados (por ejemplo FACTURADA) hay que anular en Tango.
  • Desde Tango: OrderCancelled (eCommerce) o la consulta periódica pasan el pedido a Cancelado sin reenviar la cancelación a Tango.

10.10 Estados

El estado de Tango llega por webhook o por la consulta periódica. La consulta periódica revisa los pedidos enviados con el modo de API activo en los últimos 60 días (filtro wc_tango_poll_max_age_days) que no llegaron a un estado final, y los facturados de los últimos 15 días que todavía no tienen PDF. En eCommerce, GET Order y GET Invoices se filtran por la Cuenta de Integración API configurada, así que nunca se mezclan órdenes de otras cuentas de la misma empresa.

Estado en TangoEstado en WooCommerce
INGRESADA, PENDIENTESin cambio
RECIBIDA, EN PROCESOProcesando, solo si el pedido está pagado (si no, queda como está y se agrega una nota). Evita que WooCommerce marque como pagado y mande el email al cliente de un pedido impago. Filtro wc_tango_processing_requires_paid.
OBSERVADAEn espera, solo si el pedido no está pagado. Un pedido pagado no se pasa a En espera: queda la nota privada y el estado en Tango. Filtro wc_tango_observed_holds_paid_orders.
FACTURADA, FINALIZADACompletado
RECHAZADAFallido
CANCELADA, CANCELADA APROB, ANULADACancelado
ERROR (estado local)El pedido no se pudo enviar.

Jerarquía de estados: cada estado de Tango tiene un rango (INGRESADA < PENDIENTE < RECIBIDA = OBSERVADA < EN PROCESO < FACTURADA = FINALIZADA < RECHAZADA = CANCELADA = ANULADA). Un estado de rango menor al guardado (webhook atrasado, consulta vieja) se ignora. Filtro wc_tango_status_ranks.

Además, solo se permiten ciertas transiciones en WooCommerce (por ejemplo, un pedido Completado o Cancelado no se reabre). Se puede cambiar con wc_tango_order_status_map y wc_tango_allow_status_transition. Cada cambio deja una nota "Tango: estado …" en el pedido.

11. Facturas

  • Con OrderBilled, InvoiceFile o la consulta periódica (que sigue buscando el PDF hasta 15 días después del envío) se guardan tipo, número, URL del PDF y su vencimiento (InvoiceFileExpiration).
  • La URL de Tango vence. El plugin nunca muestra la URL directa: el enlace "Factura" pasa por admin-post.php?action=wc_tango_invoice, que pide una URL nueva a Tango si la guardada venció (como máximo una vez por minuto por pedido).
  • La factura se ve en la edición del pedido, en la pantalla Pedidos y en "Mi cuenta" (botón Factura y detalle del pedido), y en los emails.
  • El enlace exige la clave del pedido o permisos sobre él, y solo redirige a URLs https.
  • El número de factura puede llegar antes que el PDF. Con el pedido abierto, Actualizar estado la vuelve a pedir.
MensajeQué significa
La factura todavía no está disponibleTango todavía no tiene el comprobante publicado. El plugin vuelve a preguntar como máximo una vez por minuto por pedido: esperá un minuto y reintentá.
No tiene permiso para ver esta facturaEl enlace se copió sin el parámetro key (clave del pedido) y el usuario no está logueado o no tiene permisos sobre el pedido.
La URL de la factura no es segura (se requiere https)Tango devolvió una URL http o mal formada. Usá Actualizar estado más tarde; si persiste, consultá con Tango.

12. Checkout: DNI/CUIT y condición frente al IVA

  • Campo DNI / CUIT (obligatorio, filtro wc_tango_checkout_dni_required) y Condición frente al IVA (Consumidor Final, Responsable Inscripto, Monotributo, Exento; filtro wc_tango_checkout_iva_options).
  • Checkout clásico: los campos van en la sección de facturación.
  • Checkout por bloques: van en la sección de contacto (API de campos adicionales de WooCommerce). En v2 el checkout por bloques no pedía documento.
  • Validación: DNI de 7 u 8 dígitos o CUIT de 11 con dígito verificador. Responsable Inscripto, Monotributo y Exento exigen CUIT.
  • Se guardan en el pedido como _billing_dni y _billing_iva_category, y se muestran en el admin, en los emails y en "Mi cuenta".
  • Al enviar el pedido, el tipo de documento se decide por el largo: 96 DNI, 80 CUIT.

Para hacer el documento opcional:

add_filter( 'wc_tango_checkout_dni_required', '__return_false' );

13. Pantallas del plugin

Todas están en el menú lateral Tango eCommerce.

PantallaSlugQué tiene
Panelwc-tango-tiendasAlertas, estado de la conexión, productos vinculados, pedidos con error, último webhook, última y próxima corrida de cada sincronización con Sincronizar ahora y Sincronización completa, pedidos por estado en Tango.
Pedidoswc-tango-ordersPedidos vinculados con Tango, filtros por estado, búsqueda por n.º de pedido, ID de Tango o factura, Reenviar / Reintentar / Reenviar como nuevo pedido, Ver payload, Ver error, PDF de factura, Reintentar pedidos con error. El menú muestra un contador de pedidos con error.
Productoswc-tango-productsPestañas Vinculados / Sin vincular en WooCommerce / Solo en Tango, Importar productos, Vincular por SKU, Resincronizar categorías, sincronizar o desvincular un producto.
Registrowc-tango-logsActividad por tipo (stock, precios, pedidos, estados, webhooks, facturas, productos, importación, contenido, categorías) y estado, con detalle de request/response, Exportar CSV y Vaciar registro.
Configuraciónwc-tango-settingsPestañas Conexión, Sincronización, Pedidos, Webhooks y Avanzado.
Diagnósticowc-tango-diagnosticsChequeos de entorno, conexión, webhooks, tareas programadas y base de datos; Verificar con Tango (conexión, depósitos, lista de precios, condición, talonarios); Reparar tareas programadas; Copiar informe para soporte (sin secretos).
Asistentewc-tango-setupOculto en el menú; se abre desde el Panel o desde Avanzado.

13.1 Caja "Tango eCommerce" en pedidos

En la edición de cada pedido: estado en Tango, ID, intentos, último error, factura y los botones Enviar a Tango / Reintentar envío / Reenviar, Actualizar estado y Ver payload (muestra exactamente lo que se envía).

13.2 Caja "Tango eCommerce" en productos

En la edición de cada producto: vincular manualmente buscando en Tango, sincronizar ahora, quitar vínculo, últimos cambios de stock y precio, y los campos SKU en Tango y Código de producto Tango. Cada variación tiene sus propios campos SKU en Tango y Código de variante Tango.

13.3 Registro

El registro se limpia solo una vez por día: guarda 30 días y como máximo 10.000 registros. Registro › Vaciar registro lo borra a mano. El CSV exportado neutraliza las celdas que empiezan con =, +, -, @, tabulación o retorno de carro (les antepone ') para evitar inyección de fórmulas al abrirlo en una planilla.

14. Tareas programadas

HookFrecuenciaQué hace
wc_tango_sync_stock_cronIntervalo configuradoStock (incremental / completa).
wc_tango_sync_prices_cronIntervalo configurado (+150 s)Precios.
wc_tango_sync_order_status_cronIntervalo configurado (+60 s)Estados de pedidos y facturas (hasta 200 pedidos por corrida, enviados en los últimos 60 días).
wc_tango_sync_product_content_cronIntervalo configurado (+210 s)Contenido de productos.
wc_tango_sync_new_products_cron15 minutosProductos nuevos.
wc_tango_retry_failed_orders_cron15 minutosReintento de pedidos con error.
wc_tango_cleanup_logs_cronDiariaBorra registros de más de 30 días y deja como máximo 10.000.

Acciones asíncronas (Action Scheduler): wc_tango_async_send_order, wc_tango_async_poll_order, wc_tango_async_stock_update, wc_tango_async_price_update, wc_tango_async_order_event, wc_tango_async_product_content_update, wc_tango_resync_category_batch.

Las tareas faltantes se reprograman solas al entrar al admin, o con Diagnóstico › Reparar tareas programadas. Desactivar el plugin las elimina.

WP-Cron depende de las visitas: en sitios con poco tráfico puede no correr durante horas. Action Scheduler (envío de pedidos y webhooks) también corre con WP-Cron. En producción configurá un cron real del servidor (ver Solución de problemas).

15. WP-CLI

wp tango catalog sync-stock [--full]          # stock (--full ignora el checkpoint)
wp tango catalog sync-prices [--full]         # precios
wp tango catalog sync-products [--full-scan]  # productos nuevos (--full-scan recorre todo el catálogo)
wp tango catalog sync-content [--full]        # contenido (título y descripciones)
wp tango catalog status                       # última corrida, checkpoints y cobertura de vinculación
wp tango catalog reset-checkpoint <stock|prices|products|content>   # la próxima corrida será completa
wp tango catalog unmapped [--source=wc|tango] [--limit=50] [--refresh]  # productos sin vincular

wp tango validate-category-sync --sku=ABC123 --product_id=456 [--fallback-mode=official_or_additional_description] [--apply]

Todos los comandos (salvo status y unmapped --source=wc) requieren la integración activa. validate-category-sync corre en modo prueba salvo que se pase --apply.

16. Migración desde v2

Hay dos cosas distintas, que se pueden hacer en momentos distintos: actualizar el plugin de v2 a v3 (la tienda sigue usando Tango Tiendas y no hay que cambiar nada en Tango) y pasar de Tango Tiendas a Tango eCommerce (cuando se actualiza Tango a Delta 6 y se habilita eCommerce). Recomendación: actualizá primero el plugin, verificá que todo siga funcionando en modo Tiendas, y recién después cambiá de API.

16.1 Antes de actualizar

  • Backup de la base de datos y de wp-content/plugins/wc-tango-tiendas.
  • Si es posible, probá primero en un staging.
  • Anotá el valor actual de Talonario (ver más abajo).
  • Revisá que no haya una importación de productos en curso.

16.2 Qué pasa automáticamente al actualizar

La migración corre sola en la primera carga después de actualizar. Activar el plugin corre la misma migración.

QuéResultado
Modo de APISi había un Access Token cargado, wc_tango_api_mode queda en tiendas. La tienda sigue conectada a Tango Tiendas como antes.
Access TokenSe encripta con libsodium (si el servidor la tiene). Sigue funcionando igual.
Tabla {prefix}tango_order_mapSe agregan las columnas tango_invoice_expiration, api_mode, send_attempts, last_error y sent_at. Los pedidos ya enviados conservan sus datos.
Pedidos enviados con v2Se marcan con api_mode = 'tiendas' y sent_at = last_sync: siguen consultándose y cancelándose por Tiendas, y el corte de 60 días también se les aplica.
Opciones nuevasSe crean con sus valores por defecto; las existentes no se tocan. Excepción: Poner en 0 el stock de productos vinculados que no aparecen en Tango queda desactivada en actualizaciones.
Tareas programadasSe agrega wc_tango_retry_failed_orders_cron (cada 15 minutos).
MenúPasa a llamarse Tango eCommerce. Los enlaces viejos a pestañas de configuración redirigen a Configuración.
AsistenteSi había token, la configuración inicial se marca como completada y el asistente no se abre solo. Está en Configuración › Avanzado › Herramientas.
WebhookLa URL y el secreto no cambian. No hay que tocar nada en Tango Tiendas.
IntegraciónSi estaba activa, sigue activa.

En el Panel va a aparecer una alerta recordando que se usa la API legada de Tango Tiendas. Es informativa.

16.3 Cambios de comportamiento en pedidos

Temav2v3
ProvinciasCódigos por orden alfabético (Chaco = 3, Córdoba = 5…), incluía el 15; provincia desconocida = CABA sin avisar.Tabla de provincias de Tango (Córdoba = 3, Chaco = 16…; el 15 no se usa). Provincia desconocida = Provincia por defecto, con advertencia y nota.
TalonarioSe enviaba como InvoiceCounterfoil (talonario de factura).wc_tango_counterfoil es Talonario de pedido (OrderCounterfoil). Nuevo Talonario de factura (wc_tango_invoice_counterfoil, opcional).
Forma de cobroSiempre A02.Configurable por medio de pago. Default A02.
PagosSiempre PaidTotal = Total y un pago, aunque no estuviera pagado.Solo si la condición de venta es Contado y el pedido está pagado; si no, PaidTotal = 0. El pago posterior se informa como modificación.
Contra reembolsoPagado desde el envío.Pagado recién cuando el pedido está Completado.
Oferta manualSe borraba si quedaba mayor o igual al nuevo precio regular.No se toca nunca.
Checkout por bloquesSin campo DNI: los pedidos llegaban sin documento.DNI / CUIT (obligatorio) y Condición frente al IVA.
RECIBIDA, EN PROCESOProcesando aunque el pedido no estuviera pagado.Procesando solo si está pagado; si no, queda como está con una nota.
OBSERVADAEn espera solo por webhook.En espera por webhook y por consulta, salvo que el pedido esté pagado.
Estados que llegan tardeSe aplicaban (podían "retroceder" el pedido).Se ignoran los de rango menor al guardado.
RECHAZADAFallido, sin forma de reenviar.Fallido; se puede corregir y Reenviar como nuevo pedido ({ID}-R{n}).
Enviar pedidos a Tango desactivadoLos ya encolados salían igual.Frena también los encolados y los reintentos; quedan en ERROR reintentable y salen al reactivar.

Qué hacer con el talonario

  • Si en v2 tenías 0: no hay que hacer nada.
  • Si en v2 tenías un talonario de factura: copialo a Talonario de factura y poné en Talonario de pedido el talonario de pedidos correcto (o 0 para usar el predeterminado). Si no lo corregís, Tango va a recibir un talonario de factura como talonario de pedido.

Otros cambios que se notan

  • Cancelación: se envía en segundo plano con el pedido completo; una cancelación que llega desde Tango ya no rebota hacia Tango.
  • Reintentos: hasta 5 intentos con esperas de 5, 10, 20 y 40 minutos, y verificación en Tango antes de reenviar después de un timeout o un 5xx.
  • Totales: los importes se envían con impuestos y se valida la fórmula de total; las diferencias se ajustan como recargo/descuento con advertencia.
  • Stock: suma de varios depósitos, kits y descuento opcional de pedidos pendientes; corridas incrementales con una completa cada 24 h.
  • Contenido: el título y las descripciones de los productos vinculados se toman de Tango.
  • Los clientes creados en Tango con pedidos de v2 pueden tener la provincia equivocada; la v3 no los corrige retroactivamente.

16.4 Verificación después de actualizar (modo Tiendas)

  • Diagnóstico › Verificar con Tango: todo en verde (o advertencias entendidas).
  • Configuración › Conexión: modo "Tango Tiendas (legado)" y Probar conexión correcto.
  • Configuración › Pedidos: talonario de pedido y de factura, provincia por defecto, medios de pago.
  • Panel: corridas recientes de stock y precios sin errores; sin alerta de token que no se puede descifrar.
  • Configuración › Webhooks: llega una notificación al modificar stock o precio en Tango.
  • Pedido de prueba con el checkout que use la tienda: llega con DNI, provincia, forma de cobro y pago correctos (Ver payload).
  • Decidido si se activa Poner en 0 el stock de productos vinculados que no aparecen en Tango.

16.5 Pasar de Tango Tiendas a Tango eCommerce

  1. Pedidos en curso de Tiendas: después del cambio, los enviados por Tiendas dejan de consultarse y no se modifican ni cancelan por eCommerce. Esperá a que lleguen a un estado final, o anotá cuáles quedan abiertos para seguirlos en Tango.
  2. Credenciales: Configuración › Conexión › elegí Tango eCommerce › completá llave, token, IdEmpresa y Cuenta de Integración API › Probar conexión › Guardar cambios. El Access Token de Tiendas queda guardado por si hay que volver atrás.
  3. Stock: activá Stock centralizado si la empresa centraliza el stock de varias sucursales y revisá Depósitos y Lista de precios.
  4. IVA de la lista: elegí Avisar o Convertir y mirá si aparece la advertencia en el Panel después de la primera corrida.
  5. Pedidos: usá Refrescar datos de Tango y revisá talonarios, condición de venta y medios de pago.
  6. Webhook: la URL cambia a la versión corta (…/wp-json/wct/v1/wh?k=…). Cargala en la Cuenta de Integración API (ver Webhooks) y quitá la URL de Tango Tiendas › API › Notificaciones.
  7. Pedido de prueba: verificá en la caja Tango eCommerce del pedido que quede enviado y con ID de Tango.
  8. Corrida completa: en el Panel, Sincronización completa en stock y precios (o wp tango catalog sync-stock --full y sync-prices --full). Para releer productos nuevos y contenido: wp tango catalog reset-checkpoint products y reset-checkpoint content.
Volver a Tango Tiendas: Configuración › Conexión › Tango Tiendas (legado) › Guardar. El Access Token sigue guardado. Volvé a cargar la URL del webhook en Tango Tiendas si la habías quitado.

17. Limitaciones conocidas

  • Artículos con escala (talle/color): no se crean productos variables automáticamente. Se importan como simples o se omiten; para usar variaciones hay que vincular cada variación a mano.
  • Descontar pedidos pendientes: la documentación de Tango no aclara si el comprometido llega en Quantity (negativo) o en EngagedQuantity. El plugin resta EngagedQuantity; no está confirmado contra un Tango real. Con modo depuración se registra una fila de muestra para verificarlo.
  • Contenido: Tango eCommerce no documenta un webhook de contenido; los cambios llegan por la reconciliación periódica. Los cambios hechos a mano en WooCommerce se pisan.
  • Probar conexión valida la Cuenta de Integración API solo en modo best-effort; la confirmación definitiva es el primer pedido.
  • Los pedidos enviados con la otra API se gestionan a mano en Tango. Los pedidos de más de 60 días dejan de consultarse.
  • Sin Action Scheduler los pedidos no se envían y los webhooks se procesan en el mismo request.
  • Un solo pago por pedido. No se informan pagos parciales ni en cuotas.
  • Las modificaciones solo se aceptan con el pedido INGRESADA/RECIBIDA en Tango.
  • Pedidos con fecha de más de 30 días: Tango puede rechazarlos (queda advertencia).
  • El pedido se asigna solo al primer depósito configurado (filtro wc_tango_order_warehouse_code).
  • Días de entrega fijos de lunes a viernes (filtro wc_tango_order_shipping).
  • Stock en enteros: las cantidades fraccionarias se redondean hacia abajo.
  • Las fechas de vigencia de precios asumen que Tango y WordPress están en la misma zona horaria.
  • Stock centralizado, control de IVA de la lista y OrderCancelled existen solo en Tango eCommerce.
  • Solo moneda corriente (limitación de la API de Tango).

18. Solución de problemas y FAQ

18.1 Por dónde empezar

  1. Diagnóstico › Verificar con Tango: prueba la conexión y valida depósitos, lista de precios, condición de venta y talonarios. Los chequeos en rojo dicen qué corregir.
  2. Panel: las alertas de arriba y la tarjeta de cada sincronización.
  3. Registro: filtrá por estado Error; cada fila muestra el request y la respuesta de Tango.
  4. WooCommerce › Estado › Registros, fuente wc-tango-tiendas: avisos y errores internos. Con Modo depuración se agrega el detalle de cada llamada; desactivalo al terminar.

18.2 Errores de conexión

Mensaje / códigoCausaQué hacer
401 "Token de desarrollador o IdEmpresa inválidos" (eCommerce)Token vencido, mal copiado, o IdEmpresa que no corresponde. Tango no distingue cuál de los dos.Generá un token nuevo (menú de usuario › Desarrollador › Generar), verificá el IdEmpresa y probá.
401 "El Access Token de Tango Tiendas es inválido o venció" (Tiendas)Token de Tiendas revocado o regenerado.Generá uno nuevo en Tango Tiendas › API y cargalo en Configuración › Conexión.
"La Cuenta de Integración API «X» no existe en Tango"El nombre de la cuenta no coincide (Tango responde "X is not registered.").Copiá el nombre exacto (mayúsculas, espacios). Guardá y usá Reintentar en los pedidos afectados.
"La API de Tango eCommerce no respondió en … (404)"Llave mal escrita, o empresa no vinculada con Tango Connect / eCommerce.Revisá la llave (000000/000) y la URL que muestra Configuración › Conexión.
"No se pudo conectar con …"Sin salida HTTPS, DNS, firewall, TLS menor a 1.2, Tango Connect fuera de línea, timeout (30 s).Pedile al hosting que verifique salida HTTPS con TLS 1.2+. El filtro wc_tango_api_timeout amplía el timeout.
"La respuesta de … no es válida (no es JSON)"Llave incorrecta o una página de error intermedia (proxy, WAF).Revisá la llave y si el hosting intercepta las salidas.
429 "Tango limitó temporalmente las consultas"Límite de consultas simultáneas, compartido entre las empresas de la instalación de Tango.Esperá. Si pasa seguido, subí el intervalo y apoyate en los webhooks.
5xx "Tango devolvió un error temporal"Problema del lado de Tango.Se reintenta solo. Si persiste, consultá con Tango.
400 "Tango rechazó los datos enviados: Campo: mensaje"eCommerce valida el JSON y devuelve el detalle por campo.Corregí el dato del pedido y reintentá.

18.3 Las credenciales "desaparecieron"

Los tokens se guardan encriptados con una clave derivada de la sal AUTH_KEY/AUTH_SALT de wp-config.php. Si las sales cambiaron (migración, regeneración de sales, staging con otro wp-config.php) o el servidor nuevo no tiene la extensión sodium, el token no se puede descifrar y el Panel muestra una alerta. Volvé a cargar el Token de desarrollador (o el Access Token) en Configuración › Conexión.

18.4 El pedido no se envía

  1. Integración activa y Enviar pedidos a Tango activo.
  2. Estado del pedido: solo se envían Procesando, En espera o Completado.
  3. Pedidos no pagados: con Enviar pedidos aún no pagados desactivado, el pedido espera a estar pagado.
  4. Action Scheduler: en WooCommerce › Estado › Acciones programadas, buscá wc_tango_async_send_order.
  5. Caja Tango eCommerce del pedido: si dice "No enviado", usá Enviar a Tango.

18.5 Pedido en ERROR por datos inválidos

MensajeSolución
El producto «X» no tiene código SKU de Tango asignadoVinculá el producto (campo SKU en Tango o Vincular por SKU).
El producto «X» del pedido ya no existe en la tiendaEl producto fue borrado. Cargá el pedido a mano en Tango.
El pedido no tiene email de facturaciónCompletá el email en el pedido y reintentá.
Customer.DocumentNumber, IVACategoryCodeRevisá DNI / CUIT y condición frente al IVA (RI, Monotributo y Exento requieren CUIT).
SKUCode / ProductCode inexistenteEl SKU vinculado no existe en Tango o está deshabilitado.
OrderCounterfoil / InvoiceCounterfoilTalonario inexistente o del tipo equivocado. Elegilo desde el selector en Configuración › Pedidos.
Order total doesn't add upEl plugin absorbe las diferencias como recargo o descuento; diferencias grandes suelen venir de plugins de descuentos o cargos que no usan cupones o cargos de WooCommerce.

18.6 Webhooks

  • Nunca llega una notificación: verificá HTTPS con TLS 1.2+, que la URL esté completa en Tango (con ?k= o ?secret=), que la integración esté activa y que ningún firewall / WAF bloquee wp-json. Un GET a https://tu-sitio/wp-json/wct/v1/wh devuelve {"status":"ok"}.
  • Error 401 ("Webhook: Invalid or missing secret."): el secreto de la URL cargada en Tango no coincide (después de Generar secreto nuevo, de copiar la URL sin el parámetro o al copiar la base de otro sitio). Copiá de nuevo la URL y reemplazala en Tango.
  • Llegan pero no se aplican: revisá la cola de Action Scheduler; un saldo de un depósito no configurado o de un SKU no vinculado se ignora; solo se aplican las filas de la lista configurada.

18.7 Stock y precios

  • Revisá la tarjeta Stock / Precios del Panel y usá Sincronizar ahora o Sincronización completa.
  • Un depósito de más o de menos explica la mayoría de las diferencias de stock.
  • Si la corrida incremental no trae un cambio viejo: wp tango catalog reset-checkpoint stock.
  • Un producto sigue con stock aunque en Tango no tiene: activá Poner en 0 el stock de productos vinculados que no aparecen en Tango.
  • Si el Panel avisa que la lista y la tienda difieren en IVA, elegí Convertir o ajustá los impuestos de WooCommerce.

18.8 Las tareas programadas no corren

En Diagnóstico, si falta alguna, Reparar tareas programadas. Si DISABLE_WP_CRON está en true, tiene que haber un cron del servidor que llame a wp-cron.php.

Configurar un cron real del servidor

En wp-config.php:

define( 'DISABLE_WP_CRON', true );

Y una tarea cada 5 minutos (crontab):

*/5 * * * * curl -s https://tudominio.com/wp-cron.php?doing_wp_cron > /dev/null 2>&1

# Con WP-CLI, alternativa más robusta:
*/5 * * * * cd /ruta/a/wordpress && wp cron event run --due-now > /dev/null 2>&1

Sin acceso al servidor, usá un servicio externo que llame a wp-cron.php?doing_wp_cron cada 5 minutos (UptimeRobot, cron-job.org, EasyCron) y no desactives WP-Cron.

18.9 Preguntas frecuentes

¿Cada cuánto se sincroniza?

QuéFrecuencia
Stock, precios, estados de pedidos, contenidoCada "Sincronización periódica cada" (default 5 minutos, 1 a 60).
Corrida completa de stock y preciosCada 24 horas (configurable).
Productos nuevosCada 15 minutos (fijo).
Reintento de pedidos con errorCada 15 minutos (fijo).
Con webhookStock, precios y estados de pedidos en segundos.

¿Tengo que configurar el webhook?

No es obligatorio, pero es muy recomendado. Con el webhook funcionando, un intervalo de 15 a 30 minutos alcanza.

¿Qué pasa si desactivo la integración?

No se envían pedidos ni se actualiza nada; los webhooks responden 200 sin procesar. Las credenciales y la configuración se conservan.

¿Puedo copiar la configuración de staging a producción?

Sí: Configuración › Avanzado › Herramientas › Exportar JSON e Importar en el otro sitio. Las credenciales no viajan: cargalas a mano. La URL del webhook de cada sitio es distinta.

¿Cómo pido soporte?

Diagnóstico › Verificar con Tango y después Copiar informe (no incluye credenciales ni secretos). Sumá el CSV del Registro filtrado por Error y, si el problema es un pedido, su Ver payload y la nota de error.

19. Para desarrolladores

19.1 Filtros

FiltroArgumentosPara qué
wc_tango_order_payload$payload, $order, $syncModificar el JSON completo del pedido antes de enviarlo.
wc_tango_order_item$line, $item, $orderModificar cada renglón.
wc_tango_order_customer$customer, $orderModificar el bloque Customer.
wc_tango_order_shipping$shipping, $orderModificar el bloque Shipping (por ejemplo, días de entrega).
wc_tango_customer_code$code, $orderCódigo de cliente de Tango (Customer.Code; por defecto la meta _tango_customer_code).
wc_tango_document_type$type, $document, $orderTipo de documento (96 DNI, 80 CUIT).
wc_tango_iva_category_code$code, $orderCondición frente al IVA enviada.
wc_tango_province_code$code, $state, $country, $order, $contextCódigo de provincia de facturación (billing) o envío (shipping).
wc_tango_order_warehouse_code$code, $orderDepósito del pedido (por defecto el primero configurado).
wc_tango_sale_condition_code$code, $orderCondición de venta del pedido.
wc_tango_sale_condition_is_cash$is_cash, $code, $orderSi la condición es Contado (habilita informar pagos).
wc_tango_payment_method_code$code, $gateway, $orderForma de cobro de Tango del pago.
wc_tango_order_is_paid$paid, $orderSi el pedido cuenta como pagado.
wc_tango_unpaid_gatewaysarray( 'cod' )Medios de pago que cuentan como pagados recién al completarse el pedido.
wc_tango_sendable_statusesarray( 'processing', 'on-hold', 'completed' )Estados de WooCommerce que disparan el envío.
wc_tango_order_prices_include_tax$included, $orderEnviar importes con o sin impuestos.
wc_tango_absorb_total_differencetrue, $difference, $orderDevolver false para que un pedido cuyos totales no cuadran falle en lugar de ajustarse.
wc_tango_cancel_reason$reason, $orderMotivo de cancelación enviado a Tango.
wc_tango_cancel_order_payload$payload, $orderJSON de cancelación.
wc_tango_order_status_map$mapTabla estado de Tango → estado de WooCommerce (null = sin cambio).
wc_tango_allow_status_transition$ok, $current, $target, $orderPermitir o bloquear un cambio de estado originado en Tango.
wc_tango_status_ranks$ranksRango de cada estado de Tango; un estado de rango menor al guardado se ignora.
wc_tango_processing_requires_paidtrue, $order, $statusDevolver false para que RECIBIDA / EN PROCESO pasen a Procesando aunque el pedido no esté pagado.
wc_tango_observed_holds_paid_ordersfalse, $order, $statusDevolver true para que OBSERVADA pase a En espera también los pedidos pagados.
wc_tango_poll_max_age_days60Antigüedad máxima (días desde el envío) de los pedidos que revisa la consulta periódica.
wc_tango_resubmit_order_id$order_id, $order, $countOrderID de un pedido rechazado reenviado como nuevo (por defecto {ID}-R{n}).
wc_tango_checkout_iva_options$optionsOpciones de condición frente al IVA del checkout.
wc_tango_checkout_dni_requiredtrueHacer opcional el DNI / CUIT.
wc_tango_api_timeout30Timeout de las llamadas a Tango (segundos).
wc_tango_api_base_url$url, $modeURL base de la API (por ejemplo, para apuntar a un staging o a un mock).
wc_tango_api_page_size$size, $endpoint, $modeTamaño de página de los listados.
wc_tango_api_max_pages500, $endpointMáximo de páginas por listado (al cortar se registra un error).

El plugin no define acciones (do_action) propias además de las tareas programadas.

// Ejemplo: que los pedidos cuyos totales no cuadran fallen en lugar de ajustarse
add_filter( 'wc_tango_absorb_total_difference', '__return_false' );

19.2 API interna

  • Acceso a componentes: wc_tango_tiendas()->api, ->order_sync, ->stock_sync, ->price_sync, ->product_import, ->product_map, ->content_sync, ->category_sync, ->logger.
  • Ajustes y credenciales: usá siempre WC_Tango_Settings (get_api_mode(), get_credentials(), get_secret(), get_warehouse_codes(), etc.). Los tokens están encriptados: no los leas con get_option().
  • Los métodos de catálogos del cliente de la API (get_warehouses(), get_price_lists(), get_sale_conditions(), get_counterfoils(), etc.) ahora devuelven directamente las filas; en v2 devolvían {Data: [...]}.
  • Los nombres de hooks de cron y de Action Scheduler no cambiaron respecto de v2.

19.3 Tablas de base de datos

TablaContenido
{prefix}tango_sync_logRegistro de actividad (tipo, dirección, entidad, estado, mensaje, request y response). Se limpia a diario: 30 días y máximo 10.000 filas.
{prefix}tango_product_mapVínculo producto/variación de WooCommerce ↔ SKU, código de producto y de variante de Tango; fecha de última sincronización de stock y precio.
{prefix}tango_order_mapVínculo pedido de WooCommerce ↔ orden de Tango: estado, número y URL de factura, tango_invoice_expiration, api_mode, send_attempts, last_error, sent_at, last_sync.
{prefix}tango_sync_historyHistorial de cambios de stock y precio por producto (30 días).

Las tablas se crean y actualizan con dbDelta al activar o actualizar el plugin. Desinstalar el plugin no borra tablas ni opciones.

Metadatos principales

  • Pedido: _tango_order_id, _tango_order_ref, _tango_order_ref_history, _tango_resubmissions, _tango_last_payload, _tango_last_error, _tango_sent_unpaid, _tango_invoice_number, _tango_invoice_type, _tango_invoice_url, _tango_invoice_expiration, _billing_dni, _billing_iva_category.
  • Producto / variación: _tango_sku_code, _tango_product_code, _tango_variant_code, _barcode, _tango_kit, _tango_sale_managed, _tango_content_checksum.

19.4 Opciones

Todas las opciones usan el prefijo wc_tango_; las de cada pestaña figuran en la sección Configuración. Otras opciones relevantes:

OpciónNotas
wc_tango_webhook_secretSecreto aleatorio de 32 caracteres por sitio, comparado en tiempo constante. Se puede regenerar desde Configuración › Webhooks.
wc_tango_setup_completedyes/no. Marca el asistente de configuración como completado.
wc_tango_db_versionVersión del esquema; dispara la migración automática al actualizar.

19.5 Seguridad

  • Credenciales encriptadas con libsodium (sodium_crypto_secretbox), con clave derivada de la sal AUTH de WordPress. Sin libsodium se guardan en texto plano.
  • Los campos secretos se muestran enmascarados (••••••••1234); vaciar el campo no borra el valor guardado.
  • La exportación de configuración y el informe de diagnóstico no incluyen credenciales ni secretos.
  • Todas las acciones AJAX y formularios usan nonces y exigen la capacidad manage_woocommerce (Administrador y Gestor de tienda).
  • Las llamadas a Tango usan HTTPS con verificación de certificado (sslverify).

20. Planes y licencias

PlanPrecioDónde corre la sincronizaciónIncluye
MensualUS$89/mesServidor dedicado de ArandanoActualizaciones y soporte técnico
AnualUS$599/añoServidor dedicado de ArandanoActualizaciones y soporte técnico
LifetimeUS$789 pago únicoEn el mismo servidor de tu WordPressLicencia perpetua para un sitio

Mirá el detalle de cada plan y contratalo desde la página de Tango eCommerce.

Documentación de Tango eCommerce para WooCommerce v3.0.0 — Octubre 2026

Volver a Tango eCommerce