· Nacho Coll · Guides · 8 min læsning
X Alerts API: Programmatiske abonnementer og notifikationshistorik
Byg brugerdefinerede integrationer oven på WALLAWHATS. Tilføj og fjern X-abonnementer, dirigér alerts til kanaler, hent notifikationshistorik — alt via REST.

Når real-time X (Twitter) alerts bliver kritiske for din virksomhed, rammer manuel dashboard-styring en mur. Uanset om du bygger kunde-intelligence dashboards, automatiserer brand monitoring workflows eller skaber brugerdefinerede notifikationssystemer til trading desks, har du brug for programmatisk kontrol over dine X alert-abonnementer.
WALLAWHATS tilbyder en REST API, der lader dig oprette, administrere og auditere X alert-abonnementer uden at røre web-interfacet. Tilføj eller fjern overvågede konti, hent notifikationshistorik med leveringsstatus, og integrér real-time X alerts i ethvert system, der taler HTTP.

Hvorfor bruge WALLAWHATS API?
Dashboardet fungerer fantastisk til manuelle workflows, men API-adgang låser op for automatiseringsscenarier, der skalerer ud over menneskelig styring:
Kunde-Intelligence Platforme: Abonnér automatisk på nyidentificerede konkurrent-executives, produktledere eller brancheanalytikere, som de opdages gennem forskningsværktøjer eller CRM-integrationer.
Trading og Finansielle Workflows: Overvåg programmatisk regulatoriske konti, CEO-handles eller sektorspecifikke journalister baseret på porteføljeændringer eller markedsbegivenheder—uden manuel abonnementsstyring.
Brand Monitoring i stor skala: Tilføj eller fjern brand mention-tracking, når nye kampagner lanceres, produkter shippes eller krisesituationer udvikles.
Multi-Tenant SaaS Applikationer: White-label real-time X monitoring for dine kunder, med programmatisk abonnementsstyring bag kulisserne.
Compliance og Audit Systemer: Hent komplet notifikationshistorik med leveringsstatus til regulatorisk rapportering, interne audit trails eller SLA-overvågning.
API Autentifikation og Adgang
Alle WALLAWHATS planer inkluderer API-adgang med skalerende nøglekvoter:
- Free: 1 API nøgle
- Pro: 1 API nøgle
- Pro+: 2 API nøgler
- Business: 5 API nøgler
- Enterprise: 20 API nøgler
Autentifikation bruger x-api-key header (ikke Authorization: Bearer). Generér dine nøgler fra dashboardets API-sektion, og behandl dem som adgangskoder—de har fulde kontoprivilegier.
curl -H "x-api-key: your_api_key_here" \
https://api.wallawhats.com/subscriptionsCentrale API Endpoints
WALLAWHATS API tilbyder fem hovedressourcegrupper til at bygge integrationer:
Abonnementsstyring
Opret et nyt abonnement:
POST /subscriptions
Content-Type: application/json
x-api-key: your_api_key_here
{
"xUsername": "elonmusk"
}List alle abonnementer:
GET /subscriptions
x-api-key: your_api_key_hereFjern et abonnement:
DELETE /subscriptions/elonmusk
x-api-key: your_api_key_hereBemærk at delete-endpointet tager X-handlet som path parameter—ikke et internt abonnements-ID.
Notifikationshistorik og Audit
Hent notifikationshistorik med leveringsstatus:
GET /notifications?from=1704067200000&to=1704153600000
x-api-key: your_api_key_hereNotifications-endpointet returnerer paginerede resultater med hver række repræsenterende én alert leveret til én kanal. Statusværdier inkluderer:
queued: Alert accepteret, venter på leveringsent: Afsendt til kanal-providerendelivered: Bekræftet modtaget på destinationenread: Åbnet af modtageren (kun WhatsApp, kræver læsekvitteringer aktiveret)failed: Leveringsforsøg mislykkedes
Kanalstyring
List konfigurerede kanaler:
GET /channels
x-api-key: your_api_key_hereTilføj en ny kanal:
POST /channels
Content-Type: application/json
x-api-key: your_api_key_here
{
"type": "email",
"destination": "alerts@yourcompany.com"
}Fjern en kanal:
DELETE /channels/channel_id_here
x-api-key: your_api_key_hereTweet Snapshots
Få adgang til snapshot-galleriet:
GET /snapshots
x-api-key: your_api_key_hereSlet et specifikt snapshot:
DELETE /snapshots/tweet_id_here
x-api-key: your_api_key_hereBygge Integrationer: Kode Eksempler
Node.js Integration
Her er et Node.js eksempel, der tilføjer et abonnement og poller for nye notifikationer:
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}`);
}
}
}
// Usage example
async function monitorCompetitor() {
const client = new WallaWhatsClient('your_api_key_here');
// Add a new subscription
await client.addSubscription('vercel');
console.log('Now monitoring @vercel');
// Check recent notifications
const oneDayAgo = Date.now() - (24 * 60 * 60 * 1000);
const notifications = await client.getNotifications(oneDayAgo, Date.now());
console.log(`Found ${notifications.items.length} recent alerts`);
notifications.items.forEach(notification => {
console.log(`${notification.xUsername}: ${notification.status} at ${notification.timestamp}`);
});
}Python Integration
For Python workflows, her er en klasse, der håndterer abonnementsstyring og notifikationspolling:
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):
"""Add a new X account to monitor"""
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):
"""Remove an X account from monitoring"""
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):
"""Fetch notification history with pagination"""
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):
"""Fetch all notifications in a time range, handling pagination"""
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):
"""Get all current subscriptions"""
response = requests.get(
f'{self.base_url}/subscriptions',
headers=self.headers
)
response.raise_for_status()
return response.json()
# Example: Daily audit report
def generate_daily_report():
api = WallaWhatsAPI('your_api_key_here')
# Get yesterday's notifications
end_time = int(time.time() * 1000)
start_time = end_time - (24 * 60 * 60 * 1000)
notifications = api.get_all_notifications(start_time, end_time)
# Group by account and 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
# Print summary
print(f"Daily Alert Report - {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']} alerts, {success_rate:.1f}% delivered")Forståelse af Kanal Routing
WALLAWHATS bruger en global kanal routing-model—alle alerts fra alle abonnementer faner ud til alle aktiverede og verificerede kanaler. Du kan ikke dirigere specifikke konti til specifikke destinationer via API’et (som „@elonmusk → WhatsApp, @vercel → email”).
Kanalvalg sker på kontoniveau på Kanaler-siden. Når du tilføjer en kanal via API, bliver den tilgængelig for alle alerts, når den er verificeret. Når du fjerner en kanal, stopper den med at modtage alerts fra alle abonnementer.
Dette design forenkler automatisering, mens det forhindrer alert-fragmentering. Din integrationskode behøver ikke spore per-abonnement routing-regler—bare administrér hvilke konti der skal overvåges og hvilke kanaler der skal aktiveres.
Rate Limits og Velocity Caps
WALLAWHATS implementerer bruger-niveau velocity caps for at forhindre alert-spam under perioder med høj aktivitet:
- Free: 2 alerts/time
- Pro: 5 alerts/time
- Pro+: 15 alerts/time
- Business: 30 alerts/time
- Enterprise: 100 alerts/time
Når velocity caps overskrides, bufferes yderligere tweets til digest-beskeder og leveres hver 15. minut. Din API-integration vil se disse som separate notifikationsposter—én for den øjeblikkelige alert og én for hver digest-batch.
API’et selv pålægger ikke separate rate limits på abonnementsstyring eller notifikationsforespørgsler. Undgå dog at hamre endpoints med unødvendige anmodninger—cach abonnementslister lokalt og batch notifikationsforespørgsler effektivt.
Fejlhåndtering og Problemløsning
Almindelige API fejlmønstre og hvordan man håndterer dem:
Autentifikationsfejl (401):
- Verificér at din API-nøgle er korrekt og ikke er blevet tilbagekaldt
- Sørg for at du bruger
x-api-keyheader, ikkeAuthorization
Abonnementskonflikter (409):
- Konto allerede overvåget: Abonnementet eksisterer, behandl som succes
- Konto beskyttet/privat: WALLAWHATS afviser disse by design
Rate limiting (429):
- Back off eksponentielt før retry
- Tjek om du nærmer dig plangrænser på overvågede konti
Kanalverifikationsproblemer:
- Nye kanaler kræver OTP-verifikation før de modtager alerts
- Programmatisk tilføjede kanaler virker ikke, før brugeren fuldfører verifikation
Overvågning og Alerting af Dine Integrationer
Da WALLAWHATS bliver kritisk infrastruktur, når den integreres i business workflows, overvåg din integrations-sundhed:
Abonnements Drift Detection:
// Check if expected subscriptions are still 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(`Missing subscriptions: ${missing.join(', ')}`);
}
return missing;
}Leveringssuccesrate Overvågning:
def check_delivery_health():
# Check last 6 hours
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:
# Alert your ops team
print(f"WARNING: Delivery success rate dropped to {success_rate:.1f}%")
return success_rateIntegrationsmønstre og Best Practices
Webhook-Style Processing: Selvom WALLAWHATS ikke tilbyder webhooks direkte, kan du polle notifications-endpointet for nye alerts og processere dem i næsten real-time:
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') {
// Process the alert - send to Slack, update database, etc.
await processAlert(notification);
}
}
localStorage.setItem('lastNotificationCheck', now);
}
// Poll every 30 seconds
setInterval(pollForNewAlerts, 30000);Betinget Abonnementsstyring: Tilføj eller fjern dynamisk abonnementer baseret på eksterne triggere:
def update_competitor_monitoring(portfolio_companies):
"""Update X monitoring based on current portfolio"""
current_subs = {s['xUsername'] for s in api.list_subscriptions()}
# Accounts we should be monitoring
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'])
# Add missing subscriptions
for account in target_accounts - current_subs:
try:
api.add_subscription(account)
print(f"Started monitoring @{account}")
except Exception as e:
print(f"Failed to add @{account}: {e}")
# Remove outdated subscriptions
for account in current_subs - target_accounts:
api.remove_subscription(account)
print(f"Stopped monitoring @{account}")WALLAWHATS API transformerer real-time X alerts fra et manuelt dashboard-værktøj til en programmerbar infrastrukturkomponent. Uanset om du bygger brugerdefinerede intelligence workflows, automatiserer brand monitoring eller skaber white-label notifikationstjenester, giver API’et den kontrol og audit-kapacitet, der er nødvendig for produktionsintegration.
Ønsker du at udvide din overvågning ud over konkurrenter? Tjek vores guide om overvågning af crypto Twitter for markedssignaler eller lær hvordan journalister bruger WALLAWHATS til real-time kildeovervågning.
Gå aldrig glip af et vigtigt opslag igen. Opret en gratis konto — 1 WhatsApp nummer, real-time alerts, intet kreditkort påkrævet.
