· Nacho Coll · Guides · 9 мин четене
X Alerts API: Програмни абонаменти и история на уведомленията
Създайте персонализирани интеграции върху WALLAWHATS. Добавяйте и премахвайте X абонаменти, насочвайте сигнали към канали, извличайте история на уведомленията — всичко чрез REST.

Когато сигналите в реално време от X (Twitter) станат критично важни за вашия бизнес, ръчното управление чрез табло достига предел. Независимо дали създавате табла за клиентска интелигентност, автоматизирате работни процеси за мониторинг на бранда или правите персонализирани системи за уведомления за търговски маси, имате нужда от програмен контрол върху вашите X абонаменти за сигнали.
WALLAWHATS предоставя REST API, който ви позволява да създавате, управлявате и одитирате X абонаменти за сигнали без да докосвате уеб интерфейса. Добавяйте или премахвайте наблюдавани профили, извличайте история на уведомленията със статус на доставка и интегрирайте X сигнали в реално време във всяка система, която „говори” HTTP.

Защо да използвате WALLAWHATS API?
Таблото работи отлично за ръчни работни процеси, но достъпът до API отключва сценарии за автоматизация, които се мащабират отвъд човешкото управление:
Платформи за клиентска интелигентност: Автоматично абонирайте за новоидентифицирани конкурентни ръководители, продуктови лидери или индустриални анализатори, докато бъдат открити чрез изследователски инструменти или CRM интеграции.
Търговски и финансови работни процеси: Програмно наблюдавайте регулаторни профили, CEO акаунти или специфични за сектора журналисти въз основа на промени в портфейла или пазарни събития — без ръчно управление на абонаменти.
Мониторинг на бранд в мащаб: Добавяйте или премахвайте проследяване на споменавания на бранда, докато се стартират нови кампании, доставят се продукти или се развиват кризисни ситуации.
Мултитенантни SaaS приложения: White-label мониторинг на X в реално време за вашите клиенти, с програмно управление на абонаменти зад кулисите.
Системи за съответствие и одит: Извличайте пълна история на уведомленията със статус на доставка за регулаторни отчети, вътрешни одитни следи или мониторинг на SLA.
API автентикация и достъп
Всеки WALLAWHATS план включва API достъп с мащабируеми квоти за ключове:
- Free: 1 API ключ
- Pro: 1 API ключ
- Pro+: 2 API ключа
- Business: 5 API ключа
- Enterprise: 20 API ключа
Автентикацията използва хедъра x-api-key (не Authorization: Bearer). Генерирайте вашите ключове от API секцията на таблото и ги третирайте като пароли — те носят пълни привилегии на профила.
curl -H "x-api-key: your_api_key_here" \
https://api.wallawhats.com/subscriptionsОсновни API крайни точки
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 крайната точка приема X username като path параметър — не вътрешен subscription ID.
История на уведомленията и одит
Извличане на история на уведомленията със статус на доставка:
GET /notifications?from=1704067200000&to=1704153600000
x-api-key: your_api_key_hereКрайната точка notifications връща страници с резултати, като всеки ред представлява един сигнал, доставен на един канал. Стойностите на статуса включват:
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}`);
}
}
}
// Пример за употреба
async function monitorCompetitor() {
const client = new WallaWhatsClient('your_api_key_here');
// Добавете нов абонамент
await client.addSubscription('vercel');
console.log('Сега наблюдаваме @vercel');
// Проверете скорошните уведомления
const oneDayAgo = Date.now() - (24 * 60 * 60 * 1000);
const notifications = await client.getNotifications(oneDayAgo, Date.now());
console.log(`Намерени ${notifications.items.length} скорошни сигнали`);
notifications.items.forEach(notification => {
console.log(`${notification.xUsername}: ${notification.status} в ${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):
"""Добавете нов X профил за наблюдение"""
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):
"""Премахнете X профил от наблюдение"""
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):
"""Извличане на история на уведомленията с пагинация"""
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):
"""Извличане на всички уведомления в определен период, обработвайки пагинацията"""
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):
"""Получете всички текущи абонаменти"""
response = requests.get(
f'{self.base_url}/subscriptions',
headers=self.headers
)
response.raise_for_status()
return response.json()
# Пример: Дневен одитен отчет
def generate_daily_report():
api = WallaWhatsAPI('your_api_key_here')
# Получете вчерашните уведомления
end_time = int(time.time() * 1000)
start_time = end_time - (24 * 60 * 60 * 1000)
notifications = api.get_all_notifications(start_time, end_time)
# Групирайте по профил и статус
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(f"Дневен отчет за сигнали - {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']} сигнала, {success_rate:.1f}% доставени")Разбиране на насочването на канали
WALLAWHATS използва глобален модел за насочване на канали — всеки сигнал от всеки абонамент се разпространява до всички включени и верифицирани канали. Не можете да насочите специфични профили към специфични дестинации чрез API (като „@elonmusk → WhatsApp, @vercel → имейл”).
Селекцията на канал се случва на ниво профил в страницата Канали. Когато добавите канал чрез API, той става достъпен за всички сигнали след верификация. Когато премахнете канал, той спира да получава сигнали от всички абонаменти.
Този дизайн опростява автоматизацията, като предотвратява фрагментацията на сигналите. Вашият интеграционен код не трябва да проследява правила за насочване по абонамент — просто управлявайте кои профили да наблюдавате и кои канали да включите.
Ограничения на скоростта и ограничения за скорост
WALLAWHATS прилага ограничения за скорост на ниво потребител, за да предотврати спам със сигнали по време на периоди с висока активност:
- Free: 2 сигнала/час
- Pro: 5 сигнала/час
- Pro+: 15 сигнала/час
- Business: 30 сигнала/час
- Enterprise: 100 сигнала/час
Когато ограниченията за скорост бъдат превишени, допълнителните туитове се буферират в обобщени съобщения и се доставят на всеки 15 минути. Вашата API интеграция ще види тези като отделни записи за уведомления — един за незабавния сигнал и един за всяка обобщена партида.
Самото API не налага отделни ограничения на скоростта за управление на абонаменти или заявки за уведомления. Въпреки това, избягвайте да бомбардирате крайните точки с ненужни заявки — кеширайте списъците с абонаменти локално и групирайте заявките за уведомления ефективно.
Обработка на грешки и отстраняване на неизправности
Общи модели на API грешки и как да ги обработите:
Неуспехи при автентикация (401):
- Проверете дали вашият API ключ е правилен и не е отменен
- Уверете се, че използвате хедъра
x-api-key, неAuthorization
Конфликти при абонаменти (409):
- Профилът вече се наблюдава: Абонаментът съществува, третирайте като успех
- Защитен/частен профил: WALLAWHATS ги отказва по дизайн
Ограничение на скоростта (429):
- Отступете експоненциално преди повтарящ опит
- Проверете дали се приближавате до ограниченията на плана за наблюдавани профили
Проблеми с верификацията на канала:
- Новите канали изискват OTP верификация преди получаване на сигнали
- Програмно добавените канали няма да работят, докато потребителят не завърши верификацията
Мониторинг и алармиране на вашите интеграции
Тъй като WALLAWHATS става критична инфраструктура при интегриране в бизнес работни процеси, наблюдавайте здравето на вашата интеграция:
Откриване на отклонение в абонаментите:
// Проверете дали очакваните абонаменти са все още активни
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.join(', ')}`);
}
return missing;
}Мониторинг на процента на успех при доставка:
def check_delivery_health():
# Проверете последните 6 часа
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:
# Алармирайте вашия оперативен екип
print(f"ВНИМАНИЕ: Процентът на успех при доставка падна до {success_rate:.1f}%")
return success_rateИнтеграционни модели и най-добри практики
Обработка в стил webhook: Въпреки че WALLAWHATS не предоставя webhooks директно, можете да проверявате крайната точка notifications за нови сигнали и да ги обработвате в почти реално време:
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') {
// Обработете сигнала - изпратете до Slack, обновете база данни и т.н.
await processAlert(notification);
}
}
localStorage.setItem('lastNotificationCheck', now);
}
// Проверявайте на всеки 30 секунди
setInterval(pollForNewAlerts, 30000);Условно управление на абонаменти: Динамично добавяйте или премахвайте абонаменти въз основа на външни тригери:
def update_competitor_monitoring(portfolio_companies):
"""Обновете X мониторинга въз основа на текущия портфейл"""
current_subs = {s['xUsername'] for s in api.list_subscriptions()}
# Профили, които трябва да наблюдаваме
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'])
# Добавете липсващи абонаменти
for account in target_accounts - current_subs:
try:
api.add_subscription(account)
print(f"Започна наблюдението на @{account}")
except Exception as e:
print(f"Неуспешно добавяне на @{account}: {e}")
# Премахнете остарели абонаменти
for account in current_subs - target_accounts:
api.remove_subscription(account)
print(f"Спря наблюдението на @{account}")WALLAWHATS API трансформира X сигналите в реално време от ръчен инструмент за табло в програмируем инфраструктурен компонент. Независимо дали създавате персонализирани работни процеси за интелигентност, автоматизирате мониторинг на бранд или създавате white-label услуги за уведомления, API предоставя контрола и възможностите за одит, необходими за производствена интеграция.
Искате да разширите наблюдението си отвъд конкурентите? Вижте нашия ръководител за наблюдение на крипто Twitter за пазарни сигнали или научете как журналистите използват WALLAWHATS за наблюдение на източници в реално време.
Никога повече не пропускайте важна публикация. Създайте безплатен профил — 1 WhatsApp номер, сигнали в реално време, без нужда от кредитна карта.
