· Nacho Coll · Guides  · 9 min de lectura

API de Alertas X: Suscripciones Programáticas e Historial de Notificaciones

Construye integraciones personalizadas encima de WALLAWHATS. Añade y elimina suscripciones de X, enruta alertas a canales, extrae historial de notificaciones — todo vía REST.

Construye integraciones personalizadas encima de WALLAWHATS. Añade y elimina suscripciones de X, enruta alertas a canales, extrae historial de notificaciones — todo vía REST.

Cuando las alertas de X (Twitter) en tiempo real se vuelven críticas para tu negocio, la gestión manual desde el panel de control alcanza sus límites. Ya sea que estés construyendo paneles de inteligencia de clientes, automatizando flujos de trabajo de monitorización de marca, o creando sistemas personalizados de notificaciones para mesas de trading, necesitas control programático sobre tus suscripciones de alertas X.

WALLAWHATS proporciona una API REST que te permite crear, gestionar y auditar suscripciones de alertas X sin tocar la interfaz web. Añade o elimina cuentas monitorizadas, extrae historial de notificaciones con estado de entrega, e integra alertas de X en tiempo real en cualquier sistema que hable HTTP.

Página de gestión de claves API con controles crear / revocar

¿Por Qué Usar la API de WALLAWHATS?

El panel de control funciona genial para flujos de trabajo manuales, pero el acceso API desbloquea escenarios de automatización que escalan más allá de la gestión humana:

Plataformas de Inteligencia de Clientes: Suscríbete automáticamente a ejecutivos competidores recién identificados, líderes de producto, o analistas del sector según se descubren através de herramientas de investigación o integraciones CRM.

Flujos de Trabajo Trading y Financieros: Monitoriza programáticamente cuentas regulatorias, perfiles de CEOs, o periodistas específicos del sector basándote en cambios de cartera o eventos del mercado — sin gestión manual de suscripciones.

Monitorización de Marca a Escala: Añade o elimina seguimiento de menciones de marca según se lanzan nuevas campañas, salen productos, o se desarrollan situaciones de crisis.

Aplicaciones SaaS Multi-Tenant: Monitorización X en tiempo real de marca blanca para tus clientes, con gestión programática de suscripciones entre bastidores.

Sistemas de Cumplimiento y Auditoría: Extrae historial completo de notificaciones con estado de entrega para reportes regulatorios, rastros de auditoría interna, o monitorización de SLA.

Autenticación y Acceso API

Cada plan de WALLAWHATS incluye acceso API con cuotas de claves escalables:

  • Free: 1 clave API
  • Pro: 1 clave API
  • Pro+: 2 claves API
  • Business: 5 claves API
  • Enterprise: 20 claves API

La autenticación usa el header x-api-key (no Authorization: Bearer). Genera tus claves desde la sección API del panel de control, y trátalas como contraseñas — tienen privilegios completos de cuenta.

curl -H "x-api-key: tu_clave_api_aqui" \
     https://api.wallawhats.com/subscriptions

Endpoints Core de la API

La API de WALLAWHATS proporciona cinco grupos principales de recursos para construir integraciones:

Gestión de Suscripciones

Crear una nueva suscripción:

POST /subscriptions
Content-Type: application/json
x-api-key: tu_clave_api_aqui

{
  "xUsername": "elonmusk"
}

Listar todas las suscripciones:

GET /subscriptions
x-api-key: tu_clave_api_aqui

Eliminar una suscripción:

DELETE /subscriptions/elonmusk
x-api-key: tu_clave_api_aqui

Nota que el endpoint delete toma el handle de X como parámetro de ruta — no un ID interno de suscripción.

Historial de Notificaciones y Auditoría

Extraer historial de notificaciones con estado de entrega:

GET /notifications?from=1704067200000&to=1704153600000
x-api-key: tu_clave_api_aqui

El endpoint de notificaciones devuelve resultados paginados con cada fila representando una alerta entregada a un canal. Los valores de estado incluyen:

  • queued: Alerta aceptada, esperando entrega
  • sent: Enviada al proveedor del canal
  • delivered: Confirmado recibido por el destino
  • read: Abierto por el receptor (solo WhatsApp, requiere confirmaciones de lectura habilitadas)
  • failed: Intento de entrega sin éxito

