Slack Workspace Agentic Workflow
Browser: Post Message — Slack Workspace Agentic Workflow
Navigate to a Slack channel, type a message, and send it
sidebutton install slack A browser-driven write primitive for Slack. The agent navigates to the target channel or direct message, places the supplied message body into the composer, and submits. Formatting is preserved as long as the caller uses Slack's standard markdown — bold, italics, lists, inline code, and code fences all survive the round trip.
Use it as the send step behind any drafting or triage workflow. Channel targeting can be by channel ID, by @-mention URL, or by channel name; the workflow resolves each to the correct URL before composing.
Steps
- 1. Navigate to a URL
- url
- {{env.SLACK_BROWSER_URL}}/{{channel}}
browser.navigate - 2. Wait
- ms
- 3000
browser.wait - 3. Click an element
- selector
- [data-qa='message_input'] .ql-editor, .c-wysiwyg_container [contenteditable='true']
browser.click - 4. Type into a field
- selector
- [data-qa='message_input'] .ql-editor, .c-wysiwyg_container [contenteditable='true']
- text
- {{message}}
browser.type - 5. browser key
- key
- Enter
browser.key - 6. Wait
- ms
- 1000
browser.wait - 7. Capture page snapshot
- as
- result
browser.snapshot
Workflow definition
schema_version: 1
version: "1.0.0"
last_verified: "2026-02-09"
id: slack_browser_post_message
title: "Browser: Post Message"
description: "Navigate to a Slack channel, type a message, and send it"
overview: |
A browser-driven write primitive for Slack. The agent navigates to the target channel or direct message, places the supplied message body into the composer, and submits. Formatting is preserved as long as the caller uses Slack's standard markdown — bold, italics, lists, inline code, and code fences all survive the round trip.
Use it as the send step behind any drafting or triage workflow. Channel targeting can be by channel ID, by @-mention URL, or by channel name; the workflow resolves each to the correct URL before composing.
category:
level: task
domain: ops
reusable: true
params:
channel: string
message: string
steps:
- type: browser.navigate
url: "{{env.SLACK_BROWSER_URL}}/{{channel}}"
- type: browser.wait
ms: 3000
- type: browser.click
selector: "[data-qa='message_input'] .ql-editor, .c-wysiwyg_container [contenteditable='true']"
- type: browser.type
selector: "[data-qa='message_input'] .ql-editor, .c-wysiwyg_container [contenteditable='true']"
text: "{{message}}"
- type: browser.key
key: "Enter"
- type: browser.wait
ms: 1000
- type: browser.snapshot
as: result