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.
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.
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.
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.
sudo systemctl start crm-lab-backup.service
sudo bash ~/crm-lab-setup/verify-app-backup.sh4Configurar las tres variables
En el servidor del CRM, abrí el archivo privado de la aplicación en tu propia terminal:
sudo nano /opt/crm-lab/secrets/app.envCompletá las líneas que ya existen vacías:
PORTAL_URL=https://portal-neuquen.tech
PORTAL_TOKEN=el-token-que-recibiste
PORTAL_INSTANCE_ID=el-uuid-que-recibistePORTAL_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:
sudo stat -c '%a %U' /opt/crm-lab/secrets/app.envDebe 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:
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 workerEn 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:
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
- En el CRM, creá una propiedad de prueba, subí una foto y aprobala. Sin una foto aprobada no se puede publicar.
- Agregá una oferta y tocá Publicar. El estado pasa de en cola a sincronizada, normalmente en menos de dos minutos.
- Buscá la ficha en el portal y enviá una consulta desde su formulario.
- 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.
- Retirá la ficha de prueba. El portal la oculta del listado y del sitemap de inmediato.
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ón | Comando |
|---|---|
| Suspender una agencia: revoca el acceso y oculta sus fichas | sudo docker compose exec app node dist/agency.js suspend tu-inmobiliaria |
| Rotar el token: entrega uno nuevo y el anterior deja de valer | sudo docker compose exec app node dist/agency.js rotate tu-inmobiliaria |
| Mantenimiento: purga consultas confirmadas de más de 7 días | sudo docker compose exec -T app node dist/maintenance.js |
Después de rotar, actualizá PORTAL_TOKEN en el CRM y repetí el paso 5.