Intégrations Botillon
Connectez votre service à un bot Botillon en un clic. Les intégrations sont des connexions webhook approuvées par l'équipe : l'utilisateur clique « Connecter », Botillon réalise le handshake avec votre service, puis livre les événements (votes, likes, avis) à votre endpoint, signés en HMAC SHA-256.
Services approuvés
Discord Analytics
Recevez vos votes Botillon et suivez vos stats sur Discord Analytics - provider officiel Botillon.
Documentation du service →Comment ça marche
1. L'utilisateur clique « Connecter »
Sur la fiche de son bot (espace propriétaire), le propriétaire choisit votre service. Botillon génère alors un connection_id unique et un webhook_secret (préfixe whs_), puis envoie un POST à votre URL de configuration avec l'événement integration.create.
POST {config_url}
Content-Type: application/json
{
"type": "integration.create",
"data": {
"connection_id": "128379182731",
"webhook_secret": "whs_abcd…",
"project": { "id": "42", "platform": "discord", "platform_id": "3949…", "type": "bot" },
"user": { "id": "7", "platform_id": "1234…", "name": "username", "avatar_url": "…" }
}
}2. Votre service répond
Vous persistez la connexion puis répondez avec l'URL qui recevra les webhooks et les scopes d'événements souhaités :
{
"webhook_url": "https://your.bot/webhooks/botillon",
"routes": ["vote.create", "like.create", "comment.create"]
}webhook_url doit être en HTTPS. Les routes sont limitées aux scopes supportés (voir plus bas).
3. Événements livrés, signés
À chaque événement, Botillon envoie un POST signé à votre endpoint. Vérifiez systématiquement la signature avant de traiter le payload, puis répondez 2xx sous 5 secondes.
Headers :
x-botillon-signature: t={timestamp},v1={hmac_sha256_hex}
x-botillon-trace: bl_…
Body (vote.create) :
{
"type": "vote.create",
"data": {
"id": "1787…",
"weight": 1,
"created_at": "2026-08-27T10:00:00Z",
"expires_at": "2026-08-27T22:00:00Z",
"query": {},
"user": { "id": "7", "platform_id": "1234…", "name": "username", "avatar_url": "…" },
"project": { "id": "42", "type": "bot", "platform": "discord", "platform_id": "3949…" }
}
}4. Déconnexion
Quand l'utilisateur déconnecte, Botillon envoie integration.delete à votre URL de configuration. Répondez 2xx et nettoyez la connexion de votre côté.
{ "type": "integration.delete", "data": { "connection_id": "128379182731" } }Vérification de signature
La signature est un HMAC SHA-256 de {timestamp}.{corps brut}, clé = votre webhook_secret. Comparez en temps constant et rejetez toute requête invalide.
import crypto from 'node:crypto';
function verify(rawBody, signature, secret) {
const [tPart, v1Part] = signature.split(',');
const timestamp = tPart.split('=')[1];
const received = v1Part.split('=')[1];
const expected = crypto
.createHmac('sha256', secret)
.update(timestamp + '.' + rawBody)
.digest('hex');
return crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(received));
}Scopes d'événements
| Scope | Description |
|---|---|
| vote.create | Un utilisateur a voté pour le bot (cooldown 12 h respecté). |
| like.create | Un utilisateur a aimé le bot. |
| comment.create | Un utilisateur a publié un avis noté. |
| webhook.test | Événement de test envoyé depuis le bouton « Tester ». |
Fiabilité
Timeout : 5 s par tentative.
3 tentatives, backoff exponentiel (~1 s, 2 s, 4 s).
Les 4xx ne sont pas retentées.
Une livraison sans 2xx sous 5 s est considérée comme échec.
Devenir une intégration
Les intégrations nécessitent une approbation de l'équipe Botillon. Contactez le staff avec : le nom du service, sa description, un logo, votre URL de configuration (endpoint integration.create/integration.delete) et le lien de votre documentation.