Slack ACTION
Send Message to Channel
Send a message to a public or private channel. Legacy, channel-only variant — prefer Post Message for new integrations: it covers channels, users, and groups from a single tool, and also supports threaded replies and unfurl settings. Use this tool only if a workflow specifically needs to target a channel exclusively, without the user/group support Post Message offers. See the documentation
- Action
- Writes data
- OAuth
- SDK
- MCP
IMPLEMENTATION
Call this tool
Connect a user's Slack account once, then configure and run Send Message to Channel from your backend or agent.
import { PipedreamClient } from "@pipedream/sdk"
const pd = new PipedreamClient({
projectId: process.env.PIPEDREAM_PROJECT_ID!,
clientId: process.env.PIPEDREAM_CLIENT_ID!,
clientSecret: process.env.PIPEDREAM_CLIENT_SECRET!,
projectEnvironment: "production",
})
const result = await pd.actions.run({
id: "slack_v2-send-message-to-channel",
externalUserId: "{external_user_id}", // any stable ID for this user in your system
configuredProps: {
slack_v2: { authProvisionId: "apn_xxxxxxx" },
conversation: "Channel",
text: "Text",
},
})
console.log(result)curl -X POST https://api.pipedream.com/v1/connect/{project_id}/actions/run \
-H "Content-Type: application/json" \
-H "X-PD-Environment: production" \
-H "Authorization: Bearer {access_token}" \
-d '{
"external_user_id": "{external_user_id}",
"id": "slack_v2-send-message-to-channel",
"configured_props": {
"slack_v2": { "authProvisionId": "apn_xxxxxxx" },
"conversation": "Channel",
"text": "Text"
}
}'// accessToken: mint a short-lived token with the Connect SDK — see the MCP guide
const transport = new StreamableHTTPClientTransport(
new URL("https://remote.mcp.pipedream.net/v3"),
{
requestInit: {
headers: {
Authorization: `Bearer ${accessToken}`,
"x-pd-project-id": "{project_id}",
"x-pd-environment": "production",
"x-pd-external-user-id": "{external_user_id}", // any stable ID for this user in your system
"x-pd-app-slug": "slack_v2",
},
},
},
)
const mcp = new Client({ name: "my-agent", version: "1.0.0" })
await mcp.connect(transport)
const { tools } = await mcp.listTools()
// listTools() hands your model this tool's input schema, so it can
// fill the arguments itself:
const result = await mcp.callTool({
name: "slack_v2-send-message-to-channel",
arguments: {
conversation: "Channel",
text: "Text",
},
})SCHEMA
Inputs
Pipedream supplies the connected account. Your application provides the operation-specific values below. Dynamic inputs are resolved against that user's account.
| Property | Type | Description |
|---|---|---|
conversation Channel | string | A public or private channel ID (e.g. C1234567890). Use List Channels to find valid IDs. Required |
text Text | string | Text of the message to send (see Slack's formatting docs). This field is usually necessary, unless you're providing only attachments instead. To mention a user, use <@U123> with their user ID. Do NOT append a display name after a pipe: Slack renders <@U123|Name> as literal text, not a mention. Required |
mrkdwn Send text as Slack mrkdwn | boolean | Optional |
as_user Send as User | boolean | Post as the authenticated user ( true) rather than as the app's bot (false). When omitted, direct messages default to the authenticated user so the Slack notification is not prefixed with the Pipedream: bot name, while channel messages default to the bot. Set explicitly to override. Optional |
addToChannel Add app to channel automatically? | boolean | If true, the app will be added to the specified non-DM channel(s) automatically. If false, you must add the app to the channel manually to post to a private channel as a bot. Defaults to false. Required |
post_at Schedule message | string | Messages can only be scheduled up to 120 days in advance, and cannot be scheduled for the past. The datetime should be in ISO 8601 format. (Example: 2014-01-01T00:00:00Z) Optional |
include_sent_via_pipedream_flag Include link to Pipedream | boolean | Defaults to true, includes a link to Pipedream at the end of your Slack message. Optional |
username Bot Username | string | Optionally customize your bot's user name (e.g. Vandelay Industries; default is Pipedream). Applies only when the message is posted as the bot — i.e. the effective Send as User is false, which is the default for channel messages. When the effective Send as User is true (e.g. a direct message, which defaults to the authenticated user), this prop is invalid and the action raises a configuration error rather than silently ignoring it; set Send as User to false to post as the bot with a custom identity (e.g. to send a DM as the bot named Vandelay Industries). Optional |
icon_emoji Icon (emoji) | string | Optionally provide an emoji to use as the icon for this message, wrapped in colons (e.g. :fire:). Overrides icon_url. Applies only when the message is posted as the bot — i.e. the effective Send as User is false, which is the default for channel messages. When the effective Send as User is true (e.g. a direct message, which defaults to the authenticated user), this prop is invalid and the action raises a configuration error rather than silently ignoring it; set Send as User to false to post as the bot with a custom icon (e.g. to send a DM as the bot with a :fire: icon). Use List Icon (emoji) Options to look up valid emoji names for this workspace, including custom emoji. Optional |
icon_url Icon (image URL) | string | Optionally provide an image URL to use as the icon for this message (e.g. https://example.com/avatar.png). Applies only when the message is posted as the bot — i.e. the effective Send as User is false, which is the default for channel messages. When the effective Send as User is true (e.g. a direct message, which defaults to the authenticated user), this prop is invalid and the action raises a configuration error rather than silently ignoring it; set Send as User to false to post as the bot with a custom icon (e.g. to send a DM as the bot with the icon https://example.com/avatar.png). Optional |
thread_ts Message Timestamp | string | Provide another message's ts value to make this message a reply (e.g., if triggering on new Slack messages, enter {{event.ts}}). Avoid using a reply's ts value; use its parent instead. e.g. 1403051575.000407. Optional |
thread_broadcast Send Channel Message | boolean | If true, posts in the thread and channel. Used in conjunction with Message Timestamp and indicates whether reply should be made visible to everyone in the channel. Defaults to false. Optional |
metadata_event_type Metadata Event Type | string | The name of the metadata event. Example: task_created Optional |
metadata_event_payload Metadata Event Payload | string | The payload of the metadata event. Must be a JSON string. Example: { "id": "11223", "title": "Redesign Homepage"} Optional |
unfurl_links Unfurl Links | boolean | Default to false. Pass true to enable unfurling of links. Optional |
unfurl_media Unfurl Media | boolean | Defaults to false. Pass true to enable unfurling of media content. Optional |
REFERENCE
Tool details
Behavior hints are published with the component in the Pipedream registry and surface as MCP tool annotations, so an agent can reason about a tool before it calls it.
- Registry key
- slack_v2-send-message-to-channel
- Version
- 0.3.0
- App
- Slack
- Authentication
- OAuth
- Read-only
- No
- Destructive
- No
- Open world
- Yes
- Source
- View on GitHub ↗