Build your own Slack Bot with this PHP library

Build your own Slack Bot with this PHP library

It seems like everyone is using Slack, from company channels to community groups including one for Laravel.

Bots have been the new rage within the service and if you’d like to build your own Marcel Pociot created a framework agnostic PHP Slackbot library to make this easy.

Bots built with SlackBot can hear things, say things and reply to what they hear. This allows you to create conversational applications the way real human people talk to each other.

Receiving Messages with Slack Bot

Here is an example of listening for “Hello” and replying with “Hello Yourself”. This example can be used either in a direct message (a private message inside Slack between the user and the bot) or in a message the bot user is invited to.

$slackbot = new SlackBot();
$slackbot->initialize(<my_slack_bot_token>);

// give the bot something to listen for.
$slackbot->hears('hello', function (SlackBot $bot, $message) {
  $bot->reply('Hello yourself.');
});

The hears method takes a regular expression string to match and a callback with the response.

$slackbot->hears('open the {doorType} doors', function(SlackBot $bot, $doorType) {
    //..
});

Sending Messages with Slack Bot

After the bot “hears” an incoming message you can send a reply through the reply method.

$slackbot->hears('keyword', function (SlackBot $bot, $message) {

  // do something to respond to message
  // ...

  $bot->reply("Tell me more!");

});

You can also send an optional array with fields and attachments:

$slackbot->hears('keyword', function (SlackBot $bot, $message) {

    // do something...

    // then respond with a message object
    //
    $bot->reply("A more complex response",[
      'username' => "ReplyBot",
      'icon_emoji' => ":dash:",
    ]);

})

Slack Bot Conversations

Conversations allow you to string together several messages, including questions.

$slackbot->hears('free shirt', function (SlackBot $bot, $message) {

  $bot->startConversation(new ShirtConversation);

});

Inside the ShirtConversation a run method will be called so you can control the flow:

class ShirtConversation extends Conversation
{
    protected $size;

    public function askSize()
    {
        $this->ask('What size do you wear?', function(Answer $answer) {

            // Save size for next question
            $this->size = $answer->getText();

            $this->say('Thanks! A '.$answer->getText().' shirt will be sent to you');

        });
    }

    public function run()
    {
        // This will be called immediately
        $this->askSize();
    }

}

This outlines some of the basics of this package and it provides even more options and configuration. You can get the code from GitHub.


Filed in: Laravel Packages / Slack


Newsletter

Join the weekly newsletter and never miss out on new tips, tutorials, and more.

Laravel News Partners

Laravel Jobs

Software Engineer Lead (PHP)
Remote
CivicPlus, LLC
Full-time Senior Web Developer
Detroit, MI
Wayne State University
Senior Software Engineer
Sydney, Australia
FoodByUs
Full Stack Engineer
Remote or Medford, Oregon
Empire Medical
Laravel Developer (fulltime - Dutch only)
Netherlands
Qbixx | Webservices
Full Stack or Back-End Developer
Alexandria, VA; Tallahassee, FL; Orlando, FL
Marketing for Change
Senior Quality Assurance Engineer
Remote
Bisnow Media