← Slack

New Interaction Events from Slack API

Pipedream makes it easy to connect APIs for Slack and 1000+ other apps remarkably fast.

Trigger workflow on
New Interaction Events from the Slack API
Next, do this
Connect to 1000+ APIs using code and no-code building blocks
No credit card required

Overview

Slack messages can contain interactive elements like buttons, dropdowns, radio buttons, and more. This source subscribes to interactive events, like when a button is clicked in a message.

Example of a Slack button

Then this source will be triggered when you or another Slack user in your workspace clicks a button, selects an option or fills out a form.

Example feed of interaction events coming from Slack

With this trigger, you can build workflows that perform some work with other APIs or services, and then reply back to the original message.

Getting Started

What this short video to learn how to use this in a workflow, or follow the guide below.

First, if you haven’t already - send yourself a message containing one or more interactive elements. Use the Sending the message with an interactive element guide below to send a messsage containing a button.

If you have already sent a message containing an element, skip to Configuring the source.

Sending the message with an interactive element

The easiest way is to send yourself a message using the Slack - Send Message Using Block Kit action:

Selecting the Send Slack Message with Block Kit)

Then select a Channel you’d like to send the message to, and use the Block Kit Builder to build a message, or just copy the example button blocks below:

[
  {
    type: "actions",
    elements: [
      {
        type: "button",
        text: {
          type: "plain_text",
          text: "Click Me",
          emoji: true,
        },
        value: "click_me_123",
        action_id: "button_click",
      },
    ],
  },
];

Your Slack - Send Message Using Block Kit should look like this:

Setting up the block kit message with a button block

Configuring the source

By default, this source will listen to all interactive events from your Slack workspace that your connected Slack account has authorization to view.

You can filter these events by selecting a specific channel and/or a specific action_id.

Filtering interactive events by channel

Use the Channels dropdown to search for a specific channel for this source to subscribe to. Only button clicks, dropdown selects, etc. in this selected channel will trigger the source.

Filtering interactive events by action_id

For more specificity, you can filter based on the passed action_id to the message.

The action_id is arbitrary. It’s defined on the initial message sending the button, dropdown, or other interactive element’s markup.

For example, in the section above using the Block Kit to create a message, we defined the button’s action_id as "button_click". But you can choose whichever naming convention you’d like.

If you pass button_click as a required action_id to this source, then only interactivity events with the action_id of "button_click" will trigger this source.

Into to Pipedream
Watch us build a workflow
Watch us build a workflow
7 min
Watch now ➜

Trusted by 500,000+ developers from startups to Fortune 500 companies

Adyen logo
Brex logo
Carta logo
Checkr logo
Chameleon logo
DevRev logo
LinkedIn logo
Netflix logo
New Relic logo
OnDeck logo
Replicated logo
Scale AI logo
Teamwork logo
Warner Bros. logo
Xendit logo

Developers Pipedream

Integrations

Send Message with Discord Webhook API on New Interaction Events from Slack API
Slack + Discord Webhook
 
Try it
Add Multiple Rows with Google Sheets API on New Interaction Events from Slack API
Slack + Google Sheets
 
Try it
Get Film with SWAPI - Star Wars API on New Interaction Events from Slack API
Slack + SWAPI - Star Wars
 
Try it
Create Multiple Records with Airtable API on New Interaction Events from Slack API
Slack + Airtable
 
Try it
Send any HTTP Request with HTTP / Webhook API on New Interaction Events from Slack API
Slack + HTTP / Webhook
 
Try it

Details

This is a pre-built, source-available component from Pipedream's GitHub repo. The component is developed by Pipedream and the community, and verified and maintained by Pipedream.

To contribute an update to an existing component or create a new component, create a PR on GitHub. If you're new to Pipedream component development, you can start with quickstarts for trigger span and action development, and then review the component API reference.

