📚 Documentación de la API
🎯 Resumen
Este sistema permite enviar y recibir mensajes en tiempo real usando:
API REST para enviar mensajes (POST)
WebSockets para recibir mensajes en tiempo real
Canales para organizar mensajes
Tokens para autenticación y autorización
Control de IPs para mayor seguridad
📤 Enviar Mensajes
📡 Recibir Mensajes
📋 Gestión de Canales
📤 Envío de Mensajes (API REST)
Endpoint:
POST /api/send
Headers requeridos:
Content-Type: application/json
Parámetros del Body:
Parámetro
Tipo
Requerido
Descripción
canal
string
✅ Sí
Nombre del canal donde enviar el mensaje
evento
string
✅ Sí
Tipo de evento (ej: chat, notification)
mensaje
any
✅ Sí
Contenido del mensaje (string, object, array)
token_write
string
✅ Sí
Token de escritura del canal (16 caracteres)
Ejemplo de petición:
curl -X POST http://localhost:3000/api/send \
-H "Content-Type: application/json" \
-d '{
"canal": "mi-canal",
"evento": "chat",
"mensaje": "¡Hola mundo!",
"token_write": "abcd1234efgh5678"
}'
Respuesta exitosa (200):
{
"success": true,
"message": "Mensaje enviado correctamente",
"messageId": "1lx2y3z4a5b6c7d8",
"timestamp": "2025-01-23T15:30:00.123Z",
"canal": "mi-canal",
"evento": "chat"
}
Posibles errores:
// Error 400 - Validación
{
"success": false,
"error": "Token de escritura debe tener exactamente 16 caracteres"
}
// Error 403 - Autorización
{
"success": false,
"error": "Canal no encontrado o token de escritura inválido"
}
📡 Recepción de Mensajes (WebSockets)
1. Conectar al servidor WebSocket:
// JavaScript (navegador)
const socket = io('http://localhost:3000');
// Node.js
const io = require('socket.io-client');
const socket = io('http://localhost:3000');
2. Suscribirse a un canal:
socket.emit('subscribe', {
canal: 'mi-canal',
token_read: '*' // o token específico de 16 caracteres
});
3. Escuchar mensajes:
// Confirmación de suscripción
socket.on('subscribed', (data) => {
console.log('Suscrito al canal:', data.canal);
});
// Recibir mensajes
socket.on('message', (data) => {
console.log('Mensaje recibido:', data);
/*
Estructura del mensaje:
{
canal: "mi-canal",
evento: "chat",
mensaje: "¡Hola mundo!",
timestamp: "2025-01-23T15:30:00.123Z",
id: "1lx2y3z4a5b6c7d8",
source_ip: "192.168.1.100"
}
*/
});
// Errores de suscripción
socket.on('subscription_error', (data) => {
console.error('Error:', data.error);
});
4. Desuscribirse (opcional):
socket.emit('unsubscribe', {
canal: 'mi-canal'
});
Ejemplo completo HTML:
<!DOCTYPE html>
<html>
<head>
<script src="/socket.io/socket.io.js"></script>
</head>
<body>
<div id="messages"></div>
<script>
const socket = io();
// Suscribirse al canal
socket.emit('subscribe', {
canal: 'test-canal',
token_read: '*'
});
// Mostrar mensajes
socket.on('message', (data) => {
const div = document.createElement('div');
div.innerHTML = `<strong>${data.evento}:</strong> ${data.mensaje}`;
document.getElementById('messages').appendChild(div);
});
</script>
</body>
</html>
📋 Gestión de Canales
1
Crear cuenta: Visita
/login e ingresa con Email autorizado. Se creará automáticamente.
2
Crear canal: Ve a "Mis Canales" desde el dashboard y crea un nuevo canal.
3
Obtener tokens: Cada canal tiene:
token_write: Para enviar mensajes (16 caracteres)
token_read: Para recibir mensajes (* = público)
4
Configurar IPs: Controla qué IPs pueden leer/escribir en tu canal.
Configuración de acceso:
Configuración
token_read
IPs permitidas
Descripción
Canal público
*
*
Cualquiera puede leer desde cualquier IP
Lectura privada
token16chars
*
Requiere token pero desde cualquier IP
IP restringida
*
192.168.1.100
Solo desde IPs específicas
Máxima seguridad
token16chars
192.168.1.100
Requiere token E IP específica
💡 Ejemplos Prácticos
🐍 Python
import requests
import json
# Enviar mensaje
url = "http://localhost:3000/api/send"
data = {
"canal": "python-canal",
"evento": "automation",
"mensaje": {"status": "running", "progress": 75},
"token_write": "tu_token_aqui___"
}
response = requests.post(url, json=data)
print(response.json())
📱 React/JavaScript
import io from 'socket.io-client';
function ChatComponent() {
const [socket, setSocket] = useState(null);
const [messages, setMessages] = useState([]);
useEffect(() => {
const newSocket = io('http://localhost:3000');
setSocket(newSocket);
// Suscribirse al canal
newSocket.emit('subscribe', {
canal: 'react-chat',
token_read: '*'
});
// Escuchar mensajes
newSocket.on('message', (data) => {
setMessages(prev => [...prev, data]);
});
return () => newSocket.close();
}, []);
const sendMessage = async (mensaje) => {
await fetch('/api/send', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
canal: 'react-chat',
evento: 'chat',
mensaje,
token_write: 'tu_token_aqui___'
})
});
};
return (
<div>
{messages.map(msg => (
<div key={msg.id}>{msg.mensaje}</div>
))}
</div>
);
}
🟢 Node.js
const io = require('socket.io-client');
const axios = require('axios');
// Cliente receptor
const socket = io('http://localhost:3000');
socket.emit('subscribe', {
canal: 'node-canal',
token_read: '*'
});
socket.on('message', (data) => {
console.log('📨 Mensaje recibido:', data.mensaje);
});
// Enviar mensaje cada 5 segundos
setInterval(async () => {
try {
await axios.post('http://localhost:3000/api/send', {
canal: 'node-canal',
evento: 'heartbeat',
mensaje: `Servidor activo: ${new Date().toISOString()}`,
token_write: 'tu_token_aqui___'
});
} catch (error) {
console.error('Error enviando mensaje:', error.message);
}
}, 5000);
📱 PHP
<?php
$url = "http://localhost:3000/api/send";
$data = array(
"canal" => "php-canal",
"evento" => "notification",
"mensaje" => "Usuario registrado: " . $username,
"token_write" => "tu_token_aqui___"
);
$options = array(
'http' => array(
'header' => "Content-type: application/json\r\n",
'method' => 'POST',
'content' => json_encode($data)
)
);
$context = stream_context_create($options);
$result = file_get_contents($url, false, $context);
$response = json_decode($result, true);
if ($response['success']) {
echo "Mensaje enviado: " . $response['messageId'];
} else {
echo "Error: " . $response['error'];
}
?>
⚠️ Notas Importantes
🔑 Seguridad de Tokens: Los tokens de escritura son como contraseñas. No los compartas públicamente y regéneralos periódicamente desde el panel de control.
🌐 Control de IPs: Por defecto, los canales aceptan conexiones desde cualquier IP (*). Puedes restringir el acceso a IPs específicas desde "Gestión de IPs".
📊 Monitoreo: Todas las operaciones se registran en logs. Los administradores pueden ver la actividad completa del sistema.
🔧 Solución de Problemas
Error 403: Verifica que el token_write sea correcto y tenga exactamente 16 caracteres
No recibo mensajes: Asegúrate de estar suscrito al canal correcto y que tu IP esté autorizada
WebSocket no conecta: Verifica que el servidor esté ejecutándose y que no haya firewalls bloqueando el puerto
Mensaje muy largo: Los mensajes tienen un límite de 10,000 caracteres