TimeoutError: payment gateway exceeded 5000ms
Engineering / BLOCK KIT JSON
Turn an exception into an actionable alert with impact, frequency, ownership, and a trace link.
Blank optional fields are omitted. Fallback text updates with your fields.
Approximate Slack rendering. Buttons are visual previews; no actions are sent.
Local validation checks the supported schema. It does not guarantee Slack API acceptance.
Manual editing and validation run in your browser. Opening Slack’s Builder shares the message with Slack.
Error spike · checkout-api Payment confirmation is failing for some customers. TimeoutError: payment gateway exceeded 5000ms Environment: Production · v2.8.1 Occurrences: 43 events in 10 minutes Impact: 12 affected sessions Owner: Commerce on-call First seen 14:32 UTC · Fingerprint ERR-209 View error: https://example.com/errors/ERR-209 Open runbook: https://example.com/runbooks/payment-timeouts
Download the payload or use this command in your own terminal. Replace the placeholder URL with your Slack incoming webhook. Keep the real URL secret. This tool never sends a Slack message.
curl --request POST \
--header 'Content-Type: application/json' \
--data-binary @- \
'https://hooks.slack.com/services/YOUR/WEBHOOK/URL' <<'SLACK_MESSAGE_JSON'
{
"text": "Error spike · checkout-api\nPayment confirmation is failing for some customers.\nTimeoutError: payment gateway exceeded 5000ms\nEnvironment: Production · v2.8.1\nOccurrences: 43 events in 10 minutes\nImpact: 12 affected sessions\nOwner: Commerce on-call\nFirst seen 14:32 UTC · Fingerprint ERR-209\nView error: https://example.com/errors/ERR-209\nOpen runbook: https://example.com/runbooks/payment-timeouts",
"blocks": [
{
"type": "header",
"text": {
"type": "plain_text",
"text": "Error spike · checkout-api"
}
},
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "*Payment confirmation is failing for some customers.*\n```TimeoutError: payment gateway exceeded 5000ms```"
}
},
{
"type": "section",
"fields": [
{
"type": "mrkdwn",
"text": "*Environment*\nProduction · v2.8.1"
},
{
"type": "mrkdwn",
"text": "*Occurrences*\n43 events in 10 minutes"
},
{
"type": "mrkdwn",
"text": "*Impact*\n12 affected sessions"
},
{
"type": "mrkdwn",
"text": "*Owner*\nCommerce on-call"
}
]
},
{
"type": "context",
"elements": [
{
"type": "mrkdwn",
"text": "First seen 14:32 UTC · Fingerprint ERR-209"
}
]
},
{
"type": "divider"
},
{
"type": "actions",
"elements": [
{
"type": "button",
"text": {
"type": "plain_text",
"text": "View error"
},
"action_id": "trace",
"url": "https://example.com/errors/ERR-209",
"style": "primary"
},
{
"type": "button",
"text": {
"type": "plain_text",
"text": "Open runbook"
},
"action_id": "runbook",
"url": "https://example.com/runbooks/payment-timeouts"
}
]
}
]
}
SLACK_MESSAGE_JSONNotify the owning team when a new exception or a meaningful error spike needs investigation. The template puts the failure and customer impact first, followed by enough context to find the affected service and release.
Use a sanitized error excerpt rather than a full stack trace. Add the affected release and occurrence window to make regressions easier to spot. Never paste access tokens, request bodies, or customer secrets into alerts.
Trigger from your error monitoring system after deduplication or a threshold is met. Link to the issue or trace in your monitoring tool; this message does not silence or resolve alerts.
To post this JSON, create a Slack app with an incoming webhook for your channel, or use chat.postMessage with the appropriate bot token and permissions. Keep credentials on your server.
For buttons, enable Interactivity and handle Slack’s interaction requests, including URL buttons. Acknowledge requests promptly. This preview does not execute actions, authorize users, or save decisions.
Use the top-level fallback text for notifications and accessibility. Test your final payload in Slack; local validation covers the declared subset, and visual details vary by client.
Slack interaction setup ↗