Turn a chat button into an incident intake form
Skip the dedicated incident tool tab: a Report incident button opens a short modal right in chat, and the answers land wherever you route them.
Incidents don’t wait for someone to open the on-call tool. A Report incident button collects exactly what the response needs — severity, service, a one-line summary — in a modal that opens right where the incident was first noticed, then forwards the answers wherever your incident process lives.
This page covers the modal contract (modal_body, its blocks, the required flag on each field) and both places you can route the submission: your own callback_url, or straight into an api_trigger workflow via callback_workflow.
Build it step by step
Add a Report incident button
Attach modal_body to an interactive button. On Slack the modal renders natively; on Microsoft Teams, Discord, and Google Chat, Dailybot collects the same fields conversationally instead.
Design the modal's fields
modal_body is { title, submit_label?, blocks[] } — 1 to 10 blocks of type text, input, or divider, serialized under 8 KiB. Each input block needs a name matching ^[a-z][a-z0-9_]{0,62}$ that's unique within the modal, plus a label; mark it required to enforce it's filled in.
Route the answers
Submitted values arrive as modal_fields.<name> on whichever callback the button carries — callback_url for your own incident-management server, or callback_workflow to hand the incident straight to an api_trigger workflow. Only one of the two, same as any other button.
Confirm receipt
Add a response auto-reply so the reporter sees confirmation immediately — "Incident logged, on-call notified" — without waiting on whatever system picks up the callback.
How it flows
A static diagram — nothing here is clickable or live.
Something broken? Report it here.
Illustrative — forwarded answers
{
"button_id": "[button-id]",
"modal_fields": {
"severity": "sev2",
"service": "checkout-api",
"summary": "Elevated 500s on checkout"
}
}Illustrative only — forwarded to callback_url or callback_workflow depending on how the button is configured. See the send-message API reference for the full contract.
Copy-paste recipes
curl -sS -X POST 'https://api.dailybot.com/v1/send-message/' \
-H 'X-API-KEY: $DAILYBOT_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"message":"Something broken? Report it here.","target_channels":["C0123456789"],"buttons":[{"label":"Report incident","button_type":"interactive","value":"report_incident","callback_url":"https://ops.example.com/hooks/incident","callback_auth":{"type":"bearer","token":"$INCIDENT_CALLBACK_TOKEN"},"modal_body":{"title":"Report an incident","submit_label":"Submit","blocks":[{"type":"input","name":"severity","label":"Severity (sev1-sev4)","required":true},{"type":"input","name":"service","label":"Affected service","required":true},{"type":"input","name":"summary","label":"Summary","multiline":true,"required":true}]},"response":{"message":"Incident logged, on-call notified."}}]}'
dailybot chat send -c C0123456789 -m "Something broken? Report it here." \
--buttons '[{"label":"Report incident","button_type":"interactive","value":"report_incident",
"callback_workflow":"$INCIDENT_WORKFLOW_UUID",
"modal_body":{"title":"Report an incident","submit_label":"Submit",
"blocks":[{"type":"input","name":"severity","label":"Severity (sev1-sev4)","required":true},
{"type":"input","name":"service","label":"Affected service","required":true},
{"type":"input","name":"summary","label":"Summary","multiline":true,"required":true}]}}]'
Post a message to #incidents with a Report incident button that opens a
modal asking for severity, affected service, and a summary, then forwards
the answers to https://ops.example.com/hooks/incident.
Ready to transform how your team works?
Join thousands of teams that use Dailybot to save time, boost engagement, and make better decisions.