Message Operations
resource: message — 7 operations for posting, updating, and searching messages
Underlying API:
chat.* and search.* Slack Web API methods.
send
Posts a message via chat.postMessage (or chat.postEphemeral when ephemeral is set).
| Field | Required | Notes |
|---|---|---|
channel | Yes | Channel ID (C1234567890), name (#general), or DM user ID (U1234567890). |
text | Yes | Supports Slack mrkdwn: *bold*, _italic_, ~strike~, `code`, >blockquote, <URL|label>. |
threadTs | No | Posts as a threaded reply when set. |
username | No | Override the bot's display name for this message. |
iconEmoji | No | Override the bot's icon with a Slack emoji (e.g. :wave:). Requires chat:write.customize. |
blocksJson | No | Block Kit blocks as a raw JSON array string; must be a JSON array where every block has a type property. text acts as the fallback. |
ephemeral | No | When true, sends via chat.postEphemeral instead — visible only to targetUserId. Ephemeral messages cannot be updated, deleted, or retrieved from history. |
targetUserId | Conditional | Required when ephemeral is true. |
incomingText, conversationId | No | Pass-through fields propagated to downstream nodes (useful when this node follows an upstream Slack event trigger). |
Output: messageSent, channel, messageTs, threadTs, status, payload (raw Slack response).
sendAndWait Partial
Sends the message via
chat.postMessage successfully, but then returns a NodeExecutionResult error (ENGINE_NOT_SUPPORTED) instead of suspending the workflow — workflow suspension requires ProcessEngine infrastructure that doesn't exist yet (tracked as ISSUE-04). See Roadmap.
| Field | Required | Notes |
|---|---|---|
channel | Yes | Destination channel ID. |
text | Yes | Message text sent before waiting. |
threadTs, blocksJson | No | Same semantics as send. |
timeoutSeconds | No | Maximum wait before timing out. 0 or negative means wait indefinitely (engine default). |
conversationId | No | Workflow-level conversation identifier propagated downstream. |
sendEphemeral
Posts a message visible to a single user only, via chat.postEphemeral.
| Field | Required | Notes |
|---|---|---|
channel | Yes | Channel the ephemeral message appears in. |
targetUserId | Yes | The user who will see the message. |
text | Yes | Message text. |
threadTs, blocksJson, conversationId | No | Same semantics as send. |
update
Edits an existing message via chat.update. At least one of text or blocksJson must be provided.
| Field | Required | Notes |
|---|---|---|
channel | Yes | Channel containing the message. |
messageTs | Yes | Timestamp identifying the message to edit. |
text, blocksJson | At least one | New content for the message. |
delete
Deletes a message via chat.delete. Requires channel and messageTs.
getPermalink
Returns a shareable link to a message via chat.getPermalink. Requires channel and messageTs.
search
Requires a user-level OAuth token (
xoxp-...) with the search:read scope — bot tokens cannot call search.messages.
| Field | Required | Default | Notes |
|---|---|---|---|
query | Yes | — | Search query, supports Slack search modifiers (from:, in:, before:, etc.). |
sort | No | Slack default (score) | Sort field. |
sortDir | No | Slack default | Sort direction. |
returnAll | No | true | Paginate through all result pages. |
count | No | 20 | Results per page. |
page | No | 1 | Starting page number. |