team-nifty-gmbh / laravel-rocket-chat-notifications
Rocket.Chat Notifications for laravel
Installs: 1 853
Dependents: 0
Suggesters: 0
Security: 0
Stars: 30
Watchers: 1
Forks: 0
Open Issues: 0
Requires
- php: ^8.1
- guzzlehttp/guzzle: ^7.0
- laravel/framework: ^10.0|^9.0
README
Introduction
This package makes it easy to send notifications using RocketChat with Laravel 9.0+.
Contents
Installation
You can install the package via composer:
$ composer require team-nifty-gmbh/laravel-rocket-chat-notifications
Setting up the RocketChat service
In order to send message to RocketChat channels, you need to create a bot user with an access token in your RocketChat Application
You can publish the config file with:
$ php artisan vendor:publish --provider="TeamNiftyGmbh\RocketChatNotifications\RocketChatNotificationsServiceProvider"
The config file looks as follows:
// config/rocket-chat.php ... /* |-------------------------------------------------------------------------- | Default RocketChat Connection Name |-------------------------------------------------------------------------- | | Here you may specify which RocketChat connections below you wish | to use as your default connection for all RocketChat notifications. Of course | you may use many connections at once using the RocketChat static methods or | RocketChatMessage connection method. | */ 'default' => env('ROCKETCHAT_CONNECTION', 'rocket-chat'), /* |-------------------------------------------------------------------------- | RocketChat Connections |-------------------------------------------------------------------------- | | Here are each of the RocketChat connections setup for your application. | */ 'connections' => [ 'rocket-chat' => [ // Base URL for RocketChat API server (https://your.rocketchat.server.com) 'url' => env('ROCKETCHAT_URL'), 'token' => env('ROCKETCHAT_TOKEN'), 'user_id' => env('ROCKETCHAT_USER_ID') ] ] ...
If you have published the config file, you can add your RocketChat API server's base url, access token and user Id to config/rocket-chat.php
.
You can also create additional connections if you wish to serve multiple RocketChats in your application.
Usage
You can use the channel in your via()
method inside the notification:
use Illuminate\Notifications\Notification; use TeamNiftyGmbh\RocketChatNotifications\Channels\RocketChatNotificationChannel; use TeamNiftyGmbh\RocketChatNotifications\Messages\RocketChatMessage; class TaskCompleted extends Notification { public function via(mixed $notifiable): array { return [ RocketChatNotificationChannel::class ]; } public function toRocketChat($notifiable): RocketChatMessage { return RocketChatMessage::create('Test Message'); } }
In order to let your notification know which RocketChat channel you are targeting, add the routeNotificationForRocketChat
method to your Notifiable model:
public function routeNotificationForRocketChat(): string { return 'channel_name'; }
Available Message methods
connection()
: Sets the connection.
domain()
: Sets the domain of your rocket chat server.
from()
: Sets the sender's access token and user id.
to()
: Specifies the channel id to send the notification to (overridden by routeNotificationForRocketChat
if empty).
content()
: Sets a content of the notification message. Supports Github flavoured markdown.
alias()
: This will cause the message’s name to appear as the given alias, but your username will still display.
avatar()
: This will make the avatar use the provided image url.
attachment()
: This will add a single attachment.
attachments()
: This will add multiple attachments.
clearAttachments()
: This will remove all attachments.
Adding Attachment
There are several ways to add one or more attachments to a message
public function toRocketChat($notifiable) { return RocketChatMessage::create('Test message') ->connection('rocket-chat') // optional to alter the default connection, overrides 'domain', 'to' and 'from' ->domain('https://your.rocketchat.server.com') //optional if set in config ->to('channel_name') // optional if set in config ->from('access_token', 'rocket_chat_user_id') // optional if set in config ->attachments([ RocketChatAttachment::create()->imageUrl('test'), RocketChatAttachment::create(['image_url' => 'test']), new RocketChatAttachment(['image_url' => 'test']), [ 'image_url' => 'test' ] ]); }
Available Attachment methods
color()
: The color you want the order on the left side to be, any value background-css supports.
text()
: The text to display for this attachment, it is different than the message’s text.
timestamp()
: Displays the time next to the text portion. ISO8601 Zulu Date or instance of any \DateTime
thumbnailUrl()
: An image that displays to the left of the text, looks better when this is relatively small.
messageLink()
: Only applicable if the ts is provided, as it makes the time clickable to this link.
collapsed()
: Causes the image, audio, and video sections to be hiding when collapsed is true.
author($name, $link, $icon)
: shortcut for author methods
authorName()
: Name of the author.
authorLink()
: Providing this makes the author name clickable and points to this link.
authorIcon()
: Displays a tiny icon to the left of the Author’s name.
title()
: Title to display for this attachment, displays under the author.
titleLink()
: Providing this makes the title clickable, pointing to this link.
titleLinkDownload()
: When this is true, a download icon appears and clicking this saves the link to file.
imageUrl()
: The image to display, will be “big” and easy to see.
audioUrl()
: Audio file to play, only supports what html audio does.
videoUrl()
: Video file to play, only supports what html video does.
fields()
: An array of Attachment Field Objects.
[ [ 'short' => false, // Whether this field should be a short field. Default: false 'title' => 'Title 1', //The title of this field. Required 'value' => 'Value 1' // The value of this field, displayed underneath the title value. Required ], [ 'short' => true, 'title' => 'Title 2', 'value' => 'Value 2' ], ];
Sending messages without a notification
use TeamNiftyGmbh\RocketChatNotifications\Messages\RocketChatMessage; use TeamNiftyGmbh\RocketChatNotifications\RocketChat RocketChat::send('domain', 'token', 'userId', 'channel', RocketChatMessage::create('message'));
Sending messages via connection
connection must be defined in config/rocket-chat.php
use TeamNiftyGmbh\RocketChatNotifications\Messages\RocketChatMessage; use TeamNiftyGmbh\RocketChatNotifications\RocketChat RocketChat::sendVia('connection', 'channel', RocketChatMessage::create('message'));
Credits
- [Steffen Franz]
- All Contributors
License
The MIT License (MIT). Please see License File for more information.