Gate a deploy on a chat button, not a dashboard tab
Pause the pipeline, post approve/reject buttons to the channel that's already watching the release, and let the click — not someone babysitting a tab — resume or cancel the run.
Most deploy gates still mean someone tabbing back to a CI dashboard every few minutes to see if a run is waiting on them. Dailybot moves the gate into the channel that’s already watching the release: approve or reject from a button, and your CI server picks up the click through a signed callback — no tab, no polling.
This page covers the gate itself — approve/reject buttons wired to callback_url with callback_auth, confirmed with a response auto-reply, and optionally chained into a callback_workflow button for whatever comes next.
Build it step by step
Pause the pipeline at the gate
When the pipeline reaches a deploy gate, have it POST to /v1/send-message/ instead of waiting on a dashboard. Target the channel that already watches the release — Slack, Microsoft Teams, Discord, or Google Chat all work the same way.
Attach approve/reject buttons with a signed callback
Add two interactive buttons, each with callback_url pointing at your CI server and callback_auth for bearer, basic, or custom-header transport auth. callback_auth is only valid together with callback_url — it has no effect on the other four callback types.
Resume or cancel from the click
Approve posts its value ("approve", or whatever you chose) to callback_url; Reject posts its own value. Your CI server verifies the signed request and resumes or cancels the run — the click is the automation, not a notification about one.
Confirm it in the channel
Add a response auto-reply to each button so the channel sees confirmation immediately — "Approved — deploying now" or "Rejected — deploy cancelled" — without anyone refreshing a pipeline page.
Chain in a workflow button for the next stage
Mix a callback_workflow button into the same message — for example a "Redeploy staging" button that fires an api_trigger workflow — so the next stage is one click away too.
See it in action
A simulated approval flow — no messages are actually sent.
Deploy 4.12.0 to production?
What the click actually does
Click a button above to see what the signed callback does.
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":"Deploy 4.12.0 to production?","target_channels":["C0123456789"],"buttons":[{"label":"Approve","button_type":"interactive","value":"approve","callback_url":"https://ci.example.com/hooks/deploy","callback_auth":{"type":"bearer","token":"$DEPLOY_CALLBACK_TOKEN"},"response":{"message":"Approved — deploying now."}},{"label":"Reject","button_type":"interactive","value":"reject","callback_url":"https://ci.example.com/hooks/deploy","callback_auth":{"type":"bearer","token":"$DEPLOY_CALLBACK_TOKEN"},"response":{"message":"Rejected — deploy cancelled."}}]}'
dailybot chat send -c C0123456789 -m "Deploy 4.12.0 to production?" \
--approve-button "Approve=approved" \
--reject-button "Reject=rejected" \
--callback-url "https://ci.example.com/hooks/deploy" \
--callback-bearer "$DEPLOY_CALLBACK_TOKEN"
dailybot chat send -c C0123456789 -m "Approved. Ready to redeploy staging next?" \
--workflow-button "Redeploy staging=$REDEPLOY_WORKFLOW_UUID"
Post a deploy-gate approval message to #deploys with approve/reject
buttons that POST to https://ci.example.com/hooks/deploy, authenticated
with a bearer token from $DEPLOY_CALLBACK_TOKEN.
Ready to transform how your team works?
Join thousands of teams that use Dailybot to save time, boost engagement, and make better decisions.