#Agente de IA para inmobiliarias

Un agente de IA para una inmobiliaria atiende a las personas que escriben por una propiedad en WhatsApp, por mensajes directos de Instagram y en tu sitio web. Averigua si quieren comprar o arrendar, su presupuesto, la comuna y cómo van a pagar, muestra las propiedades que calzan con un link a cada una y agenda una visita con un corredor. Nunca negocia ni da asesoría de financiamiento; eso va a una persona. Con Vatio describes ese agente en un archivo vatio.yml y responde desde tu propio número de WhatsApp y tu cuenta de Instagram.

Esta guía construye uno de punta a punta: las instrucciones, las tools que llegan a tus propiedades y a las agendas de tus corredores, el conocimiento que lee y las reglas que le impiden prometer lo que solo un corredor puede.

#Qué resuelve el agente

Casi todo lo que le llega a una inmobiliaria por WhatsApp e Instagram son las mismas conversaciones:

Una conversación típica por Instagram, con lo que el agente hizo por dentro:

Visitante: precio? (captura de un post)

Agente: Es la propiedad CN-2041, un departamento de dos dormitorios en Providencia: $650.000 al mes más gastos comunes, disponible desde el 1 de noviembre. Fotos y detalles: https://casa-norte.example/propiedades/CN-2041

Visitante: se puede ver esta semana? somos mi pareja y yo

Agente: Claro. El corredor tiene el jueves a las 18:00 o el sábado a las 11:00. Antes de agendar: ¿desde cuándo te quieres cambiar?

Detrás de esas respuestas, el agente leyó el código de la propiedad en la captura, llamó a buscar_propiedades con él y después a horarios_visita. El link vino de la tool, y eso es lo que le permite al agente enviarlo. Cada llamada a una tool queda visible en el inbox, junto a la respuesta que produjo.

#Antes de escribir nada: cinco preguntas para la inmobiliaria

  1. ¿Quién escribe, y desde dónde? Posts de Instagram, portales inmobiliarios, el sitio web; sobre todo arrendatarios o sobre todo compradores.
  2. ¿Qué hace que un lead merezca una visita? Lo mínimo que los corredores quieren saber antes: presupuesto, comuna, fecha de cambio, financiamiento.
  3. ¿Qué no debe decir nunca? Si el precio es negociable, si un banco va a prestar, cualquier cosa sobre un contrato.
  4. ¿Cuándo toma la conversación un corredor? Ofertas, contratos, propietarios que quieren publicar, reclamos, cualquiera que lo pida.
  5. ¿Dónde viven las propiedades y las agendas? La API de tu CRM o de tu base de propiedades, las agendas de los corredores, la dirección de la ficha de cada propiedad.

Las respuestas se convierten en las instrucciones, las condiciones de handoff, las tools y el conocimiento, en ese orden.

#El vatio.yml

