Files

90 lines
4.2 KiB
Markdown

# Caso: integración Evolution API ↔ Chatwoot — "Something went wrong in importing messages"
> Resuelto el **2026-09-02** contra el host real.
> Servicios: `evolution-api` v2.3.7 (`q6tnsvkvrjw4g0ab532l3r1s`,
> https://evoapi.urieljareth.org) y Chatwoot v4.16.2
> (`c11xzy2tx2cdapm32f5b89vy`, https://chat.urieljareth.org).
> Resultado: flujo en vivo bidireccional OK en inbox 6 (Asesoría Personal) e
> inbox 10 (Personal), inbox 12 (JM) creado, errores de importación
> desactivados (limitación de upstream, ver §2).
---
## 0. Síntomas reportados
1. En la conversación de estado aparecía
`💬 Something went wrong in importing messages.` (inbox 6, conv 29).
2. "La instancia no funciona": el mensaje de prueba del usuario (desde su
número personal al de Asesoría) no aparecía.
## 1. Diagnóstico (verificado con logs + código fuente 2.3.7)
### 1.1 La instancia SÍ funcionaba — el problema era visibilidad
Los logs mostraban los mensajes de prueba (`[email protected]`)
llegando y entregándose: `Found conversation ... ID: 22 - Name: Uriel Jareth`.
La conversación 22 existía pero estaba **`pending`**: Chatwoot no muestra las
pendientes en la bandeja "Abiertas" → parecía que no llegaba nada.
### 1.2 La importación de historial es imposible en esta topología (upstream)
Cadena del error:
- El importador (`chatwoot-import-helper.ts`) escribe **directo a la DB de
Chatwoot** vía `CHATWOOT_IMPORT_DATABASE_CONNECTION_URI` — no hay fallback
por API en 2.3.7.
- El stack de Evolution trae esa URI apuntando a **su propio postgres**
(`postgres:5432/chatwoot`) — una base que ahí no existe (Chatwoot usa su
postgres en otro stack, DB `chatwoot`, `ssl=off`).
- El cliente (`libs/postgres.client.ts`) **fuerza `ssl: {rejectUnauthorized:
false}` siempre** → contra cualquier postgres de este host (todos
`ssl=off`) el resultado es
`Error on getExistingSourceIds: The server does not support SSL connections`
→ `Something went wrong in importing messages`.
Habilitar SSL en el postgres de Chatwoot habría arriesgado el stack
parcheado a mano; se descartó. La decisión: **desactivar la importación**
(`importMessages=false`, `importContacts=false`) y operar solo con el flujo
en vivo. Conclusión práctica: **el historial previo del teléfono no se
importa** — exactamente el techo que impone WhatsApp de todas formas (ver
discusión en [evolution-go-stack.md](evolution-go-stack.md) §3).
### 1.3 JM estaba roto de fábrica
- Su `chatwoot.url` tenía **slash final** (`https://chat.urieljareth.org/`) —
la doc exige sin slash.
- No existía su inbox en Chatwoot → warnings `inbox not found` en bucle.
### 1.4 INSTA queda pendiente (decisión del usuario)
Desconectada (`close`), `accountId=2` (solo existe la cuenta 1), token
distinto y sin inbox. Mientras esté `enabled=true` seguirá dando avisos
`inbox not found`. Reactivarla exige re-escanear QR + corregir accountId.
## 2. Fixes aplicados (2026-09-02)
| Fix | Cómo | Resultado |
|---|---|---|
| Import fuera | `POST /chatwoot/set/{Asesoria Personal,Personal,JM}` con `importMessages=false`, `importContacts=false` | 201; 0 ERROR en logs después |
| Conversaciones visibles | `conversationPending=false` en las tres + `toggle_status` de la conv 22 → open | conv 22 abierta en inbox 6 |
| JM reparado | misma llamada con URL sin slash + `autoCreate=true` | **inbox 12 "JM" creado** |
| Webhooks | verificados intactos en inbox 6 y 10 (`…/chatwoot/webhook/{instancia}`) | sin cambios |
## 3. Mapa actual de la integración
| Instancia | Inbox | Estado |
|---|---|---|
| Asesoría Personal (5214438634306) | 6 | open, flujo bidireccional verificado en logs |
| Personal (5214451052792) | 10 | open, verificado por el usuario |
| JM (5214451672052) | 12 | open, inbox recién creado |
| INSTA | — | close + accountId=2: reactivar a decisión del usuario |
Notas operativas:
- El parámetro `daysLimitImportMessages` queda inertre (importMessages=false).
- Re-conectar una instancia o re-guardar la config de Chatwoot ya no dispara
importaciones fallidas.
- Si algún día se quiere importación de historial de verdad: habilitar SSL en
un postgres y cruzar redes de stacks, o esperar que upstream añada fallback
por API (el importador 100% SQL-Direct está en 2.3.7).