watsiwatsi docs

Paginación, filtros y ordenamiento

Los endpoints de listado en la API de watsi usan paginación basada en cursor para entregar grandes conjuntos de resultados de forma eficiente. Esta guía explica cómo paginar, filtrar y ordenar las respuestas de la API.

Paginación basada en cursor

Cada endpoint de listado devuelve un objeto JSON con el arreglo del recurso y un booleano hasMore. Cuando hasMore es true, hay páginas adicionales disponibles.

GET /api/v1/conversations?limit=20

{
  "chats": [ ... ],
  "hasMore": true
}

Para obtener la siguiente página, pase el parámetro before con la marca de tiempo ISO 8601 del campo created_at o last_message_at del último elemento:

GET /api/v1/conversations?limit=20&before=2025-03-15T10:30:00.000Z

Parámetros de paginación

ParámetroTipoDescripción
limitintegerNúmero de elementos por página. Predeterminado: 20. Máximo: 100.
beforestringCursor de fecha y hora ISO 8601. Devuelve los elementos creados antes de esta marca de tiempo.

Paginar por todos los resultados

Ejemplo: obtener todas las conversaciones página por página.

async function fetchAllConversations(apiKey) {
  let before = undefined
  const all = []

  while (true) {
    const url = new URL('https://api.watsi.ai/api/v1/conversations')
    url.searchParams.set('limit', '100')
    if (before) url.searchParams.set('before', before)

    const res = await fetch(url, {
      headers: { Authorization: `Bearer ${apiKey}` },
    })
    const data = await res.json()

    all.push(...data.chats)

    if (!data.hasMore) break
    before = data.chats.at(-1).last_message_at
  }

  return all
}

Filtros

Algunos endpoints de listado aceptan parámetros de consulta para acotar los resultados. Los filtros disponibles dependen del tipo de recurso.

EndpointParámetros de filtro
GET /api/v1/conversationsstatus, assigned_user_id
GET /api/v1/customerssearch (nombre o teléfono), tag_id
GET /api/v1/templatesstatus (approved, pending, rejected)

Ejemplo: obtener solo las conversaciones abiertas:

GET /api/v1/conversations?status=open&limit=20

Ordenamiento

Los endpoints de listado devuelven los resultados ordenados por más reciente primero (descendente por marca de tiempo). Este orden predeterminado es consistente en todos los recursos y no puede cambiarse mediante parámetros de consulta.

El modelo de paginación basada en cursor depende de este orden — el parámetro before siempre retrocede en el tiempo.

Sobre de respuesta

Cada tipo de recurso usa una clave predecible en el objeto de respuesta:

EndpointClave de respuesta
/api/v1/conversationschats
/api/v1/customerscustomers
/api/v1/templatestemplates
/api/v1/tagstags
/api/v1/usersusers

Todas las respuestas de listado también incluyen hasMore: boolean en el nivel superior.