This package can quickly send alerts to Slack. You can use this to notify yourself of any noteworthy events happening in your app.
use Spatie\SlackAlerts\Facades\SlackAlert;
SlackAlert::message("You have a new subscriber to the {$newsletter->name} newsletter!");
Under the hood, a job is used to communicate with Slack. This prevents your app from failing in case Slack is down.
Want to send alerts to Discord instead? Check out laravel-discord-alerts.
We invest a lot of resources into creating best in class open source packages. You can support us by buying one of our paid products.
We highly appreciate you sending us a postcard from your hometown, mentioning which of our package(s) you are using. You'll find our address on our contact page. We publish all received postcards on our virtual postcard wall.
You can install the package via composer:
composer require spatie/laravel-slack-alerts
You can set a SLACK_ALERT_WEBHOOK
env variable containing a valid Slack webhook URL. You can learn how to get a webhook URL in the Slack API docs.
Alternatively, you can publish the config file with:
php artisan vendor:publish --tag="slack-alerts-config"
This is the contents of the published config file:
return [
/*
* The webhook URLs that we'll use to send a message to Slack.
*/
'webhook_urls' => [
'default' => env('SLACK_ALERT_WEBHOOK'),
],
/*
* This job will send the message to Slack. You can extend this
* job to set timeouts, retries, etc...
*/
'job' => Spatie\SlackAlerts\Jobs\SendToSlackChannelJob::class,
'queue' => env('SLACK_ALERT_QUEUE', 'default'),
];
To send a message to Slack, simply call SlackAlert::message()
and pass it any message you want.
SlackAlert::message("You have a new subscriber to the {$newsletter->name} newsletter!");
Slack supports sending rich formatting using their Block Kit API, you can send a set of blocks using the blocks()
method:
SlackAlert::blocks([
[
"type" => "section",
"text" => [
"type" => "mrkdwn",
"text" => "You have a new subscriber to the {$newsletter->name} newsletter!"
]
]
]);
You can also use an alternative webhook, by specify extra ones in the config file.
// in config/slack-alerts.php
'webhook_urls' => [
'default' => 'https://hooks.slack.com/services/XXXXXX',
'marketing' => 'https://hooks.slack.com/services/YYYYYY',
],
The webhook to be used can be chosen using the to
function.
use Spatie\SlackAlerts\Facades\SlackAlert;
SlackAlert::to('marketing')->message("You have a new subscriber to the {$newsletter->name} newsletter!");
The to
function also supports custom webhook urls.
use Spatie\SlackAlerts\Facades\SlackAlert;
SlackAlert::to('https://custom-url.com')->message("You have a new subscriber to the {$newsletter->name} newsletter!");
You can send a message to a channel other than the default one for the webhook, by passing it to the toChannel
function.
use Spatie\SlackAlerts\Facades\SlackAlert;
SlackAlert::toChannel('subscription_alerts')->message("You have a new subscriber to the {$newsletter->name} newsletter!");
By default, messages are sent by dispatching the job to the default
queue.
In .env
file, add
SLACK_ALERT_QUEUE=queue_name
You can queue the job to a different queue than the one defined in config by passing it to the onQueue
function.
use Spatie\SlackAlerts\Facades\SlackAlert;
SlackAlert::onQueue('some-queue')->message("Some message.");
You can format your messages with Slack's markup. Learn how in the Slack API docs.
use Spatie\SlackAlerts\Facades\SlackAlert;
SlackAlert::message("A message *with some bold statements* and _some italicized text_.");
Links are formatted differently in Slack than the classic markdown structure.
SlackAlert::message("<https://spatie.be|This is a link to our homepage>");
You can use the same emoji codes as in Slack. This means custom emoji's are also supported.
use Spatie\SlackAlerts\Facades\SlackAlert;
SlackAlert::message(":smile: :custom-code:");
You can use mentions to notify users and groups. Learn how in the Slack API docs.
use Spatie\SlackAlerts\Facades\SlackAlert;
SlackAlert::message("A message that notifies <@username> and everyone else who is <!here>")
You can change the icon that appears next to the display-name at the top of the message.
use Spatie\SlackAlerts\Facades\SlackAlert;
SlackAlert::withIconURL('https://example.com/tiny-icon.jpg')->message("Some message.");
You can change the Display-Name that appears next to the display-name at the top of the message.
use Spatie\SlackAlerts\Facades\SlackAlert;
SlackAlert::withUsername('More Descriptive Name')->message("Some message.");
In your tests, you can make use of the SlackAlert
facade to assert whether your code sent an alert to Slack.
// in a test
use Spatie\SlackAlerts\Facades\SlackAlert;
it('will send an alert to Slack', function() {
SlackAlert::shouldReceive('message')->once();
// execute code here that does send a message to Slack
});
Of course, you can also assert that a message wasn't sent to Slack.
// in a test
use Spatie\SlackAlerts\Facades\SlackAlert;
it('will not send an alert to Slack', function() {
SlackAlert::shouldReceive('message')->never();
// execute code here that doesn't send a message to Slack
});
composer test
Please see CHANGELOG for more information on what has changed recently.
Please see CONTRIBUTING for details.
Please review our security policy on how to report security vulnerabilities.
The MIT License (MIT). Please see License File for more information.
If you want to do more complex stuff with Block Kit, we suggest using slack-php/slack-php-block-kit