Laravel Packages

Build your own Slack Bot with this PHP library

Published
Build your own Slack Bot with this PHP library image

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.

Eric L. Barnes photo

Eric is the creator of Laravel News and has been covering Laravel since 2012.

Sponsored

laravelcloud logo
Laravel Cloud

Easily create and manage your servers and deploy your Laravel applications in seconds.

Visit Laravel Cloud

The latest

View all →
Laravel Terminal UI for the artisan dev Command image

Laravel Terminal UI for the artisan dev Command

Read article
Pause All Queues and a New artisan dev UI in Laravel 13.25 image

Pause All Queues and a New artisan dev UI in Laravel 13.25

Read article
Laravel monitoring that doesn't bill you by your traffic image

Laravel monitoring that doesn't bill you by your traffic

Read article
Mock PHP Classes in Tests With the Double Library image

Mock PHP Classes in Tests With the Double Library

Read article
Laravel Discount: Coupon Codes, Usage Limits, and Stacking image

Laravel Discount: Coupon Codes, Usage Limits, and Stacking

Read article
Laravel Truss: Live Interactive Database ER Diagrams image

Laravel Truss: Live Interactive Database ER Diagrams

Read article