Revisar y desconectar canales
Leer los canales de mensajería del workspace, revisar su salud y desconectarlos.
GET /messaging-accounts lista las cuentas de mensajería conectadas al workspace, entre ellas un número de WhatsApp, una casilla de correo o una cuenta de Instagram. Este capítulo cubre esa lectura más la desconexión. Conectar un canal nuevo no está aquí. Cada proveedor pide OAuth, un código QR o un formulario de credenciales que ningún script completa solo, así que esa mitad sigue siendo un flujo de la app.
Leer pide messaging_accounts:read; desconectar, messaging_accounts:write. secrets viene siempre tachado: la clave real sobrevive en la respuesta, con <redacted> en lugar de su valor.
Ver los canales conectados
curl https://api.vitrinadev.com/api/v1/messaging-accounts \
-H "Authorization: Bearer $VITRINA_KEY"{
"data": [
{
"id": "e4e4e4e4-0000-4000-8000-000000000001",
"tenant_id": "a1a1a1a1-0000-4000-8000-000000000001",
"name": "Correo de ventas",
"kind": "email_atribu",
"channels": ["email"],
"config": { "connected_via": "atribu_partner" },
"secrets": { "atribu_access_token": "<redacted>" },
"enabled": true,
"default_team_id": "cccccccc-0000-4000-8000-000000000001",
"assignment_mode": "auto_round_robin",
"assignee_user_ids": [],
"created_at": "2026-01-10T13:00:00.000Z",
"updated_at": "2026-09-10T13:00:00.000Z"
}
],
"meta": { "total": 1 }
}Salud en vivo
curl https://api.vitrinadev.com/api/v1/messaging-accounts/e4e4e4e4-0000-4000-8000-000000000001/health \
-H "Authorization: Bearer $VITRINA_KEY"Esto marca ahora mismo y no lee lo último guardado. stored viaja aparte, con la foto que dejó el chequeo periódico, para que compares contra lo que ya se sabía:
{
"data": {
"channel": "email",
"kind": "email_atribu",
"connected_via": "atribu_partner",
"identity": { "display_name": "[email protected]" },
"webhook": { "status": "delivering", "last_event_at": "2026-09-15T18:20:00.000Z" },
"whatsapp": null,
"stored": { "status": "ok", "checked_at": "2026-09-15T18:00:00.000Z" }
}
}whatsapp solo trae algo (quality_rating, messaging_limit) cuando kind es whatsapp_cloud; en cualquier otro canal viene null. Si el chequeo mismo falla, con el proveedor caído o el token vencido, la respuesta igual es 200, y la falla queda reportada en identity o en webhook. ?refresh=true fuerza una consulta fresca en vez de la caché del proveedor.
Trampa
La respuesta cambia según cómo esté conectado el canal
La forma de la respuesta no es igual entre proveedores. Tenlo en cuenta si
construyes algo sobre /health.
connected_via | identity | webhook |
|---|---|---|
atribu_partner, la conexión gestionada | Resuelto en vivo contra el proveedor | Real |
direct, una casilla IMAP/SMTP manual | Armado con lo que guardó el flujo de conexión | Siempre null |
Por la conexión gestionada pasan WhatsApp, Instagram, el correo de Gmail y de Outlook, y el calendario de Google. Una casilla manual no tiene un webhook de proveedor que monitorear, y por eso ese campo viene vacío. Instagram, Messenger y TikTok solo funcionan hoy por la conexión gestionada: para ellos no hay formulario de credenciales manual, como sí lo hay para el correo IMAP.
Desconectar
curl -X DELETE https://api.vitrinadev.com/api/v1/messaging-accounts/e4e4e4e4-0000-4000-8000-000000000001 \
-H "Authorization: Bearer $VITRINA_KEY"204, sin cuerpo. Primero se da de baja la suscripción del lado del proveedor, en modo best-effort, que no hace nada en un canal que no la tiene. Después se borra la fila local. Toda conversación, mensaje y lead que el canal ya produjo queda intacto.
Tráfico por canal
curl https://api.vitrinadev.com/api/v1/messaging-accounts/stats \
-H "Authorization: Bearer $VITRINA_KEY"Viene una fila por canal con tráfico en los últimos 30 días. Un canal sin mensajes está ausente en vez de aparecer con ceros:
{
"data": [
{
"messaging_account_id": "e4e4e4e4-0000-4000-8000-000000000001",
"conversations_total": 128,
"messages_30d": 640,
"inbound_30d": 410,
"outbound_30d": 230,
"last_message_at": "2026-09-15T18:20:00.000Z"
}
]
}La referencia de Canales trae el contrato campo por campo de esta lectura y de la desconexión.