# Send Message (Advanced) — Slack

> Customize advanced settings and send a message to a channel, group or user. See postMessage or scheduleMessage docs here

- Key: `slack_v2-send-message-advanced`
- Type: Action (Write)
- Version: 0.1.11
- App: Slack (`slack_v2`) — https://pipedream.com/apps/slack-v2.md
- This page (HTML): https://pipedream.com/apps/slack-v2/actions/send-message-advanced
- Hints: open-world
- Source: https://github.com/PipedreamHQ/pipedream/blob/master/components/slack_v2/actions/send-message-advanced/send-message-advanced.mjs

## Description

Customize advanced settings and send a message to a channel, group or user. See [postMessage](https://api.slack.com/methods/chat.postMessage) or [scheduleMessage](https://api.slack.com/methods/chat.scheduleMessage) docs here

## Props

| Prop | Type | Required | Description |
|---|---|---|---|
| `conversation` | `string` | Yes | Prefer a channel ID (e.g. C1234567890) — use List Channels to look it up; it resolves instantly. A channel NAME (e.g. general or #general) is also accepted, but resolving it scans up to 5 conversations.list pages (~5,000 channels), which is slow and, on large workspaces, can be rate-limited or fail with a ConfigurationError if the channel is beyond that bound — pass the ID whenever you have it. Depending on the action, this may also accept a user ID (opens a direct message) or a group DM ID — use Find User by Email / Find User by ID to resolve a user ID, or List Group Conversations for group DM IDs. |
| `text` | `string` | No | If you're using blocks, this is used as a fallback string to display in notifications. If you aren't, this is the main body text of the message. It can be formatted as plain text, or with mrkdwn. Required when no blocks are provided. |
| `mrkdwn` | `boolean` | No | true by default. Pass false to disable Slack markup parsing. See docs here |
| `attachments` | `string` | No | A JSON-based array of structured attachments, presented as a URL-encoded string (e.g., [{"pretext": "pre-hello", "text": "text-world"}]). |
| `parse` | `string` | No | Change how messages are treated. Defaults to none. By default, URLs will be hyperlinked. Set parse to none to remove the hyperlinks. The behavior of parse is different for text formatted with mrkdwn. By default, or when parse is set to none, mrkdwn formatting is implemented. To ignore mrkdwn formatting, set parse to full. |
| `link_names` | `boolean` | No | If true, automatically converts plain-text @name and #channel mentions in text into linked Slack mentions. If false (default), mentions are left as plain text and won't notify or link. Has no effect when using blocks. |
| `as_user` | `boolean` | No | Optionally pass true to post the message as the authenticated user, instead of as a bot. Defaults to false. |
| `addToChannel` | `boolean` | Yes | 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. |
| `post_at` | `string` | No | 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) |
| `include_sent_via_pipedream_flag` | `boolean` | No | Defaults to true, includes a link to Pipedream at the end of your Slack message. |
| `username` | `string` | No | Optionally customize your bot's user name (default is Pipedream). Must be used in conjunction with Send as User set to false, otherwise ignored. |
| `icon_emoji` | `string` | No | Optionally provide an emoji to use as the icon for this message, wrapped in colons. E.g., :fire:. Overrides icon_url. Must be used in conjunction with Send as User set to false, otherwise ignored. Use List Icon (emoji) Options to look up valid emoji names for this workspace, including custom emoji. |
| `icon_url` | `string` | No | Optionally provide an image URL to use as the icon for this message. Must be used in conjunction with Send as User set to false, otherwise ignored. |
| `thread_ts` | `string` | No | 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. |
| `thread_broadcast` | `boolean` | No | 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. |
| `metadata_event_type` | `string` | No | The name of the metadata event. Example: task_created |
| `metadata_event_payload` | `string` | No | The payload of the metadata event. Must be a JSON string. Example: { "id": "11223", "title": "Redesign Homepage"} |
| `unfurl_links` | `boolean` | No | Default to false. Pass true to enable unfurling of links. |
| `unfurl_media` | `boolean` | No | Defaults to false. Pass true to enable unfurling of media content. |
| `passArrayOrConfigure` | `string` | No | Would you like to reference an array of blocks from a previous step (for example, {{steps.blocks.$return_value}}), or configure them in this action? |
| `blocks` | `string` | No | Enter an array of structured blocks as a URL-encoded string. E.g., [{ "type": "section", "text": { "type": "mrkdwn", "text": "This is a mrkdwn section block :ghost: *this is bold*, and ~this is crossed out~, and <https://pipedream.com\|this is a link>" }}] Tip: Construct your blocks in a code step, return them as an array, and then pass the return value to this step. |
| `section1` | `string` | No | Add a section block to your message and configure with plain text or mrkdwn. See Slack's docs for more info. |
| `section2` | `string` | No | Add a section block to your message and configure with plain text or mrkdwn. See Slack's docs for more info. |
| `section3` | `string` | No | Add a section block to your message and configure with plain text or mrkdwn. See Slack's docs for more info. |
| `section4` | `string` | No | Add a section block to your message and configure with plain text or mrkdwn. See Slack's docs for more info. |
| `section5` | `string` | No | Add a section block to your message and configure with plain text or mrkdwn. See Slack's docs for more info. |
| `context1` | `string[]` | No | Add a context block to your message and configure with plain text or mrkdwn. Define multiple items if you'd like multiple elements in the context block. See Slack's docs for more info. |
| `context2` | `string[]` | No | Add a context block to your message and configure with plain text or mrkdwn. Define multiple items if you'd like multiple elements in the context block. See Slack's docs for more info. |
| `context3` | `string[]` | No | Add a context block to your message and configure with plain text or mrkdwn. Define multiple items if you'd like multiple elements in the context block. See Slack's docs for more info. |
| `context4` | `string[]` | No | Add a context block to your message and configure with plain text or mrkdwn. Define multiple items if you'd like multiple elements in the context block. See Slack's docs for more info. |
| `context5` | `string[]` | No | Add a context block to your message and configure with plain text or mrkdwn. Define multiple items if you'd like multiple elements in the context block. See Slack's docs for more info. |
| `linkButton1` | `object` | No | Add a link button to your message. Enter the button text as the key and the link URL as the value. Example: {"View docs": "https://example.com", "Open dashboard": "https://app.example.com"}. Configure multiple buttons in the object to render them inline, or add additional Link Button blocks to render them vertically. See Slack's docs for more info. |
| `linkButton2` | `object` | No | Add a link button to your message. Enter the button text as the key and the link URL as the value. Example: {"View docs": "https://example.com", "Open dashboard": "https://app.example.com"}. Configure multiple buttons in the object to render them inline, or add additional Link Button blocks to render them vertically. See Slack's docs for more info. |
| `linkButton3` | `object` | No | Add a link button to your message. Enter the button text as the key and the link URL as the value. Example: {"View docs": "https://example.com", "Open dashboard": "https://app.example.com"}. Configure multiple buttons in the object to render them inline, or add additional Link Button blocks to render them vertically. See Slack's docs for more info. |
| `linkButton4` | `object` | No | Add a link button to your message. Enter the button text as the key and the link URL as the value. Example: {"View docs": "https://example.com", "Open dashboard": "https://app.example.com"}. Configure multiple buttons in the object to render them inline, or add additional Link Button blocks to render them vertically. See Slack's docs for more info. |
| `linkButton5` | `object` | No | Add a link button to your message. Enter the button text as the key and the link URL as the value. Example: {"View docs": "https://example.com", "Open dashboard": "https://app.example.com"}. Configure multiple buttons in the object to render them inline, or add additional Link Button blocks to render them vertically. See Slack's docs for more info. |

## Run it

**MCP**

```ts
import { Client } from "@modelcontextprotocol/sdk/client/index.js"
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js"
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 accessToken = await pd.rawAccessToken

const transport = new StreamableHTTPClientTransport(
  new URL("https://remote.mcp.pipedream.net/v3"),
  {
    requestInit: {
      headers: {
        Authorization: `Bearer ${accessToken}`,
        "x-pd-project-id": process.env.PIPEDREAM_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-advanced",
  arguments: {
    conversation: "Channel",
    text: "Text",
  },
})
```

**TypeScript**

```ts
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-advanced",
  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**

```bash
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-advanced",
    "configured_props": {
      "slack_v2": { "authProvisionId": "apn_xxxxxxx" },
      "conversation": "Channel",
      "text": "Text"
    }
  }'
```

---

- App: https://pipedream.com/apps/slack-v2.md · All apps: https://pipedream.com/apps
