Package Data | |
---|---|
Maintainer Username: | Soullivaneuh |
Maintainer Contact: | github@mak.geek.nz (maknz) |
Package Create Date: | 2017-11-12 |
Package Last Update: | 2024-05-22 |
Language: | PHP |
License: | MIT |
Last Refreshed: | 2024-12-15 15:01:58 |
Package Statistics | |
---|---|
Total Downloads: | 1,523,427 |
Monthly Downloads: | 11,199 |
Daily Downloads: | 104 |
Total Stars: | 106 |
Total Watchers: | 7 |
Total Forks: | 25 |
Total Open Issues: | 4 |
A simple PHP package for sending messages to Slack with incoming webhooks, focused on ease-of-use and elegant syntax.
This repository started from a fork of the popular maknz/slack library, which is not maintained anymore.
The 1.x branch and all the related releases are an exact copy of the original repository and are under the BSD 2-clause "Simplified" License.
The next releases will be under the MIT license. See the current LICENSE file for more details.
You can install the package using the Composer package manager. You can install it by running this command in your project root:
composer require nexylan/slack php-http/guzzle6-adapter
Why php-http/guzzle6-adapter
? We are decoupled from any HTTP messaging client thanks to HTTPlug.
Then create an incoming webhook on your Slack account for the package to use. You'll need the webhook URL to instantiate the client (or for the configuration file if using Laravel).
// Instantiate without defaults
$client = new Nexy\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.
$settings = [
'username' => 'Cyril',
'channel' => '#accounting',
'link_names' => true
];
$client = new Nexy\Slack\Client('https://hooks.slack.com/...', $settings);
The default settings are pretty good, but you may wish to set up default behaviour for your client to be used for all messages sent. All settings are optional and you don't need to provide any. Where not provided, we'll fallback to what is configured on the webhook integration, which are managed at Slack, or our sensible defaults.
Field | Type | Description
----- | ---- | -----------
channel
| string | The default channel that messages will be sent to
sticky_channel
| bool | If set to true, all messages will be sent to the default channel only (defaults to false). It can be useful for dev/test environments.
username
| string | The default username for your bot
icon
| string | The default icon that messages will be sent with, either :emoji:
or a URL to an image
link_names
| bool | Whether names like @regan
or #accounting
should be linked in the message (defaults to false)
unfurl_links
| bool | Whether Slack should unfurl text-based URLs (defaults to false)
unfurl_media
| bool | Whether Slack should unfurl media-based URLs, like tweets or Youtube videos (defaults to true)
allow_markdown
| bool | Whether markdown should be parsed in messages, or left as plain text (defaults to true)
markdown_in_attachments
| array | Which attachment fields should have markdown parsed (defaults to none)
$client->send('Hello world!');
$client->to('#accounting')->send('Are we rich yet?');
$client->to('@regan')->send('Yo!');
$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((new \Nexy\Slack\Attachment())
->setFallback('Server health: good')
->setText('Server health: good')
->setColor('danger')
)->send('New alert from the monitoring system'); // no message, but can be provided if you'd like
$client->to('#operations')->attach((new \Nexy\Slack\Attachment())
->setFallback('Current server stats')
->setText('Current server stats')
->setColor('danger')
->setFields([
new \Nexy\Slack\AttachmentField(
'Cpu usage',
'90%',
true // whether the field is short enough to sit side-by-side other fields, defaults to false
),
new \Nexy\Slack\AttachmentField('RAM usage', '2.5GB of 4GB', true),
])
)->send('New alert from the monitoring system'); // no message, but can be provided if you'd like
$client->to('@regan')->attach((new \Nexy\Slack\Attachment())
->setFallback('Keep up the great work! I really love how the app works.')
->setText('Keep up the great work! I really love how the app works.')
->setAuthorName('Jan Appleseed')
->setAuthorLink('https://yourapp.com/feedback/5874601')
->setAuthorIcon('https://static.pexels.com/photos/61120/pexels-photo-61120-large.jpeg')
)->send('New user feedback');
By default, Markdown is enabled for message text, but disabled for attachment fields. This behaviour can be configured in settings, or on the fly:
$client->to('#weird')->disableMarkdown()->send('Disable *markdown* just for this message');
$client->to('#general')->enableMarkdown()->send('Enable _markdown_ just for this message');
$client->to('#operations')->attach((new \Nexy\Slack\Attachment())
->setFallback('It is all broken, man')
->setText('It is _all_ broken, man')
->setPretext('From user: *JimBob*')
->setColor('danger')
->setMarkdownFields(['pretext', 'text'])
)->send('New alert from the monitoring system');
For convenience, message objects are created implicitly by calling message methods on the client. We can however do this explicitly to avoid hitting the magic method.
// Implicitly
$client->to('@regan')->send('I am sending this implicitly');
// Explicitly
$message = $client->createMessage();
$message->to('@regan')->setText('I am sending this explicitly');
$message->send();
When using attachments, the easiest way is to provide an array of data as shown in the examples, which is actually converted to an Attachment object under the hood. You can also attach an Attachment object to the message:
$attachment = (new Attachment())
->setFallback('Some fallback text')
->setText('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')->send();
You can also set the attachments and fields directly if you have a whole lot of them:
// implicitly create a message and set the attachments
$client->setAttachments($bigArrayOfAttachments);
// or explicitly
$client->createMessage()->setAttachments($bigArrayOfAttachments);
$attachment = new Attachment();
$attachment->setFields($bigArrayOfFields);
If you're having problems, spot a bug, or have a feature suggestion, please log and issue on Github. If you'd like to have a crack yourself, fork the package and make a pull request. Please include tests for any added or changed functionality. If it's a bug, include a regression test.