Laravel Notifications an Rocket.Chat versenden

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:

->alias('')

Ändert den Namen des Absenders (der originale Name wird dahinter noch gezeigt)

->emoji('')

Tauscht das Profilbild des Absenders mit einem der Rocket.Chat Emojis (Bspw. :radioactive:)

->avatar('')

Tauscht das Profilbild des Absenders mit einem im Internet gespeichertem Bild

->attachment() und attachments()

Hier können Bilder/Videos/Sounds als Anhang der Nachricht hinzugefügt werden

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.