Slack Block Kit Approval Message Generator
Block Kit is Slack's JSON layout format for messages with structure and buttons. This generator builds an approval request you can post with chat.postMessage and wire to your ERP or PLM change workflow.
Fill in
Use the channel ID, not the name.
Body for POST https://slack.com/api/chat.postMessage
{
"channel": "C0123456789",
"text": "Approval needed: change order ECO-2291",
"blocks": [
{ "type": "header", "text": { "type": "plain_text", "text": "Engineering change approval" } },
{
"type": "section",
"fields": [
{ "type": "mrkdwn", "text": "*Document:*\nECO-2291" },
{ "type": "mrkdwn", "text": "*Requester:*\nAna Torres" },
{ "type": "mrkdwn", "text": "*Decision by:*\n2026-11-05" }
]
},
{ "type": "section", "text": { "type": "mrkdwn", "text": "*Impact:* Revision C to D on bracket 7751, 3 open work orders affected\n<https://plm.example.com/eco/2291|Open in system>" } },
{ "type": "divider" },
{
"type": "actions",
"block_id": "approval_ECO-2291",
"elements": [
{ "type": "button", "action_id": "approve", "style": "primary", "text": { "type": "plain_text", "text": "Approve" }, "value": "ECO-2291" },
{ "type": "button", "action_id": "reject", "style": "danger", "text": { "type": "plain_text", "text": "Reject" }, "value": "ECO-2291" }
]
},
{ "type": "context", "elements": [ { "type": "mrkdwn", "text": "Sent by the ERP integration. Decisions are logged." } ] }
]
}Send with an Authorization: Bearer bot token header and the chat:write scope. Button clicks are posted to the Interactivity Request URL of your Slack app, which must verify the Slack signing secret and respond within three seconds. Replace the buttons with a message update after a decision so nobody clicks twice.
Review your chat approval design
Optional: we can check signature handling, approver mapping and audit logging in your design.
Optional. The tool and every export work without this. No spam.
How to use it
Enter the channel ID, a short fallback text and the facts an approver needs. Copy the JSON into your integration and post it with your bot token. The fallback text appears in push notifications and screen readers, so make it meaningful on its own. Create the Slack app, add the chat:write scope, enable Interactivity and point the request URL to an endpoint you control. When someone clicks a button, Slack sends a signed payload with the action_id, the user and your value, which you map to the ERP document.
Handling the response safely
Treat every click as untrusted until verified. Check the X-Slack-Signature header with your signing secret and reject stale timestamps. Map the Slack user ID to an ERP user and confirm that person is an authorized approver for that document and amount. Update the original message to show the outcome and who decided, which also prevents duplicate clicks. Write the decision to your audit log with the Slack user ID and timestamp.
- Verify signature and timestamp
- Check approver authority in the ERP
- Update the message after the decision
- Make the handler idempotent
Common mistakes
Typical errors include using a channel name where an ID is required, exceeding the 50 block limit per message, forgetting that section text has a length limit, and responding to interactivity after the three second window. Do not put secrets or personal data in button values because they travel through Slack. Remember that private channel posts need the bot to be invited first.
Frequently Asked Questions
Do I need a Slack app to send this?
Yes for interactive buttons. An incoming webhook can post the blocks, but receiving clicks requires an app with Interactivity enabled and a public HTTPS request URL.
What is the fallback text for?
It is the plain text shown in notifications and by clients that cannot render blocks. Slack also uses it for accessibility, so write a complete sentence.
Can I approve without leaving Slack?
Yes if your handler writes the decision to the ERP through its API. For high value approvals many teams prefer a link to the system so a full review happens there.
Are there limits on message size?
Slack limits a message to 50 blocks and caps the length of text in individual blocks. Keep approval messages short and link out for detail.
Netray builds approval and alert integrations between ERP systems and chat tools, read-only by default with human approval on writes.
Related Tools
Teams Adaptive Card JSON Generator for Approvals
Creates an Adaptive Card approval message with a fact set, comment input and Approve and Reject actions, wrapped for a Teams webhook or Workflows post.
ERP OperationsERP Notification Matrix Worksheet
Map every ERP event to an audience, channel, priority and template, and see monthly volume per channel before you build.
Compliance & ContractsMessaging Integration Security Checklist
A 30 point checklist covering tokens, webhook verification, approver identity, data minimization, logging and incident handling for chat integrations.
Developer ToolsMessaging Throughput and Rate Limit Headroom Calculator
Estimate peak message rate, how much headroom you have under a rate limit, how many workers you need and how long a burst takes to drain.
More Developer Tools tools
See all- SAP Sales Order ABAP SELECT Generator (VBAK, VBAP, VBFA)
- SAP Sales Order Create BAPI ABAP Generator (BAPI_SALESORDER_CREATEFROMDAT2)
- SAP ABAP Open Items SELECT Generator
- SAP ACDOCA SQL Query Generator
- SAP QM Inspection Lot ABAP SELECT Generator
- SAP Quality Notification Pareto SQL Query Generator
- SAP QM Usage Decision BAPI Skeleton
- ABAP Custom Exception Class Generator
- ABAP Unit Test Class Generator