workspace: casa-norte
agent:
  name: Casa Norte Propiedades
  personality: Cercano y eficiente. Una o dos preguntas a la vez, nunca insistente.
  instructions: |
    Ayudas a las personas que quieren comprar o arrendar una propiedad con
    Casa Norte Propiedades: averiguas qué necesitan, muestras propiedades
    que calzan y agendas visitas con un corredor.

    Responde primero lo que preguntaron, después califica. Averigua si
    quieren comprar o arrendar, su presupuesto máximo, las comunas que
    considerarían y los dormitorios que necesitan. A quien compra, pregunta
    si usará crédito hipotecario y si está preaprobado; a quien arrienda,
    desde cuándo se quiere cambiar. Pregunta una o dos cosas a la vez, y
    guarda lo que te digan con remember.

    Propiedades: llama a buscar_propiedades con lo que sabes y ofrece como
    máximo tres resultados, cada uno con su precio, comuna, dormitorios y
    el link que devolvió. Si el visitante manda una captura, busca en ella
    el código de la propiedad y busca por ese código.

    Visitas: llama a horarios_visita y ofrece los horarios que devuelva.
    Antes de llamar a agendar_visita, pide un nombre y, salvo en WhatsApp,
    un teléfono, y repítele la visita. Solo di que la visita quedó
    agendada cuando agendar_visita la haya devuelto.

    Reglas que nunca rompes:
    - Nunca negocies, aceptes una oferta ni sugieras que el precio puede
      bajar.
    - Nunca digas si un banco va a aprobar un crédito, ni des tasas de
      interés, ni asesoría legal o tributaria.
    - Nunca compartas los datos de contacto de un propietario, ni una
      dirección exacta que buscar_propiedades no haya devuelto.
    - Nunca describas un barrio por quién vive ahí. Describe la propiedad,
      el transporte y los servicios.
  tools: [buscar_propiedades, horarios_visita, agendar_visita, knowledge_lookup, identify_contact, remember]
  knowledge: [inmobiliaria]
  links:
    comuna:
      url: https://casa-norte.example/{operacion}/{comuna}
      when: El visitante quiere ver todo lo que hay en una comuna.
      values:
        operacion: [comprar, arrendar]
        comuna: [providencia, nunoa, las-condes, santiago-centro]
    publicar:
      url: https://casa-norte.example/publica-tu-propiedad
      when: Un propietario quiere vender o arrendar su propiedad.
  handoff:
    after_turns: 20
    when:
      - el visitante quiere hacer una oferta o negociar el precio
      - preguntas sobre un contrato, una garantía o un tema legal
      - el visitante pide asesoría sobre un crédito hipotecario u otro financiamiento
      - un propietario quiere vender o arrendar su propiedad
      - un reclamo sobre un corredor o una visita

Algunas decisiones que vale la pena explicar:

#Tools: propiedades y visitas

Una tool es un request HTTP a tu backend, descrito en YAML. Guarda la dirección y la llave como secrets:

vatio secrets set CRM_API https://api.casa-norte.example
vatio secrets set CRM_API_KEY sk_live_...

tools/buscar_propiedades.yml:

description: Busca propiedades publicadas en venta o en arriendo.
when_to_use: El visitante quiere ver propiedades, o pregunta por una con su código o una captura.
parameters:
  type: object
  properties:
    operacion: { type: string, enum: [comprar, arrendar] }
    comunas: { type: string, description: "separadas por coma, por ejemplo providencia,nunoa" }
    precio_max: { type: number, description: "en UF si es compra, en pesos al mes si es arriendo" }
    dormitorios: { type: integer, description: "mínimo de dormitorios" }
    codigo: { type: string, description: "código de la propiedad, por ejemplo CN-2041" }
access: public
request:
  method: GET
  base_url: "$env.CRM_API"
  path: /propiedades/buscar
  headers:
    Authorization: "Bearer $env.CRM_API_KEY"
  query:
    operacion: "$params.operacion"
    comunas: "$params.comunas"
    precio_max: "$params.precio_max"
    dormitorios: "$params.dormitorios"
    codigo: "$params.codigo"
respond:
  data:
    propiedades: "$.propiedades"
  message:
    when_empty: No hay propiedades publicadas que cumplan esas condiciones.
    default: "Encontré {{count}} propiedades."

Tu endpoint devuelve unas pocas propiedades, cada una con su código, precio, comuna, dormitorios y url, la ficha en tu sitio. Los parámetros que el agente no llenó quedan fuera del request.

tools/agendar_visita.yml:

description: Agenda una visita a una propiedad con el corredor a cargo.
when_to_use: El visitante eligió un horario de horarios_visita y dio un nombre.
parameters:
  type: object
  properties:
    horario_id: { type: string }
    nombre: { type: string }
    telefono: { type: string, description: "Solo Instagram y web. En WhatsApp la tool usa el número del contacto" }
    operacion: { type: string, enum: [comprar, arrendar] }
    presupuesto: { type: number }
    financiamiento: { type: string, description: "por ejemplo crédito preaprobado, crédito sin aprobar, subsidio, contado" }
  required: [horario_id, nombre]
