ConnectWise Automate Alert Management
Overview
Alerts in ConnectWise Automate are notifications generated by monitors, scripts, or system events that require attention. This skill covers alert listing, acknowledgment, history tracking, and ticket creation workflows.
Key Concepts
Alert Sources
| Source | Description | Example |
|---|---|---|
| Monitor | Generated by monitor threshold | CPU > 90% |
| Script | Generated by script execution | Backup failed |
| Event Log | Windows Event Log trigger | Security event |
| System | Automate system events | Agent offline |
| Manual | User-created alerts | Maintenance note |
Alert Severity Levels
| Level | Value | Description | Response Time |
|---|---|---|---|
Information | 1 | Informational only | Review at convenience |
Warning | 2 | Potential issue | Investigate within hours |
Error | 3 | Failure detected | Respond within SLA |
Critical | 4 | Severe/emergency | Immediate response |
Alert Lifecycle
Generated → Active → Acknowledged → Resolved
│ │
│ └── Ticket Created
│
└── Auto-Cleared (if condition clears)
Alert Status
| Status | Description |
|---|---|
New | Just generated, unread |
Active | Open, unacknowledged |
Acknowledged | Someone is working on it |
Resolved | Issue fixed, alert closed |
Cleared | Condition auto-cleared |
Suppressed | Temporarily hidden |
Field Reference
Alert Fields
interface Alert {
// Identifiers
AlertID: number; // Primary key
AlertGUID: string; // Global unique ID
// Source
Source: AlertSource; // Monitor, Script, EventLog, System
SourceID: number; // ID of source (MonitorID, ScriptID, etc.)
SourceName: string; // Name of source
// Target
ComputerID: number; // Affected computer
ComputerName: string; // Computer hostname
ClientID: number; // Parent client
ClientName: string; // Client name
LocationID: number; // Location ID
// Alert Details
Subject: string; // Alert title
Message: string; // Detailed message
Severity: AlertSeverity; // 1-4 severity level
Status: AlertStatus; // Current status
// Timestamps
TimeGenerated: string; // When created
TimeAcknowledged: string; // When acknowledged
TimeResolved: string; // When resolved
LastUpdate: string; // Last status change
// Acknowledgment
AcknowledgedBy: string; // User who acknowledged
Notes: string; // Acknowledgment notes
// Ticket Integration
TicketID: number; // Linked ticket ID
TicketStatus: string; // Ticket status
// Context
Category: string; // Alert category
AdditionalData: object; // Extra context data
}
type AlertSource = 'Monitor' | 'Script' | 'EventLog' | 'System' | 'Manual';
type AlertSeverity = 1 | 2 | 3 | 4;
type AlertStatus = 'New' | 'Active' | 'Acknowledged' | 'Resolved' | 'Cleared' | 'Suppressed';
Alert History Fields
interface AlertHistory {
HistoryID: number;
AlertID: number;
Action: string; // Status change, note added, etc.
ActionBy: string; // User who made change
ActionTime: string; // When action occurred
PreviousStatus: string;
NewStatus: string;
Notes: string;
}
API Patterns
List Active Alerts
GET /cwa/api/v1/Alerts?condition=Status in ('New','Active')&pageSize=100
Authorization: Bearer {token}
Response:
[
{
"AlertID": 54321,
"Subject": "Disk C: Low Space",
"Message": "Disk C: is 8% free on ACME-DC01",
"Severity": 2,
"Status": "Active",
"ComputerID": 12345,
"ComputerName": "ACME-DC01",
"ClientName": "Acme Corporation",
"Source": "Monitor",
"SourceName": "Disk Space Monitor",
"TimeGenerated": "2024-02-15T08:30:00Z",
"Category": "Performance"
}
]
Get Alert Details
GET /cwa/api/v1/Alerts/{alertID}
Authorization: Bearer {token}
Response:
{
"AlertID": 54321,
"AlertGUID": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"Subject": "Disk C: Low Space",
"Message": "Disk C: is 8% free on ACME-DC01\n\nTotal: 500 GB\nFree: 40 GB\nThreshold: 10%",
"Severity": 2,
"Status": "Active",
"ComputerID": 12345,
"ComputerName": "ACME-DC01",
"ClientID": 100,
"ClientName": "Acme Corporation",
"LocationID": 1,
"Source": "Monitor",
"SourceID": 5001,
"SourceName": "Disk Space Monitor",
"TimeGenerated": "2024-02-15T08:30:00Z",
"Category": "Performance",
"AdditionalData": {
"DriveLetter": "C:",
"FreeSpaceGB": 40,
"TotalSpaceGB": 500,
"FreePercent": 8
}
}
Filter Alerts by Client
GET /cwa/api/v1/Alerts?condition=ClientID = 100 and Status = 'Active'&pageSize=100
Authorization: Bearer {token}
Filter Alerts by Severity
GET /cwa/api/v1/Alerts?condition=Severity >= 3 and Status = 'Active'&pageSize=100
Authorization: Bearer {token}
Acknowledge Alert
POST /cwa/api/v1/Alerts/{alertID}/Acknowledge
Authorization: Bearer {token}
Content-Type: application/json
{
"Notes": "Investigating disk space issue"
}
Response:
{
"AlertID": 54321,
"Status": "Acknowledged",
"AcknowledgedBy": "admin@example.com",
"TimeAcknowledged": "2024-02-15T10:45:00Z"
}
Resolve Alert
POST /cwa/api/v1/Alerts/{alertID}/Resolve
Authorization: Bearer {token}
Content-Type: application/json
{
"Notes": "Cleared 50GB of temp files. Disk now at 18% free."
}
Add Note to Alert
POST /cwa/api/v1/Alerts/{alertID}/Notes
Authorization: Bearer {token}
Content-Type: application/json
{
"Note": "Contacted user about large files in Downloads folder"
}
Create Ticket from Alert
POST /cwa/api/v1/Alerts/{alertID}/CreateTicket
Authorization: Bearer {token}
Content-Type: application/json
{
"TicketSubject": "Disk Space Critical on ACME-DC01",
"Priority": 2,
"BoardID": 1,
"Notes": "Auto-created from Automate alert"
}
Response:
{
"AlertID": 54321,
"TicketID": 98765,
"TicketNumber": "TKT-2024-00123",
"TicketStatus": "New"
}
Get Alert History
GET /cwa/api/v1/Alerts/{alertID}/History
Authorization: Bearer {token}
Response:
[
{
"HistoryID": 1,
"Action": "Created",
"ActionTime": "2024-02-15T08:30:00Z",
"NewStatus": "New"
},
{
"HistoryID": 2,
"Action": "Acknowledged",
"ActionBy": "admin@example.com",
"ActionTime": "2024-02-15T10:45:00Z",
"PreviousStatus": "Active",
"NewStatus": "Acknowledged",
"Notes": "Investigating disk space issue"
}
]
Suppress Alert
POST /cwa/api/v1/Alerts/{alertID}/Suppress
Authorization: Bearer {token}
Content-Type: application/json
{
"Duration": 3600,
"Reason": "Scheduled maintenance window"
}
Bulk Acknowledge Alerts
POST /cwa/api/v1/Alerts/BulkAcknowledge
Authorization: Bearer {token}
Content-Type: application/json
{
"AlertIDs": [54321, 54322, 54323],
"Notes": "Bulk acknowledgment for server maintenance"
}
Workflows
Get Critical Alerts Dashboard
async function getCriticalAlertsDashboard(client) {
const criticalAlerts = await client.request(
`/Alerts?condition=Severity >= 3 and Status in ('New','Active')&pageSize=100`
);
const dashboard = {
totalCritical: criticalAlerts.length,
byClient: {},
byCategory: {},
oldest: null
};
for (const alert of criticalAlerts) {
// Group by client
const clientName = alert.ClientName || 'Unknown';
if (!dashboard.byClient[clientName]) {
dashboard.byClient[clientName] =