Correo · Nebo AI
Cada cliente conecta su Gmail desde su panel (OAuth, solo permiso de enviar) y sus flujos envían desde esa cuenta. Política de privacidad.
1. En el panel: botón "Conectar Gmail"
El servidor del panel guarda la clave del cliente y expone tres rutas propias (solo para admins); la tarjeta las llama:
<div id="correo"></div>
<script src="https://correo.neboaiconsulting.com/embed.js"></script>
<script>
NeboCorreo.montar(document.getElementById('correo'), {
estado: () => miApi.get('/api/correo'), // → { conectado, email, desde }
sesion: () => miApi.post('/api/correo/sesion'), // → { url }
desconectar: () => miApi.del('/api/correo'),
titulo: 'Correo para cobranzas',
});
</script>
Y en el servidor del panel, cada ruta reenvía al servicio con la clave:
const CORREO = { url: process.env.CORREO_URL, clave: process.env.CORREO_CLAVE };
const correo = (metodo, ruta, cuerpo) => fetch(CORREO.url + ruta, {
method: metodo, headers: { 'x-api-key': CORREO.clave, 'content-type': 'application/json' },
body: cuerpo && JSON.stringify(cuerpo) }).then(r => r.json());
app.get('/api/correo', soloAdmin, async (req, res) => res.json(await correo('GET', '/v1/conexion')));
app.post('/api/correo/sesion', soloAdmin, async (req, res) =>
res.json(await correo('POST', '/v1/conexion/sesion', { origen: req.get('origin') })));
app.delete('/api/correo', soloAdmin, async (req, res) => res.json(await correo('DELETE', '/v1/conexion')));
2. En n8n: enviar
Nodo HTTP Request: POST https://correo.neboaiconsulting.com/v1/enviar, autenticación
Header Auth (x-api-key = la clave del cliente), cuerpo JSON:
{
"para": "deudor@empresa.com", // o "Nombre <a@x.com>, b@y.com" o una lista
"cc": "", "bcc": "",
"asunto": "Recordatorio de pago — factura 123",
"html": "<p>Hola…</p>", // y/o "texto"
"nombreRemitente": "Cobros JH",
"responderA": "cobros@empresa.com",
"adjuntos": [
{ "url": "https://pdfjh.neboaiconsulting.com/archivos/…/factura.pdf" },
{ "nombre": "detalle.csv", "tipo": "text/csv", "base64": "…" }
]
}
Respuesta: { "ok": true, "id": "…", "de": "cobros@empresa.com" }.
| Código | Cuándo |
|---|---|
| 400 | Falta un campo, un correo no es válido, un encabezado trae saltos de línea, un adjunto no es público o pasan de 20 MB. |
| 401 | Sin clave o clave no válida. |
| 409 | El cliente no tiene Gmail conectado, o Google retiró el permiso (queda desconectado: hay que volver a conectar desde el panel). |
| 502 | Gmail no aceptó el envío (el mensaje lo explica). |