n4nAI

Communicating AI incidents to customers during outages

Practical steps for engineering teams to handle customer communication during AI outages, from detection to postmortem, with code and templates.

n4n Team4 min read802 words

Audio narration

Coming soon — every post will get a voice note here.

When a model provider starts returning 503s, your users see failed generations, not a tidy status page. Effective customer communication during AI outages means telling them what broke, what you’re doing, and how to adapt—before they churn. This guide lays out an ordered path from detection to postmortem that you can wire into your existing incident tooling.

1. Define severity and ownership before the page burns

Incoming alerts mean nothing without a rubric. Map outage types to severity: SEV1 is complete inference failure across all models; SEV2 is elevated latency or partial provider failure; SEV3 is single-model degradation. Assign an incident commander (IC) and a communications lead. The IC makes technical calls; the comms lead owns customer messaging.

A common pitfall is letting backend engineers draft public tweets. Developers optimize for precise accuracy, not clear user guidance. Separate the roles and pre-write the escalation tree.

2. Automate detection and status propagation

You need objective signal. Poll your inference endpoint with representative payloads, not just a TCP check. Below is a minimal Python health probe that flags a SEV2 when error rate exceeds a threshold.

import requests, time

def probe(url, api_key, threshold=0.1):
    failures = 0
    for _ in range(20):
        try:
            r = requests.post(f"{url}/v1/chat/completions",
                headers={"Authorization": f"Bearer {api_key}"},
                json={"model": "gpt-4o-mini", "messages": [{"role":"user","content":"ping"}]},
                timeout=5)
            if r.status_code != 200:
                failures += 1
        except requests.RequestException:
            failures += 1
        time.sleep(1)
    return failures / 20 > threshold

if probe("https://api.yourservice.com", "sk-..."):
    requests.post("https://api.statuspage.io/v1/pages/xxx/incidents.json",
        headers={"Authorization": "OAuth token"},
        json={"incident": {"name": "Elevated LLM error rate", "status": "investigating"}})

Thresholds and false positives

Set the failure threshold based on baseline. A 5% error rate on a flaky edge model is not a SEV2; a 5% rate on your primary route is. Correlate probe results with per-token usage metering if your stack exposes it, to confirm scope before paging.

Wire the probe to your status page provider. Customer communication during AI outages starts with an honest automated signal, not a human noticing dashboards.

Tradeoff: probing consumes tokens. Use a tiny model and cache responses where possible.

3. Write the first customer message in under 15 minutes

Speed beats precision. Use a template:

What: We are experiencing failures when calling the Anthropic Claude API. Impact: ~30% of generation requests fail with 503. Workaround: Retry with exponential backoff, or switch to model gpt-4o via our fallback route. Next update: 30 minutes.

Do not say “we are aware of reports”. Say “we confirmed at 14:02 UTC”. Customer communication during AI outages must be factual.

Common pitfall: hiding the upstream provider name. Customers building on you need to know if the fault is Claude or your own proxy. Name the dependency.

4. Programmatic notifications beat manual posts

Manual status page edits lag. Push events from your incident bot to Slack, email, and in-app banner via webhook. Example TypeScript edge function that toggles a banner based on incident state:

export async function getBanner(): Promise<string | null> {
  const inc = await fetch("https://api.statuspage.io/v1/pages/xxx/incidents.json",
    { headers: { Authorization: "OAuth token" } }).then(r => r.json());
  const active = inc.find((i: any) => i.status !== "resolved");
  if (!active) return null;
  return `Active incident: ${active.name}. Expect degraded AI responses.`;
}

Render that string in your app shell. This keeps customer communication during AI outages synchronous with your backend state instead of relying on users to refresh a separate page.

5. Give developers a fallback path

If you abstract multiple model providers, document the exact header or parameter to force a different route. For instance, a gateway that honors client routing directives lets customers pin a model or exclude a degraded provider. A gateway like n4n.ai forwards provider cache-control hints and automatically falls back when a provider is rate-limited, but you should still tell users when output quality may shift.

Example request showing explicit routing:

{
  "model": "claude-3-5-sonnet",
  "messages": [{"role": "user", "content": "Summarize"}],
  "route": {"exclude": ["anthropic"], "fallback": "openai"}
}

Document cache behavior

If you forward provider cache-control hints, note that a fallback route may bypass a warm prompt cache, increasing latency and cost. Customers tuning for cache hits need to know when that optimization is lost.

Tradeoff: fallback changes output distribution. Say so. Some teams prefer hard failure over silent model swap.

6. Update at fixed intervals, not when you have news

Silence reads as neglect. Set a timer: every 30 minutes post a status, even if it’s “still investigating, no root cause yet”. Use a script to enforce cadence:

while incident_open; do
  curl -X POST https://api.statuspage.io/v1/pages/xxx/incidents/yyy.json \
    -H "Authorization: OAuth token" \
    -d '{"incident":{"body":"Update: still mitigating. Error rate 12%."}}'
  sleep 1800
done

Customer communication during AI outages survives on predictability. A boring update on schedule builds more trust than a clever one after two hours of silence.

7. Close the incident with a postmortem

When error rate returns to baseline for 30 minutes, resolve the incident and publish a short customer note plus internal postmortem. The customer note: what broke, duration, impact, and what you changed. Internal: metrics, timeline, action items.

JSON schema for incident record helps auditing:

{
  "id": "inc-2024-11",
  "severity": "SEV2",
  "start": "2024-11-02T14:02Z",
  "end": "2024-11-02T15:40Z",
  "provider": "anthropic",
  "customer_impact_pct": 30,
  "postmortem_url": "https://internal/wiki/inc-2024-11"
}

Keep the customer-facing summary to three bullets. The internal doc can be long.

8. Common pitfalls and tradeoffs

  • Over-apologizing, under-informing: Skip “we’re sorry for the inconvenience” in the first line; lead with impact.
  • Blaming the provider exclusively: You chose the integration; own the mitigation.
  • Silent fallback: Automatic provider switching without notification erodes trust when outputs differ.
  • Status page as sole channel: Many users never visit it. In-app and email required.
  • No runbook: Ad hoc messages waste the 15-minute window.

Treat customer communication during AI outages as a system with SLAs, not a human courtesy. Build the pipes, assign the roles, and rehearse the runbook before the next provider goes dark.

Tagsincident-responsecommunicationoutagecustomer-trust

Written by

n4n Team

The team building n4n — a single OpenAI-compatible API in front of 240+ models, with automatic fallback, load balancing and pay-per-token metering.

More from n4n Team →

All incident response & postmortems for ai outages posts →