Gestión de Canales

Listar canales configurados:

GET /channels
x-api-key: tu_clave_api_aqui

Añadir un nuevo canal:

POST /channels
Content-Type: application/json
x-api-key: tu_clave_api_aqui

{
  "type": "email",
  "destination": "alerts@tuempresa.com"
}

Eliminar un canal:

DELETE /channels/id_del_canal_aqui
x-api-key: tu_clave_api_aqui

Capturas de Tweets

Acceder a la galería de capturas:

GET /snapshots
x-api-key: tu_clave_api_aqui

Eliminar una captura específica:

DELETE /snapshots/id_del_tweet_aqui
x-api-key: tu_clave_api_aqui

Construyendo Integraciones: Ejemplos de Código

Integración Node.js

Aquí tienes un ejemplo Node.js que añade una suscripción y consulta nuevas notificaciones:

const axios = require('axios');

class WallaWhatsClient {
  constructor(apiKey) {
    this.apiKey = apiKey;
    this.baseURL = 'https://api.wallawhats.com';
  }

  async addSubscription(xUsername) {
    try {
      const response = await axios.post(
        `${this.baseURL}/subscriptions`,
        { xUsername },
        { headers: { 'x-api-key': this.apiKey } }
      );
      return response.data;
    } catch (error) {
      throw new Error(`Failed to add subscription: ${error.response?.data?.message || error.message}`);
    }
  }

  async getNotifications(from, to, lastKey = null) {
    try {
      let url = `${this.baseURL}/notifications?from=${from}&to=${to}`;
      if (lastKey) url += `&lastKey=${lastKey}`;
      
      const response = await axios.get(url, {
        headers: { 'x-api-key': this.apiKey }
      });
      return response.data;
    } catch (error) {
      throw new Error(`Failed to fetch notifications: ${error.response?.data?.message || error.message}`);
    }
  }

  async listSubscriptions() {
    try {
      const response = await axios.get(
        `${this.baseURL}/subscriptions`,
        { headers: { 'x-api-key': this.apiKey } }
      );
      return response.data;
    } catch (error) {
      throw new Error(`Failed to list subscriptions: ${error.response?.data?.message || error.message}`);
    }
  }
}

// Ejemplo de uso
async function monitorCompetitor() {
  const client = new WallaWhatsClient('tu_clave_api_aqui');
  
  // Añadir una nueva suscripción
  await client.addSubscription('vercel');
  console.log('Ahora monitorizando @vercel');
  
  // Verificar notificaciones recientes
  const oneDayAgo = Date.now() - (24 * 60 * 60 * 1000);
  const notifications = await client.getNotifications(oneDayAgo, Date.now());
  
  console.log(`Encontradas ${notifications.items.length} alertas recientes`);
  notifications.items.forEach(notification => {
    console.log(`${notification.xUsername}: ${notification.status} en ${notification.timestamp}`);
  });
}

Integración Python

Para flujos de trabajo Python, aquí tienes una clase que maneja gestión de suscripciones y consulta de notificaciones:

import requests
import time
from datetime import datetime, timedelta

class WallaWhatsAPI:
    def __init__(self, api_key):
        self.api_key = api_key
        self.base_url = 'https://api.wallawhats.com'
        self.headers = {'x-api-key': api_key}

    def add_subscription(self, x_username):
        """Añadir una nueva cuenta X para monitorizar"""
        response = requests.post(
            f'{self.base_url}/subscriptions',
            json={'xUsername': x_username},
            headers=self.headers
        )
        response.raise_for_status()
        return response.json()

    def remove_subscription(self, x_username):
        """Eliminar una cuenta X de la monitorización"""
        response = requests.delete(
            f'{self.base_url}/subscriptions/{x_username}',
            headers=self.headers
        )
        response.raise_for_status()
        return response.status_code == 200

    def get_notifications(self, from_ms, to_ms, last_key=None):
        """Recuperar historial de notificaciones con paginación"""
        params = {'from': from_ms, 'to': to_ms}
        if last_key:
            params['lastKey'] = last_key
            
        response = requests.get(
            f'{self.base_url}/notifications',
            params=params,
            headers=self.headers
        )
        response.raise_for_status()
        return response.json()

    def get_all_notifications(self, from_ms, to_ms):
        """Recuperar todas las notificaciones en un rango de tiempo, manejando paginación"""
        all_notifications = []
        last_key = None
        
        while True:
            batch = self.get_notifications(from_ms, to_ms, last_key)
            all_notifications.extend(batch['items'])
            
            if not batch.get('lastKey'):
                break
            last_key = batch['lastKey']
        
        return all_notifications

    def list_subscriptions(self):
        """Obtener todas las suscripciones actuales"""
        response = requests.get(
            f'{self.base_url}/subscriptions',
            headers=self.headers
        )
        response.raise_for_status()
        return response.json()

