# Send Message (Advanced) — Bot for Slack

> Customize advanced setttings and send a message to a channel, group or user (Bot). See postMessage or scheduleMessage docs here

- Key: `slack_bot-send-message-advanced`
- Type: Action (Write)
- Version: 0.0.6
- App: Bot for Slack (`slack_bot`) — https://pipedream.com/apps/slack-bot.md
- This page (HTML): https://pipedream.com/apps/slack-bot/actions/send-message-advanced
- Source: https://github.com/PipedreamHQ/pipedream/blob/master/components/slack_bot/actions/send-message-advanced/send-message-advanced.mjs

## Description

Customize advanced setttings and send a message to a channel, group or user (Bot). 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 | Select a public or private channel, or a user or group. In order to list a Slack channel, your bot must be a member of that channel, and in order to list private channels, your bot must have the groups:read scope in the OAuth & Permissions settings in Slack for this bot. Options are loaded from the connected account. |
| `text` | `string` | Yes | 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. |
| `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 | Find and link channel names and usernames. |
| `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. |
| `customizeBotSettings` | `boolean` | No | Customize the username and/or icon of the Bot |
| `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. E.g., :fire: Overrides icon_url. Must be used in conjunction with Send as User set to false, otherwise ignored. Options are loaded from the connected account. |
| `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. |
| `replyToThread` | `boolean` | No | Reply to an existing thread |
| `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. |
| `addMessageMetadata` | `boolean` | No | Set the metadata event type and payload |
| `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"} |
| `configureUnfurlSettings` | `boolean` | No | Configure settings for unfurling links and media |
| `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? |

## 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_bot",
      },
    },
  },
)

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_bot-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_bot-send-message-advanced",
  externalUserId: "{external_user_id}", // any stable ID for this user in your system
  configuredProps: {
    slack_bot: { 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_bot-send-message-advanced",
    "configured_props": {
      "slack_bot": { "authProvisionId": "apn_xxxxxxx" },
      "conversation": "Channel",
      "text": "Text"
    }
  }'
```

---

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