spatie/laravel-slack-alerts 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

spatie/laravel-slack-alerts

Composer 安装命令:

composer require spatie/laravel-slack-alerts

包简介

Send a message to Slack

README 文档

README

Latest Version on Packagist run-tests Check & fix styling Total Downloads

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.

Support us

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.

Installation

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 [
    /*
     * Whether the slack alerts are enabled.
     */
    'enabled' => env('SLACK_ALERT_ENABLED', true),

    /*
     * 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'),
];

Usage

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!");

Sending blocks

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!"
        ]
    ]
]);

Using multiple webhooks

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!");

Using a custom webhooks

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!");

Sending message to an alternative channel

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!");

Note: Slack incoming webhooks created for modern Slack apps do not allow per-message channel overrides. The message will always be delivered to the channel the webhook was installed for, regardless of the value passed to toChannel. This method only has an effect on legacy incoming webhooks. See the Slack documentation for details. If you need per-channel routing, consider using the Slack Web API (chat.postMessage with a bot token) instead.

Queuing

By default, messages are sent by dispatching the job to the default queue.

Configuring the queue

In .env file, add

SLACK_ALERT_QUEUE=queue_name

Changing the queue at runtime

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.");

Formatting

Markdown

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>");

Emoji's

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:");

Mentioning

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>")

Icon Change

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.");

Note: Like the channel override, Slack incoming webhooks for modern Slack apps silently ignore withIconURL and withIconEmoji. The icon configured on the Slack app will be used instead. See the Slack documentation for details.

Display Name Change

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.");

Note: Slack incoming webhooks for modern Slack apps silently ignore withUsername. The username configured on the Slack app will be used instead. See the Slack documentation for details.

Synchronous Dispatch

By default, alerts are sent using jobs. Use the sync() method to send alerts synchronously, ensuring notifications are dispatched immediately before continuing execution:

use Spatie\SlackAlerts\Facades\SlackAlert;

// Send alert immediately
SlackAlert::sync()
    ->message("Some message.");

Usage in tests

The package provides a SlackAlertFake that you can use to test your code without actually sending messages to Slack.

In your tests, you should call the fake method on the SlackAlert facade to start faking.

\Spatie\SlackAlerts\Facades\SlackAlert::fake();

These methods are available on the fake:

  • expectMessageSentContaining(string $expectedSubstring): Expects that at least one message contains the given substring
  • expectMessagesSent($callable = null): Expects that at least one message was sent. Optionally you can pass a callable that will get called for each message sent. Return true in one of the calls to make the expectation pass
  • expectNoMessagesSent(): Expects that no messages were sent
  • expectNumberOfMessagesSent(int $expectedCount): Expects that exactly the given number of messages were sent
  • sentMessages(): Returns all messages that were sent so you can pass the message to your own expectations

Alternatively, you can make use of the classic mocking approach.

// 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
});

Testing

composer test

Changelog

Please see CHANGELOG for more information on what has changed recently.

Contributing

Please see CONTRIBUTING for details.

Security Vulnerabilities

Please review our security policy on how to report security vulnerabilities.

Credits

License

The MIT License (MIT). Please see License File for more information.

Alternatives

If you want to do more complex stuff with Block Kit, we suggest using slack-php/slack-php-block-kit

spatie/laravel-slack-alerts 适用场景与选型建议

spatie/laravel-slack-alerts 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 3.03M 次下载、GitHub Stars 达 326, 最近一次更新时间为 2022 年 01 月 10 日, 在 PHP 生态内属于活跃度较高的组件。

它主要适用于以下技术方向: 「laravel」 「spatie」 「laravel-slack-alerts」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。

我们在过去多个企业项目中使用过 spatie/laravel-slack-alerts 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 spatie/laravel-slack-alerts 我们能提供哪些服务?
定制开发 / 二次开发

基于 spatie/laravel-slack-alerts 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 3.03M
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 328
  • 点击次数: 16
  • 依赖项目数: 4
  • 推荐数: 1

GitHub 信息

  • Stars: 326
  • Watchers: 4
  • Forks: 42
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2022-01-10