# Ejemplo: Reporte de auditoría diaria
def generate_daily_report():
    api = WallaWhatsAPI('tu_clave_api_aqui')
    
    # Obtener notificaciones de ayer
    end_time = int(time.time() * 1000)
    start_time = end_time - (24 * 60 * 60 * 1000)
    
    notifications = api.get_all_notifications(start_time, end_time)
    
    # Agrupar por cuenta y estado
    report = {}
    for notification in notifications:
        account = notification['xUsername']
        status = notification['status']
        
        if account not in report:
            report[account] = {'total': 0, 'delivered': 0, 'failed': 0}
        
        report[account]['total'] += 1
        if status in ['delivered', 'read']:
            report[account]['delivered'] += 1
        elif status == 'failed':
            report[account]['failed'] += 1
    
    # Imprimir resumen
    print(f"Reporte Diario de Alertas - {datetime.now().strftime('%Y-%m-%d')}")
    print("-" * 50)
    for account, stats in report.items():
        success_rate = (stats['delivered'] / stats['total']) * 100 if stats['total'] > 0 else 0
        print(f"@{account}: {stats['total']} alertas, {success_rate:.1f}% entregadas")

Entendiendo el Enrutado de Canales

WALLAWHATS usa un modelo de enrutado de canales global — cada alerta de cada suscripción se distribuye a todos los canales habilitados y verificados. No puedes enrutar cuentas específicas a destinos específicos vía la API (como “@elonmusk → WhatsApp, @vercel → email”).

La selección de canal ocurre a nivel de cuenta en la página de Canales. Cuando añades un canal vía API, se vuelve disponible para todas las alertas una vez verificado. Cuando eliminas un canal, deja de recibir alertas de todas las suscripciones.

Este diseño simplifica la automatización mientras previene fragmentación de alertas. Tu código de integración no necesita rastrear reglas de enrutado por suscripción — solo gestiona qué cuentas monitorizar y qué canales habilitar.

Límites de Velocidad y Topes de Velocidad

WALLAWHATS implementa topes de velocidad por usuario para prevenir spam de alertas durante períodos de alta actividad:

  • Free: 2 alertas/hora
  • Pro: 5 alertas/hora
  • Pro+: 15 alertas/hora
  • Business: 30 alertas/hora
  • Enterprise: 100 alertas/hora

Cuando los topes de velocidad se exceden, los tweets adicionales se almacenan en mensajes resumen y se entregan cada 15 minutos. Tu integración API verá estos como registros de notificación separados — uno para la alerta inmediata, y uno para cada lote resumen.

La API misma no impone límites de velocidad separados en gestión de suscripciones o consultas de notificación. Sin embargo, evita bombardear los endpoints con solicitudes innecesarias — cachea listas de suscripción localmente y haz lotes de consultas de notificación eficientemente.

Manejo de Errores y Resolución de Problemas

Patrones comunes de errores API y cómo manejarlos:

Fallos de autenticación (401):

  • Verifica que tu clave API sea correcta y no haya sido revocada
  • Asegúrate de usar el header x-api-key, no Authorization

Conflictos de suscripción (409):

  • Cuenta ya monitorizada: La suscripción existe, trata como éxito
  • Cuenta protegida/privada: WALLAWHATS las rechaza por diseño

Limitación de velocidad (429):

  • Retrocede exponencialmente antes de reintentar
  • Verifica si te acercas a los límites del plan en cuentas monitorizadas

