spatie/laravel-slack-alerts

向 Slack 发送消息

资助包维护!
spatie

安装: 899 125

依赖者: 2

建议者: 1

安全: 0

星标: 280

关注者: 3

分支: 32

开放性问题: 0

1.5.0 2024-08-28 20:07 UTC

This package is auto-updated.

Last update: 2024-09-12 10:01:51 UTC


README

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

此包可快速将警报发送到 Slack。您可以使用此功能来通知自己应用中发生的任何重要事件。

use Spatie\SlackAlerts\Facades\SlackAlert;

SlackAlert::message("You have a new subscriber to the {$newsletter->name} newsletter!");

在底层,使用一个作业与 Slack 通信。这可以防止 Slack 崩溃时您的应用程序失败。

想要将警报发送到 Discord 吗?请查看 laravel-discord-alerts

支持我们

我们投入了大量资源来创建 一流的开放式源代码包。您可以通过 购买我们的付费产品之一 来支持我们。

我们非常感谢您从家乡寄给我们明信片,说明您正在使用我们的哪些包。您可以在 我们的联系页面 上找到我们的地址。我们将所有收到的明信片发布在 我们的虚拟明信片墙上

安装

您可以通过 composer 安装此包

composer require spatie/laravel-slack-alerts

您可以设置一个包含有效 Slack webhook URL 的 SLACK_ALERT_WEBHOOK 环境变量。您可以在 Slack API 文档中了解如何获取 webhook URL (此处链接)

或者,您可以使用以下命令发布配置文件:

php artisan vendor:publish --tag="slack-alerts-config"

这是发布配置文件的内容

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

用法

要向 Slack 发送消息,只需调用 SlackAlert::message() 并传递您想要的消息。

SlackAlert::message("You have a new subscriber to the {$newsletter->name} newsletter!");

发送块

Slack 支持使用他们的 Block Kit API 发送丰富格式化,您可以使用 blocks() 方法发送一系列块。

SlackAlert::blocks([
    [
        "type" => "section",
        "text" => [
        "type" => "mrkdwn",
            "text" => "You have a new subscriber to the {$newsletter->name} newsletter!"
        ]
    ]
]);

使用多个 webhook

您还可以使用备用 webhook,通过在配置文件中指定额外的 webhook 来实现。

// in config/slack-alerts.php

'webhook_urls' => [
    'default' => 'https://hooks.slack.com/services/XXXXXX',
    'marketing' => 'https://hooks.slack.com/services/YYYYYY',
],

可以使用 to 函数选择要使用的 webhook。

use Spatie\SlackAlerts\Facades\SlackAlert;

SlackAlert::to('marketing')->message("You have a new subscriber to the {$newsletter->name} newsletter!");

使用自定义 webhook

to 函数也支持自定义 webhook URL。

use Spatie\SlackAlerts\Facades\SlackAlert;

SlackAlert::to('https://custom-url.com')->message("You have a new subscriber to the {$newsletter->name} newsletter!");

向备用频道发送消息

您可以通过将其传递给 toChannel 函数,向除 webhook 默认频道以外的频道发送消息。

use Spatie\SlackAlerts\Facades\SlackAlert;

SlackAlert::toChannel('subscription_alerts')->message("You have a new subscriber to the {$newsletter->name} newsletter!");

排队

默认情况下,消息通过将作业调度到 default 队列来发送。

配置队列

.env 文件中,添加

SLACK_ALERT_QUEUE=queue_name

在运行时更改队列

您可以通过将其传递给 onQueue 函数,将作业排队到除配置中定义的队列以外的队列。

use Spatie\SlackAlerts\Facades\SlackAlert;

SlackAlert::onQueue('some-queue')->message("Some message.");

格式化

Markdown

您可以使用 Slack 的标记来格式化消息。在 Slack API 文档中了解如何 (此处链接)

use Spatie\SlackAlerts\Facades\SlackAlert;

SlackAlert::message("A message *with some bold statements* and _some italicized text_.");

在 Slack 中,链接的格式与经典 Markdown 结构不同。

SlackAlert::message("<https://spatie.be|This is a link to our homepage>");

表情符号

您可以使用与 Slack 中相同的表情符号代码。这意味着也支持自定义表情符号。

use Spatie\SlackAlerts\Facades\SlackAlert;

SlackAlert::message(":smile: :custom-code:");

提及

您可以使用提及来通知用户和组。在 Slack API 文档中了解如何 (此处链接)

use Spatie\SlackAlerts\Facades\SlackAlert;

SlackAlert::message("A message that notifies <@username> and everyone else who is <!here>")

图标更改

您可以更改出现在消息顶部显示名称旁边的图标。

use Spatie\SlackAlerts\Facades\SlackAlert;

SlackAlert::withIconURL('https://example.com/tiny-icon.jpg')->message("Some message.");

显示名称更改

您可以更改显示在消息顶部显示名称旁边的显示名称。

use Spatie\SlackAlerts\Facades\SlackAlert;

SlackAlert::withUsername('More Descriptive Name')->message("Some message.");

测试中的使用

在您的测试中,您可以使用 SlackAlert 门面来断言您的代码是否向 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
});

当然,您也可以断言没有向 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

更新日志

有关最近更改的更多信息,请参阅 更新日志

贡献

有关详细信息,请参阅 贡献指南

安全漏洞

请查看我们关于如何报告安全漏洞的 安全策略

鸣谢

许可协议

MIT 许可协议 (MIT)。有关更多信息,请参阅 许可文件

替代方案

如果您想使用 Block Kit 做更复杂的事情,我们建议使用 slack-php/slack-php-block-kit