Build your own Slack Bot with this PHP library
Published on by Eric L. Barnes
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 is the creator of Laravel News and has been covering Laravel since 2012.