New Interaction Events on Slack
Description:Emit new events on new Slack [interactivity events](https://api.slack.com/interactivity) sourced from [Block Kit interactive elements](https://api.slack.com/interactivity/components), [Slash commands](https://api.slack.com/interactivity/slash-commands), or [Shortcuts](https://api.slack.com/interactivity/shortcuts).
Version:0.0.3
Key:slack-new-interaction-event-received

Code

import common from "../common/base.mjs";

export default {
  name: "New Interaction Events",
  version: "0.0.3",
  key: "slack-new-interaction-event-received",
  description:
    "Emit new events on new Slack [interactivity events](https://api.slack.com/interactivity) sourced from [Block Kit interactive elements](https://api.slack.com/interactivity/components), [Slash commands](https://api.slack.com/interactivity/slash-commands), or [Shortcuts](https://api.slack.com/interactivity/shortcuts).",
  type: "source",
  props: {
    ...common.props,
    action_ids: {
      type: "string[]",
      label: "Action IDs",
      description:
        "Filter interaction events by specific `action_id`'s to subscribe for new interaction events. If none selected, all `action_ids` will emit new events.",
      optional: true,
      default: [],
    },
    conversations: {
      propDefinition: [
        common.props.slack,
        "conversation",
      ],
      type: "string[]",
      label: "Channels",
      description:
        "Filter interaction events by one or more channels. If none selected, any interaction event in any channel will emit new events.",
      optional: true,
      default: [],
    },
    // eslint-disable-next-line pipedream/props-description,pipedream/props-label
    slackApphook: {
      type: "$.interface.apphook",
      appProp: "slack",
      /**
       * Subscribes to potentially 4 different events:
       * `interaction_events` - all interaction events on the authenticated account
       * `interaction_events:${action_id}` - all interaction events with a specific given action_id
       * `interaction_events:${channel_id}` - all interaction events within a specific channel
       * `interaction_events:${channel_id}:${action_id}` - action_id within a specific channel
       * @returns string[]
       */
      async eventNames() {
        // start with action_ids, since they can be the most specific
        const action_events = this.action_ids.reduce((carry, action_id) => {
          // if channels are provided, spread them
          if (this.conversations && this.conversations.length > 0) {
            return [
              ...carry,
              ...this.conversations.map(
                (channel) => `interaction_events:${channel}:${action_id}`,
              ),
            ];
          }

          return [
            ...carry,
            `interaction_events:${action_id}`,
          ];
        }, []);

        if (action_events.length > 0) return action_events;

        // if no action_ids are specified, move down to channels
        const channel_events = this.conversations.map(
          (channel) => `interaction_events:${channel}`,
        );

        if (channel_events.length > 0) return channel_events;

        // if not specific action_ids or channels are specified, subscribe to all events
        return [
          "interaction_events",
        ];
      },
    },
  },
  methods: {},
  async run(event) {
    this.$emit(
      {
        event,
      },
      {
        summary: `New interaction event${
          event?.channel?.id
            ? ` in channel ${event.channel.id}`
            : ""
        }${
          event.actions?.length > 0
            ? ` from action_ids ${event.actions
              .map((action) => action.action_id)
              .join(", ")}`
            : ""
        }`,
        ts: Date.now(),
      },
    );
  },
};

Configuration

This component may be configured based on the props defined in the component code. Pipedream automatically prompts for input values in the UI and CLI.
LabelPropTypeDescription
SlackslackappThis component uses the Slack app.
N/AnameCache$.service.dbThis component uses $.service.db to maintain state between executions.
Action IDsaction_idsstring[]

Filter interaction events by specific action_id's to subscribe for new interaction events. If none selected, all action_ids will emit new events.

Channelsconversationsstring[]Select a value from the drop down menu.
slackApphook$.interface.apphook

Troubleshooting

I’m clicking buttons, but no events are being received

Follow these steps to make sure your source is configured correctly:

  1. Make sure that your action_id or channels filters apply to that message, remove the filters to make sure that’s not the case.

  2. Make sure that the message comes from the same Slack account that this source is configured with.

Authentication

Slack uses OAuth authentication. When you connect your Slack account, Pipedream will open a popup window where you can sign into Slack and grant Pipedream permission to connect to your account. Pipedream securely stores and automatically refreshes the OAuth tokens so you can easily authenticate any Slack API.

Pipedream requests the following authorization scopes when you connect your account:

bookmarks:writecalls:readcalls:writechannels:historychannels:readchannels:writednd:readdnd:writeemoji:readfiles:readgroups:historygroups:readgroups:writeim:historyim:readim:writelinks:readlinks:writempim:historympim:readmpim:writepins:readpins:writereactions:readreactions:writereminders:readreminders:writeremote_files:readremote_files:sharestars:readstars:writeteam:readusergroups:readusergroups:writeusers:readusers:read.emailusers:writechat:write:botchat:write:usercommandsfiles:write:userusers.profile:writeusers.profile:readsearch:read

About Slack

Slack is a channel-based messaging platform. With Slack, people can work together more effectively, connect all their software tools and services, and find the information they need to do their best work — all within a secure, enterprise-grade environment.

More Ways to Use Slack

Triggers

New Message In Channels (Instant) from the Slack API

Emit new event when a new message is posted to one or more channels

 
Try it
New Direct Message (Instant) from the Slack API

Emit new event when a message was posted in a direct message channel

 
Try it
New Mention (Instant) from the Slack API

Emit new event when a username or specific keyword is mentioned in a channel

 
Try it
New Reaction Added (Instant) from the Slack API

Emit new event when a member has added an emoji reaction to a message

 
Try it
New Star Added (Instant) from the Slack API

Emit new event when a star is added to an item

 
Try it

Actions

Send Message to a Public Channel with the Slack API

Send a message to a public channel and customize the name and avatar of the bot that posts the message. See postMessage or scheduleMessage docs here

 
Try it
Send Message to a Private Channel with the Slack API

Send a message to a private channel and customize the name and avatar of the bot that posts the message. See postMessage or scheduleMessage docs here

 
Try it
Send a Direct Message with the Slack API

Send a direct message to a single user. See postMessage or scheduleMessage docs here

 
Try it
Send Message Using Block Kit with the Slack API

Send a message using Slack's Block Kit UI framework to a channel, group or user. See postMessage or scheduleMessage docs here

 
Try it
Reply to a Message Thread with the Slack API

Send a message as a threaded reply. See postMessage or scheduleMessage docs here

 
Try it