How to build a SlackBot with Node.js and JavaScript?

In this tutorial, we will be learning how to build a simple Slack bot that replies back a random greeting when you say “hi” or “hello”. The bot will be written in JavaScript in conjunction with Node.js!

Here’s a look at the bot in action:

How to build a SlackBot with Node.js and JavaScript

Table of Contents

  1. Prerequisites
  2. Installing Node and NPM
  3. Initializing our Project and Installing Slackbots.js
  4. Creating a New Slack bot
  5. Building our Bot
  6. Making Your Slack Bot Reply
  7. Running your Slack bot
  8. Conclusion

Before we get started, please ensure you meet the prerequisites for this tutorial:

Prerequisites

  • Since the bot is written in JavaScript, basic knowledge of JavaScript would be helpful
  • A Slack account and active Slack instance to deploy your bot on

Installing Node and NPM

To install the necessary software for this project, we will first need Node.js, a JavaScript runtime.

  1. Visit the official Node.js website to get the installer.
  2. After it downloads, run the installer until the end.
  3. Restart your computer to ensure the changes can take effect.

How to build a SlackBot with Node.js and JavaScript
The Node.js installer.

The Node.js installer should have also installed NPM for you. To confirm that you have installed both properly, you’ll need to open Windows Command Prompt if you’re on Windows, or Terminal if you’re on Mac or Linux.

To check if you installed node:

node -v

To check if you installed NPM:

   npm -v

If both of these commands return a version number, you’re good to go.

Initializing our Project and Installing Slackbots.js

Create a folder anywhere you’d like to serve as the root directory for your bot. Navigate to that folder and initialize a new project by running

    npm init

Feel free to enter in whatever information you’d like. After that finishes running, you will be left with a file called package.json.

Now, to simplify our interactions with Slack’s Real Time Messaging API, we will be using the Slackbots.js library. To install Slackbots.js for use in our project, run the installation command:

 npm install slackbots --save

We are now ready to use Slackbots.js in our code!

Creating a New Slack bot

Let’s register a new bot on our slack instance. Head on over to:

 https://instance.slack.com/services/new/bot

Replace instance with the name of your Slack instance. Once here, give your bot a name. We’ll call our bot Slacky.

How to build a SlackBot with Node.js and JavaScript
Creating a new Slack bot.

After you hit Add bot integration, you’ll be provided with your bot’s API token. You’ll need this later on so save this somewhere. Additionally, you can also change the name of your bot, upload an icon, and set what channels your bot will operate inside.

How to build a SlackBot with Node.js and JavaScript
The Slack bot settings page.

Building our Bot

In the same directory that your package.json lives in, create a new file called index.js. This file will serve as the code for your bot.

How to build a SlackBot with Node.js and JavaScript
The project’s folder structure.

Let’s create a bot using Slackbots.js:

    var SlackBot = require("slackbots");

    var bot = new SlackBot({
        token: "",
        name: "Slacky"
    });

That’s all we need to have a functional bot. Fill in the token value with the API token you got earlier and you’re good to go. To test that this all works, let’s make the bot send us a message upon start-up:

	
    var SlackBot = require("slackbots");
    var channel = "general";

    var bot = new SlackBot({
        token: "",
        name: "Slacky"
    });

    bot.on("start", function() {
        bot.postMessageToChannel(channel, "Hello world!");
        console.log("Hello world!");
    });
	

Our new code has our bot listen on the start event which is fired when a connection to Slack is established. Once the event fires, it will run the provided function. In that function, we tell our bot to send the text Hello world! to the channel you defined in the channel variable. Finally, we threw in a console.log just for good measure.

Now it’s time to run our bot. To do so, simply run your index.js file by running this command at the same directory:

node index.js

If everything went well, not only should you see Hello world! printed on your console, but if you go to the designated channel on Slack, you should also see your bot having said Hello world!.

How to build a SlackBot with Node.js and JavaScript
Console after running our Slack bot.

How to build a SlackBot with Node.js and JavaScript
Our Slack bot saying hello world in chat.

Making Your Slack Bot Reply

Great so our bot works now, but let us make it do something more than simply say a single line of text upon start up. Let’s make our friendly slack bot reply to use a random greeting when we say hi or hello in the same channel that the bot operates in.

