· Nacho Coll · Guides  · 11 phút đọc

API X Alerts: Đăng ký Theo dõi và Lịch sử Thông báo Có Lập trình

Xây dựng tích hợp tùy chỉnh trên nền tảng WALLAWHATS. Thêm và xóa đăng ký X, định tuyến cảnh báo đến các kênh, lấy lịch sử thông báo — tất cả qua REST.

Xây dựng tích hợp tùy chỉnh trên nền tảng WALLAWHATS. Thêm và xóa đăng ký X, định tuyến cảnh báo đến các kênh, lấy lịch sử thông báo — tất cả qua REST.

Khi các cảnh báo X (Twitter) theo thời gian thực trở thành nhiệm vụ quan trọng cho doanh nghiệp của bạn, việc quản lý dashboard thủ công sẽ gặp giới hạn. Dù bạn đang xây dựng dashboard thông tin khách hàng, tự động hóa quy trình giám sát thương hiệu, hay tạo hệ thống thông báo tùy chỉnh cho bàn giao dịch, bạn cần kiểm soát có lập trình đối với các đăng ký cảnh báo X.

WALLAWHATS cung cấp REST API cho phép bạn tạo, quản lý và kiểm toán các đăng ký cảnh báo X mà không cần chạm vào giao diện web. Thêm hoặc xóa các tài khoản theo dõi, lấy lịch sử thông báo với trạng thái giao hàng, và tích hợp cảnh báo X theo thời gian thực vào bất kỳ hệ thống nào có thể giao tiếp HTTP.

API keys management page with create / revoke controls

Tại sao sử dụng API WALLAWHATS?

Dashboard hoạt động tuyệt vời cho quy trình thủ công, nhưng quyền truy cập API mở khóa các tình huống tự động hóa có thể mở rộng vượt xa khả năng quản lý của con người:

Nền tảng Thông tin Khách hàng: Tự động đăng ký theo dõi các giám đốc điều hành đối thủ cạnh tranh mới được xác định, trưởng phòng sản phẩm, hoặc các chuyên gia phân tích ngành khi họ được phát hiện thông qua các công cụ nghiên cứu hoặc tích hợp CRM.

Quy trình Giao dịch và Tài chính: Theo dõi có lập trình các tài khoản quy định, handle CEO, hoặc các nhà báo chuyên ngành dựa trên thay đổi danh mục đầu tư hoặc sự kiện thị trường—không cần quản lý đăng ký thủ công.

Giám sát Thương hiệu quy mô lớn: Thêm hoặc xóa theo dõi đề cập thương hiệu khi các chiến dịch mới ra mắt, sản phẩm được phát hành, hoặc tình huống khủng hoảng phát triển.

Ứng dụng SaaS Đa người thuê: Giám sát X theo thời gian thực nhãn trắng cho khách hàng của bạn, với quản lý đăng ký có lập trình đằng sau hậu trường.

Hệ thống Tuân thủ và Kiểm toán: Lấy lịch sử thông báo hoàn chỉnh với trạng thái giao hàng cho báo cáo quy định, dấu vết kiểm toán nội bộ, hoặc giám sát SLA.

Xác thực và Truy cập API

Mọi gói WALLAWHATS đều bao gồm quyền truy cập API với hạn ngạch key có thể mở rộng:

  • Free: 1 API key
  • Pro: 1 API key
  • Pro+: 2 API keys
  • Business: 5 API keys
  • Enterprise: 20 API keys

Xác thực sử dụng header x-api-key (không phải Authorization: Bearer). Tạo key của bạn từ phần API của dashboard, và đối xử với chúng như mật khẩu—chúng mang đầy đủ quyền hạn tài khoản.

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

Các Endpoint API Cốt lõi

API WALLAWHATS cung cấp năm nhóm tài nguyên chính để xây dựng tích hợp:

Quản lý Đăng ký

Tạo đăng ký mới:

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

{
  "xUsername": "elonmusk"
}

Liệt kê tất cả đăng ký:

GET /subscriptions
x-api-key: your_api_key_here

Xóa một đăng ký:

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

Lưu ý endpoint delete lấy handle X làm tham số đường dẫn—không phải ID đăng ký nội bộ.

Lịch sử Thông báo và Kiểm toán

Lấy lịch sử thông báo với trạng thái giao hàng:

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

Endpoint notifications trả về kết quả được phân trang với mỗi hàng đại diện cho một cảnh báo được gửi đến một kênh. Các giá trị trạng thái bao gồm:

  • queued: Cảnh báo được chấp nhận, đang chờ giao hàng
  • sent: Đã gửi đến nhà cung cấp kênh
  • delivered: Xác nhận đã nhận tại đích
  • read: Đã mở bởi người nhận (chỉ WhatsApp, yêu cầu bật báo cáo đã đọc)
  • failed: Nỗ lực giao hàng không thành công