Problemas de verificación de canal:

  • Los canales nuevos requieren verificación OTP antes de recibir alertas
  • Los canales añadidos programáticamente no funcionarán hasta que el usuario complete la verificación

Monitorizando y Alertando Tus Integraciones

Como WALLAWHATS se convierte en infraestructura crítica cuando se integra en flujos de trabajo empresariales, monitoriza la salud de tu integración:

Detección de Deriva de Suscripciones:

// Verificar si las suscripciones esperadas siguen activas
async function auditSubscriptions(expectedHandles) {
  const current = await client.listSubscriptions();
  const currentHandles = current.map(s => s.xUsername);
  
  const missing = expectedHandles.filter(h => !currentHandles.includes(h));
  if (missing.length > 0) {
    console.warn(`Suscripciones faltantes: ${missing.join(', ')}`);
  }
  
  return missing;
}

Monitorización de Tasa de Éxito de Entrega:

def check_delivery_health():
    # Verificar últimas 6 horas
    end_time = int(time.time() * 1000)
    start_time = end_time - (6 * 60 * 60 * 1000)
    
    notifications = api.get_all_notifications(start_time, end_time)
    if not notifications:
        return None
    
    delivered = sum(1 for n in notifications if n['status'] in ['delivered', 'read'])
    total = len(notifications)
    success_rate = (delivered / total) * 100
    
    if success_rate < 95:
        # Alertar a tu equipo de ops
        print(f"AVISO: La tasa de éxito de entrega cayó a {success_rate:.1f}%")
    
    return success_rate

Patrones de Integración y Mejores Prácticas

Procesamiento Estilo Webhook: Aunque WALLAWHATS no proporciona webhooks directamente, puedes consultar el endpoint de notificaciones para nuevas alertas y procesarlas en casi tiempo real:

async function pollForNewAlerts() {
  const lastCheck = localStorage.getItem('lastNotificationCheck') || Date.now() - 300000;
  const now = Date.now();
  
  const notifications = await client.getNotifications(lastCheck, now);
  
  for (const notification of notifications.items) {
    if (notification.status === 'delivered') {
      // Procesar la alerta - enviar a Slack, actualizar base de datos, etc.
      await processAlert(notification);
    }
  }
  
  localStorage.setItem('lastNotificationCheck', now);
}

// Consultar cada 30 segundos
setInterval(pollForNewAlerts, 30000);

Gestión de Suscripciones Condicional: Añadir o eliminar suscripciones dinámicamente basándote en activadores externos:

def update_competitor_monitoring(portfolio_companies):
    """Actualizar monitorización X basándose en cartera actual"""
    current_subs = {s['xUsername'] for s in api.list_subscriptions()}
    
    # Cuentas que deberíamos estar monitorizando
    target_accounts = set()
    for company in portfolio_companies:
        if company.get('ceo_twitter_handle'):
            target_accounts.add(company['ceo_twitter_handle'])
        if company.get('company_twitter_handle'):
            target_accounts.add(company['company_twitter_handle'])
    
    # Añadir suscripciones faltantes
    for account in target_accounts - current_subs:
        try:
            api.add_subscription(account)
            print(f"Comenzó a monitorizar @{account}")
        except Exception as e:
            print(f"Falló al añadir @{account}: {e}")
    
    # Eliminar suscripciones desactualizadas
    for account in current_subs - target_accounts:
        api.remove_subscription(account)
        print(f"Dejó de monitorizar @{account}")

La API de WALLAWHATS transforma alertas de X en tiempo real de una herramienta manual de panel de control a un componente de infraestructura programable. Ya sea que estés construyendo flujos de trabajo de inteligencia personalizados, automatizando monitorización de marca, o creando servicios de notificación de marca blanca, la API proporciona el control y capacidades de auditoría necesarios para integración en producción.

¿Quieres expandir tu monitorización más allá de competidores? Echa un vistazo a nuestra guía sobre monitorización de Twitter crypto para señales de mercado o aprende cómo los periodistas usan WALLAWHATS para monitorización de fuentes en tiempo real.

Nunca te pierdas una publicación importante otra vez. Crea una cuenta gratuita — 1 número WhatsApp, alertas en tiempo real, sin tarjeta de crédito requerida.

Volver al Blog

Artículos Relacionados

Ver Todos los Artículos »