To respond to messages we must first listen on the message event.

 bot.on("message", function(data) {

    });

However, a “message” according to the Slack API isn’t necessarily a message of text sent. A “message” is more like a generic event that could be basically anything. The bottom of this page has a list of all events. Before of this, we must specifically look into events that are the type message, like so:

bot.on("message", function(data) {
        if (data.type !== "message") {
            return;
        }

        // this event was a text message sent
    });

Because we are ignoring events that aren’t messages by immediately returning, we can now safely continue on with events that are messages:

  bot.on("message", function(data) {
        if (data.type !== "message") {
            return;
        }

        handleMessage(data.text);
    });

We’re passing in the text contained in the message event to a new function called handleMessage which we will now define. Again, this function should only reply back with a greeting if we said either hello or hi:


    function handleMessage(message) {
        switch(message) {
            case "hi":
            case "hello":
                sendGreeting();
                break;
            default:
                return;
        }
    }
	

Here we are using a switch case statement to precisely match the string sent. This makes it super easy to add more words to trigger a greeting since all you need to do is add another case for it. If the message matched, we call sendGreeting() to send the reply.

With that being said, let’s now define sendGreeting():

 function sendGreeting() {
        var greeting = getGreeting();
        bot.postMessageToChannel(channel, greeting);
    }
	

The function is that simple. First you get the greeting via getGreeting(), set it to a new variable called greeting, and then you send the greeting to the designated channel like before.

The final step left for this bot is to define the getGreeting() function that randomly returns a greeting:

function getGreeting() {
        var greetings = [
            "hello!",
            "hi there!",
            "cheerio!",
            "how do you do!",
            "¡hola!"
        ];
        return greetings[Math.floor(Math.random() * greetings.length)];
    }

We define a greetings array with five greetings, but feel free to add more if you’d like. Then we randomly select an element to return for our bot to reply back with. That’s all the work that needs to be done for this!

Running your Slack bot

Let’s put all these pieces together to get our friendly bot fully working. The final code for index.js should look something like this:


    var SlackBot = require("slackbots");
    var channel = "general";

    var bot = new SlackBot({
        token: "",
        name: "Slacky"
    });

    bot.on("start", function() {
        bot.postMessageToChannel(channel, "Hello world!");
    });

    bot.on("message", function(data) {
        if (data.type !== "message") {
            return;
        }

        handleMessage(data.text);
    });

    function handleMessage(message) {
        switch(message) {
            case "hi":
            case "hello":
                sendGreeting();
                break;
            default:
                return;
        }
    }

    function sendGreeting() {
        var greeting = getGreeting();
        bot.postMessageToChannel(channel, greeting);
    }

    function getGreeting() {
        var greetings = [
            "hello!",
            "hi there!",
            "cheerio!",
            "how do you do!",
            "¡hola!"
        ];
        return greetings[Math.floor(Math.random() * greetings.length)];
    }
	

Save your file and again run this command to run your bot:

node index.js

If your bot is already running, you can hit control + C to terminate it! Also, make sure to actually invite your bot to your designated channel by mentioning it like @slacky and then inviting them. The bot needs to be in the channel to respond back!

Now when you try saying one of the two designated words to trigger a greeting, you should get a reply back from your Slack bot, like so:

How to build a SlackBot with Node.js and JavaScript
Our finished Slack bot in action, Slacky!

Conclusion

In this tutorial, we have seen how we can use Node.js with Slackbots.js to create a very simple Slack bot that replies back a randomized greeting whenever we say hi or hello in chat. Of course, this functionality is just a very basic example intended to help you get started. The potential for your bot is limitless. Since we are using Node.js, you can do things like request data on the background or call other APIs and then have the bot return that information to you seamlessly.

For more information, we highly recommend that you read up on both the documentation for Slackbot.js and the Slack’s Real Time Messaging API as well so that you can be even more familiar about just what you can create.

We hope that this tutorial has been helpful to you. If so, please consider sharing this so that others may also get the same benefit.

Thanks for reading!

#node-js #javascript

How to build a SlackBot with Node.js and JavaScript?
38.10 GEEK