Requirements

Installation

You can install the package using the Composer package manager. You can install it by running this command in your project root:

composer require maknz/slack

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

Basic Usage

Instantiate the client

// 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.
$settings = [
'username' => 'Cyril',
'channel' => '#accounting',
'link_names' => true
];
$client = new Maknz\Slack\Client('https://hooks.slack.com/...', $settings);

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

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

Attachments

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:

Contributing

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.