Description
A simple PHP package for sending messages to Slack with incoming webhooks, focused on ease-of-use and elegant syntax.
Slack for PHP alternatives and similar libraries
Based on the "API" category.
Alternatively, view Slack for PHP alternatives based on common mentions on social networks and blogs.
-
API Platform
Create REST and GraphQL APIs, scaffold Jamstack webapps, stream changes in real-time. -
PHP-CRUD-API
Single file PHP script that adds a REST API to a SQL database -
Firebase Admin SDK for PHP
Unofficial Firebase Admin SDK for PHP -
Restler
Simple and effective multi-format Web API Server to host your PHP API as Pragmatic REST and/or RESTful API -
wsdl2phpgenerator
Simple utility and class library for generating php classes from a wsdl file. -
Hateoas
A PHP library to support implementing representations for HATEOAS REST web services. -
OverblogGraphQLBundle
This bundle provides tools to build a complete GraphQL API server in your Symfony App. -
Pinterest Bot for PHP
This PHP library will help you to work with your Pinterest account without using any API account credentials. -
Symfony DataTables Bundle
DataTables bundle for Symfony -
Symfony GraphQl Bundle
Pure PHP implementation of GraphQL Server โ Symfony Bundle -
PSX Framework
PSX is an innovative PHP framework dedicated to build fully typed REST APIs. -
chubbyphp-framework
A minimal, highly performant middleware PSR-15 microframework built with as little complexity as possible, aimed primarily at those developers who want to understand all the vendors they use. -
Drest
Quickly and easily expose Doctrine entities as REST resource endpoints with the use of simple configuration with annotations, yaml, json or a PHP array. -
Behapi
Behat extension for those who want to write acceptances tests for apis -
Symfony 2 GraphQl Bundle
GraphQL Bundle for Symfony 2. -
Bearer PHP Client
Bearer client for the PHP programming language -
cidaas SDK for php
With this SDK, you can integrate cidaas smoothly and with minimal effort into your PHP application. It enables you to map the most important user flows for OAuth2 and OIDC compliant authentication. Secure โ Fast โ And unrivaled Swabian. -
mite SDK for PHP
Interact with mite from your PHP application. -
yii2-fractal
A set of utils and actions for build API following JSON:Api specification, based on league/fractal -
Personio SDK for PHP
Interact with Personio from your PHP application. -
phpDoc2pdf
Create PDF formatted documentation for your PHP projects -
icanhazstring/expressive-hashids-middleware
PSR-15/PSR-7 compliant middleware using ivanakimov/hashids.php
Clean code begins in your IDE with SonarLint
* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of Slack for PHP or a related project?
README
Slack for PHP
A simple PHP package for sending messages to Slack with incoming webhooks, focused on ease-of-use and elegant syntax.
supports: PHP 7.1
, 7.2
, 7.3
, 7.4
or 8.0
require: guzzlehttp/guzzle
any of versions ~7.0|~6.0|~5.0|~4.0
This is the fork of popular, great, but abandoned package
maknz/slack
Quick Tour
- create an incoming webhook & copy
hook_url
composer require alek13/slack
add the following code
use Maknz\Slack\Client; require(__DIR__ .'/vendor/autoload.php'); $client = new Client('https://hook_url'); $client->to('#general')->send('Good morning');
Done!
Installation
You can install the package using the Composer package manager by running in your project root:
composer require alek13/slack
Incoming WebHook
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.
// 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);
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 |
response_type |
string | Whether to show the response in the channel to all members or privately ('ephemeral' |
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) |
Sending messages
Sending a basic message (preview)
$client->send('Hello world!');
Sending a message to a non-default channel
$client->to('#accounting')->send('Are we rich yet?');
Sending a message to a user
$client->to('@regan')->send('Yo!');
Sending a message to a channel as a different bot name (preview)
$client->from('Jake the Dog')->to('@FinnTheHuman')->send('Adventure time!');
Sending a message with a different icon (preview)
// 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');
Send an attachment (preview)
$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
Send an attachment with fields (preview)
$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
Send an attachment with an author (preview)
$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');
Using blocks (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');
Advanced usage
Markdown
By default, Markdown is enabled for message text, but disabled for attachment fields. This behaviour can be configured in settings, or on the fly:
Send a message enabling or disabling Markdown
$client->to('#weird')->disableMarkdown()->send('Disable *markdown* just for this message');
$client->to('#general')->enableMarkdown()->send('Enable _markdown_ just for this message');
Send an attachment specifying which fields should have Markdown enabled
$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');
Explicit message creation
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')
;
$client->send($message);
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:
$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);
Each attachment field is also an object, an AttachmentField. They can be used as well instead of their data in array form:
$attachment = new Attachment([
'fallback' => 'Some fallback text',
'text' => 'The attachment text',
'fields' => [
new AttachmentField([
'title' => 'A title',
'value' => 'A value',
'short' => true
])
]
]);
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);
Playground
There is the php-slack/playground
simple console script to test messaging and to see how messages looks really.
Questions
If you have any questions how to use or contribute,
you are welcome in our Slack Workspace.
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.