· Nacho Coll · Guides  · 9 min de citit

API pentru Alerte X: Abonamente Programatice și Istoric de Notificări

Construiește integrări personalizate pe baza WALLAWHATS. Adaugă și elimină abonamente X, direcționează alerte către canale, extrage istoricul notificărilor — totul prin REST.

Construiește integrări personalizate pe baza WALLAWHATS. Adaugă și elimină abonamente X, direcționează alerte către canale, extrage istoricul notificărilor — totul prin REST.

Când alertele X (Twitter) în timp real devin critice pentru business-ul tău, managementul manual prin dashboard întâmpină obstacole. Fie că construiești dashboard-uri de inteligență clienți, automatizezi fluxuri de monitorizare brand sau creezi sisteme personalizate de notificări pentru desk-uri de tranzacționare, ai nevoie de control programatic asupra abonamentelor de alerte X.

WALLAWHATS oferă un API REST care îți permite să creezi, să gestionezi și să auditezi abonamentele de alerte X fără să atingi interfața web. Adaugă sau elimină conturi monitorizate, extrage istoricul notificărilor cu statutul de livrare și integrează alerte X în timp real în orice sistem care vorbește HTTP.

Pagina de gestionare a cheilor API cu controale pentru creare / revocare

De Ce să Folosești API-ul WALLAWHATS?

Dashboard-ul funcționează excelent pentru fluxuri manuale, dar accesul API deblochează scenarii de automatizare care se scalează dincolo de managementul uman:

Platforme de Inteligență Clienți: Abonează-te automat la executivi concurenți nou identificați, lideri de produs sau analiști din industrie pe măsură ce sunt descoperiți prin instrumente de cercetare sau integrări CRM.

Fluxuri de Tranzacționare și Financiare: Monitorizează programatic conturi de reglementare, handle-uri de CEO sau jurnaliști specifici pe sectoare bazat pe schimbări de portofoliu sau evenimente de piață — fără management manual al abonamentelor.

Monitorizare Brand la Scară: Adaugă sau elimină urmărirea mențiunilor brand pe măsură ce se lansează noi campanii, se livrează produse sau se dezvoltă situații de criză.

Aplicații SaaS Multi-Tenant: Monitorizare X în timp real cu marcă albă pentru clienții tăi, cu management programatic al abonamentelor în fundal.

Sisteme de Conformitate și Audit: Extrage istoricul complet al notificărilor cu statutul de livrare pentru raportare de reglementare, urme de audit interne sau monitorizare SLA.

Autentificare și Acces API

Fiecare plan WALLAWHATS include acces API cu cote de chei scalabile:

  • Free: 1 cheie API
  • Pro: 1 cheie API
  • Pro+: 2 chei API
  • Business: 5 chei API
  • Enterprise: 20 chei API

Autentificarea folosește header-ul x-api-key (nu Authorization: Bearer). Generează cheile din secțiunea API a dashboard-ului și tratează-le ca parolele — poartă privilegii complete ale contului.

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

Endpoint-uri API Principale

API-ul WALLAWHATS oferă cinci grupuri principale de resurse pentru construirea integrărilor:

Managementul Abonamentelor

Creează un abonament nou:

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

{
  "xUsername": "elonmusk"
}

Listează toate abonamentele:

GET /subscriptions
x-api-key: cheia_ta_api_aici

Elimină un abonament:

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

Observă că endpoint-ul de ștergere ia handle-ul X ca parametru de cale — nu un ID intern al abonamentului.

Istoric de Notificări și Audit

Extrage istoricul notificărilor cu statutul de livrare:

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

Endpoint-ul notifications returnează rezultate paginate cu fiecare rând reprezentând o alertă livrată la un canal. Valorile de status includ:

  • queued: Alertă acceptată, așteaptă livrarea
  • sent: Expediată către furnizorul de canal
  • delivered: Confirmată primită de destinație
  • read: Deschisă de destinatar (doar WhatsApp, necesită confirmare de citire activată)
  • failed: Tentativa de livrare nereușită

Managementul Canalelor

Listează canalele configurate:

