# Aviso de pago de alquiler por WhatsApp

> Cuando tu sistema de administración registra el pago de un alquiler, mándale al inquilino la confirmación por WhatsApp.

El inquilino paga el alquiler y a los pocos segundos recibe por WhatsApp: _“¡Hola Sofía! Registramos tu pago del alquiler de octubre de San Luis 2140, 3° B, por $450.000. ¡Gracias!”_

Sirve con cualquier sistema de administración de alquileres que avise de los pagos con un webhook, o con tu propio sistema. El ejemplo usa un servidor Node, pero la idea es la misma en cualquier lenguaje.

```mermaid
flowchart LR
    A[Tu sistema de administración] -- pago registrado --> B[Tu servidor]
    B -- POST /contacts --> C[eltick]
    B -- POST /messages --> C
    C -- plantilla --> D[WhatsApp del inquilino]
```

## 1. Crea la plantilla

En eltick, ve a **Plantillas › Nueva plantilla** y crea una de categoría **Utilidad** con variables para el nombre, el período, la propiedad y el monto. Por ejemplo:

> ¡Hola [nombre]! Registramos tu pago del alquiler de [periodo] de [propiedad] por [monto]. ¡Gracias! Altura Propiedades 🏡

<Tip>
  Los avisos de pago son mensajes de **utilidad**: Meta los cobra más barato que los de marketing y se aprueban más rápido. No agregues propiedades en venta ni promociones en el mismo mensaje, porque Meta puede recategorizarlo como marketing. Más en [Categorías y costos](/conceptos/categorias-y-costos).
</Tip>

Cuando Meta la apruebe, busca su `id` y el nombre de sus variables:

```bash
curl https://app.eltick.com/api/v1/templates -H "Authorization: Bearer $ELTICK_API_KEY"
```

```json
{
  "data": [
    {
      "id": "01a0d470-1b2c-7d3e-9f40-5a6b7c8d9e0f",
      "name": "Pago de alquiler registrado",
      "category": "UTILITY",
      "variables": [
        { "name": "nombre", "label": "nombre" },
        { "name": "periodo", "label": "periodo" },
        { "name": "propiedad", "label": "propiedad" },
        { "name": "monto", "label": "monto" }
      ]
    }
  ]
}
```

## 2. Recibe el pago y manda el mensaje

```javascript server.js
import express from "express"

const ELTICK = "https://app.eltick.com/api/v1"
const headers = {
  Authorization: `Bearer ${process.env.ELTICK_API_KEY}`,
  "Content-Type": "application/json",
}
const PLANTILLA = "01a0d470-1b2c-7d3e-9f40-5a6b7c8d9e0f"

const app = express()
app.use(express.json())

// Tu sistema llama a esta URL cuando registra un pago
app.post("/pagos/nuevo", async (req, res) => {
  res.sendStatus(200) // respóndele rápido a tu sistema

  const pago = req.body // adapta los nombres de campo a tu sistema
  if (!pago.inquilino?.telefono) return

  // 1) Guarda o actualiza el contacto con datos útiles para avisos futuros
  await fetch(`${ELTICK}/contacts`, {
    method: "POST",
    headers,
    body: JSON.stringify({
      phone: pago.inquilino.telefono,
      name: pago.inquilino.nombre,
      attributes: {
        ultimo_pago: pago.fecha.slice(0, 10),
        contrato: String(pago.contrato),
      },
    }),
  })

  // 2) Manda la confirmación
  const envio = await fetch(`${ELTICK}/messages`, {
    method: "POST",
    headers,
    body: JSON.stringify({
      to: pago.inquilino.telefono,
      template: {
        id: PLANTILLA,
        variables: {
          nombre: pago.inquilino.nombre.split(" ")[0],
          periodo: pago.periodo, // "octubre"
          propiedad: pago.direccion,
          monto: new Intl.NumberFormat("es-AR", { style: "currency", currency: "ARS" }).format(pago.monto),
        },
      },
    }),
  })
  const mensaje = await envio.json()
  if (!envio.ok) {
    console.error(`No se pudo avisar el pago ${pago.id}: ${mensaje.error}`)
    return
  }
  // Guarda mensaje.id junto al pago para seguir su estado
  console.log(`Pago ${pago.id}: mensaje ${mensaje.id}`)
})

app.listen(3000)
```

<Note>
  Formatea el monto con la moneda de tu país: `es-MX` y `MXN` para México, `es-CO` y `COP` para Colombia, `es-CL` y `CLP` para Chile, `es-PE` y `PEN` para Perú.
</Note>

## 3. Cuida los detalles

<AccordionGroup>
  <Accordion title="El teléfono tiene que tener código de país" icon="phone">
    Muchos sistemas guardan el teléfono como lo escribió el inquilino: `011 15 2345-6789`, `55 1234 5678`, `300 123 4567`. La API necesita el código de país. Si todos tus inquilinos son de un mismo país, agrégalo tú antes de mandar. Mira [Formato de teléfonos](/conceptos/formato-de-telefonos).

    Si el teléfono no es válido, la API responde `400` y no se manda nada.
  </Accordion>
  <Accordion title="Manda siempre todas las variables" icon="braces">
    Si falta una variable y el contacto no tiene ese dato, sale el ejemplo que cargaste en la plantilla. En un aviso de pago, eso sería un monto o un período equivocado.
  </Accordion>
  <Accordion title="No mandes dos veces el mismo aviso" icon="copy-x">
    Los sistemas a veces reenvían el mismo aviso de pago. Guarda qué pagos ya avisaste (por ejemplo, el `id` del mensaje junto al pago) y no vuelvas a mandar.
  </Accordion>
  <Accordion title="Si el inquilino responde" icon="message-circle">
    La respuesta llega al **Chat** de eltick, donde tu equipo la ve y contesta. Durante 24 horas después de su respuesta puedes escribirle con texto libre. Si quieres enterarte desde tu sistema, usa el webhook [`message.received`](/api/webhooks/eventos#message-received).
  </Accordion>
</AccordionGroup>

## 4. Avísale el próximo vencimiento

Crea una segunda plantilla de utilidad, por ejemplo _“¡Hola [nombre]! El [fecha] vence el alquiler de [propiedad]: son [monto] con el ajuste de este mes.”_, y mándala con el mismo código unos días antes de cada vencimiento.

## Siguiente paso

<Card title="Seguir la entrega de cada mensaje" icon="check-check" href="/api/recetas/seguimiento-de-entregas">
  Guarda en tu sistema si el aviso se entregó, se leyó o falló.
</Card>