access: public
request:
  method: POST
  base_url: "$env.CRM_API"
  path: /visitas
  requires: [params.horario_id, params.nombre]
  headers:
    Authorization: "Bearer $env.CRM_API_KEY"
  body:
    horario_id: "$params.horario_id"
    nombre: "$params.nombre"
    telefono: "$params.telefono || $contact.phone_number"
    operacion: "$params.operacion"
    presupuesto: "$params.presupuesto"
    financiamiento: "$params.financiamiento"
respond:
  data:
    visita: "$.visita"

La calificación viaja con la reserva, así que el corredor abre la visita en tu CRM sabiendo ya el presupuesto y cómo va a pagar el lead. En WhatsApp el número del lead llega con su mensaje, así que telefono toma $contact.phone_number y el agente lo pide solo en Instagram y en el sitio web. horarios_visita es un GET con el código de la propiedad que devuelve los próximos horarios libres del corredor a cargo; qué agenda lee es asunto de tu backend. Si alguien tomó el horario entretanto, responde 409: Vatio convierte cualquier respuesta que no sea 2xx en un error que el agente puede explicar, así que ofrece otro horario en vez de confirmar uno que ya no existe.

#Lo que puede devolver una tool pública

En WhatsApp e Instagram un contacto es anónimo mientras no inicie sesión, así que para él solo corren tools públicas, y estas tres lo son. Para las propiedades está bien, porque ya son públicas, pero eso fija la regla de lo que devuelven tus endpoints: lo que está en la ficha, y nada más. Ni datos del propietario, ni el número de departamento de una propiedad que solo publicas por comuna, ni el precio mínimo que aceptaría el dueño. Todo lo que devuelve una tool el modelo lo puede repetir. agendar_visita escribe en tu CRM para visitantes anónimos, así que trátala como un formulario de contacto: valida el teléfono y limita las reservas por número. Lo que le pertenece a un cliente, como el contrato o los pagos de un arrendatario, necesita un visitante autenticado y una tool marcada access: private, que en WhatsApp e Instagram primero lo lleva a iniciar sesión; mira Conectar tu backend.

#Conocimiento: el proceso, en tus palabras

vatio kb create inmobiliaria
vatio kb write inmobiliaria arrendar arrendar.md
vatio kb write inmobiliaria comprar comprar.md
vatio kb write inmobiliaria comunas comunas.md
vatio kb write inmobiliaria comisiones comisiones.md

Una buena entrada responde una pregunta por sección:

# Arrendar con Casa Norte

## Qué necesitas para postular
Tu cédula de identidad, tus tres últimas liquidaciones de sueldo con una
renta líquida de al menos tres veces el arriendo, y un aval o un seguro de
arriendo.

## Qué pagas antes de entrar
El primer mes de arriendo, un mes de garantía y la comisión de corretaje de
medio mes más IVA.

## Cuánto demora
Respondemos dentro de dos días hábiles desde que recibimos todos los documentos.

Vatio no lee tu sitio web. Si la respuesta está en una página, pon en una entrada lo que el agente necesita. Cuando cambian las comisiones, un supervisor edita la entrada desde el inbox, y cada edición queda guardada como versión.

#Instagram: «¿precio?» y una captura

El negocio inmobiliario vive en Instagram. Un reel de un departamento trae DMs que dicen «¿precio?», «info» o «¿sigue disponible?», muchas veces con una captura, porque el visitante escribió desde el feed y no desde el post. Dos cosas hacen que esas conversaciones funcionen:

El agente no puede enviar fotos; la ficha las tiene, y lo que envía es el link. Los audios se transcriben, y Vatio agrupa una ráfaga de mensajes en un solo turno antes de responder. En Instagram una empresa no puede escribir primero, así que si un lead deja de responder ahí, el seguimiento va por otro canal; en WhatsApp tu CRM puede enviarlo con la Messages API. Cuando vuelve a escribir, el agente sigue con las notas que guardó. La documentación de Instagram explica cómo conectar tu cuenta profesional.

#Pruébalo antes que cualquier lead

