Back to Service Catalog

Service Catalog Automation Examples

Automation examples for maintaining the Service Catalog Schema. These automations help track service status, monitor SLA performance, route requests, and keep knowledge articles current.

📖 15 min read ⚡ Automations v1.0 💎 Pro Tier

Service Status Automations

Service Status Change Notification

Purpose: Notify stakeholders when service status changes

Trigger: Object updated - Business Service - Status changed

Actions:

  1. Identify service owner and support team
  2. Send notification based on new status
  3. Update status page (if integrated)

Email Template (Status = Outage):

Subject: [URGENT] Service Outage: {{Service Name}}

SERVICE STATUS CHANGE

Service: {{Service Name}}
Previous Status: {{previous_status}}
New Status: OUTAGE
Criticality: {{Criticality}}

Owner: {{Owner.Full Name}}
Support Team: {{Support Team.Team Name}}

{{#if Support Team.Slack Channel}}
Updates will be posted to: {{Support Team.Slack Channel}}
{{/if}}

Please join the incident response immediately.

Email Template (Status = Operational):

Subject: [RESOLVED] Service Restored: {{Service Name}}

SERVICE STATUS CHANGE

Service: {{Service Name}}
Previous Status: {{previous_status}}
New Status: OPERATIONAL

The service has been restored to normal operation.

Duration: {{outage_duration}}

Critical Service Health Check

Purpose: Monitor critical services for status issues

Trigger: Scheduled - Every 15 minutes

Query:

objectType = "Business Service"
AND Criticality = "Critical"
AND Status != "Operational"

Escalation Thresholds:

Status Duration Escalation
Degraded 30 min Service Owner
Degraded 60 min IT Director
Outage 15 min Service Owner + Support Team Lead
Outage 30 min IT Director
Outage 60 min CIO

SLA Tracking Automations

SLA Performance Dashboard Update

Purpose: Calculate daily SLA performance metrics

Trigger: Scheduled - Daily at 6:00 AM

Services by SLA Tier:

objectType = "Business Service"
AND Status = "Operational"
AND "Service Level".Level Name = "Gold"

Services Missing SLA:

objectType = "Business Service"
AND Status = "Operational"
AND "Service Level" IS EMPTY

SLA Breach Alert

Purpose: Alert when service availability drops below SLA target

Trigger: Service monitoring integration (webhook)

Alert Template:

Subject: [SLA BREACH] {{Service Name}} Below Availability Target

SLA BREACH ALERT

Service: {{Service Name}}
SLA Tier: {{Service Level.Level Name}}
Target Availability: {{Service Level.Availability Target}}
Current Availability: {{current_availability}}%
Shortfall: {{breach_amount}}%

Owner: {{Owner.Full Name}} ({{Owner.Email}})
Support Team: {{Support Team.Team Name}}

Immediate investigation required.

Request Routing Automations

Service Request Assignment

Purpose: Route service requests to appropriate support team

Trigger: Service request created with service context

Logic:

def route_request(request, service_key):
    service = get_service(service_key)

    if service.support_team:
        assign_to_team(request, service.support_team)
        notify_team(service.support_team, request)
    else:
        # Fallback to default queue
        assign_to_default_queue(request)
        alert_catalog_manager("Service without support team", service)

Service Request SLA Application

Purpose: Apply appropriate SLA based on service and request type

Trigger: Service request created

Logic:

def apply_request_sla(request, service_key, request_type_key):
    # First check request type for specific SLA
    request_type = get_request_type(request_type_key)
    if request_type and request_type.expected_sla:
        apply_sla(request, request_type.expected_sla)
        return

    # Fall back to service SLA
    service = get_service(service_key)
    if service and service.service_level:
        apply_sla(request, service.service_level)
        return

    # Default SLA
    apply_sla(request, get_default_sla())

Knowledge Article Automations

Knowledge Article Suggestion

Purpose: Suggest relevant articles when users access a service

Trigger: User views service in portal

Query:

objectType = "Knowledge Article"
AND Service = "{{current_service_key}}"
AND Status = "Published"
ORDER BY Views DESC

Stale Knowledge Article Detection

Purpose: Identify articles needing review

Trigger: Scheduled - Weekly on Monday at 8:00 AM

Query - Articles not updated in 180 days:

objectType = "Knowledge Article"
AND Status = "Published"
AND "Last Updated" < now(-180d)

Query - Low-view articles (potential removal):

objectType = "Knowledge Article"
AND Status = "Published"
AND Views < 10
AND "Last Updated" < now(-90d)

Email Template:

Subject: [CMDB] Knowledge Article Review Required

STALE KNOWLEDGE ARTICLES

The following articles haven't been updated in 180+ days:

{{#each stale_articles}}
- {{Title}}
  Service: {{Service.Service Name}}
  Last Updated: {{Last Updated}}
  Views: {{Views}}
  URL: {{URL}}
{{/each}}

LOW ENGAGEMENT ARTICLES

The following articles have fewer than 10 views and may need review:

{{#each low_view_articles}}
- {{Title}}
  Service: {{Service.Service Name}}
  Views: {{Views}}
{{/each}}

Please review and update or archive as appropriate.

Consumer Notification Automations

Service Maintenance Notification

Purpose: Notify consumers of planned maintenance

Trigger: Business Service Status changed to "Maintenance"

Query - Find affected offerings:

objectType = "Service Offering"
AND Service = "{{service_key}}"
AND Status = "Available"

Email Template:

Subject: [Planned Maintenance] {{Service Name}}

SCHEDULED MAINTENANCE NOTIFICATION

Service: {{Service Name}}
Category: {{Category.Category Name}}
Maintenance Window: {{maintenance_start}} - {{maintenance_end}}

What to Expect:
- The service will be unavailable during this window
- Affected offerings: {{affected_offerings_count}}

Affected Service Offerings:
{{#each affected_offerings}}
- {{Offering Name}}
{{/each}}

Questions? Contact {{Support Team.Team Name}} at {{Support Team.Email}}

New Service Announcement

Purpose: Announce new services to the organization

Trigger: Business Service Status changed to "Operational" (first time)

Email Template:

Subject: [New Service] {{Service Name}} Now Available

NEW SERVICE ANNOUNCEMENT

We're pleased to announce a new service is now available:

Service: {{Service Name}}
Category: {{Category.Category Name}}
Description: {{Description}}

Service Level: {{Service Level.Level Name}}
Support Hours: {{Service Level.Support Hours}}

Available Offerings:
{{#each offerings}}
- {{Offering Name}}: {{Description}}
  Fulfillment Time: {{Fulfillment Time}}
{{/each}}

Getting Started:
Visit the service catalog to explore offerings and submit requests.

Questions? Contact {{Owner.Full Name}} ({{Owner.Email}})

Service Lifecycle Automations

Service Deprecation Reminder

Purpose: Remind consumers of deprecated services

Trigger: Scheduled - Weekly on Monday

Query:

objectType = "Business Service"
AND Status = "Deprecated"
AND deprecation_date IS NOT EMPTY

Service Without Owner Alert

Purpose: Identify services missing ownership

Trigger: Scheduled - Weekly on Monday at 9:00 AM

Query - No owner assigned:

objectType = "Business Service"
AND Owner IS EMPTY
AND Status != "Retired"

Query - Owner is inactive:

objectType = "Business Service"
AND Owner.Status = "Inactive"
AND Status = "Operational"

Alert Template:

Subject: [CMDB] Services Without Active Owners

OWNERSHIP GAPS DETECTED

Services Without Any Owner:
{{#each no_owner}}
- {{Service Name}} ({{Criticality}})
{{/each}}

Services With Inactive Owners:
{{#each inactive_owner}}
- {{Service Name}}
  Former Owner: {{Owner.Full Name}} (Inactive)
{{/each}}

Please assign active owners to maintain accountability.

Integration Patterns

Status Page Integration

Pattern: Sync service status to external status page

Trigger: Business Service Status changed

Webhook Payload:

{
  "event": "service_status_change",
  "service": {
    "id": "{{key}}",
    "name": "{{Service Name}}",
    "status": "{{Status}}",
    "criticality": "{{Criticality}}"
  },
  "previous_status": "{{previous_status}}",
  "changed_at": "{{timestamp}}",
  "support_team": {
    "name": "{{Support Team.Team Name}}",
    "slack": "{{Support Team.Slack Channel}}"
  }
}

Service Desk Integration

Pattern: Enrich tickets with service context

Trigger: Ticket created with service reference

Enrichment Data:

{
  "service": {
    "name": "{{Service Name}}",
    "criticality": "{{Criticality}}",
    "sla_tier": "{{Service Level.Level Name}}",
    "response_target": "{{Service Level.Response Time}}",
    "resolution_target": "{{Service Level.Resolution Time}}"
  },
  "support_team": {
    "name": "{{Support Team.Team Name}}",
    "email": "{{Support Team.Email}}",
    "escalation": "{{Support Team.Escalation Path}}"
  },
  "owner": {
    "name": "{{Owner.Full Name}}",
    "email": "{{Owner.Email}}"
  }
}

Notification Channels

Channel Configuration

Scenario Channel Recipients
Service Outage Email + Slack Support Team, Service Owner
Maintenance Notice Email All users (via announcement)
SLA Breach Email + PagerDuty Support Team Lead, Service Owner
New Service Email Organization announcement
Stale Articles Email Knowledge Manager