GET /channels
x-api-key: cheia_ta_api_aici

Adaugă un canal nou:

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

{
  "type": "email",
  "destination": "alerts@company-ul_tau.com"
}

Elimină un canal:

DELETE /channels/id_canal_aici
x-api-key: cheia_ta_api_aici

Capturi de Tweet-uri

Accesează galeria de capturi:

GET /snapshots
x-api-key: cheia_ta_api_aici

Șterge o captură specifică:

DELETE /snapshots/id_tweet_aici
x-api-key: cheia_ta_api_aici

Construirea Integrărilor: Exemple de Cod

Integrare Node.js

Iată un exemplu Node.js care adaugă un abonament și întreabă pentru notificări noi:

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(`Nu s-a putut adăuga abonamentul: ${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(`Nu s-au putut prelua notificările: ${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(`Nu s-au putut lista abonamentele: ${error.response?.data?.message || error.message}`);
    }
  }
}

// Exemplu de utilizare
async function monitorCompetitor() {
  const client = new WallaWhatsClient('cheia_ta_api_aici');
  
  // Adaugă un abonament nou
  await client.addSubscription('vercel');
  console.log('Acum monitorizez @vercel');
  
  // Verifică notificările recente
  const oneDayAgo = Date.now() - (24 * 60 * 60 * 1000);
  const notifications = await client.getNotifications(oneDayAgo, Date.now());
  
  console.log(`Am găsit ${notifications.items.length} alerte recente`);
  notifications.items.forEach(notification => {
    console.log(`${notification.xUsername}: ${notification.status} la ${notification.timestamp}`);
  });
}

Integrare Python

Pentru fluxuri Python, iată o clasă care gestionează managementul abonamentelor și interogarea notificărilor:

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):
        """Adaugă un cont X nou pentru monitorizare"""
        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):
        """Elimină un cont X din monitorizare"""
        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):
        """Preluează istoricul notificărilor cu paginare"""
        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):
        """Preluează toate notificările dintr-un interval de timp, gestionând paginarea"""
        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):
        """Obține toate abonamentele curente"""
        response = requests.get(
            f'{self.base_url}/subscriptions',
            headers=self.headers
        )
        response.raise_for_status()
        return response.json()

# Exemplu: Raport de audit zilnic
def generate_daily_report():
    api = WallaWhatsAPI('cheia_ta_api_aici')
    
    # Obține notificările de ieri
    end_time = int(time.time() * 1000)
    start_time = end_time - (24 * 60 * 60 * 1000)
    
    notifications = api.get_all_notifications(start_time, end_time)
    
    # Grupează pe cont și status
    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
    
    # Afișează rezumatul
    print(f"Raport Zilnic de Alerte - {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']} alerte, {success_rate:.1f}% livrate")

Înțelegerea Rutării Canalelor

WALLAWHATS folosește un model de rutare globală a canalelor — fiecare alertă de la fiecare abonament se distribuie la toate canalele activate și verificate. Nu poți ruta conturi specifice la destinații specifice prin API (cum ar fi “@elonmusk → WhatsApp, @vercel → email”).

Selecția canalelor se face la nivelul contului în pagina Canale. Când adaugi un canal prin API, acesta devine disponibil pentru toate alertele odată verificat. Când elimini un canal, acesta oprește primirea alertelor de la toate abonamentele.

Acest design simplifică automatizarea previne fragmentarea alertelor. Codul tău de integrare nu trebuie să urmărească reguli de rutare per-abonament — doar gestionează ce conturi să monitorizeze și ce canale să activeze.

Limite de Rată și Plafoane de Viteză

WALLAWHATS implementează plafoane de viteză la nivel de utilizator pentru a preveni spam-ul de alerte în perioade de activitate mare:

  • Free: 2 alerte/oră
  • Pro: 5 alerte/oră
  • Pro+: 15 alerte/oră
  • Business: 30 alerte/oră
  • Enterprise: 100 alerte/oră

Când plafonul de viteză este depășit, tweet-urile suplimentare sunt grupate în mesaje de rezumat și livrate la fiecare 15 minute. Integrarea ta API va vedea acestea ca înregistrări separate de notificare — una pentru alerta imediată și una pentru fiecare lot de rezumat.

