Portal Community

Example 1: Send a Formatted Block Kit Message to a Channel

Business story: Acme Corp's CI/CD pipeline completes a production deployment. A workflow node automatically posts a rich Block Kit message to the #deployments channel so the engineering team sees build health, environment, and a direct link to the deployment logs — all without anyone manually updating Slack.

Node: message / send
PropertyValue
BotTokenxoxb-4212350000-4212350001-acmecorp-deploy-bot-token
Channel#deployments
TextDeployment SUCCESS: payment-service v3.7.2 to production
UsernameDeployBot
IconEmoji:rocket:
BlocksJsonSee JSON below
[
  {
    "type": "header",
    "text": {
      "type": "plain_text",
      "text": ":white_check_mark: Deployment Succeeded — payment-service"
    }
  },
  {
    "type": "section",
    "fields": [
      { "type": "mrkdwn", "text": "*Service:*\npayment-service" },
      { "type": "mrkdwn", "text": "*Version:*\nv3.7.2" },
      { "type": "mrkdwn", "text": "*Environment:*\nproduction" },
      { "type": "mrkdwn", "text": "*Duration:*\n4m 12s" },
      { "type": "mrkdwn", "text": "*Deployed by:*\nGitHub Actions" },
      { "type": "mrkdwn", "text": "*Commit:*\n`a3f9d22` Fix checkout timeout on high load" }
    ]
  },
  {
    "type": "divider"
  },
  {
    "type": "actions",
    "elements": [
      {
        "type": "button",
        "text": { "type": "plain_text", "text": "View Build Logs" },
        "url": "https://github.com/acmecorp/payment-service/actions/runs/12345678",
        "style": "primary"
      },
      {
        "type": "button",
        "text": { "type": "plain_text", "text": "Rollback" },
        "url": "https://deploy.acmecorp.internal/rollback/payment-service",
        "style": "danger"
      }
    ]
  }
]
Expected outcome: The #deployments channel receives a formatted card showing service, version, environment, and commit details. Engineers see a green header with action buttons — one to view logs, one to trigger a rollback. Output: messageSent: true, messageTs: "1748100000.000100", channel: "C018DEPLOYS".

Example 2: Create a Private Channel and Invite Users

Business story: Acme Corp launches a new client project, "Project Atlas." The project management workflow automatically creates a private Slack channel for the project team, then invites the project manager, lead engineer, and client success manager so they can collaborate immediately — without an admin manually setting up Slack.

Step 1 — Node: channel / create
PropertyValue
BotTokenxoxb-4212350000-4212350001-acmecorp-pm-bot-token
Nameproject-atlas-2026
IsPrivatetrue
TeamIdT012ACME01

Success output: id: "C07ATLAS01", name: "project-atlas-2026", isPrivate: true.

Step 2 — Node: channel / setTopic
PropertyValue
BotTokenxoxb-4212350000-4212350001-acmecorp-pm-bot-token
ChannelIdC07ATLAS01 (from Step 1 output)
TopicProject Atlas | Start: 2026-06-01 | PM: Sarah Chen | Target: Q3 delivery
Step 3 — Node: channel / invite
PropertyValue
BotTokenxoxb-4212350000-4212350001-acmecorp-pm-bot-token
ChannelIdC07ATLAS01
UserIdsU023SARAH1,U034LIANG2,U045JAMES3
Step 4 — Node: message / send

Post a welcome message to the newly created channel:

PropertyValue
BotTokenxoxb-4212350000-4212350001-acmecorp-pm-bot-token
ChannelC07ATLAS01
TextWelcome to #project-atlas-2026! This is your dedicated project channel.
BlocksJsonSee JSON below
[
  {
    "type": "header",
    "text": { "type": "plain_text", "text": ":tada: Welcome to Project Atlas 2026" }
  },
  {
    "type": "section",
    "text": {
      "type": "mrkdwn",
      "text": "This private channel is the home for all *Project Atlas* communication. The project kicks off on *June 1, 2026* with a target Q3 delivery.\n\n*Team:*\n- PM: <@U023SARAH1> (Sarah Chen)\n- Lead Engineer: <@U034LIANG2> (Liang Wu)\n- Client Success: <@U045JAMES3> (James Okafor)"
    }
  },
  {
    "type": "section",
    "text": {
      "type": "mrkdwn",
      "text": ":link: **  |  **"
    }
  }
]
Expected outcome: A private channel #project-atlas-2026 is created with the correct topic, all three team members are invited, and a formatted welcome message is waiting for them when they arrive. No admin manual steps required.

Example 3: Upload a File with Content to Multiple Channels

Business story: Every Monday morning, Acme Corp's analytics workflow generates a weekly sales summary as a CSV file and posts it to both #sales and #management channels so department heads have the data waiting for them when they start work. The CSV content is assembled inline from workflow variables — no disk access needed.

Node: file / upload
PropertyValue
BotTokenxoxb-4212350000-4212350001-acmecorp-analytics-bot
ChannelsC018SALES1,C027MGMT01
Filenameweekly-sales-summary-2026-05-19.csv
Filetypecsv
FileContentSee content string below

The FileContent value is assembled by an upstream Code node and passed as a variable. Example content:

