Passer au contenu principal

Vue d’ensemble

revolution/laravel-notification-discord-webhook est un package qui envoie des notifications vers Discord depuis Laravel Notifications via un Webhook Discord. L’API Bot officielle de Discord nécessite le maintien d’une connexion WebSocket et sa mise en place est complexe. Avec un Webhook, il suffit d’obtenir une URL pour envoyer des notifications. Si votre seul besoin est d’envoyer des événements applicatifs vers un canal Discord d’équipe, le Webhook est le meilleur choix.
Ce package nécessite PHP 8.3 ou supérieur et Laravel 12.0 ou supérieur.

Installation

composer require revolution/laravel-notification-discord-webhook

Configuration

Obtenir l’URL du Webhook Discord

Vous pouvez créer une URL de Webhook depuis votre serveur Discord via Paramètres → Intégrations → Webhooks. Pour les détails, consultez le guide officiel de Discord.

config/services.php

'discord' => [
    'webhook' => env('DISCORD_WEBHOOK'),
],

.env

DISCORD_WEBHOOK=https://discord.com/api/webhooks/...

Utilisation de base

Créer la classe Notification

Implémentez la méthode toDiscordWebhook() et retournez DiscordChannel::class depuis via().
<?php

namespace App\Notifications;

use Illuminate\Bus\Queueable;
use Illuminate\Notifications\Notification;
use Illuminate\Contracts\Queue\ShouldQueue;
use Revolution\Laravel\Notification\DiscordWebhook\DiscordChannel;
use Revolution\Laravel\Notification\DiscordWebhook\DiscordMessage;

class DiscordNotification extends Notification implements ShouldQueue
{
    use Queueable;

    public function __construct(protected string $content)
    {
        //
    }

    public function via($notifiable): array
    {
        return [DiscordChannel::class];
    }

    public function toDiscordWebhook(object $notifiable): DiscordMessage
    {
        return DiscordMessage::create(content: $this->content);
    }
}

Modes d’envoi

Notification à la demande (on-demand)

Pour envoyer une notification sans passer par un modèle utilisateur, utilisez Notification::route().
use Illuminate\Support\Facades\Notification;

Notification::route('discord-webhook', config('services.discord.webhook'))
            ->notify(new DiscordNotification('Le déploiement est terminé.'));

Notification depuis un modèle User

Pour utiliser une URL de Webhook différente selon l’utilisateur, définissez routeNotificationForDiscordWebhook().
use Illuminate\Notifications\Notifiable;

class User extends Authenticatable
{
    use Notifiable;

    public function routeNotificationForDiscordWebhook($notification): string
    {
        return $this->discord_webhook;
    }
}
$user->notify(new DiscordNotification('Notification de test'));

Types de messages

Message texte

La méthode d’envoi la plus simple.
public function toDiscordWebhook(object $notifiable): DiscordMessage
{
    return DiscordMessage::create(content: $this->content);
}

Message Embed

DiscordEmbed permet un affichage enrichi avec un titre, une URL, etc.
use Revolution\Laravel\Notification\DiscordWebhook\DiscordMessage;
use Revolution\Laravel\Notification\DiscordWebhook\DiscordEmbed;

public function toDiscordWebhook(object $notifiable): DiscordMessage
{
    return DiscordMessage::create()
                          ->embed(
                              DiscordEmbed::make(
                                  title: 'INFO',
                                  description: $this->content,
                                  url: route('home'),
                              )
                          );
}

Pièces jointes

DiscordAttachment permet d’envoyer une pièce jointe. content (le contenu du fichier) et filename sont obligatoires.
use Revolution\Laravel\Notification\DiscordWebhook\DiscordMessage;
use Revolution\Laravel\Notification\DiscordWebhook\DiscordAttachment;
use Illuminate\Support\Facades\Storage;

public function toDiscordWebhook(object $notifiable): DiscordMessage
{
    return DiscordMessage::create()
        ->file(
            DiscordAttachment::make(
                content: Storage::get('test.png'),
                filename: 'test.png',
                description: 'test',
                filetype: 'image/png'
            )
        );
}

Référencer une pièce jointe dans un Embed

Vous pouvez référencer une pièce jointe dans image ou thumbnail d’un Embed via attachment://nom-du-fichier.
use Revolution\Laravel\Notification\DiscordWebhook\DiscordMessage;
use Revolution\Laravel\Notification\DiscordWebhook\DiscordAttachment;
use Revolution\Laravel\Notification\DiscordWebhook\DiscordEmbed;
use Illuminate\Support\Facades\Storage;

public function toDiscordWebhook(object $notifiable): DiscordMessage
{
    return DiscordMessage::create()
                          ->embed(
                              DiscordEmbed::make(
                                  title: 'test',
                                  description: $this->content,
                                  image: 'attachment://test.jpg',
                                  thumbnail: 'attachment://test2.jpg',
                              )
                          )
                          ->file(DiscordAttachment::make(
                              content: Storage::get('test.jpg'),
                              filename: 'test.jpg',
                              description: 'test',
                              filetype: 'image/jpg'
                          ))
                          ->file(new DiscordAttachment(
                              content: Storage::get('test2.jpg'),
                              filename: 'test2.jpg',
                              description: 'test2',
                              filetype: 'image/jpg'
                          ));
}

Envoyer un payload personnalisé

->with() permet de spécifier directement n’importe quel paramètre du Webhook Discord.
public function toDiscordWebhook(object $notifiable): DiscordMessage
{
    return DiscordMessage::create()
                          ->with([
                              'content' => $this->content,
                              'embeds' => [[]],
                          ]);
}
Pour le détail des paramètres utilisables avec ->with(), consultez la documentation officielle de l’API Discord.

Conclusion

Les bots Discord sont puissants, mais si vous souhaitez simplement envoyer des notifications, le Webhook est bien plus simple. Avec ce package, vous pouvez intégrer de manière transparente le système de notifications de Laravel et transmettre rapidement les événements de votre application dans un canal Discord d’équipe.
Pour les dernières informations, consultez le dépôt GitHub.
Dernière modification le 13 juillet 2026