API-ul în sine nu impune limite de rată separate pe managementul abonamentelor sau interogările de notificări. Totuși, evită să bombardezi endpoint-urile cu cereri inutile — păstrează listele de abonamente local în cache și grupează interogările de notificări eficient.

Gestionarea Erorilor și Depanare

Tipare comune de erori API și cum să le gestionezi:

Eșecuri de autentificare (401):

  • Verifică că cheia ta API este corectă și nu a fost revocată
  • Asigură-te că folosești header-ul x-api-key, nu Authorization

Conflicte de abonament (409):

  • Cont deja monitorizat: Abonamentul există, tratează ca succes
  • Cont protejat/privat: WALLAWHATS refuză acestea prin design

Limitare de rată (429):

  • Retrage-te exponențial înainte de a reîncerca
  • Verifică dacă te apropii de limitele planului pe conturile monitorizate

Probleme de verificare canal:

  • Canalele noi necesită verificare OTP înainte să primească alerte
  • Canalele adăugate programatic nu vor funcționa până când utilizatorul completează verificarea

Monitorizarea și Alertarea Integrărilor Tale

Deoarece WALLAWHATS devine infrastructură critică când este integrat în fluxurile de business, monitorizează sănătatea integrării tale:

Detectarea Devierii Abonamentelor:

// Verifică dacă abonamentele așteptate sunt încă active
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(`Abonamente lipsă: ${missing.join(', ')}`);
  }
  
  return missing;
}

Monitorizarea Ratei de Succes la Livrare:

def check_delivery_health():
    # Verifică ultimele 6 ore
    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:
        # Alertează echipa de operațiuni
        print(f"ATENȚIE: Rata de succes la livrare a scăzut la {success_rate:.1f}%")
    
    return success_rate

Tipare de Integrare și Cele Mai Bune Practici

Procesare în Stil Webhook: Deși WALLAWHATS nu oferă direct webhook-uri, poți interoga endpoint-ul notifications pentru alerte noi și să le procesezi în timp aproape 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') {
      // Procesează alerta - trimite la Slack, actualizează baza de date, etc.
      await processAlert(notification);
    }
  }
  
  localStorage.setItem('lastNotificationCheck', now);
}

// Interogare la fiecare 30 de secunde
setInterval(pollForNewAlerts, 30000);

Management Condițional al Abonamentelor: Adaugă sau elimină dinamic abonamente bazat pe trigger-e externe:

def update_competitor_monitoring(portfolio_companies):
    """Actualizează monitorizarea X bazată pe portofoliul curent"""
    current_subs = {s['xUsername'] for s in api.list_subscriptions()}
    
    # Conturi pe care ar trebui să le monitorizăm
    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'])
    
    # Adaugă abonamente lipsă
    for account in target_accounts - current_subs:
        try:
            api.add_subscription(account)
            print(f"Am început să monitorizez @{account}")
        except Exception as e:
            print(f"Nu s-a putut adăuga @{account}: {e}")
    
    # Elimină abonamente depășite
    for account in current_subs - target_accounts:
        api.remove_subscription(account)
        print(f"Am oprit monitorizarea @{account}")

API-ul WALLAWHATS transformă alertele X în timp real dintr-un instrument de dashboard manual într-o componentă de infrastructură programabilă. Fie că construiești fluxuri de inteligență personalizate, automatizezi monitorizarea brand-ului sau creezi servicii de notificare cu marcă albă, API-ul oferă controlul și capacitățile de audit necesare pentru integrarea în producție.

Vrei să îți extinzi monitorizarea dincolo de concurenți? Consultă ghidul nostru despre monitorizarea crypto Twitter pentru semnale de piață sau învață cum folosesc jurnaliștii WALLAWHATS pentru monitorizarea surselor în timp real.

Nu rata niciodată o postare importantă. Creează un cont gratuit — 1 număr WhatsApp, alerte în timp real, fără card de credit necesar.

Înapoi la Blog

Articole Similare

Vezi Toate Articolele »