Ir al contenido

Consultas a Google Sheets

Cada consulta que entra a la cuenta aparece como una fila nueva en una planilla de Google. Sirve para que el equipo las vea juntas, las filtre, las comparta o las lleve a un informe, sin tocar el panel.

Para qué sirve

Una planilla con una fila por consulta: cuándo entró, quién escribió, por qué propiedad, por qué canal, en qué estado está y quién la atiende. Es útil para un dueño que quiere mirar todo de un vistazo y para un contador o un administrativo que arma informes en Sheets.

Hay dos caminos. Elegí uno:

Los dos caminos para llevar consultas a una planilla
Qué cambiaMake o n8n con avisoApps Script con la API
Cuándo aparece la filaEn el momento en que entra la consulta.Hasta una hora después.
Qué trae la filaSolo lo que viaja en el aviso: consulta_id, sobre, canal y la fecha. Los datos de la persona no viajan en un aviso.Todo lo de la consulta: número, persona, propiedad, canal, estado, asesor y mensaje.
Qué necesitásUna cuenta de Make o de n8n, y una planilla.Solo la planilla. Todo corre dentro de Google.
DificultadMedia: armar un escenario.Baja: copiar un código y pegarlo.
Si necesitás el nombre de quien escribió, usá el camino de Apps Script

Por diseño un aviso de Kaptativa no trae nombres, emails ni teléfonos: trae identificadores. Con Make o n8n tendrías que pedir el detalle a la API en un paso aparte, y la API no deja buscar una consulta por el identificador del aviso. Por eso, para una planilla completa, el camino recomendado es el de Apps Script.

Qué necesitás

  • Una cuenta de Kaptativa con Consultas activo y API y MCP, dentro de Administración.
  • Un token que solo vea. Se crea en Administración > API y MCP, en Crear un token: nombre «Planilla de consultas», Qué puede hacer en Solo ver (o Elegir por módulo con Ver en Inmobiliaria, que da el alcance inmobiliaria:lectura) y, al final, Crear el token. Copialo en ese momento: no se vuelve a mostrar. Empieza con kpt_.
  • Una planilla de Google Sheets con una hoja que se llame Consultas.

Camino 1: Apps Script lee la API cada hora

Pasos

  1. Abrí la planilla. En la hoja Consultas, escribí en la fila 1 estos títulos, uno por columna, de la A a la H: Número, Cargada, Persona, Propiedad, Canal, Estado, Asesor, Mensaje.
  2. En el menú, tocá Extensiones > Apps Script. Se abre el editor en otra pestaña.
  3. Borrá lo que haya en el archivo Código.gs y pegá el código de más abajo. Tocá el ícono de guardar.
  4. A la izquierda, tocá Configuración del proyecto (la rueda dentada). Abajo, en Propiedades de la secuencia de comandos, tocá Agregar propiedad. En Propiedad escribí KAPTATIVA_TOKEN y en Valor pegá tu token (kpt_...). Tocá Guardar propiedades de la secuencia de comandos.
  5. Volvé a Editor. Arriba, elegí la función traerConsultas y tocá Ejecutar. La primera vez Google pide permiso para conectarse a un servicio externo y para editar tus planillas: revisá y aceptá. Si dice que la app no está verificada, es tu propio script: Configuración avanzada y seguir.
  6. A la izquierda, tocá Activadores (el reloj). Tocá Agregar activador, elegí la función traerConsultas, el tipo Activado por tiempo, Temporizador por horas y Cada hora. Guardá.
Código.gs
// Kaptativa: trae las consultas abiertas y suma como fila las que todavía no están en la hoja.
const URL_CONSULTAS = "https://panel.kaptativa.app/api/v1/inmobiliaria/consultas";
const HOJA = "Consultas";

