- Schlüssel zur Rettung: Extrahieren und Sichern von Codemagic Secure Variables - 26. Oktober 2023
- Effektives Zeitmanagement für Entwickler: Praktische Strategien - 13. September 2023
- Teil 2: Elasticsearch und FSCrawler in Laravel - 6. April 2023
Laravel Notifications können standardmäßig per E-Mail, SMS (über Drittanbieter) und Slack versendet werden. Mit Hilfe des Community Projektes Laravel Notification Channels lassen sich Notifications auch an andere Dienste schicken.
In diesem Artikel zeigen wir Ihnen, wie Rocket.Chat angesprochen werden kann.
Setup
Der Rocket.Chat Notification Channel wird mit Composer installiert:
composer require laravel-notification-channels/rocket-chat
Vorab müssen wir innerhalb von Rocket.Chat einen neuen Channel und eine Integration erstellen:
Wichtig: Der Rocket.Chat Token wird erst nach dem ersten Speichern generiert.
In die .env werden die URL des Rocket.Chat Servers, das Token aus dem letzten Screenshot, und der Name des Zielchannels hinterlegt:
ROCKETCHAT_URL="https://chat.admin-box.de/"
ROCKETCHAT_TOKEN="*******"
ROCKETCHAT_CHANNEL="insight"
In der Datei config/services.php wird der neue Rocket.Chat Service hinterlegt:
'rocketchat' => [
'url' => env('ROCKETCHAT_URL'),
'token' => env('ROCKETCHAT_TOKEN'),
'channel' => env('ROCKETCHAT_CHANNEL'),
],
Eine neue Notification wird erstellt:
php artisan make:notification TestNotification
Zum Steuern der Notification wird ein neuer Controller erstellt (optional):
php artisan make:controller NotificationController
Controller Konfiguration
Im Controller, den wir verwenden möchten, um die Notification auszuführen, fügen wir die Notification hinzu
use App\Notifications\TestNotification;
und können sie danach auch schon in einer Beispielfunktion verwenden
public function testNotification()
{
$user = Auth::user();
$notificationData = [
'body' => 'Testbenachrichtigung von ' . $user->name,
'url' => 'https://portal.admin-insight.de'
];>
Notification::route('', '')
->notify(newTestNotification($notificationData));
}
Da wir hier keine Nachrichten direkt an einzelne Benutzer versenden, die in unserer Laravel Installation hinterlegt sind, sondern hart auf einen Rocket.Chat Server und einen Channel gehen, können wir mit Notification::route(“, “) die Notification triggern. Bei anderen Formen der Notification, wie E-Mail, wird die Notification mit Hilfe des User Models aufgerufen, und die verknüpfte E-Mail-Adresse wird automatisch zur Zieladresse.
$user->notify(new TestNotification($notificationData)));
Notification Konfiguration
Innerhalb der Notification werden die folgenden Klassen hinzugefügt
use NotificationChannels\RocketChat\RocketChatMessage;
use NotificationChannels\RocketChat\RocketChatAttachment;
use NotificationChannels\RocketChat\RocketChatWebhookChannel;
Auf RocketChatAttachment kann verzichtet werden, sollte man grundsätzlich keine Anhänge versenden.
class TestNotification extends Notification
{
use Queueable;
private $notificationData; //
/**
* Create a new notification instance.
*
* @return void
*/
public function __construct($notificationData)
{
$this->notificationData = $notificationData;
}
/**
* Get the notification's delivery channels.
*
* @param mixed $notifiable
* @return array
*/
public function via($notifiable)
{
return [
RocketChatWebhookChannel::class
];
}
Die Variable $notificationData wird im Constructor bespielt und kann dann später in der Nachricht verwendet werden
public function toRocketChat($notifiable): RocketChatMessage
{
return RocketChatMessage::create()
->content($this->notificationData['body'] . ' [Hier klicken](' . $this->notificationData['url'] . ')' );
}
In der toRocketChat Funktion wird nun die Nachricht erstellt und losgeschickt
Neben content() gibt es noch weitere nützliche Methoden:
Ändert den Namen des Absenders (der originale Name wird dahinter noch gezeigt)
->alias('')
Tauscht das Profilbild des Absenders mit einem der Rocket.Chat Emojis (Bspw. :radioactive:)
->emoji('')
Tauscht das Profilbild des Absenders mit einem im Internet gespeichertem Bild
->avatar('')
Hier können Bilder/Videos/Sounds als Anhang der Nachricht hinzugefügt werden
->attachment()
undattachments()
Beispielhaftes Attachment:
->attachment(
RocketChatAttachment::create()
->imageUrl('https://domain.tld/image.jpg')
->color('blue')
->text('attachmentText'
);
Anhänge haben ebenfalls eine Vielzahl von möglichen Methoden. Zeitstempel, Farben, Thumbnails, und vieles mehr. Mehr Methoden können Sie in der offiziellen Dokumentation nachschlagen.
Sollten Sie noch Fragen haben oder eine Beratung wünschen, können Sie gerne mit uns Kontakt aufnehmen oder unsere Webseite besuchen.
Gerne können Sie hier auch andere Artikel zum Thema Laravel anschauen.