· Nacho Coll · Guides · 8 мин читања
X Alerts API: Програмске претплате и историја обавештења
Изградите прилагођене интеграције на врху WALLAWHATS-а. Додајте и уклањајте X претплате, усмеравајте алерте у канале, преузмите историју обавештења — све преко REST-а.

Када X (Twitter) алерти у реалном времену постану критични за ваш бизнис, мануелно управљање преко dashboard-а достиже ограничење. Било да градите dashboard-ове за интелигенцију о клијентима, аутоматизујете радне токове за праћење бренда, или стварате прилагођене системе обавештења за трговачке столове, потребна вам је програмска контрола над вашим X алерт претплатама.
WALLAWHATS пружа REST API који вам омогућава да креирате, управљате и ревизијате X алерт претплате без додиривања веб интерфејса. Додајте или уклоните праћене налоге, преузмите историју обавештења са статусом достављања, и интегришите X алерте у реалном времену у било који систем који говори HTTP.

Зашто користити WALLAWHATS API?
Dashboard одлично функционише за мануелне радне токове, али API приступ отључава сценарије аутоматизације који се проширују изван људског управљања:
Платформе за интелигенцију о клијентима: Аутоматски се претплатите на новооткривене извршне директоре конкуренције, руководиоце производа, или индустријске аналитичаре када их откријете кроз истраживачке алате или CRM интеграције.
Трговање и финансијски радни токови: Програмски пратите регулаторне налоге, CEO-ове профиле, или новинаре специфичне за сектор на основу промена у портфолију или тржишних догађаја—без мануелног управљања претплатама.
Праћење бренда у великом обиму: Додајте или уклоните праћење спомена бренда како се нове кампање покрећу, производи испоручују, или ситуације кризе развијају.
Мулти-тенант SaaS апликације: Беле етикете за X праћење у реалном времену за ваше клијенте, са програмским управљањем претплата иза сцене.
Системи усаглашености и ревизије: Преузмите комплетну историју обавештења са статусом достављања за регулаторне извештаје, интерне ревизорске путање, или SLA праћење.
API аутентификација и приступ
Сваки WALLAWHATS план укључује API приступ са скалирањем квота за кључеве:
- Free: 1 API кључ
- Pro: 1 API кључ
- Pro+: 2 API кључа
- Business: 5 API кључева
- Enterprise: 20 API кључева
Аутентификација користи x-api-key header (не Authorization: Bearer). Генеришите ваше кључеве из API секције dashboard-а, и третирајте их као лозинке—они носе пуне привилегије налога.
curl -H "x-api-key: your_api_key_here" \
https://api.wallawhats.com/subscriptionsОсновни API endpoint-ови
WALLAWHATS API пружа пет главних група ресурса за изградњу интеграција:
Управљање претплатама
Креирање нове претплате:
POST /subscriptions
Content-Type: application/json
x-api-key: your_api_key_here
{
"xUsername": "elonmusk"
}Листање свих претплата:
GET /subscriptions
x-api-key: your_api_key_hereУклањање претплате:
DELETE /subscriptions/elonmusk
x-api-key: your_api_key_hereПриметите да delete endpoint узима X handle као path параметар—не интерни ID претплате.
Историја обавештења и ревизија
Преузимање историје обавештења са статусом достављања:
GET /notifications?from=1704067200000&to=1704153600000
x-api-key: your_api_key_hereEndpoint за обавештења враћа пагиниране резултате при чему сваки ред представља један алерт достављен једном каналу. Вредности статуса укључују:
queued: Алерт прихваћен, чека на достављањеsent: Послат провајдеру каналаdelivered: Потврђено да је примљен на одредиштуread: Отворен од стране примаоца (само WhatsApp, захтева омогућене потврде читања)failed: Покушај достављања неуспешан
Управљање каналима
Листање конфигурисаних канала:
GET /channels
x-api-key: your_api_key_hereДодавање новог канала:
POST /channels
Content-Type: application/json
x-api-key: your_api_key_here
{
"type": "email",
"destination": "alerts@yourcompany.com"
}Уклањање канала:
DELETE /channels/channel_id_here
x-api-key: your_api_key_hereTweet снимци
Приступ галерији снимака:
GET /snapshots
x-api-key: your_api_key_hereБрисање специфичног снимка:
DELETE /snapshots/tweet_id_here
x-api-key: your_api_key_hereИзградња интеграција: Примери кода
Node.js интеграција
Ево Node.js примера који додаје претплату и проверава нова обавештења:
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 интеграција
За Python радне токове, ево класе која обрађује управљање претплатама и провера обавештења:
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")Разумевање усмеравања канала
WALLAWHATS користи глобални модел усмеравања канала—сваки алерт из сваке претплате се прослеђује свим омогућеним и верификованим каналима. Не можете усмерити специфичне налоге на специфична одредишта преко API-ја (као што је «@elonmusk → WhatsApp, @vercel → email»).
Избор канала се дешава на нивоу налога на страници Channels. Када додате канал преко API-ја, он постаје доступан за све алерте након верификације. Када уклоните канал, престаје да прима алерте од свих претплата.
Овај дизајн упрошћава аутоматизацију истовремено спречавајући фрагментацију алерата. Ваш интеграцијски код не мора да прати правила усмеравања по претплати—само управљајте које налоге треба пратити и које канале омогућити.
Ограничења брзине и caps-ови брзине
WALLAWHATS имплементира caps-ове брзине на нивоу корисника да спречи спам алерата током периода високе активности:
- Free: 2 алерта/час
- Pro: 5 алерата/час
- Pro+: 15 алерата/час
- Business: 30 алерата/час
- Enterprise: 100 алерата/час
Када се caps-ови брзине прекораче, додатни tweet-ови се буферују у digest поруке и достављају сваких 15 минута. Ваша API интеграција ће их видети као засебне записе обавештења—један за непосредни алерт, и један за сваку digest серију.
Сам API не намеће засебна ограничења брзине на управљање претплатама или упите обавештења. Међутим, избегните оптерећивање endpoint-ова непотребним захтевима—кеширајте листе претплата локално и ефикасно групишите упите обавештења.
Обрада грешака и решавање проблема
Уобичајени обрасци API грешака и како да их обрадите:
Неуспеси аутентификације (401):
- Проверите да ли је ваш API кључ тачан и није опозван
- Осигурајте се да користите
x-api-keyheader, неAuthorization
Конфликти претплата (409):
- Налог се већ прати: Претплата постоји, третирајте као успех
- Налог заштићен/приватан: WALLAWHATS их одбацује по дизајну
Ограничење брзине (429):
- Експоненцијално се повући пре поновног покушаја
- Проверите да ли се приближавате ограничењима плана за праћене налоге
Проблеми верификације канала:
- Нови канали захтевају OTP верификацију пре примања алерата
- Програмски додавани канали неће радити док корисник не заврши верификацију
Праћење и алертовање ваших интеграција
Пошто WALLAWHATS постаје критична инфраструктура када се интегрише у пословне радне токове, пратите здравље ваше интеграције:
Откривање одступања претплата:
// 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;
}Праћење стопе успеха достављања:
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_rateОбрасци интеграције и најбоље праксе
Обрада у webhook стилу: Иако WALLAWHATS не пружа webhook-ове директно, можете проверити endpoint обавештења за нове алерте и процесирати их у скоро реалном времену:
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);Условно управљање претплатама: Динамички додајте или уклањајте претплате на основу спољних окидача:
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 трансформише X алерте у реалном времену из мануелног dashboard алата у програмабилну компоненту инфраструктуре. Било да градите прилагођене радне токове за интелигенцију, аутоматизујете праћење бренда, или стварате услуге обавештења беле етикете, API пружа контролу и могућности ревизије потребне за продукцијску интеграцију.
Желите да проширите ваше праћење изван конкурената? Погледајте наш водич о праћењу крипто Twitter-а за тржишне сигнале или сазнајте како новинари користе WALLAWHATS за праћење извора у реалном времену.
Никада више не пропустите важан пост. Направите бесплатан налог — 1 WhatsApp број, алерти у реалном времену, без кредитне картице.