Quản lý Kênh

Liệt kê các kênh đã cấu hình:

GET /channels
x-api-key: your_api_key_here

Thêm kênh mới:

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

{
  "type": "email",
  "destination": "alerts@yourcompany.com"
}

Xóa một kênh:

DELETE /channels/channel_id_here
x-api-key: your_api_key_here

Ảnh chụp Tweet

Truy cập thư viện ảnh chụp:

GET /snapshots
x-api-key: your_api_key_here

Xóa một ảnh chụp cụ thể:

DELETE /snapshots/tweet_id_here
x-api-key: your_api_key_here

Xây dựng Tích hợp: Ví dụ Mã

Tích hợp Node.js

Đây là ví dụ Node.js thêm đăng ký và polling thông báo mới:

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}`);
    }
  }
}

// Ví dụ sử dụng
async function monitorCompetitor() {
  const client = new WallaWhatsClient('your_api_key_here');
  
  // Thêm đăng ký mới
  await client.addSubscription('vercel');
  console.log('Đang theo dõi @vercel');
  
  // Kiểm tra thông báo gần đây
  const oneDayAgo = Date.now() - (24 * 60 * 60 * 1000);
  const notifications = await client.getNotifications(oneDayAgo, Date.now());
  
  console.log(`Tìm thấy ${notifications.items.length} cảnh báo gần đây`);
  notifications.items.forEach(notification => {
    console.log(`${notification.xUsername}: ${notification.status} lúc ${notification.timestamp}`);
  });
}

Tích hợp Python

Đối với quy trình Python, đây là một class xử lý quản lý đăng ký và polling thông báo:

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):
        """Thêm tài khoản X mới để theo dõi"""
        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óa tài khoản X khỏi theo dõi"""
        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):
        """Lấy lịch sử thông báo với phân trang"""
        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):
        """Lấy tất cả thông báo trong một khoảng thời gian, xử lý phân trang"""
        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):
        """Lấy tất cả đăng ký hiện tại"""
        response = requests.get(
            f'{self.base_url}/subscriptions',
            headers=self.headers
        )
        response.raise_for_status()
        return response.json()

# Ví dụ: Báo cáo kiểm toán hàng ngày
def generate_daily_report():
    api = WallaWhatsAPI('your_api_key_here')
    
    # Lấy thông báo của hôm qua
    end_time = int(time.time() * 1000)
    start_time = end_time - (24 * 60 * 60 * 1000)
    
    notifications = api.get_all_notifications(start_time, end_time)
    
    # Nhóm theo tài khoản và trạng thái
    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
    
    # In tóm tắt
    print(f"Báo cáo Cảnh báo Hàng ngày - {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']} cảnh báo, {success_rate:.1f}% đã giao")

Hiểu về Định tuyến Kênh

WALLAWHATS sử dụng mô hình định tuyến kênh toàn cầu—mọi cảnh báo từ mọi đăng ký đều phân phát đến tất cả các kênh đã bật và xác minh. Bạn không thể định tuyến các tài khoản cụ thể đến các đích cụ thể qua API (như “@elonmusk → WhatsApp, @vercel → email”).

Việc chọn kênh diễn ra ở cấp tài khoản trên trang Channels. Khi bạn thêm kênh qua API, nó sẽ khả dụng cho tất cả cảnh báo sau khi được xác minh. Khi bạn xóa kênh, nó sẽ ngừng nhận cảnh báo từ tất cả đăng ký.

Thiết kế này đơn giản hóa việc tự động hóa đồng thời ngăn chặn phân mảnh cảnh báo. Mã tích hợp của bạn không cần theo dõi quy tắc định tuyến theo đăng ký—chỉ cần quản lý tài khoản nào cần theo dõi và kênh nào cần bật.

Giới hạn Tốc độ và Giới hạn Vận tốc

WALLAWHATS thực hiện giới hạn vận tốc cấp người dùng để ngăn spam cảnh báo trong các giai đoạn hoạt động cao:

  • Free: 2 cảnh báo/giờ
  • Pro: 5 cảnh báo/giờ
  • Pro+: 15 cảnh báo/giờ
  • Business: 30 cảnh báo/giờ
  • Enterprise: 100 cảnh báo/giờ

Khi vượt quá giới hạn vận tốc, các tweet bổ sung được đệm vào thông báo tóm tắt và gửi mỗi 15 phút. Tích hợp API của bạn sẽ thấy chúng là các bản ghi thông báo riêng biệt—một cho cảnh báo ngay lập tức, và một cho mỗi batch tóm tắt.

Bản thân API không áp dụng giới hạn tốc độ riêng biệt trên quản lý đăng ký hoặc truy vấn thông báo. Tuy nhiên, tránh tấn công các endpoint bằng các yêu cầu không cần thiết—cache danh sách đăng ký cục bộ và truy vấn thông báo batch một cách hiệu quả.

Xử lý Lỗi và Khắc phục Sự cố

Các mẫu lỗi API phổ biến và cách xử lý chúng:

Lỗi xác thực (401):

  • Xác minh API key của bạn là chính xác và chưa bị thu hồi
  • Đảm bảo bạn đang sử dụng header x-api-key, không phải Authorization

Xung đột đăng ký (409):

  • Tài khoản đã được theo dõi: Đăng ký đã tồn tại, coi như thành công
  • Tài khoản được bảo vệ/riêng tư: WALLAWHATS từ chối chúng theo thiết kế

Giới hạn tốc độ (429):

  • Back off theo cấp số nhân trước khi thử lại
  • Kiểm tra xem bạn có đang tiếp cận giới hạn gói trên các tài khoản được theo dõi không

Vấn đề xác minh kênh:

  • Các kênh mới yêu cầu xác minh OTP trước khi nhận cảnh báo
  • Các kênh được thêm có lập trình sẽ không hoạt động cho đến khi người dùng hoàn thành xác minh

Giám sát và Cảnh báo Tích hợp của bạn

Vì WALLAWHATS trở thành cơ sở hạ tầng quan trọng khi được tích hợp vào quy trình kinh doanh, hãy giám sát sức khỏe tích hợp của bạn:

Phát hiện Trôi dạt Đăng ký:

// Kiểm tra xem các đăng ký dự kiến có còn hoạt động không
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(`Đăng ký bị thiếu: ${missing.join(', ')}`);
  }
  
  return missing;
}

Giám sát Tỷ lệ Thành công Giao hàng:

def check_delivery_health():
    # Kiểm tra 6 giờ qua
    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:
        # Cảnh báo đội ops của bạn
        print(f"CẢNH BÁO: Tỷ lệ thành công giao hàng giảm xuống {success_rate:.1f}%")
    
    return success_rate

Mẫu Tích hợp và Thực hành Tốt nhất

Xử lý Kiểu Webhook: Mặc dù WALLAWHATS không cung cấp webhook trực tiếp, bạn có thể poll endpoint notifications để tìm cảnh báo mới và xử lý chúng gần thời gian thực:

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') {
      // Xử lý cảnh báo - gửi đến Slack, cập nhật database, v.v.
      await processAlert(notification);
    }
  }
  
  localStorage.setItem('lastNotificationCheck', now);
}

// Poll mỗi 30 giây
setInterval(pollForNewAlerts, 30000);

Quản lý Đăng ký Có điều kiện: Thêm hoặc xóa đăng ký một cách động dựa trên trigger bên ngoài:

def update_competitor_monitoring(portfolio_companies):
    """Cập nhật giám sát X dựa trên danh mục hiện tại"""
    current_subs = {s['xUsername'] for s in api.list_subscriptions()}
    
    # Các tài khoản chúng ta nên theo dõi
    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'])
    
    # Thêm đăng ký bị thiếu
    for account in target_accounts - current_subs:
        try:
            api.add_subscription(account)
            print(f"Bắt đầu theo dõi @{account}")
        except Exception as e:
            print(f"Không thể thêm @{account}: {e}")
    
    # Xóa đăng ký lỗi thời
    for account in current_subs - target_accounts:
        api.remove_subscription(account)
        print(f"Ngừng theo dõi @{account}")

API WALLAWHATS chuyển đổi cảnh báo X theo thời gian thực từ công cụ dashboard thủ công thành thành phần cơ sở hạ tầng có thể lập trình. Dù bạn đang xây dựng quy trình thông tin tùy chỉnh, tự động hóa giám sát thương hiệu, hay tạo dịch vụ thông báo nhãn trắng, API cung cấp các khả năng kiểm soát và kiểm toán cần thiết cho tích hợp sản xuất.

Muốn mở rộng việc giám sát của bạn vượt ra ngoài đối thủ cạnh tranh? Hãy xem hướng dẫn của chúng tôi về giám sát crypto Twitter để tìm tín hiệu thị trường hoặc tìm hiểu cách các nhà báo sử dụng WALLAWHATS cho giám sát nguồn theo thời gian thực.

Không bao giờ bỏ lỡ một bài đăng quan trọng nào nữa. Tạo tài khoản miễn phí — 1 số WhatsApp, cảnh báo thời gian thực, không cần thẻ tín dụng.

Quay lại Blog

Bài viết liên quan

Xem tất cả bài viết »