vatio push
vatio chat "Hola, busco arrendar un depto de 2 dormitorios en Providencia, hasta 700 mil"
vatio chat "¿Podemos ver el primero el sábado?"
vatio chat --new "Si firmo esta semana, ¿me bajan el precio un 10%?"
vatio chat --new "Gano 1.800.000 líquidos. ¿El banco me va a dar el crédito para la CN-3108?"
vatio chat --new "¿Me pasas el teléfono del dueño de la CN-2041?"
vatio chat show

Los tres chats con --new son los importantes: una negociación que debe pasarle a un corredor, una pregunta de financiamiento que no debe responder y los datos de un propietario que no debe entregar. chat show muestra cada llamada a tools. agendar_visita escribe de verdad, así que apunta el entorno donde pruebas a un CRM de sandbox con un secret que valga solo para él. Después agrega tu cuenta de Instagram como cuenta de prueba en la página Probar del inbox y envíale a la cuenta compartida de preview una captura de uno de tus posts.

#Que mejore cada semana

Cuando los corredores responden desde el inbox, marcan cualquier respuesta que estuvo mal y escriben lo que debió pasar: un lead mal calificado, una propiedad que debió ofrecer. vatio flags convierte esas notas en un documento desde el cual tu coding agent puede corregir, cada flag se vuelve un caso de eval, y el flag queda marcado como resuelto cuando live lo pasa. Mira Mejorar tu agente.

#Publicar

vatio publish

Después conecta el número de WhatsApp Business de la inmobiliaria y su cuenta profesional de Instagram en la página Canales del inbox, y activa el interruptor En vivo de WhatsApp. Instagram responde apenas la cuenta queda conectada. Los corredores pueden seguir usando la app de WhatsApp Business en el teléfono: si alguien responde desde ahí, toma la conversación, y el agente se hace a un lado hasta que la liberen en el inbox. Para tu sitio web, vatio tokens create --env live --origin https://casa-norte.example crea el token para el script del widget.

Los nombres, teléfonos y finanzas de los leads son datos personales. Vatio nunca pone el contenido de una conversación en el correo diario de reportes; tu CRM debería ser igual de cuidadoso. Lo que la normativa local exige a la publicidad de propiedades y al manejo de los datos de los leads sigue siendo tuyo de revisar.

Preguntas frecuentes

¿Un agente de IA puede calificar leads inmobiliarios por WhatsApp e Instagram?

Sí. El agente pregunta si la persona quiere comprar o arrendar, su presupuesto, la comuna y cómo va a pagar, y busca en tus propiedades con una tool que llama a tu API. Cuando agenda una visita, esas respuestas llegan a tu CRM junto con ella, así que el corredor parte con un lead calificado.

¿El agente puede enviar fotos de una propiedad?

No. Las respuestas son solo texto, así que el agente envía el link a la ficha de la propiedad, donde están las fotos. Sí lee las fotos y capturas que mandan los visitantes, y así encuentra la propiedad por la que alguien pregunta con una captura de un post.

¿El agente va a negociar el precio o dar asesoría de crédito hipotecario?

No si escribes la regla, y deberías. Pon la negociación, las ofertas, la asesoría de financiamiento y los contratos como cosas que nunca hace, y agrégalos en handoff.when para que un corredor tome la conversación.

¿El agente hace seguimiento a los leads que dejaron de responder?

En WhatsApp, cuando tu CRM se lo pide. Tu CRM o tu backend llama a la Messages API de Vatio para ese lead, con una plantilla aprobada si pasaron más de 24 horas, y el agente sigue con las notas que guardó sobre su presupuesto y sus comunas. El agente nunca decide por su cuenta hacer seguimiento, y en Instagram una empresa no puede escribir primero.

¿Cómo se entera un corredor de que un lead lo necesita?

Una derivación deja la conversación esperando en el inbox de Vatio. Vatio todavía no le avisa a nadie, así que alguien tiene que mirar el inbox en horario de oficina. Una visita agendada a través de tu API llega donde tu backend la ponga, por ejemplo tu CRM.

Actualizado: