· Nacho Coll · Guides · 8 мин чтения
API уведомлений X: программные подписки и история уведомлений
Создавайте пользовательские интеграции на базе WALLAWHATS. Добавляйте и удаляйте подписки X, направляйте уведомления в каналы, получайте историю уведомлений — всё через REST.

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

Зачем использовать API WALLAWHATS?
Панель управления отлично подходит для ручных рабочих процессов, но доступ к 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 (не Authorization: Bearer). Генерируйте ваши ключи из раздела API панели управления и обращайтесь с ними как с паролями — они несут полные привилегии аккаунта.
curl -H "x-api-key: your_api_key_here" \
https://api.wallawhats.com/subscriptionsОсновные конечные точки API
API WALLAWHATS предоставляет пять основных групп ресурсов для создания интеграций:
Управление подписками
Создать новую подписку:
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Обратите внимание, что конечная точка удаления принимает X-хендл как параметр пути — не внутренний ID подписки.
История уведомлений и аудит
Получить историю уведомлений со статусом доставки:
GET /notifications?from=1704067200000&to=1704153600000
x-api-key: your_api_key_hereКонечная точка уведомлений возвращает пагинированные результаты, где каждая строка представляет одно уведомление, доставленное в один канал. Значения статуса включают:
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_hereСнимки твитов
Доступ к галерее снимков:
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»).
Выбор канала происходит на уровне аккаунта на странице Каналы. Когда вы добавляете канал через 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 становится критической инфраструктурой при интеграции в бизнес-процессы, отслеживайте состояние вашей интеграции:
Обнаружение дрейфа подписок:
// 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Шаблоны интеграции и лучшие практики
Обработка в стиле вебхука: хотя WALLAWHATS не предоставляет вебхуки напрямую, вы можете опрашивать конечную точку уведомлений для новых уведомлений и обрабатывать их почти в реальном времени:
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}")API WALLAWHATS превращает уведомления X в реальном времени из ручного инструмента панели управления в программируемый компонент инфраструктуры. Независимо от того, создаёте ли вы пользовательские рабочие процессы аналитики, автоматизируете мониторинг бренда или создаёте сервисы уведомлений под белой маркой, API предоставляет контроль и возможности аудита, необходимые для производственной интеграции.
Хотите расширить ваш мониторинг за пределы конкурентов? Ознакомьтесь с нашим руководством по мониторингу крипто Twitter для рыночных сигналов или узнайте, как журналисты используют WALLAWHATS для мониторинга источников в реальном времени.
Никогда больше не пропускайте важный пост. Создайте бесплатный аккаунт — 1 номер WhatsApp, уведомления в реальном времени, кредитная карта не требуется.
