DocumentaciónDocumentación
Talk2Sync Documentation
Manual de Usuario
APIs de Conexiones
  • English
  • Español
Talk2Sync Documentation
Manual de Usuario
APIs de Conexiones
  • English
  • Español
  • Portal de Guía de Usuario y Documentación de API
  • User-documentation

    • Manual de Usuario
    • Guide

      • Guía del Usuario: Introducción
      • Conceptos Fundamentales
    • Talk2sync

      • Botones de Conexión
      • Sistema de Códigos de Color
      • Alertas o errores de validación
      • Filtros de comandos
      • La información eliminada todavía aparece: cómo eliminarla
      • Eliminación de datos
    • Conexiones

      • Configuraciones de la conexión
    • Campos

      • Sincronización basada en tiempos
      • Gobierno de datos
      • Campos especiales y adicionales
    • Productos

      • Campos de productos
      • Equivalencias
      • Búsqueda de productos
      • Vincular / Desvincular Productos
    • Ventas

      • Campos
      • Equivalencias de órdenes
      • Búsqueda de órdenes de venta
      • Sin SKU (SKU faltante)
    • Reports

      • Exportación de Productos
      • Reporte de Ventas
    • Faq

      • Amazon

        • Requisitos de Código de Barras en Amazon
        • Discrepancias con el Catálogo de Amazon y Errores de ASIN
        • Requisitos del Fabricante en Amazon
        • Errores de Creación de Nuevos ASIN y Valores de Atributos Inválidos
        • Talk2sync, SKUs e Identificadores de Productos
        • Plantillas de Variación en Amazon
      • Mercadolibre

        • Tiendas Oficiales en Mercado Libre
        • Ubicaciones y Atributos Geográficos en Mercado Libre
        • Recogida en Tienda en Mercado Libre
        • Atributos Adicionales en Mercado Libre
        • Procesamiento de Imágenes y Sincronización en Mercado Libre
        • Error de Vendedor Inhabilitado para Publicar en Mercado Libre
      • Linio

        • Error de Marca No Registrada en Linio
        • Requisitos de Dimensiones Físicas y Peso en Linio
  • APIs para Conexiones

    • APIs de Conexiones
    • Quick-start

      • Introducción y Requisitos
      • Agregar Conexión
      • Configurar Conexión
      • Generar Claves
      • Prueba tu Integración
    • Webhooks

      • API de Webhooks
      • Catalog

        • Webhooks: Listar Productos
        • Webhooks: Listar Producto por ID
        • Webhooks: Agregar/Actualizar Producto
      • Sales

        • Webhooks: Listar Órdenes
        • Listar orden por ID
        • Agregar/Actualizar orden
    • Reverse-connections

      • Reverse Connections
      • Implementation-states

        • Implementación
        • Implementación de consulta: productos y órdenes
        • Implementación de almacenamiento: productos y órdenes
        • Sleep y timeouts
      • Protocol

        • Protocolo
        • Descripción general
        • Carga de productos
        • Carga de órdenes
        • Descarga de productos
        • Descarga de órdenes
      • Rest-calls

        • Llamadas REST
        • Fetching-changes

          • Llamadas REST para obtención de cambios
          • Consultar si está obteniendo cambios
          • Catalog

            • Enviar página de productos
            • Finalizar envíos de productos
          • Sales

            • Enviar página de órdenes
            • Finalizar envíos de órdenes
            • Finalizar todos los envíos
        • Pulling-changes

          • Llamadas REST para descarga de cambios
          • Consultar si está descargando cambios
          • Catalog

            • Obtener el siguiente producto
            • Obtener página de productos
            • Notificar almacenamiento exitoso del producto
            • Notificar error en el almacenamiento del producto
            • Finalizar descarga de productos
          • Sales

            • Obtener la siguiente orden
            • Obtener página de órdenes
            • Notificar almacenamiento exitoso de una orden
            • Notificar error en el almacenamiento de una orden
            • Finalizar descarga de órdenes
            • Finalizar transacción de descarga

Webhooks: Listar Productos

Descripción General

El webhook Listar Productos permite que Talk2sync recupere tu catálogo de productos completo. Talk2sync solicitará periódicamente tu endpoint de productos para sincronizar datos de productos incluyendo detalles, precios, disponibilidad, imágenes y atributos personalizados.

Requisitos del Endpoint

Debes crear un endpoint GET que acepte parámetros de paginación y ordenamiento de Talk2sync.

Formato de Solicitud

Talk2sync enviará solicitudes GET a tu endpoint de productos configurado con los siguientes parámetros:

