Skip to content

slack://

Slack producer (incoming-webhook OR chat.postMessage) + polling consumer (conversations.history). Stdlib HTTP — no Slack SDK dependency.

URI shape

slack://#<channel>?token=xoxb-…                            # Web API producer + consumer
slack://?webhookUrl=https://hooks.slack.com/services/…      # incoming-webhook producer

The leading # is canonical Slack form and is stripped at parse time. Channel can also be passed as ?channel=… (channel name or channel ID — IDs are auto-detected by their C/G/D prefix).

Parameters

Common

Param Type Default Description
channel string from URI Target channel name (or channel ID for consumer).
token string — Slack bot/user token (xoxb-… / xoxp-…). Required for Web API producer + any consumer.

Consumer

Param Type Default Description
conversationType enum PUBLIC_CHANNEL conversations.list type filter (PUBLIC_CHANNEL / PRIVATE_CHANNEL / MPIM / IM).
maxResults integer 10 Cap on messages dispatched per poll.
naturalOrder boolean false Emit oldest-first (Slack API returns newest-first).
sendEmptyMessageWhenIdle boolean false Emit a heartbeat Exchange when poll yields zero messages.
serverUrl string https://slack.com Slack API base URL (overridable for tests).

Producer

Param Type Default Description
webhookUrl string — Incoming-webhook URL. Mutually exclusive with token posting.
iconEmoji string — icon_emoji for the posted message (e.g. :robot_face:).
iconUrl string — icon_url for the posted message.
username string — username (display-name override) for the posted message.

Polling scheduler

delay (default 60s), initialDelay (1s), useFixedDelay, repeatCount, greedy, pollInterval (legacy alias for delay).

Headers (Helix-only)

Header Direction Notes
HelixSlackChannel Both Per-message channel override (producer); written by consumer on each emitted message.
HelixSlackTimestamp Written by consumer + producer The Slack ts field. Written by the producer with the value returned from chat.postMessage.
HelixSlackUser Written by consumer The Slack user ID who sent the message.
HelixSlackEventType Written by consumer Event type (message/empty/…).
HelixSlackBlocks Read by producer Block Kit []any (or []map[string]any) passed straight through into the blocks field.
HelixSlackThreadTS Read by producer Sets thread_ts for thread replies.

YAML examples

workflows:
  # 1. Webhook producer — fire-and-forget alerts to an incoming-webhook URL.
  - id: slack-webhook-alert
    description: Post to a Slack incoming-webhook on every direct:// message.
    trigger:
      uri: direct://alert
    steps:
      - to: slack://?webhookUrl=https://hooks.slack.com/services/XXX/YYY/ZZZ&username=helix-alerts&iconEmoji=:rocket:

  # 2. Token-based producer — post to a channel by name.
  - id: slack-channel-post
    description: Post via chat.postMessage using a bot token.
    trigger:
      uri: direct://ops-message
    steps:
      - to: slack://#ops?token=xoxb-…&username=Helix&iconEmoji=:robot_face:

  # 3. Block Kit producer — rich message via HelixSlackBlocks header.
  - id: slack-blocks
    description: Send a Block Kit message.
    trigger:
      uri: direct://rich-message
    steps:
      - set-header:
          name: HelixSlackBlocks
          starlang: |
            [
              {type: "section", text: {type: "mrkdwn", text: "*Status:* :large_green_circle: All good"}},
              {type: "context", elements: [{type: "mrkdwn", text: "_via Helix_"}]}
            ]
      - to: slack://#ops?token=xoxb-…

  # 4. Polling consumer — emit each new message in a channel.
  - id: slack-consume
    description: Poll #incoming for new messages, oldest-first.
    trigger:
      uri: slack://#incoming?token=xoxb-…&conversationType=PUBLIC_CHANNEL&maxResults=20&naturalOrder=true&delay=10s
    steps:
      - log:
          message: "[${headers.HelixSlackTimestamp}] ${headers.HelixSlackUser}: ${body}"

  # 5. Thread reply.
  - id: slack-thread-reply
    description: Reply in a thread.
    trigger:
      uri: direct://reply
    steps:
      - set-header:
          name: HelixSlackThreadTS
          starlang: headers["original_ts"]
      - to: slack://#alerts?token=xoxb-…

See also

  • http-server:// — pair with this if you need Slack Events API push delivery (Slack POSTs JSON events to a public HTTPS endpoint).