🌙
Vue d'ensemble
Git Sync
CSV URL
Segment
Stockage
API
Cas d'usage
FAQ

🧰 Outils — Git, CSV & Analytics

Trois intégrations puissantes pour sauvegarder votre bot, charger des données externes et analyser son utilisation.

S1 — Vue d'ensemble

L'onglet Outils (accessible depuis Bot → Gérer → Tools) regroupe trois intégrations externes qui étendent les capacités de votre bot sans écrire une seule ligne de code supplémentaire.

Onglet Outils dans l'application : Dupliquer le bot, Sync Git, URL CSV et Clé API Segment
L'onglet Outils, avec les quatre entrées disponibles.
🔄
Git Sync
Sauvegardez et restaurez votre bot depuis n'importe quel dépôt Git (GitHub, GitLab, Bitbucket, Gitea…)
📊
CSV URL
Connectez un Google Spreadsheet ou un fichier CSV en ligne — données dynamiques sans base de données
📈
Segment API Key
Trackez les événements de votre bot (commandes, utilisateurs actifs, conversions…) via Segment.com
💡 Persistance — Les valeurs configurées dans cet onglet sont stockées de façon permanente dans le fichier props.json du bot et accessibles depuis le code via Bot.getProperty("__tool_xxx").

S2 — Git Sync : import / export GitHub

Git Sync est l'outil de versionning de votre bot. Il vous permet de :

Votre Bot
→
Export
→
GitHub
→
Import
→
Autre Bot

Étape 1 — Ouvrir Git Sync

  1. Ouvrez votre bot dans BotStrike
  2. Allez dans l'onglet Tools
  3. Cliquez sur la carte Git Sync (icône violette 🔄)

Étape 2 — Coller l'URL du dépôt

Une boîte de dialogue s'ouvre avec un champ texte. Collez-y l'URL de votre dépôt Git :

# Dépôt public HTTPS
https://github.com/votre-pseudo/mon-bot.git

# Dépôt SSH (privé, nécessite Deploy Key)
git@github.com:votre-pseudo/mon-bot.git

# GitLab, Bitbucket, Gitea — aussi supportés
https://gitlab.com/votre-pseudo/mon-bot.git

Étape 3 — Choisir une action

Trois boutons sont disponibles dans le dialogue :

BoutonActionAffecte le code ?
Save Sauvegarde uniquement l'URL du dépôt dans les propriétés du bot ❌ Non
Import git clone du dépôt → copie tous les fichiers dans les commandes du bot ✅ Oui (écrase)
Export Copie toutes les commandes du bot → git push vers le dépôt ❌ Non (côté bot)
⚠️ Attention import — L'import écrase les commandes existantes du bot. Faites toujours un Export d'abord si vous avez du code que vous ne voulez pas perdre.

Exemple complet — Exporter votre bot vers GitHub

  1. Créez un nouveau dépôt sur GitHub : https://github.com/votre-pseudo/mon-bot
  2. Dans l'app : Tools → Git Sync
  3. Collez : https://github.com/votre-pseudo/mon-bot.git
  4. Cliquez Export
  5. ✅ Message vert : « Bot exporté vers Git avec succès »
  6. Sur GitHub, vous verrez tous vos fichiers

Structure du dépôt après un Export

mon-bot/
├── _config.json          ← Configuration du bot (token retiré)
├── _libs.json            ← Librairies installées
├── start.js              ← Commande /start
├── help.js               ← Commande /help
├── onMessage.js          ← Handler de messages
├── _stats.js             ← Commande WebApp
└── admin/
    ├── ban.js            ← /admin/ban
    └── stats.py          ← Commande Python
✅ Le token Telegram n'est jamais exporté — Pour des raisons de sécurité, le token est exclu du fichier _config.json. Vous le reconfigurerez manuellement après un import.

Dépôts privés — Deploy Keys SSH

Pour les dépôts privés, le serveur BotStrike doit pouvoir s'authentifier auprès de GitHub. La méthode recommandée est la Deploy Key SSH :

  1. Le serveur BotStrike génère une clé SSH lors du premier accès (~/.ssh/id_ed25519)
  2. Récupérez la clé publique via le bouton « Voir la clé SSH » de l'app
  3. Sur GitHub : Settings → Deploy Keys → Add deploy key
  4. Collez la clé publique
  5. Pour pouvoir Export, cochez « Allow write access »
  6. Utilisez l'URL SSH : git@github.com:user/repo.git
📖 Dépôts publics — Pour un dépôt public, l'Import fonctionne directement sans aucune configuration. Seul l'Export nécessite une authentification.

S3 — CSV URL : Google Spreadsheet

CSV URL permet à votre bot de lire des données depuis un fichier CSV en ligne ou un Google Spreadsheet publié. Idéal pour stocker des listes que vous pouvez modifier sans toucher au code du bot.

🎯 Avantage clé — Vos collaborateurs (non-techs) peuvent éditer le contenu directement dans Google Sheets, et le bot voit immédiatement les changements.