Week Ending,Total Revenue,New Customers,Avg Deal Size,Pipeline Added,MRR
2026-05-19,"$842,500",34,"$24,779","$1,240,000","$112,400"
2026-05-12,"$798,200",29,"$27,524","$985,000","$108,900"
2026-05-05,"$901,000",41,"$21,976","$1,410,000","$119,200"
Follow-up Node: message / send

After uploading, post a summary message in #sales with the permalink to the file:

PropertyValue
BotTokenxoxb-4212350000-4212350001-acmecorp-analytics-bot
ChannelC018SALES1
TextWeekly sales CSV is ready. Revenue this week: $842,500 across 34 new customers.
BlocksJsonInline summary with permalink from file/upload output
[
  {
    "type": "section",
    "text": {
      "type": "mrkdwn",
      "text": ":bar_chart: *Weekly Sales Summary — Week Ending 19 May 2026*\n\n*Total Revenue:* $842,500  |  *New Customers:* 34  |  *MRR:* $112,400\n\n:paperclip: *<https://acmecorp.slack.com/files/.../weekly-sales-summary-2026-05-19.csv|Download CSV>*"
    }
  }
]
Expected outcome: The CSV file appears in both #sales and #management channels with a formatted summary card. Output: fileId: "F08SALES01", fileName: "weekly-sales-summary-2026-05-19.csv", permalink: "https://acmecorp.slack.com/files/...".

Example 4: Add an Emoji Reaction to a Message

Business story: Acme Corp's support workflow monitors a #support-queue channel. When a customer ticket is resolved and the resolution is confirmed in the CRM, the workflow automatically reacts to the original Slack support request message with a green checkmark so the support team can immediately see which requests have been closed — without reading every message thread.

Step 1 — Node: reaction / add (mark as resolved)
PropertyValue
BotTokenxoxb-4212350000-4212350001-acmecorp-support-bot
ChannelC019SUPPRT
Timestamp1748050000.000400 (the original support request message ts)
Emojiwhite_check_mark
Step 2 — Node: reaction / add (indicate SLA met)
PropertyValue
BotTokenxoxb-4212350000-4212350001-acmecorp-support-bot
ChannelC019SUPPRT
Timestamp1748050000.000400
Emojizap

The :zap: reaction is the team's visual signal that the ticket was resolved within SLA.

Step 3 — Node: message / send (post resolution note in thread)
PropertyValue
BotTokenxoxb-4212350000-4212350001-acmecorp-support-bot
ChannelC019SUPPRT
ThreadTs1748050000.000400
TextTicket #TKT-8821 resolved. Root cause: expired SSL cert on api-gateway. Fix applied at 14:32 UTC. Customer notified via email.
Expected outcome: The original support message in #support-queue shows :white_check_mark: and :zap: reactions, and the resolution note is posted as a thread reply. The support team can scan the channel and instantly see which tickets are closed (checkmark) and which were resolved within SLA (zap) without opening any threads.

Example 5: Create a User Group for a Department and Assign Members

Business story: Acme Corp's HR system triggers a workflow when a new department is created in the org chart. The workflow automatically creates a matching Slack User Group so department members can be mentioned as a group with @finance-team — and new employees added to the department are automatically added to the group going forward.

Step 1 — Node: userGroup / create
PropertyValue
BotTokenxoxb-4212350000-4212350001-acmecorp-hr-bot
NameFinance Team
Handlefinance-team
DescriptionAcme Corp Finance Department — AP, AR, FP&A, and Treasury

Success output: usergroupId: "S05FINGRP1", name: "Finance Team", handle: "finance-team".

Step 2 — Node: userGroup / addUsers
PropertyValue
BotTokenxoxb-4212350000-4212350001-acmecorp-hr-bot
UsergroupIdS05FINGRP1 (from Step 1 output)
UserIdsU056PRIYA1,U067OMAR02,U078LINDA3,U089KEVIN4,U090NIAMH5

This adds all five Finance team members in a single operation.

Step 3 — Node: message / send (notify the team)
PropertyValue
BotTokenxoxb-4212350000-4212350001-acmecorp-hr-bot
Channel#finance
TextThe @finance-team user group has been created. You can now mention the whole team with @finance-team.
BlocksJsonSee JSON below
[
  {
    "type": "section",
    "text": {
      "type": "mrkdwn",
      "text": ":busts_in_silhouette: The *@finance-team* user group is now active with 5 members.\n\nAnyone in the workspace can now mention the entire Finance team by typing `@finance-team`. This group will be kept in sync automatically as team membership changes in HR."
    }
  },
  {
    "type": "context",
    "elements": [
      {
        "type": "mrkdwn",
        "text": "Members: <@U056PRIYA1>, <@U067OMAR02>, <@U078LINDA3>, <@U089KEVIN4>, <@U090NIAMH5>"
      }
    ]
  }
]
Expected outcome: The Slack workspace has a new @finance-team user group with all 5 members. The #finance channel receives a notification. Future workflow runs triggered by HR onboarding will call userGroup / addUsers with the new employee's Slack ID to keep the group current automatically.
Maintaining the group over time: Use userGroup / getMany with IncludeUsers: true at the start of your HR onboarding workflow to look up the group ID by handle, then call userGroup / addUsers with the new employee's user ID. Use userGroup / getUsers to audit membership on a schedule. Use userGroup / disable if a department is dissolved rather than deleting it, so message history remains searchable.