Provides Slack integration for Symfony Notifier.
SLACK_DSN=slack://TOKEN@default?channel=CHANNEL
where:
TOKEN
is your Bot User OAuth Access Token (they begin with xoxb-
)CHANNEL
is a channel, private group, or IM channel to send message to, it can be an encoded ID, or a name.valid DSN's are:
SLACK_DSN=slack://xoxb-......@default?channel=my-channel-name
SLACK_DSN=slack://xoxb-......@default?channel=@fabien
invalid DSN's are:
SLACK_DSN=slack://xoxb-......@default?channel=#my-channel-name
SLACK_DSN=slack://xoxb-......@default?channel=fabien
With a Slack message, you can use the SlackOptions
class to add some
interactive options called Block elements.
use Symfony\Component\Notifier\Bridge\Slack\Block\SlackActionsBlock;
use Symfony\Component\Notifier\Bridge\Slack\Block\SlackDividerBlock;
use Symfony\Component\Notifier\Bridge\Slack\Block\SlackImageBlockElement;
use Symfony\Component\Notifier\Bridge\Slack\Block\SlackSectionBlock;
use Symfony\Component\Notifier\Bridge\Slack\SlackOptions;
use Symfony\Component\Notifier\Message\ChatMessage;
$chatMessage = new ChatMessage('Contribute To Symfony');
// Create Slack Actions Block and add some buttons
$contributeToSymfonyBlocks = (new SlackActionsBlock())
->button(
'Improve Documentation',
'https://symfony.com/doc/current/contributing/documentation/standards.html',
'primary'
)
->button(
'Report bugs',
'https://symfony.com/doc/current/contributing/code/bugs.html',
'danger'
);
$slackOptions = (new SlackOptions())
->block((new SlackSectionBlock())
->text('The Symfony Community')
->accessory(
new SlackImageBlockElement(
'https://symfony.com/favicons/apple-touch-icon.png',
'Symfony'
)
)
)
->block(new SlackDividerBlock())
->block($contributeToSymfonyBlocks);
// Add the custom options to the chat message and send the message
$chatMessage->options($slackOptions);
$chatter->send($chatMessage);
To add fields and values to your message you can use the field()
method.
use Symfony\Component\Notifier\Bridge\Slack\Block\SlackDividerBlock;
use Symfony\Component\Notifier\Bridge\Slack\Block\SlackSectionBlock;
use Symfony\Component\Notifier\Bridge\Slack\SlackOptions;
use Symfony\Component\Notifier\Message\ChatMessage;
$chatMessage = new ChatMessage('Symfony Feature');
$options = (new SlackOptions())
->block((new SlackSectionBlock())->text('My message'))
->block(new SlackDividerBlock())
->block(
(new SlackSectionBlock())
->field('*Max Rating*')
->field('5.0')
->field('*Min Rating*')
->field('1.0')
);
// Add the custom options to the chat message and send the message
$chatMessage->options($options);
$chatter->send($chatMessage);
To add a header to your message use the SlackHeaderBlock
class.
use Symfony\Component\Notifier\Bridge\Slack\Block\SlackDividerBlock;
use Symfony\Component\Notifier\Bridge\Slack\Block\SlackHeaderBlock;
use Symfony\Component\Notifier\Bridge\Slack\Block\SlackSectionBlock;
use Symfony\Component\Notifier\Bridge\Slack\SlackOptions;
use Symfony\Component\Notifier\Message\ChatMessage;
$chatMessage = new ChatMessage('Symfony Feature');
$options = (new SlackOptions())
->block((new SlackHeaderBlock('My Header')))
->block((new SlackSectionBlock())->text('My message'))
->block(new SlackDividerBlock())
->block(
(new SlackSectionBlock())
->field('*Max Rating*')
->field('5.0')
->field('*Min Rating*')
->field('1.0')
);
// Add the custom options to the chat message and send the message
$chatMessage->options($options);
$chatter->send($chatMessage);
To add a header to your message use the SlackContextBlock
class.
use Symfony\Component\Notifier\Bridge\Slack\Block\SlackContextBlock;
use Symfony\Component\Notifier\Bridge\Slack\Block\SlackDividerBlock;
use Symfony\Component\Notifier\Bridge\Slack\Block\SlackSectionBlock;
use Symfony\Component\Notifier\Bridge\Slack\SlackOptions;
use Symfony\Component\Notifier\Message\ChatMessage;
$chatMessage = new ChatMessage('Symfony Feature');
$contextBlock = (new SlackContextBlock())
->text('My Context')
->image('https://symfony.com/logos/symfony_white_03.png', 'Symfony Logo')
;
$options = (new SlackOptions())
->block((new SlackSectionBlock())->text('My message'))
->block(new SlackDividerBlock())
->block(
(new SlackSectionBlock())
->field('*Max Rating*')
->field('5.0')
->field('*Min Rating*')
->field('1.0')
)
->block($contextBlock)
;
// Add the custom options to the chat message and send the message
$chatMessage->options($options);
$chatter->send($chatMessage);
To send your Slack message as a reply in a thread use the threadTs()
method.
use Symfony\Component\Notifier\Bridge\Slack\Block\SlackSectionBlock;
use Symfony\Component\Notifier\Bridge\Slack\SlackOptions;
use Symfony\Component\Notifier\Message\ChatMessage;
$chatMessage = new ChatMessage('Symfony Feature');
$options = (new SlackOptions())
->block((new SlackSectionBlock())->text('My reply'))
->threadTs('1621592155.003100')
;
// Add the custom options to the chat message and send the message
$chatMessage->options($options);
$chatter->send($chatMessage);
First, save the message ID and channel ID when sending a message:
use Symfony\Component\Notifier\Bridge\Slack\SlackSentMessage;
use Symfony\Component\Notifier\Message\ChatMessage;
$sentMessage = $chatter->send(new ChatMessage('Original message'));
// Make sure that Slack transport was used
if ($sentMessage instanceOf SlackSentMessage) {
$messageId = $sentMessage->getMessageId();
$channelId = $sentMessage->getChannelId();
}
Then, use that message ID and channel ID to create a new
UpdateMessageSlackOptions
class:
use Symfony\Component\Notifier\Bridge\Slack\UpdateMessageSlackOptions;
use Symfony\Component\Notifier\Message\ChatMessage;
$options = new UpdateMessageSlackOptions($channelId, $messageId);
$chatter->send(new ChatMessage('Updated message', $options));
To schedule a message to be sent at a later time, use the postAt()
method:
use Symfony\Component\Notifier\Bridge\Slack\SlackOptions;
use Symfony\Component\Notifier\Message\ChatMessage;
$options = (new SlackOptions())->postAt(new \DateTime('+1 day'));
$chatMessage = new ChatMessage('Symfony Feature');
$chatMessage->options($options);
$chatter->send($chatMessage);