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' => [[]],
]);
}
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.