Webhooks

WUDO uses MQTT for real-time event notifications. Subscribe to topics to receive updates about blog generation progress, publishing events, product optimization progress, and visual check results.

This page covers real-time MQTT events for monitoring progress in your UI. If you want WUDO to automatically push published blogs and optimized products to your website via HTTP, see the Auto-Publish Webhook Setup guide instead.

Connection

WUDO uses MQTT over WebSocket for real-time notifications. Connect using any MQTT client library.

Protocol:mqtt:// or ws://
Port:1883 (MQTT) / 9001 (WebSocket)

Event Topics

blog/{blogId}/progress

Emitted during blog generation to report pipeline progress.

{
  "blogId": "abc-123",
  "status": "generating",
  "progress": 65,
  "currentStep": "Writing section 3 of 5",
  "estimatedSecondsRemaining": 45
}
blog/{blogId}/published

Emitted when a blog is published and available via the API.

{
  "blogId": "abc-123",
  "slug": "10-web-design-trends-2026",
  "title": "10 Web Design Trends for 2026",
  "publishedAt": "2026-01-29T10:00:00Z"
}
blog/{blogId}/visual-check-complete

Emitted when an AI visual quality check completes (auto or manual).

{
  "blogId": "abc-123",
  "overallScore": 85,
  "issueCount": 2,
  "hasCriticalIssues": false,
  "checkedUrl": "https://yoursite.com/blog/your-post"
}
blog/{blogId}/failed

Emitted when blog generation encounters an unrecoverable error.

{
  "blogId": "abc-123",
  "error": "AI provider timeout",
  "step": "content_writing",
  "failedAt": "2026-01-29T10:05:00Z"
}
optimization/{domainId}/progress

Emitted during product optimization to report batch progress.

{
  "domainId": "domain-456",
  "status": "optimizing",
  "progress": 40,
  "totalProducts": 50,
  "completedProducts": 20
}
optimization/{domainId}/complete

Emitted when a product optimization batch completes.

{
  "domainId": "domain-456",
  "totalProducts": 50,
  "optimizedCount": 48,
  "failedCount": 2,
  "completedAt": "2026-02-15T14:30:00Z"
}

JavaScript Example

mqtt.js
import mqtt from 'mqtt';

const client = mqtt.connect('ws://wudoseo.com:9001');

client.on('connect', () => {
  // Subscribe to all blog events for a specific blog
  client.subscribe('blog/abc-123/#');
});

client.on('message', (topic, message) => {
  const data = JSON.parse(message.toString());

  if (topic.endsWith('/progress')) {
    console.log(`Progress: ${data.progress}% - ${data.currentStep}`);
  }

  if (topic.endsWith('/published')) {
    console.log(`Blog published at /blog/${data.slug}`);
  }

  if (topic.endsWith('/visual-check-complete')) {
    console.log(`Visual check score: ${data.overallScore}/100`);
  }
});