Video tutorial 2

Conectar tu CRM a PORTAL-LAB

Con tres variables, tu CRM empieza a enviar las fichas que aprobás al portal común y a recoger las consultas de los visitantes. Necesitás un CRM-LAB funcionando, instalado como en el tutorial 1.

Narrado en español, con subtítulos. Los datos de ejemplo (IP, dominio, inmobiliaria) se reemplazan por los tuyos.

Comandos del video

Los mismos pasos del video, con cada comando listo para copiar.

1Cómo funciona la conexión

El worker de tu CRM es el único que abre conexiones. Usa el protocolo LAB (HTTPS y JSON, OpenAPI 1.1) para:

  • Subir las fotos aprobadas y publicar o retirar fichas con una revisión creciente.
  • Buscar consultas pendientes cada 60 segundos, guardarlas y confirmarlas con un ACK.
  • Reconciliar cada 15 minutos su lista de fichas activas, que el portal mantiene vigente por 72 horas.

El portal identifica a tu inmobiliaria por el token, nunca por un dato de la petición. El token de una agencia no puede leer ni modificar recursos de otra. El portal no recibe propietarios, notas ni la dirección privada.

Dos roles. El operador del portal tiene acceso al servidor de PORTAL-LAB y crea la credencial. El administrador del CRM la configura en su servidor. Pueden ser la misma persona.

2Crear la credencial de la inmobiliaria

Lo hace el operador, en el servidor de PORTAL-LAB, desde el directorio de Compose. El slug va en minúsculas y con guiones; el correo y el teléfono son el contacto comercial que verán los visitantes.

VPS portal · operador
cd /opt/portal-lab/source/infra/portal-lab
sudo docker compose exec \
  -e AGENCY_EMAIL=ventas@tuinmobiliaria.com.ar \
  -e AGENCY_PHONE="+54 299 000-0000" \
  app node dist/agency.js create tu-inmobiliaria "Tu Inmobiliaria"

La salida muestra dos líneas, PORTAL_TOKEN=… y PORTAL_INSTANCE_ID=…. El token aparece una sola vez: el portal guarda solo su hash.

Ejecutá este comando vos, no el agente. Si lo corre el agente, el token queda en su historial. Tampoco lo pongas en Git, en tickets, en capturas ni en un chat. Pasalo al administrador del CRM por un canal privado, como un gestor de contraseñas compartido.

3Respaldar el CRM antes de conectar

Al conectarse, el worker empieza a enviar todo lo que estaba en cola. Hacé una copia y verificala primero, y revisá en la pantalla Publicación qué ofertas y fotos están aprobadas.

VPS CRM · crmadmin
sudo systemctl start crm-lab-backup.service
sudo bash ~/crm-lab-setup/verify-app-backup.sh

4Configurar las tres variables

En el servidor del CRM, abrí el archivo privado de la aplicación en tu propia terminal:

tu terminal · VPS CRM
sudo nano /opt/crm-lab/secrets/app.env

Completá las líneas que ya existen vacías:

app.env
PORTAL_URL=https://portal-neuquen.tech
PORTAL_TOKEN=el-token-que-recibiste
PORTAL_INSTANCE_ID=el-uuid-que-recibiste

PORTAL_URL es la URL base del portal, sin /v1 ni barra final. El CRM rechaza cualquier URL que no sea HTTPS. Guardá y verificá los permisos:

VPS CRM · crmadmin
sudo stat -c '%a %U' /opt/crm-lab/secrets/app.env

Debe mostrar 600 root. Si el agente te ayuda con los pasos siguientes, podés pedirle que confirme que las variables están definidas sin leer sus valores: sudo grep -c '^PORTAL_[A-Z_]*=.' /opt/crm-lab/secrets/app.env debe devolver 3.

5Reiniciar app y worker juntos

Los dos contenedores leen el mismo archivo y tienen que cargar la misma configuración:

VPS CRM · crmadmin
cd /opt/crm-lab
sudo docker compose -f compose.yaml -f compose.app.yaml up -d --force-recreate --wait app worker
sudo docker compose -f compose.yaml -f compose.app.yaml logs --tail=50 worker

En el CRM, la pantalla Publicación pasa de «PORTAL-LAB todavía no está conectado» a «Conexión con PORTAL-LAB» y, al primer ciclo, muestra la hora de la última sincronización. Si aparece un error 401, el token no coincide; si es 403, la agencia está suspendida.

Si querés delegar la revisión en el agente, este prompt le da el contexto sin exponer secretos:

prompt
Conecté este CRM-LAB a PORTAL-LAB en https://portal-neuquen.tech. Las variables PORTAL_* ya están en /opt/crm-lab/secrets/app.env: no leas ni imprimas ese archivo.

Por SSH a crmadmin@203.0.113.10:
1. Confirmá que app y worker están healthy y usan la misma imagen.
2. Revisá los últimos logs del worker y explicame cualquier error HTTP según docs/03-contrato-y-sincronizacion.md.
3. No modifiques nada sin mostrarme antes el comando.

6Probar el recorrido completo

  1. En el CRM, creá una propiedad de prueba, subí una foto y aprobala. Sin una foto aprobada no se puede publicar.
  2. Agregá una oferta y tocá Publicar. El estado pasa de en cola a sincronizada, normalmente en menos de dos minutos.
  3. Buscá la ficha en el portal y enviá una consulta desde su formulario.
  4. En el CRM, la consulta aparece en Consultas recibidas: primero «Guardada localmente», luego «Confirmada». Se crea o reutiliza el contacto y una oportunidad vinculada a la oferta.
  5. Retirá la ficha de prueba. El portal la oculta del listado y del sitemap de inmediato.
Las consultas no se duplican. Si el portal reentrega un mensaje, el CRM lo reconoce por el par portal + ID de consulta y no abre un segundo seguimiento.

Referencia catastral (opcional, Neuquén)

En la ficha de la propiedad, ingresá la nomenclatura de parcela de 15 dígitos, tocá Consultar Catastro y verificá que corresponda. Queda privada salvo que marques «Autorizar publicación»; en ese caso el portal muestra el contorno oficial en el mapa. No acredita titularidad ni identifica unidades funcionales.

7Operación diaria

Comandos del operador del portal, desde el directorio de Compose:

AcciónComando
Suspender una agencia: revoca el acceso y oculta sus fichassudo docker compose exec app node dist/agency.js suspend tu-inmobiliaria
Rotar el token: entrega uno nuevo y el anterior deja de valersudo docker compose exec app node dist/agency.js rotate tu-inmobiliaria
Mantenimiento: purga consultas confirmadas de más de 7 díassudo docker compose exec -T app node dist/maintenance.js

Después de rotar, actualizá PORTAL_TOKEN en el CRM y repetí el paso 5.

Si restaurás el CRM desde una copia, el worker se pausa cuando detecta que el portal tiene revisiones más recientes. No lo fuerces: compará las fichas, recuperá las ediciones que falten y reanudá solo cuando no haya diferencias. El procedimiento está en docs/03-contrato-y-sincronizacion.md.