Paginación por Offset Numérico (Recomendado)

GET https://www.example.com/your/endpoint/url?offset=0&sortorder=desc&jobid=123
T2SKey: {{API_KEY}}

Paginación por Cursor (Alternativa)

Si la paginación por offset numérico no es viable para tu sistema, puedes implementar paginación basada en cursor:

GET https://www.example.com/your/endpoint/url?next=YXNkaWhhc3BvZGhpYXM&sortorder=desc&jobid=123
T2SKey: {{API_KEY}}

Parámetros de Solicitud

ParámetroTipoDescripciónObligatorio
offsetintegerPosición de inicio para paginación numérica (basada en 0)Si se usa paginación numérica
nextstringCursor codificado en Base64 para paginación basada en cursorSi se usa paginación por cursor
sortorderstringDirección de ordenamiento: asc (ascendente) o desc (descendente)✓ Sí
jobidintegerIdentificador único para este trabajo de sincronización (para seguimiento)✓ Sí
T2SKeyheaderTu clave de seguridad proporcionada por Talk2sync✓ Sí

Autenticación

La clave de seguridad debe incluirse en el encabezado T2SKey (no en el encabezado Authorization para este endpoint):

T2SKey: tu_clave_generada_aqui

Formato de Respuesta

Tu endpoint debe devolver una respuesta JSON con la siguiente estructura:

{
  "paging": {
    "pageSize": 20,
    "itemsTotal": 2,
    "offset": 0
  },
  "products": [
    {
      "_id": "100004777",
      "sku": "100004777",
      "last_updated": 1517360038797,
      "title": "EON618S JBL SUBWOOFER 18\" AMPLIFICADO",
      "url": "",
      "brand": "",
      "mpn": "",
      "model": "",
      "description": "JBL Premium Transducers",
      "variations": [
        {
          "availabilities": [
            {
              "tag": "default",
              "quantity": 50
            }
          ],
          "prices": [
            {
              "tag": "default",
              "currency": "USD",
              "number": 1060.51
            }
          ],
          "images": [
            {
              "url": "https://www.example.com/13080-thickbox_default/eon618s-jbl-subwoofer-18-amplificado-.jpg"
            }
          ],
          "videos": [
            {
              "url": ""
            }
          ],
          "barcode": "",
          "size": "",
          "color": "",
          "variationid": ""
        }
      ],
      "properties": [
        {
          "extraattributes": {
            "promociones": "",
            "status": "",
            "condicion_venta": "",
            "peso": "",
            "relacionados": "",
            "custom_01": "",
            "custom_02": "1",
            "custom_03": ""
          }
        }
      ]
    }
  ]
}

Estructura de Respuesta

Objeto de Paginación

CampoTipoDescripción
pageSizeintegerNúmero de elementos devueltos en esta página
itemsTotalintegerNúmero total de productos en tu sistema
offsetintegerPosición de offset actual (solo para paginación numérica)
nextstringCursor codificado en Base64 para la siguiente página (solo para paginación por cursor)

Objeto de Producto

CampoTipoDescripción
_idstringIdentificador único del producto (requerido)
skustringSKU/código del producto
last_updatedintegerTimestamp Unix (milisegundos) de la última modificación
titlestringNombre/título del producto
urlstringURL del producto en tu tienda
brandstringMarca del producto
mpnstringNúmero de Parte del Fabricante
modelstringModelo del producto
descriptionstringDescripción detallada del producto
variationsarrayArray de variaciones del producto (ver abajo)
propertiesarrayArray de propiedades/atributos personalizados

Objeto de Variación

CampoTipoDescripción
variationidstringIdentificador único de la variación
sizestringAtributo de tamaño
colorstringAtributo de color
barcodestringCódigo de barras/EAN
availabilitiesarrayInformación de inventario por ubicación/almacén
pricesarrayInformación de precios por moneda/región
imagesarrayImágenes del producto
videosarrayVideos del producto

Objeto de Disponibilidad

CampoTipoDescripción
tagstringIdentificador de ubicación (p.ej., "default", "warehouse_1")
quantityintegerCantidad disponible en esta ubicación

Objeto de Precio

CampoTipoDescripción
tagstringIdentificador de nivel de precio (p.ej., "default", "wholesale")
currencystringCódigo de moneda ISO 4217 (p.ej., "USD", "MXN")
numbernumberValor del precio

Objeto de Imagen

CampoTipoDescripción
urlstringURL completa a la imagen del producto

Objeto de Atributos Extras