Étape 1 — Préparer le Google Sheet

  1. Créez un Google Spreadsheet avec vos données
  2. Menu Fichier → Partager → Publier sur le web
  3. Choisissez « Valeurs séparées par des virgules (.csv) »
  4. Cliquez sur Publier, copiez le lien généré

Étape 2 — Configurer dans l'app

  1. Allez dans Bot → Gérer → Tools
  2. Cliquez sur la carte CSV URL (icône verte 📊)
  3. Collez l'URL générée par Google Sheets :
    https://docs.google.com/spreadsheets/d/e/2PACX-xxxxx/pub?output=csv
  4. Cliquez Save
  5. ✅ « Sauvegardé avec succès »

Étape 3 — Lire le CSV dans une commande

⚡ JavaScript
🐍 Python
// Récupère l'URL CSV configurée
const csvUrl = Bot.getProperty("__tool_csv_url");

// Télécharge le CSV
const csv = await Bot.httpGet(csvUrl);

// Parse les lignes (séparateur virgule)
const lines = csv.split("\n").map(l => l.split(","));
const headers = lines[0];
const rows = lines.slice(1);

// Exemple : afficher la 1ère colonne
rows.forEach(row => Bot.sendMessage(row[0]));
# Récupère l'URL CSV configurée
csv_url = bot.get_property("__tool_csv_url")

# Télécharge le CSV
csv = bot.http_get(csv_url)

# Parse les lignes
lines = [l.split(",") for l in csv.split("\n")]
headers = lines[0]
rows = lines[1:]

# Exemple : afficher la 1ère colonne
for row in rows:
    bot.send_message(row[0])

Cas d'usage typiques

CasColonnes du SheetBénéfice
Catalogue produits nom, prix, stock, image Mettre à jour les prix sans redéployer
Traductions clé, fr, en, es, de Traducteurs travaillent dans Sheets
FAQ question, réponse, catégorie Édition collaborative
Whitelist user_id, niveau, expiration Gestion d'accès dynamique
Codes promo code, réduction, max_uses Marketing crée les codes
⚠️ Pas de cache — Chaque appel httpGet télécharge le CSV. Pour éviter de spammer Google, mettez en cache via la lib Caching (voir aussi : Bot.cacheable).

S4 — Segment API Key : Analytics

Segment.com est une plateforme d'Customer Data Platform qui centralise les événements de votre application et les envoie vers vos outils d'analyse (Google Analytics, Mixpanel, Amplitude, etc.).

Étape 1 — Créer un compte Segment

  1. Inscrivez-vous sur segment.com
  2. Créez une Source → Server → Node.js / HTTP API
  3. Copiez le Write Key affiché (commence souvent par des lettres aléatoires)

Étape 2 — Configurer dans l'app

  1. Bot → Gérer → Tools
  2. Cliquez sur la carte Segment API Key (icône violet foncé 📈)
  3. Collez votre Write Key
  4. Cliquez Save

Étape 3 — Tracker des événements

⚡ JavaScript
🐍 Python
const key = Bot.getProperty("__tool_segment_key");
const auth = "Basic " + btoa(key + ":");

// Track : enregistrer un événement
await Bot.httpPost("https://api.segment.io/v1/track", {
  headers: { "Authorization": auth, "Content-Type": "application/json" },
  body: JSON.stringify({
    userId: String(user.telegramid),
    event: "command_used",
    properties: { command: "/start", source: "telegram" }
  })
});
# base64 est déjà disponible : aucun import
key = bot.get_property("__tool_segment_key")
auth = "Basic " + base64.b64encode(f"{key}:".encode()).decode()

bot.http_post("https://api.segment.io/v1/track",
  headers={"Authorization": auth, "Content-Type": "application/json"},
  body={
    "userId": str(user["telegramid"]),
    "event": "command_used",
    "properties": {"command": "/start", "source": "telegram"}
  }
)

Événements à tracker

ÉvénementQuand le déclencherProperties utiles
user_signupPremière interaction (/start)language, source
command_usedToute commande exécutéecommand, params
purchaseAchat finaliséamount, currency, product_id
conversionInscription, formulaire remplitype, funnel_step
errorErreur dans une commandecode, message, command
💡 Anonymous ID — Si vous n'avez pas de userId, utilisez anonymousId avec le chat_id. Segment dédupliquera automatiquement.

S5 — Où sont stockées les données ?

Les trois valeurs configurées dans l'onglet Tools sont sauvegardées dans le fichier props.json du bot, sur le serveur BotStrike :

Clé interneOutilTypeExemple
__tool_git_repo Git Sync URL https://github.com/u/repo.git
__tool_csv_url CSV URL URL https://docs.google.com/.../pub?output=csv
__tool_segment_key Segment Key String aBc123XyZ_writeKey

Vous pouvez accéder à ces valeurs depuis n'importe quelle commande :

// JS
const repo = Bot.getProperty("__tool_git_repo");
const csv  = Bot.getProperty("__tool_csv_url");
const seg  = Bot.getProperty("__tool_segment_key");

