Skip to content

Exemple : envoyer via un webhook ​

Les webhooks permettent d'envoyer des messages sous une identité personnalisée sans faire tourner un process bot connecté en permanence — utile pour des notifications CI/CD, un flux RSS, ou une intégration ponctuelle.

Créer le webhook (une fois, via le bot) ​

ts
import { BloumeChat } from "bloumechat";

const client = new BloumeChat();
await client.login(process.env.BOT_TOKEN!);

const channel = await client.channels.fetch(process.env.DEPLOY_CHANNEL_ID!);
const webhook = await channel.createWebhook({ name: "Déploiements" });

// ⚠️ webhook.token n'est disponible qu'à la création — stockez-le en lieu sûr
// (variable d'environnement du pipeline CI, secret manager…), jamais en clair dans un repo.
console.log("URL du webhook :", webhook.url);
js
const { BloumeChat } = require("bloumechat");

const client = new BloumeChat();
await client.login(process.env.BOT_TOKEN);

const channel = await client.channels.fetch(process.env.DEPLOY_CHANNEL_ID);
const webhook = await channel.createWebhook({ name: "Déploiements" });

// ⚠️ webhook.token n'est disponible qu'à la création — stockez-le en lieu sûr
// (variable d'environnement du pipeline CI, secret manager…), jamais en clair dans un repo.
console.log("URL du webhook :", webhook.url);

channel.createWebhook() accepte aussi un avatarUrl optionnel pour personnaliser l'avatar par défaut du webhook :

ts
const webhook = await channel.createWebhook({
  name: "Déploiements",
  avatarUrl: "https://example.com/ci-icon.png",
});
js
const webhook = await channel.createWebhook({
  name: "Déploiements",
  avatarUrl: "https://example.com/ci-icon.png",
});

Utiliser le webhook (depuis un pipeline CI, sans le SDK complet) ​

Une fois le token obtenu, plus besoin du client BloumeChat — un simple fetch HTTP suffit, exactement comme fait webhook.send() en interne. Ceci est du JavaScript pur, exécutable tel quel dans n'importe quel script Node ou même un navigateur :

js
await fetch("https://bloumechat.com/webhooks/<WEBHOOK_ID>/<TOKEN>", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    content: `🚀 Déploiement réussi — commit \`${process.env.GIT_SHA}\``,
    username: "CI/CD",
  }),
});

C'est exactement le principe utilisé par les intégrations GitHub Actions, GitLab CI ou n'importe quel service tiers capable de faire une requête POST — aucune dépendance npm requise côté CI.

Ou avec le SDK, si le process a déjà l'objet Webhook ​

ts
await webhook.send({
  content: "🚀 Nouvelle version déployée !",
  username: "CI/CD",
  embeds: [
    { title: "Détails du build", fields: [{ name: "Branche", value: "main", inline: true }] },
  ],
});
js
await webhook.send({
  content: "🚀 Nouvelle version déployée !",
  username: "CI/CD",
  embeds: [
    { title: "Détails du build", fields: [{ name: "Branche", value: "main", inline: true }] },
  ],
});

Recharger un webhook existant à partir de son ID + token ​

Si votre process CI ne conserve pas l'objet Webhook du SDK entre deux exécutions (cas normal — c'est un process différent à chaque run), il n'est pas nécessaire de recréer un webhook à chaque fois. Gardez id et token dans vos secrets CI et appelez fetch directement — voir la section précédente — ou reconstruisez un objet Webhook côté SDK si vous avez besoin de ses méthodes edit()/delete() :

ts
import { BloumeChat, Webhook } from "bloumechat";

const client = new BloumeChat();
const webhook = new Webhook(client, {
  publicId: process.env.WEBHOOK_ID!,
  name: "Déploiements",
  channelPublicId: process.env.DEPLOY_CHANNEL_ID!,
  token: process.env.WEBHOOK_TOKEN!,
});

await webhook.send("🚀 Déploiement terminé !");
js
const { BloumeChat, Webhook } = require("bloumechat");

const client = new BloumeChat();
const webhook = new Webhook(client, {
  publicId: process.env.WEBHOOK_ID,
  name: "Déploiements",
  channelPublicId: process.env.DEPLOY_CHANNEL_ID,
  token: process.env.WEBHOOK_TOKEN,
});

await webhook.send("🚀 Déploiement terminé !");

Pas besoin de client.login() pour un webhook

webhook.send() fait un fetch HTTP direct — il ne passe jamais par le socket ni par client.apiCall(). Vous pouvez donc instancier BloumeChat sans jamais appeler login() uniquement pour construire un Webhook et envoyer via lui.

Nettoyer un webhook devenu inutile ​

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

Le token du webhook est un secret à part entière

Quiconque le possède peut poster des messages sous cette identité sans avoir besoin d'un token de bot. Traitez-le avec la même rigueur qu'un mot de passe : jamais dans un dépôt public, jamais côté client (navigateur), toujours dans un secret manager ou une variable d'environnement CI.

Voir aussi ​

SDK publié sous licence ISC.