Skip to main content

Pengenalan

Event device.disconnected dipicu ketika perangkat atau channel komunikasi menjadi terputus dan tidak tersedia.
Gunakan event ini untuk mendeteksi downtime channel dan trigger alert.

Trigger Event

Perangkat terputus

   Platform CSKU AI

   Trigger webhook device.disconnected

   HTTP POST → URL Webhook Anda

Struktur Payload

{
  "event": "device.disconnected",
  "timestamp": 1738056000,
  "device": {
    "id": "device_abc123",
    "name": "WhatsApp Business Device",
    "channel": {
      "id": "channel_merchant_id",
      "name": "WhatsApp Business",
      "engine": "wa"
    },
    "bisnis": {
      "id": "biz_123",
      "name": "My Business"
    },
    "user": {
      "id": "merchant_456",
      "name": "Merchant Name"
    }
  },
  "status": "disconnected"
}

Deskripsi Field

FieldTipeDeskripsi
eventstringIdentifier event: device.disconnected
timestampintegerUnix timestamp saat event terjadi
device.idstringIdentifier perangkat unik
device.namestringNama tampilan perangkat
device.channel.idstringIdentifier channel
device.channel.namestringNama channel
device.channel.enginestringTipe engine channel
device.bisnis.idstringID Bisnis
device.bisnis.namestringNama bisnis
device.user.idstringID user merchant
device.user.namestringNama merchant
statusstringStatus perangkat: disconnected

Use Case

Lacak downtime channel dan hitung metrik ketersediaan.
Notifikasi tim segera ketika perangkat menjadi offline.
Tentukan percakapan mana yang mungkin terpengaruh oleh pemutusan.
Otomatis beralih ke channel backup ketika channel utama terputus.

Implementasi

app.post('/webhook', async (req, res) => {
  const { event, device } = req.body;
  
  if (event === 'device.disconnected') {
    console.log(`Perangkat ${device.name} sekarang terputus`);
    
    // Update status perangkat
    await db.devices.update(device.id, {
      status: 'disconnected',
      last_disconnected: new Date(req.body.timestamp * 1000)
    });
    
    // Hitung durasi downtime
    const lastConnected = await db.devices.getLastConnected(device.id);
    const downtime = Date.now() - lastConnected;
    
    // Alert tim
    await notifyTeam({
      level: 'critical',
      message: `Perangkat ${device.name} offline`,
      device: device,
      downtime: downtime
    });
    
    // Periksa percakapan aktif
    const activeConvos = await db.conversations.getActiveByChannel(device.channel.id);
    if (activeConvos.length > 0) {
      console.warn(`Peringatan: ${activeConvos.length} percakapan aktif di channel yang terputus`);
    }
  }
  
  res.status(200).send('OK');
});

Strategi Alert

1. Notifikasi Segera

// Kirim alert kritis segera
function notifyTeam(alert) {
  if (alert.level === 'critical') {
    // Kirim ke semua channel
    sendSlack(alert);
    sendEmail(alert);
    sendSMS(alert);
  }
}

2. Aturan Eskalasi

// Eskalasi berdasarkan pentingnya perangkat
if (device.channel.engine === 'wa') {
  // WhatsApp itu kritis - eskalasi segera
  await escalateToManagement(alert);
}

3. Pelacakan Downtime

// Lacak downtime kumulatif
await db.downtimeLog.create({
  device_id: device.id,
  device_name: device.name,
  disconnected_at: new Date(req.body.timestamp * 1000),
  status: 'ongoing'
});

Praktik Terbaik

Pemutusan perangkat dapat berdampak pada pengalaman pelanggan. Bertindak cepat!
  1. Siapkan Alert
    // Konfigurasi threshold alert
    const ALERT_THRESHOLDS = {
      whatsapp: 'immediate',
      telegram: '5 minutes',
      slack: '15 minutes'
    };
    
  2. Monitor Channel Kritis
    const CRITICAL_CHANNELS = ['wa', 'telegram'];
    
    if (CRITICAL_CHANNELS.includes(device.channel.engine)) {
      await sendCriticalAlert(device);
    }
    
  3. Lacak Dampak
    // Hitung percakapan yang terpengaruh
    const affectedCount = await db.conversations.countByChannel(device.channel.id);
    console.log(`${affectedCount} percakapan terpengaruh`);
    
  4. Dokumentasikan Insiden
    // Buat record insiden
    await db.incidents.create({
      type: 'device_disconnect',
      device_id: device.id,
      channel: device.channel.name,
      timestamp: new Date(),
      status: 'investigating'
    });
    

Event Terkait

Device Connected

Perangkat menjadi online