Webhook
Représente un webhook de salon sur BloumeChat — un point d'entrée qui permet de poster des messages dans un salon sans authentification par token de bot, en s'identifiant uniquement via un token de webhook. Hérite de Base.
Notation des signatures
Les signatures sont écrites en notation TypeScript, mais s'appellent à l'identique en JavaScript — voir Utiliser le SDK en JavaScript.
Propriétés
| Propriété | Type | Description |
|---|---|---|
id | string | L'identifiant public du webhook. |
name | string | Le nom d'affichage du webhook. |
avatar | string | null | L'URL de l'avatar du webhook. |
channelId | string | L'identifiant du salon auquel appartient ce webhook. |
token | string | null | Le jeton d'authentification du webhook, disponible uniquement à la création (channel.createWebhook()) ou lors d'une récupération explicite avec token par l'API. null si l'objet a été obtenu sans ce niveau de détail. |
url | string | null (getter) | L'URL complète pour poster un message via ce webhook (POST {baseUrl}/webhooks/{id}/{token}, hôte web sans /api/v2). null si token n'est pas disponible. |
Le token est sensible — traitez-le comme un secret
Le token seul suffit à poster des messages au nom du webhook, sans authentification supplémentaire. Pour cette raison, il est déclaré comme propriété non-énumérable sur l'instance (Object.defineProperty(..., { enumerable: false })) : il n'apparaît ni dans console.log(webhook), ni dans JSON.stringify(webhook), ni dans Object.keys(webhook). webhook.toJSON() applique la même règle en renvoyant "[REDACTED]" à sa place. Cela protège contre une fuite accidentelle dans des logs applicatifs — cela ne remplace pas un stockage sécurisé si vous persistez le token vous-même (variable d'environnement, secret manager…).
Méthodes
send(options): Promise<WebhookSendResult>
Envoie un message via ce webhook, en effectuant un appel HTTP direct (fetch) vers l'URL du webhook — indépendant du système d'authentification par token de bot utilisé par le reste du SDK.
send(options: string | WebhookMessageOptions): Promise<WebhookSendResult>interface WebhookMessageOptions {
content?: string;
username?: string; // Nom affiché pour ce message (remplace le nom du webhook)
avatarUrl?: string; // Avatar affiché pour ce message (remplace l'avatar du webhook)
embeds?: Array<EmbedPayload | Record<string, unknown>>;
}
interface WebhookSendResult {
id: string;
}| Paramètre | Type | Requis | Description |
|---|---|---|---|
options | string | WebhookMessageOptions | Oui | Une chaîne pour un message texte simple, ou un objet pour personnaliser contenu/nom/avatar/embeds. |
Retour : Promise<WebhookSendResult> — { id }, l'identifiant public du message créé.
Erreurs :
- Rejette immédiatement avec
BloumeChatAuthError("Webhook token is not available. Fetch the webhook with token first.") sithis.tokenestnull— aucune requête réseau n'est faite dans ce cas. - Rejette avec
BloumeChatAPIErrorsi la requête HTTP échoue (statut hors2xx) —err.status/err.bodyexposent le détail. - La requête a un timeout fixe de 15 secondes (
AbortSignal.timeout(15_000)), sans logique de retry automatique — contrairement àclient.apiCall(),webhook.send()n'a pas de nouvelle tentative sur429/502/503/504.
const webhook = await channel.createWebhook({ name: "Sentinel" });
await webhook.send({
content: "Alerte de sécurité détectée !",
username: "Robot Gardien",
avatarUrl: "https://example.com/red-alert.png",
});const webhook = await channel.createWebhook({ name: "Sentinel" });
await webhook.send({
content: "Alerte de sécurité détectée !",
username: "Robot Gardien",
avatarUrl: "https://example.com/red-alert.png",
});Message texte simple :
await webhook.send("Déploiement terminé ✅");await webhook.send("Déploiement terminé ✅");Avec un embed via EmbedBuilder :
import { EmbedBuilder } from "bloumechat";
const embed = new EmbedBuilder().setTitle("Build réussi").setColor("#22c55e");
await webhook.send({ embeds: [embed.toJSON()] });const { EmbedBuilder } = require("bloumechat");
const embed = new EmbedBuilder().setTitle("Build réussi").setColor("#22c55e");
await webhook.send({ embeds: [embed.toJSON()] });embeds attend du JSON brut
Contrairement à channel.send() ou message.reply(), webhook.send() n'accepte pas directement une instance d'EmbedBuilder dans son tableau embeds — appelez .toJSON() avant de l'y placer.
edit(data): Promise<void>
Modifie le nom et/ou l'avatar du webhook auprès de l'API.
edit(data: { name?: string; avatarUrl?: string | null }): Promise<void>| Paramètre | Type | Requis | Description |
|---|---|---|---|
data.name | string | Non | Nouveau nom d'affichage. |
data.avatarUrl | string | null | Non | Nouvel avatar, ou null pour le réinitialiser. |
Retour : Promise<void>. Les propriétés locales name/avatar sont mises à jour après succès.
await webhook.edit({ name: "Sentinel v2", avatarUrl: null });await webhook.edit({ name: "Sentinel v2", avatarUrl: null });delete(): Promise<void>
Supprime définitivement ce webhook. Toute tentative ultérieure de send() avec l'ancien token échouera côté API.
Retour : Promise<void>.
await webhook.delete();await webhook.delete();Exemple complet
import { EmbedBuilder } from "bloumechat";
// Créer un webhook dédié aux alertes de déploiement
const webhook = await channel.createWebhook({
name: "CI/CD",
avatarUrl: "https://cdn.example.com/ci-icon.png",
});
const embed = new EmbedBuilder()
.setTitle("Déploiement en production")
.setColor("#5e72e4")
.setTimestamp();
await webhook.send({ embeds: [embed.toJSON()] });
// Nettoyage une fois l'intégration retirée
await webhook.delete();const { EmbedBuilder } = require("bloumechat");
const webhook = await channel.createWebhook({
name: "CI/CD",
avatarUrl: "https://cdn.example.com/ci-icon.png",
});
const embed = new EmbedBuilder()
.setTitle("Déploiement en production")
.setColor("#5e72e4")
.setTimestamp();
await webhook.send({ embeds: [embed.toJSON()] });
await webhook.delete();Voir aussi
- Channel.fetchWebhooks() / createWebhook() — créer et lister les webhooks d'un salon.
- EmbedBuilder — construire les embeds passés à
send(). - Exemple : Envoyer via un webhook — cas d'usage complet.