function traerConsultas() {
  // El token no va en el código: se guarda en Configuración del proyecto > Propiedades de la secuencia de comandos
  const token = PropertiesService.getScriptProperties().getProperty("KAPTATIVA_TOKEN");
  const hoja = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(HOJA);
  const ultima = hoja.getLastRow();
  // La columna A es el número de la consulta: sirve para no repetir filas
  const vistas = new Set(ultima > 1 ? hoja.getRange(2, 1, ultima - 1, 1).getValues().flat().map(String) : []);
  const nuevas = [];
  let cursor = null;
  do {
    const consulta = "?estado=abiertas&limite=100" + (cursor ? "&cursor=" + encodeURIComponent(cursor) : "");
    const respuesta = UrlFetchApp.fetch(URL_CONSULTAS + consulta, { headers: { Authorization: "Bearer " + token }, muteHttpExceptions: true });
    if (respuesta.getResponseCode() !== 200) throw new Error("Kaptativa respondió " + respuesta.getResponseCode() + ": " + respuesta.getContentText());
    const cuerpo = JSON.parse(respuesta.getContentText());
    cuerpo.datos.forEach(function (c) {
      if (vistas.has(String(c.numero))) return;
      nuevas.push([c.numero, new Date(), seguro(c.persona), seguro(c.propiedad), c.canal, c.estado, seguro(c.asesor), seguro(c.mensaje)]);
    });
    cursor = cuerpo.paginacion.siguiente;
  } while (cursor);
  if (nuevas.length) hoja.getRange(hoja.getLastRow() + 1, 1, nuevas.length, nuevas[0].length).setValues(nuevas.reverse());
}

// Un texto que empieza con = + - o @ se leería como fórmula: se le antepone una comilla para que quede como texto
function seguro(valor) {
  return typeof valor === "string" && /^[=+\-@]/.test(valor) ? "'" + valor : valor;
}

El código pide las consultas abiertas, de a 100 por pedido (limite), sigue con el cursor mientras haya más páginas (paginación) y suma una fila por cada número que todavía no esté en la columna A. Una consulta que se cierra queda en la planilla con el estado con el que se cargó.

Los nombres salen de la API

La ruta, el filtro estado=abiertas y los campos numero, persona, propiedad, canal, estado, asesor y mensaje son los de GET /inmobiliaria/consultas, que figura en la referencia. Los valores de canal y estado llegan en castellano, como se ven en el panel.

Camino 2: Make o n8n con el aviso de consulta recibida

El evento se llama inmobiliaria.consulta.recibida («Consulta recibida»). Sus datos son consulta_id, sobre y canal. En cada guía está el armado completo:

  • Make: el escenario con un módulo de webhook personalizado, otro de Google Sheets y, si querés, uno de HTTP.
  • n8n: un nodo Webhook, uno de código que verifica la firma y uno de Google Sheets.

En los dos casos, el último módulo es el de Google Sheets: Add a Row en Make, Append Row en n8n, con las columnas que elijas (por ejemplo, consulta_id, sobre y canal, más la fecha en que llegó). sobre es el código de la propiedad por la que consultaron.

Cómo comprobar que anda

  • Apps Script: ejecutá traerConsultas a mano. Si hay consultas abiertas en la cuenta, aparecen filas nuevas al instante. Ejecutala otra vez: no tiene que sumar filas repetidas.
  • Con aviso: en el panel, en Administración > API y MCP > Webhooks, tocá Probar en el destino. Llega un evento webhook.prueba con un mensaje de prueba, que sirve para ver que el escenario se dispara. Después cargá una consulta real, por ejemplo con el formulario del sitio, y mirá que llegue inmobiliaria.consulta.recibida.
  • En el Registro de entregas del destino se ve cada intento con el código que respondió tu escenario.

Problemas comunes

Problemas comunes al llevar consultas a Sheets
Qué pasaPor qué y qué hacer
El script dice 401El token está mal pegado, venció o se revocó. Creá otro y actualizá la propiedad KAPTATIVA_TOKEN.
El script dice 403 o alcanceEl token no tiene lectura del módulo Inmobiliaria, o la cuenta no tiene activa la API. Revisá el token en Administración > API y MCP.
El script dice 429Se pasó el límite de pedidos por minuto. Con un pedido por hora no debería pasar: revisá que no haya otros sistemas usando el mismo token.
No aparecen consultasEl script trae solo las abiertas y las que el usuario dueño del token puede ver. Si esa persona ve solo las que tiene asignadas, la planilla muestra solo esas.
Con Make o n8n no llega nadaEl destino tiene que ser https y público, y tiene que tener marcado el evento inmobiliaria.consulta.recibida. Si falló varias veces seguidas, quedó Suspendido: tocá Reanudar en el panel.
Una celda muestra un error de fórmulaUn texto escrito por quien consultó empezaba con un signo igual. El script del camino 1 ya lo evita; si armás el escenario a mano, cargá los valores como texto (en Make, «Value input option» en Raw).

Para usarlo con cuidado

  • La planilla tiene datos personales (nombre y mensaje de quien consultó). Compartila solo con quien tiene que verla, igual que el panel.
  • Usá un token de Solo ver, solo para esta planilla. Si cambia quien la mantiene, revocá el token y creá uno nuevo.
  • El token vive en las propiedades del script, no en una celda ni en el código.