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
| Field | Tipe | Deskripsi |
|---|
event | string | Identifier event: device.disconnected |
timestamp | integer | Unix timestamp saat event terjadi |
device.id | string | Identifier perangkat unik |
device.name | string | Nama tampilan perangkat |
device.channel.id | string | Identifier channel |
device.channel.name | string | Nama channel |
device.channel.engine | string | Tipe engine channel |
device.bisnis.id | string | ID Bisnis |
device.bisnis.name | string | Nama bisnis |
device.user.id | string | ID user merchant |
device.user.name | string | Nama merchant |
status | string | Status 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!
-
Siapkan Alert
// Konfigurasi threshold alert
const ALERT_THRESHOLDS = {
whatsapp: 'immediate',
telegram: '5 minutes',
slack: '15 minutes'
};
-
Monitor Channel Kritis
const CRITICAL_CHANNELS = ['wa', 'telegram'];
if (CRITICAL_CHANNELS.includes(device.channel.engine)) {
await sendCriticalAlert(device);
}
-
Lacak Dampak
// Hitung percakapan yang terpengaruh
const affectedCount = await db.conversations.countByChannel(device.channel.id);
console.log(`${affectedCount} percakapan terpengaruh`);
-
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