Los campos personalizados pueden incluirse en el objeto extraattributes. Ejemplos comunes:

CampoTipoDescripción
promocionesstringInformación de promociones
statusstringEstado del producto (activo, inactivo, etc.)
condicion_ventastringCondición de venta
pesostringPeso del producto
relacionadosstringProductos relacionados
custom_01 a custom_03stringCampos personalizados

Ejemplo de Implementación (Node.js/Express)

app.get('/api/products', (req, res) => {
  const { offset = 0, next, sortorder = 'desc', jobid } = req.query;
  const apiKey = req.headers['t2skey'];

  // Validar clave de API
  if (apiKey !== process.env.TALK2SYNC_KEY) {
    return res.status(401).json({ error: 'No autorizado' });
  }

  try {
    // Obtener productos de tu base de datos
    const allProducts = fetchProductsFromDatabase(sortorder);
    
    // Implementar paginación (ejemplo con offset numérico)
    const pageSize = 20;
    const startIndex = parseInt(offset) || 0;
    const paginatedProducts = allProducts.slice(startIndex, startIndex + pageSize);

    // Construir respuesta
    const response = {
      paging: {
        pageSize: paginatedProducts.length,
        itemsTotal: allProducts.length,
        offset: startIndex
      },
      products: paginatedProducts.map(product => ({
        _id: product.id,
        sku: product.sku,
        last_updated: new Date(product.updatedAt).getTime(),
        title: product.name,
        url: product.url,
        brand: product.brand,
        mpn: product.mpn,
        model: product.model,
        description: product.description,
        variations: product.variations.map(v => ({
          variationid: v.id,
          size: v.size || "",
          color: v.color || "",
          barcode: v.barcode || "",
          availabilities: v.stocks.map(s => ({
            tag: s.location || "default",
            quantity: s.quantity
          })),
          prices: v.prices.map(p => ({
            tag: p.tier || "default",
            currency: p.currency || "USD",
            number: p.value
          })),
          images: v.images.map(img => ({ url: img })),
          videos: v.videos.map(vid => ({ url: vid }))
        })),
        properties: [{
          extraattributes: product.customFields || {}
        }]
      }))
    };

    res.json(response);
  } catch (error) {
    console.error('Error al obtener productos:', error);
    res.status(500).json({ error: 'Error Interno del Servidor' });
  }
});

Códigos de Estado de Respuesta

EstadoSignificadoAcción
200 OKProductos recuperados exitosamenteTalk2sync procesa los datos
400 Bad RequestParámetros inválidosVerifica tus parámetros de solicitud
401 UnauthorizedClave de API inválida o faltanteVerifica tu clave de seguridad
500 Internal Server ErrorError del servidorRevisa los registros de tu servidor

Guías de Paginación

Estrategia de Offset Numérico

Mejor para: Conjuntos de datos pequeños a medianos (< 100,000 elementos)

  • Devuelve elementos desde offset hasta offset + pageSize
  • Incrementa offset por pageSize para cada solicitud
  • Incluye offset en la respuesta de paginación

Estrategia de Cursor

Mejor para: Conjuntos de datos grandes o datos que cambian frecuentemente

  • Codifica el punto de inicio de la siguiente página como un cursor en base64
  • Devuelve el cursor en la respuesta como next
  • Usa el parámetro next para solicitudes posteriores
  • Más eficiente para conjuntos de datos grandes

Sincronización y Frecuencia

  • Talk2sync solicitará productos según el programa de sincronización configurado en los ajustes de tu conexión
  • El parámetro jobid te ayuda a rastrear qué trabajo de sincronización inició cada solicitud
  • Cada solicitud debe procesarse y devolver una respuesta dentro de 1 minuto

Buenas Prácticas

✓ Haz:

  • Devuelve datos ordenados consistentemente (usa el parámetro sortorder)
  • Incluye timestamps de last_updated precisos
  • Valida la clave de API en cada solicitud
  • Implementa paginación para manejar catálogos grandes
  • Prueba con varios tamaños de página
  • Monitorea los tiempos de respuesta de API

✗ No hagas:

  • Incluyas información sensible en respuestas
  • Devuelvas el mismo producto múltiples veces
  • Ignores el parámetro de ordenamiento
  • Devuelvas respuestas mayores a 10MB por página

Webhooks Relacionados

  • Listar Producto por ID
  • Agregar/Actualizar Producto

Documentación Relacionada

  • Quick Start: Generar Claves
  • Descripción General de Webhooks
Actualizado el: 21/08/26, 12:13 p.m.
Next
Webhooks: Listar Producto por ID