Slack API and WebHook integration in PHP

Installs: 12 745

Dependents: 0

Stars: 28

Watchers: 6

Forks: 5

Open Issues: 1

v0.5.7 2015-10-08 22:01 UTC


Build Status Scrutinizer Quality Score Code Coverage Total Downloads Latest Stable Version Latest Unstable Version License

Phlack eases the creation of Slack Integrations in PHP.

Update: Phlack now contains a partial implementation of the Slack API. For details, see the API Docs section below.


via composer:

composer require mcrumm/phlack

Basic Usage

Send a Message

$phlack = new Crummy\Phlack\Phlack('https://my.webhook.url');

$response = $phlack->send('Hello, from Phlack!');

if (200 === $response['status']) {
    echo 'Success!';

Advanced Usage

Configuration Options

Legacy WebHook URLs

A previous version of Incoming Webhooks used a generic webhook path for every team URL. If your webhook URL starts with something like, give Phlack your team name and Incoming Webhook token, and it will do the rest:

$phlack  = new Crummy\Phlack\Phlack([
    'username' => 'myteam',
    'token'    => 'my_webhook_token'
via factory():

If you prefer, you can instantiate Phlack via its static factory() method:

$phlack = Crummy\Phlack\Phlack::factory($config);
via new Phlack():

Besides a webhook url or an array configuration, Phlack will also accept a PhlackClient instance as a constructor argument:

$client = new Crummy\Phlack\Bridge\Guzzle\PhlackClient('https://my.webhook.url');
$phlack = new Crummy\Phlack\Phlack($client);

Note: The constructor and factory method both accept the same types of arguments: a string representing the webhook url, an array of client config options, or a PhlackClient object.

:heart: for Guzzle

The PhlackClient is simply a web service client implemented with Guzzle. Examine its service description for more details.

Creating Messages

A Phlack Message takes care of structuring the payload for Slack's Incoming Webhooks integration.

via new Message();
use Crummy\Phlack\Message\Message;
$message = new Message('Hello, from phlack!');
echo 'The message payload: ' . PHP_EOL:
echo $message;

via the MessageBuilder

A MessageBuilder is also provided:

// ...
$messageBuilder = $phlack->getMessageBuilder();
  ->setText('I was created in the MessageBuilder')
$message = $messageBuilder->create();

Sending Messages

Use Phlack's send() command to fire off the message:

// ...
$response = $phlack->send($message);

if (200 != $response['status']) {
  die('FAIL! - ' . $response['text']);

echo 'The message was sent: ' . $message;

Custom Message Parameters

Custom messages can be sent by using an array of valid parameters:

    'channel'      => '#random',
    'icon_emoji'   => ':taco:',
    'username'     => 'Phlack',
    'unfurl_links' => true,
    'text'         => 'I :heart: the <|Slack API>!',

Note: No input validation is performed on custom message parameters. You are responsible for formatting channels, emojis, and text data yourself.


The MessageResponse hash contains the status, reason, and text from the response.

Responses from the Incoming Webhooks Integration are very sparse. Success messages will simply return a status of 200. Error messages will contain more details in the response text and reason.

More Examples

See the examples directory for more use cases.

Slack API

Programmatic access to the Slack API is provided via the ApiClient.

Note: Currently, bearer token authentication is the only supported authentication method. Contributions toward OAuth2 support would be greatly appreciated.

Getting a Client

Get an ApiClient object by instantiating it with a hash containing your API token, or passing a config hash to its factory method.

via factory():

use Crummy\Phlack\Bridge\Guzzle\ApiClient;

$slack = ApiClient::factory([ 'token' => 'my_bearer_token' ]);
via new ApiClient():

use Crummy\Phlack\Bridge\Guzzle\ApiClient;

$slack = new ApiClient([ 'token' => 'my_bearer_token' ]);


The methods currently implemented are:

Consult the client's service description for information on the responses returned by the API methods.

Example: Listing all Channels

use Crummy\Phlack\Bridge\Guzzle\ApiClient;

$config = [ 'token' => 'my_bearer_token' ];
$slack = new ApiClient($config);

echo 'Fetching Channels List...' . PHP_EOL;
$result = $slack->ListChannels();

if (!$result['ok']) {
    die('FAIL! Error was: ' . $result['error'] . PHP_EOL);

foreach ($result['channels'] as $channel) {
    printf('%s: %s' . PHP_EOL, $channel['name'], $channel['purpose']['value']);


Example: ListFilesIterator

The ListFilesIterator eases the ability to iterate through multiple pages of data from the Slack API. Using the iterator eliminates the need to manually call the API multiple times to retrieve all pages of the result set.

$iterator = $slack->getIterator('ListFiles');

$i = 0;
foreach ($iterator as $file) {
    echo $file['title'] . PHP_EOL;

echo PHP_EOL . 'Retrieved ' . $i . ' files.' . PHP_EOL;

A complete example is available in the examples directory.

Note: The ListFilesIterator is not strictly necessary to page through file results, but it's certainly easier than the alternative. An example without the iterator is also available.

More Examples

See the API examples directory for more use cases.


Any undocumented portion of this library should be considered EXPERIMENTAL AT BEST. Proceed with caution, and, as always, pull requests are welcome.


  1. The regex in the LinkFormatter was pulled directly from StevenSloan and his slack-notifier project.