Turn a chat message into a one-click automation
Send a message once, and let the buttons on it do the rest: kick off a workflow, open a form, run a ChatOps command, or hand a prompt to your AI — without leaving the channel.
Most chat automations stop at “post a status update.” Dailybot’s send-message endpoint goes further: every message can carry up to 25 interactive buttons, and each button wires to exactly one destination — an external webhook, a form, a workflow, a ChatOps command, or an AI prompt. The recipient never leaves the chat; clicking the button is the automation.
This page walks through the whole escalation, stage by stage: a plain message, a threaded report, link buttons, interactive buttons with their five callback types, modals that collect input, and — the payoff — an approval flow that gates a real deploy. Try the simulated version below, then build it with the API, the CLI, or by asking an agent that has the Dailybot skill pack installed.
Build it step by step
Send to any channel, DM, or team
POST to /v1/send-message/ with target_users, target_channels, or target_teams. Dailybot resolves the destination platform — Slack, Microsoft Teams, Discord, or Google Chat — automatically, so the same call works everywhere your team already talks.
Post a headline with the full detail in its thread
Add thread_responses to the same call to post a short headline plus up to 10 replies, one level deep, in a single request. Re-post with the same bot_message_id within 72 hours to edit the message instead of sending a new one.
Add link buttons
The simplest button just opens a URL: set button_type to "link". Attach up to 25 buttons per message, and mix link buttons with interactive ones in the same array.
Add interactive buttons with five callback types
Each interactive button carries exactly one callback: callback_url for your own server (pair it with callback_auth for bearer, basic, or custom-header transport auth), callback_form to open a Dailybot form, callback_command to run a known ChatOps command, callback_prompt to hand the click to an AI prompt, or callback_workflow to trigger an api_trigger workflow. Pick the one that matches where the action should happen.
Collect input with a modal
Attach modal_body to an interactive button to open a lightweight modal — up to 10 text, input, and divider blocks — before the callback fires. Submitted answers are forwarded to callback_url or callback_workflow as modal_fields.<name>.
Gate the deploy on a click
Combine callback_url, callback_auth, and a response auto-reply, and the whole approval flow — ask, click, forward, confirm — happens without anyone leaving the channel. See it below.
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":"Redeploy staging","button_type":"interactive","value":"redeploy_staging","callback_workflow":"$REDEPLOY_WORKFLOW_UUID"}]}'
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 "Ready to redeploy staging?" \
--workflow-button "Redeploy staging=$REDEPLOY_WORKFLOW_UUID"
dailybot chat send -c C0123456789 -m "Log a quick update" \
--buttons '[{"label":"Add update","button_type":"interactive","value":"log_update",
"callback_url":"https://ci.example.com/hooks/log-update",
"modal_body":{"title":"Log an update","submit_label":"Save",
"blocks":[{"type":"input","name":"update_text","label":"Update","multiline":true,"required":true}]}}]'
Send an approval request to #releases with approve/reject buttons that
call https://ci.example.com/hooks/deploy when clicked.
Ready to transform how your team works?
Join thousands of teams that use Dailybot to save time, boost engagement, and make better decisions.