Skip to content

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éTypeDescription
idstringL'identifiant public du webhook.
namestringLe nom d'affichage du webhook.
avatarstring | nullL'URL de l'avatar du webhook.
channelIdstringL'identifiant du salon auquel appartient ce webhook.
tokenstring | nullLe 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.
urlstring | 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.

ts
send(options: string | WebhookMessageOptions): Promise<WebhookSendResult>
ts
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ètreTypeRequisDescription
optionsstring | WebhookMessageOptionsOuiUne 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.") si this.token est null — aucune requête réseau n'est faite dans ce cas.
  • Rejette avec BloumeChatAPIError si la requête HTTP échoue (statut hors 2xx) — err.status/err.body exposent 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 sur 429/502/503/504.
ts
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",
});
js
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 :

ts
await webhook.send("Déploiement terminé ✅");
js
await webhook.send("Déploiement terminé ✅");

Avec un embed via EmbedBuilder :

ts
import { EmbedBuilder } from "bloumechat";

const embed = new EmbedBuilder().setTitle("Build réussi").setColor("#22c55e");
await webhook.send({ embeds: [embed.toJSON()] });
js
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.

ts
edit(data: { name?: string; avatarUrl?: string | null }): Promise<void>
ParamètreTypeRequisDescription
data.namestringNonNouveau nom d'affichage.
data.avatarUrlstring | nullNonNouvel avatar, ou null pour le réinitialiser.

Retour : Promise<void>. Les propriétés locales name/avatar sont mises à jour après succès.

ts
await webhook.edit({ name: "Sentinel v2", avatarUrl: null });
js
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>.

ts
await webhook.delete();
js
await webhook.delete();

Exemple complet ​

ts
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();
js
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 ​

SDK publié sous licence ISC.