# Slack

> Send and manage messages in Slack workspaces with bot token authentication and rich formatting support.

Source: https://cotera.co/docs/reference/tools/individual-tools/slack

---

**Authentication Type:** API Key\
**Description:** Send and manage messages in Slack workspaces. Requires a Slack bot token (starts with xoxb-) with appropriate permissions.

***

## Authentication

To authenticate, you'll need a Slack bot token:

1. Follow the [Slack App Setup guide](https://docs.slack.dev/app-management/quickstart-app-settings/) to create a Slack app
2. Copy the bot token (starts with `xoxb-`) from your app settings
3. Ensure your bot has the appropriate permissions for the channels you want to access

***

## Messaging

Send, schedule, and manage Slack messages.

### Send Message

Send a message to a Slack channel or direct message. Supports rich formatting with blocks and attachments, threading, and various message options.

**Operation Type:** Mutation (Write)

**Parameters:**

* **channel** `string` (required): Channel ID or channel name (e.g., #general, @username, or C1234567890)
* **text** `string` (required): The main message text to send
* **attachments** `string` (nullable): JSON string of legacy structured message attachments (optional)
* **blocks** `string` (nullable): JSON string of Block Kit layout blocks (optional)
* **threadTs** `string` (nullable): Timestamp of parent message to reply in thread (optional)
* **replyBroadcast** `boolean` (nullable): Used in conjunction with thread\_ts to make reply visible to everyone in channel (optional)
* **unfurlLinks** `boolean` (nullable): Pass true to enable unfurling of primarily text-based content (optional)
* **unfurlMedia** `boolean` (nullable): Pass false to disable unfurling of media content (optional)
* **asUser** `boolean` (nullable): Pass true to post the message as the authed user instead of as a bot (optional)

**Returns:**

* **ok** `boolean`: Whether the message was sent successfully
* **channel** `string`: The channel where the message was sent
* **ts** `string`: Timestamp of the sent message
* **message** `object`: The sent message object
  * **type** `string`: Message type
  * **subtype** `string` (nullable): Message subtype
  * **text** `string`: Message text
  * **ts** `string`: Message timestamp
  * **username** `string` (nullable): Username
  * **botId** `string` (nullable): Bot ID
  * **blocks** `string` (nullable): Message blocks
  * **attachments** `string` (nullable): Message attachments

**Example Usage:**

```json
{
  "channel": "#general",
  "text": "Hello team! Here's the project update.",
  "blocks": "[{\"type\": \"section\", \"text\": {\"type\": \"mrkdwn\", \"text\": \"*Project Status:* On track\"}}]"
}
```

### Schedule Message

Schedule a message to be sent at a specific time in the future. Perfect for reminders, announcements, or time-zone appropriate messaging.

**Operation Type:** Mutation (Write)

**Parameters:**

* **channel** `string` (required): Channel ID or channel name where message will be sent
* **text** `string` (required): The message text to schedule
* **postAt** `number` (required): Unix timestamp when the message should be sent
* **attachments** `string` (nullable): JSON string of legacy structured message attachments (optional)
* **blocks** `string` (nullable): JSON string of Block Kit layout blocks (optional)
* **threadTs** `string` (nullable): Timestamp of parent message to reply in thread (optional)
* **replyBroadcast** `boolean` (nullable): Used in conjunction with thread\_ts to make reply visible to everyone in channel (optional)
* **unfurlLinks** `boolean` (nullable): Pass true to enable unfurling of primarily text-based content (optional)
* **unfurlMedia** `boolean` (nullable): Pass false to disable unfurling of media content (optional)
* **asUser** `boolean` (nullable): Pass true to post the message as the authed user instead of as a bot (optional)

**Returns:**

* **ok** `boolean`: Whether the message was scheduled successfully
* **channel** `string`: The channel where the message will be sent
* **scheduledMessageId** `string`: ID of the scheduled message
* **postAt** `number`: Unix timestamp when the message will be sent
* **dateCreated** `number`: Unix timestamp when the scheduled message was created

**Example Usage:**

```json
{
  "channel": "#announcements",
  "text": "Daily standup starts in 15 minutes!",
  "postAt": 1672531200
}
```

***

## Common Use Cases

**Team Communication:**

* Send project updates and announcements to channels
* Schedule reminders for meetings and deadlines
* Use threading for organized discussions

**Rich Messaging:**

* Format messages with Block Kit for interactive elements
* Include attachments for file sharing and media
* Control link and media unfurling behavior

**Automated Workflows:**

* Schedule messages for different time zones
* Post as user or bot depending on context
* Broadcast threaded replies when needed

