Use Case: Slack Listener

In this Article

Design an Event Listener for Slack Workspace Using Slack Snap Pack

In any enterprise ecosystem, receiving notifications is critical to carry out your daily tasks. Emails are no longer the preferred method of receiving notifications, especially when the notifications involve time-critical issues. To fasten the decision-making process and deliver results, you can configure an Event Listener in the Slack workspace to cut through the clutter and get notified on items that need immediate attention. This use case demonstrates how you can use the Slack Snap Pack to route important events into a custom channel created for this purpose.

Problem

In a real business case scenario, going through all messages posted on the Slack is time-consuming. However, you cannot miss out on important updates that require attention. 

Solution

Using Slack integration for your organization allows you to set up notifications to send messages to a private channel or a specific user on Slack. You can efficiently automate the process of listening to Slack events, configuring the events, and receiving alerts on your Slack Channel upon the trigger of events. This pipeline demonstrates how you can automate the same.

Parent Pipeline - Slack ListenerChild Pipeline - Process Event

Download the Slack Listener and Process Events Pipelines. 

Understanding the Slack Pipeline

Prerequisites

  • Create an app in your Slack Workspace that listens to the Slack instance.
  • Set the required scopes for the app. In this Use Case, we set the Bot and User Token scopes to perform the following actions:
    • Add read channels, read messages, and read users.
    • Add write messages and read channels.

Key steps:

  1. Create a Private Channel in Slack.
  2. Subscribe to the Slack events.
  3. Create a Child Pipeline.

Create a Private Channel in Slack

Create a private (custom) channel named #my_alerts. and add the necessary stakeholders who must receive alerts for the given events.

Subscribe to Slack Events

Configure two events to receive alerts on the private channel when the following events occur:

  • Event 1: When a new member joins the Slack channel.
  • Event 2: When a SWAT (customer-raised ticket) is posted in the channel.

To subscribe events in Slack:

  1. Navigate to the Slack Apps page.

  2. Click Create New App.



  3. Select From scratch.

  4. Specify the App Name and choose a workspace to develop your app.


  5. Click Event Subscriptions in the left navigation pane.


  6. Enable the toggle for Enable Events.

  7. Subscribe to the events you want to listen to:
    • Bot events: Whenever a bot adds a user to the channel, we want to receive an alert.
    • User events: Whenever a user posts a message to a public channel, private channel, individual user, multiple users, or group of users, we want to receive an alert.

  8. Integrate the app with the channel. Follow one of the following ways to integrate the app with the channel:
    • Click the channel name to open the get channel details dialog. Navigate to the Integrations tab. In the Apps section of the Integration tab, click Add an App. Click Add next to the required app from the Add apps to channel_name dialog to integrate that app with the channel.
    • Alternatively, type /app in the messaging text box to get the option to Add apps to the channel. Select Add apps to the channel to open the Add apps to dialog. Click Add next to the required app from the Add apps to channel_name dialog to integrate that app with the channel.

  9. Provide the URL of the triggered task of the Parent Pipeline in the Request URL field. Configure a Pipeline with a Mapper Snap and create a triggered task to provide the Request URL in the Slack app.

Create a Parent Pipeline 

First, we configure the Mapper Snap with an expression to determine if the object is a challenge or an event.



Expression

This expression includes three elements: Token, Challenge and Type.

  • If the element is a challenge, the Snap sends the JSON response containing the challenge.
  • If the element is an event, the Snap checks whether it is Retry, because most often the pipeline might take more time to process events. Hence, if the Slack application does not get response in three seconds, the Snap retriggers the pipeline.
  • If it is a retry, the Snap sends the JSON object without processing it. If it is not a retry, the Snap sends the event for further processing.


Triggered Task

Create a a triggered task for the Parent pipeline. From the Triggered task dialog window, we copy the Cloud URL and HTTP Header (token) and paste it in Request URL field in the Slack app for verification.

You must append the bearer token to the URL. 

Once the Slack app receives the challenge from the Parent Pipeline, the URL is verified. After the URL is verified which usually takes three seconds, the request triggers the Parent Pipeline and it receives the challenge as response.

The Redirect URL should correspond to the same URL used for event subscription for the Slack app to function with the Slack Snap Pack.

Now we continue with the Parent Pipeline configuration to listen to the Slack events and process the events as per the requirement.

We configure the Router Snap with expressions that evaluate whether the input view contains a challenge or an event and routes the outputs appropriately.

If the input is a challenge, the Pipeline processes and sends the response. If the input is an event, the Router Snap routes the output to the Pipeline Execute Snap that runs the child Pipeline to process the event in the Process_Event Pipeline.

Next, we use the Join Snap to join both the output views of Pipeline Execute and Mapper Snaps using left outer join to get a unified output.

Create a Child Pipeline to Process Events

We configure the child Pipeline to perform the following two operations:

  1. Determine the type of event and route the flow appropriately.
      • Event 1: When a new member joins the Slack channel.
      • Event 2: When a user posts a SWAT message in the channel.

        You can configure the Pipeline to process more events based on your need.

  1. Join the output views from the Slack User Operations and Channel Operations Snaps to route the final output to the Parent Pipeline.

First, we configure the Router Snap to determine the type of event, whether it is a new member joining the channel (event 1) or a message posted in the channel (event 2).

If it is a message event, we want to check if the message contains the key word SWAT. Hence, we configure the Filter Snap as follows:

If the message contains SWAT, we intend to send the alert to the #my_alerts channel. So, we configure the Send Channel Message Snap with relevant Slack message as follows:

On running the Pipeline, the relevant SWAT message is sent to #my_alerts channel as follows:


If the event is a new member joining the channel we take this approach. We take a copy of the output from the Router Snap to extract user and channel information when a member joins a channel, and  configure the following Snaps:

User Operations SnapChannel Operations Snap

We configure the Mapper Snap to extract the name of the user and map it to the channel.

Next, we join the inputs from the Slack User Operations and Channel Operations Snaps using the Outer join of Join Snap to get an user alert.

We configure the Slack Send Message Snap to send alerts to #my_alerts channel.

On running the Pipeline, the relevant new user alert is sent to #my_alerts channel as follows:

Finally, we configure the Join Snap to get a single output from the two output views. This output is the output of the Pipeline Execute Snap in the Parent Pipeline.

Downloads

Important steps to successfully reuse Pipelines

  1. Download and import the pipeline into SnapLogic.
  2. Configure Snap accounts as applicable.
  3. Provide pipeline parameters as applicable.


  File Modified

File Use_Case_Slack_Listener.slp

Jun 10, 2021 by Kalpana Malladi

File Use_Case_Process_Event.slp

Feb 23, 2024 by Gouri Bhagchandani