# Python
repo = bot.get_property("__tool_git_repo")
csv  = bot.get_property("__tool_csv_url")
seg  = bot.get_property("__tool_segment_key")
🔒 Sécurité — Les valeurs ne sont jamais exposées au client. Elles ne quittent le serveur que dans le contexte d'exécution sécurisé d'une commande.

S6 — Endpoints API

Pour les utilisateurs avancés et les intégrations tierces, les outils sont aussi pilotables via l'API REST :

MéthodeEndpointDescription
GET /api/bots/<hash>/tools/config Récupérer la configuration des trois outils
PUT /api/bots/<hash>/tools/config Sauvegarder la configuration (mise à jour partielle acceptée)
POST /api/bots/<hash>/tools/git/export Lancer un export Git
POST /api/bots/<hash>/tools/git/import Lancer un import Git

Exemple : récupérer la config

curl -X GET https://api.botstrike.app/api/bots/abc123/tools/config \
  -H "Authorization: Bearer YOUR_API_TOKEN"

# Réponse
{
  "git_repo": "https://github.com/u/r.git",
  "csv_url":  "https://docs.google.com/.../pub?output=csv",
  "segment_key": "***masked***"
}

Exemple : déclencher un export

curl -X POST https://api.botstrike.app/api/bots/abc123/tools/git/export \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"message": "Backup automatique du 2026-04-21"}'

# Réponse
{ "ok": true, "commit": "a1b2c3d", "files_pushed": 42 }

S7 — Cas d'usage avancés

🔄 Backup automatique nocturne via Git

Programmez un export Git toutes les nuits pour avoir un historique versionné de votre bot :

// Dans un cron / commande planifiée
const repo = Bot.getProperty("__tool_git_repo");
if (repo) {
  await Bot.httpPost(`/api/bots/${BOT_HASH}/tools/git/export`, {
    body: JSON.stringify({ message: `Backup ${new Date().toISOString()}` })
  });
  Bot.sendMessage(ADMIN_ID, "✅ Backup nocturne effectué");
}

📊 Catalogue produits depuis Google Sheets

Permettez à votre équipe marketing de gérer le catalogue sans toucher au code :

// catalog.js — commande /catalogue
const csv = await Bot.httpGet(Bot.getProperty("__tool_csv_url"));
const products = csv.split("\n").slice(1).map(l => {
  const [name, price, stock] = l.split(",");
  return { name, price: parseFloat(price), stock: parseInt(stock) };
});

const inStock = products.filter(p => p.stock > 0);
const message = inStock.map(p => `📦 ${p.name} — ${p.price}€`).join("\n");
Bot.sendMessage(message);

📈 Funnel de conversion via Segment

Mesurez où vos utilisateurs abandonnent dans un parcours d'achat :

// Étape 1 : voit le catalogue
trackSegment("funnel_step", { step: "view_catalog" });

// Étape 2 : ajoute au panier
trackSegment("funnel_step", { step: "add_to_cart", product: name });

// Étape 3 : commence le paiement
trackSegment("funnel_step", { step: "checkout_started" });

// Étape 4 : finalise l'achat
trackSegment("purchase", { amount: total, currency: "EUR" });

S8 — FAQ & Dépannage

❓ « Erreur d'authentification » lors d'un Export Git

Vérifiez :

  • L'URL utilise bien le format SSH (git@github.com:...) et non HTTPS
  • La Deploy Key est ajoutée dans Settings → Deploy Keys du dépôt cible
  • L'option « Allow write access » est cochée
  • La clé n'est pas réutilisée — chaque dépôt nécessite sa propre Deploy Key

❓ Mon CSV Google ne se met pas à jour

Google met en cache la version publiée pendant environ 5 minutes. Pour forcer une actualisation :

  • Patientez 5 min après modification
  • Ou : Fichier → Partager → Publier sur le web → Arrêter → Republier
  • Ajoutez un timestamp à l'URL pour casser le cache : ?output=csv&t=${Date.now()}

❓ Segment ne reçoit pas mes événements

  • Vérifiez que vous utilisez le Write Key Server-Side (pas Browser/JS)
  • L'header Authorization doit être Basic base64(writeKey + ":") — notez les deux-points
  • Consultez le Debugger Segment pour voir les events reçus en temps réel
  • Les events bloqués apparaissent dans Source → Schema

❓ Comment supprimer une valeur configurée ?

Réouvrez le dialogue de l'outil concerné, videz le champ texte, et cliquez Save. La propriété est supprimée du props.json.

❓ Puis-je versionner uniquement certains fichiers ?

Oui : créez un fichier .gitignore dans le dépôt avec les patterns à exclure. Lors du prochain Export, ces fichiers seront ignorés.

# .gitignore
_config.json
secrets/
*.tmp
test_*.js
✅ Récapitulatif — Les outils sont conçus pour être plug-and-play. Configurez une fois, utilisez partout dans votre code via Bot.getProperty("__tool_*").