alek13/slack

一个简单的PHP包(maknz/slack的分支),用于向Slack发送消息,注重易用性和优雅的语法。

资助包维护!
donorbox.org/php-slack

安装数: 3,083,550

依赖项: 15

建议者: 0

安全性: 0

星标: 134

关注者: 3

分支: 204

开放问题: 0

2.2.1 2021-10-20 22:52 UTC

README

Build Status Code Coverage Scrutinizer Code Quality StyleCI | Slack Welcome

一个简单的PHP包,用于通过Slack入站Webhook发送消息,注重易用性和优雅的语法。

支持: PHP 7.1, 7.2, 7.3, 7.48.0
要求: guzzlehttp/guzzle 任何版本 ~7.0|~6.0|~5.0|~4.0

这是对流行的、优秀的、但已废弃的包maknz/slack的分支。

快速浏览

  • 创建一个入站Webhook 并复制 hook_url

  • composer require alek13/slack

  • 添加以下代码

     use Maknz\Slack\Client;
    
     require(__DIR__ .'/vendor/autoload.php');
    
     $client = new Client('https://hook_url');
     $client->to('#general')->send('Good morning');
    

完成!

安装

您可以使用Composer包管理器在项目根目录运行来安装此包。

composer require alek13/slack

入站Webhook

然后 在您的Slack账户上为包创建一个入站Webhook,以便包可以使用。您将需要Webhook URL来实例化客户端(或如果使用Laravel,则用于配置文件)。

基本用法

实例化客户端

// Instantiate without defaults
$client = new Maknz\Slack\Client('https://hooks.slack.com/...');

// Instantiate with defaults, so all messages created
// will be sent from 'Cyril' and to the #accounting channel
// by default. Any names like @regan or #channel will also be linked.
// use response_type (in_channel | ephemeral) to denote whether the message will be visible
// to others in the channel.
$settings = [
    'username'     => 'Cyril',
    'channel'      => '#accounting',
    'reponse_type' => 'in_channel',
    'link_names'   => true
];

$client = new Maknz\Slack\Client('https://hooks.slack.com/...', $settings);

设置

默认设置相当不错,但您可能希望为客户端设置默认行为,以便用于发送的所有消息。 所有设置都是可选的,您不需要提供任何。如果未提供,我们将回退到Webhook集成上配置的内容,这些内容在Slack上管理,或使用合理的默认值。

发送消息

发送基本消息(预览

$client->send('Hello world!');

向非默认频道发送消息

$client->to('#accounting')->send('Are we rich yet?');

向用户发送消息

$client->to('@regan')->send('Yo!');

以不同的bot名称向频道发送消息(预览

$client->from('Jake the Dog')->to('@FinnTheHuman')->send('Adventure time!');

使用不同的图标发送消息(预览

// Either with a Slack emoji
$client->to('@regan')->withIcon(':ghost:')->send('Boo!');

// or a URL
$client->to('#accounting')->withIcon('http://example.com/accounting.png')->send('Some accounting notification');

发送附件(预览

$client->to('#operations')->attach([
    'fallback' => 'Server health: good',
    'text' => 'Server health: good',
    'color' => 'danger',
])->send('New alert from the monitoring system'); // no message, but can be provided if you'd like

发送具有字段附件(预览

$client->to('#operations')->attach([
    'fallback' => 'Current server stats',
    'text' => 'Current server stats',
    'color' => 'danger',
    'fields' => [
        [
            'title' => 'CPU usage',
            'value' => '90%',
            'short' => true // whether the field is short enough to sit side-by-side other fields, defaults to false
        ],
        [
            'title' => 'RAM usage',
            'value' => '2.5GB of 4GB',
            'short' => true
        ]
    ]
])->send('New alert from the monitoring system'); // no message, but can be provided if you'd like

发送具有作者的附件(预览

$client->to('@regan')->attach([
    'fallback'    => 'Keep up the great work! I really love how the app works.',
    'text'        => 'Keep up the great work! I really love how the app works.',
    'author_name' => 'Jane Appleseed',
    'author_link' => 'https://yourapp.com/feedback/5874601',
    'author_icon' => 'https://static.pexels.com/photos/61120/pexels-photo-61120-large.jpeg'
])->send('New user feedback');

使用块(Block Kit

$client->to('@regan')
    ->withBlock([
        'type' => 'section',
        'text' => 'Do you love the app?'
    ])
    ->withBlock([
        'type' => 'actions',
        'elements' => [[
            'type'      => 'button',
            'text'      => 'Love it',
            'style'     => 'primary',
            'action_id' => 'love',
        ], [
            'type'      => 'button',
            'text'      => 'Hate it',
            'style'     => 'danger',
            'action_id' => 'hate',
        ],]
    ])
    ->send('Notification fallback message');

高级用法

Markdown

默认情况下,Markdown对消息文本是启用的,但对附件字段是禁用的。此行为可以在设置中配置,也可以在运行时动态配置

启用或禁用Markdown的消息

$client->to('#weird')->disableMarkdown()->send('Disable *markdown* just for this message');

$client->to('#general')->enableMarkdown()->send('Enable _markdown_ just for this message');

指定哪些字段应启用Markdown的附件

$client->to('#operations')->attach([
    'fallback'  => 'It is all broken, man',
    'text'      => 'It is _all_ broken, man',
    'pretext'   => 'From user: *JimBob*',
    'color'     => 'danger',
    'mrkdwn_in' => ['pretext', 'text']
])->send('New alert from the monitoring system');

显式消息创建

为了方便起见,通过在客户端上调用消息方法隐式创建消息对象。但是,我们可以显式地这样做以避免调用魔法方法。

// Implicitly
$client->to('@regan')->send('I am sending this implicitly');

// Explicitly
$message = $client->createMessage();
$message
    ->to('@regan')
    ->setText('I am sending this explicitly')
;

$client->send($message);

附件

在使用附件时,最简单的方式是提供示例中所示的数据数组,实际上这些数据在底层会被转换为附件对象。您也可以将附件对象附加到消息中

$attachment = new Attachment([
    'fallback' => 'Some fallback text',
    'text'     => 'The attachment text'
]);

// Explicitly create a message from the client
// rather than using the magic passthrough methods
$message = $client->createMessage();

$message->attach($attachment);
// Explicitly set the message text rather than
// implicitly through the send method
$message->setText('Hello world');

$client->send($message);

每个附件字段也是一个对象,即附件字段对象。您也可以使用它们,而不仅仅是它们的数组形式中的数据

$attachment = new Attachment([
    'fallback' => 'Some fallback text',
    'text' => 'The attachment text',
    'fields' => [
        new AttachmentField([
            'title' => 'A title',
            'value' => 'A value',
            'short' => true
        ])
    ]
]);

如果您有很多附件和字段,您也可以直接设置它们

// implicitly create a message and set the attachments
$client->setAttachments($bigArrayOfAttachments);

// or explicitly
$client->createMessage()->setAttachments($bigArrayOfAttachments);
$attachment = new Attachment([]);

$attachment->setFields($bigArrayOfFields);

沙盒

这里有一个简单的控制台脚本 php-slack/playground,用于测试消息并查看消息的实际外观。

问题

Slack Welcome

如果您有任何关于如何使用或贡献的问题,
欢迎您加入我们的 Slack 工作区

贡献

Slack Welcome

如果您遇到问题、发现错误或有功能建议,请登录 GitHub 并提交一个 issue。如果您想亲自尝试,请fork这个包并提交一个 pull request。请包括任何新增或更改功能的测试。如果是错误,请包括回归测试。