🤖 BsAI — IA conversationnelle
Intégrez l'intelligence artificielle BotStrike directement dans les commandes de votre bot — sans installation de bibliothèque.
S1 — Introduction
BsAI est un global disponible dans toutes les commandes (JS et Python) qui permet d'envoyer un message à l'IA BotStrike et de récupérer la réponse en quelques lignes de code.
Cas d'usage typiques :
- Chatbot universel qui répond en langage naturel
- Assistant FAQ qui connaît les infos de votre business
- Bot support client avec mémoire de conversation
- Bot créatif (génération de texte, résumés, traductions)
- Assistant personnalisé avec un prénom et un rôle défini
lite 0,1 — mob 0,5 — mega 1),
plus 1 itération Cloud pour l'envoi de la réponse. Les deux sont
prélevées sur le quota du propriétaire du bot.
S2 — Démarrage rapide
Créez une commande qui utilise BsAI.chat() avec le message reçu :
// Commande : /chat ou tout message texte const reply = await BsAI.chat(message); bot.sendMessage(reply);
# Commande : /chat ou tout message texte reply = BsAI.chat(message) bot.sendMessage(reply)
await.
S3 — BsAI.chat()
Méthode principale. Envoie un message à l'IA et retourne sa réponse.
Signature
const reply = await BsAI.chat(message, options?);
reply = BsAI.chat(message, model=None, name=None, persona=None, history=False)
Paramètres
| Paramètre | Type | Défaut | Description |
|---|---|---|---|
message | string | — | Message de l'utilisateur du bot (obligatoire) |
model | string | 'lite' | Modèle IA : 'lite', 'mob' ou 'mega' |
name | string | 'BsAI' | Nom de l'assistant IA |
persona | string | — | Instructions système personnalisées (prompt système) |
history | bool / array | false | true = mémoire automatique, false = sans mémoire, tableau = historique manuel |
name et son caractère avec
persona. En revanche, si un utilisateur lui demande
quel modèle il est, il répondra toujours
BsAI lite, BsAI mob ou BsAI mega
selon le modèle choisi, créé par l'équipe BotStrike. Cette règle
s'applique même avec un persona personnalisé : votre bot
ne citera jamais de fournisseur tiers.
Exemple complet
const reply = await BsAI.chat(message, {
model: 'mob',
name: 'Aria',
persona: 'Tu es une assistante e-commerce spécialisée en mode. Réponds en français, de façon chaleureuse et professionnelle. Utilise des emojis pertinents dans tes réponses.', // ← ajouter ou retirer selon votre style
history: true,
});
bot.sendMessage(reply);
reply = BsAI.chat(
message,
model='mob',
name='Aria',
persona='Tu es une assistante e-commerce. Réponds en français. Utilise des emojis pertinents dans tes réponses.', # ← ajouter ou retirer selon votre style
history=True,
)
bot.sendMessage(reply)
S4 — BsAI.setConfig() / set_config()
Configure les valeurs par défaut pour toute la commande, évitant de répéter les options à chaque appel.
BsAI.setConfig({
model: 'lite',
name: 'Mon Assistant',
persona: 'Tu es un assistant Telegram utile et concis. Utilise des emojis adaptés dans tes réponses pour les rendre plus expressives et chaleureuses.',
});
// Tous les appels suivants utiliseront ces valeurs par défaut
const r1 = await BsAI.chat("Bonjour !");
const r2 = await BsAI.chat("Quel temps fait-il ?");
BsAI.set_config(
model='lite',
name='Mon Assistant',
persona='Tu es un assistant Telegram utile et concis.',
)
r1 = BsAI.chat("Bonjour !")
r2 = BsAI.chat("Quel temps fait-il ?")
clearHistory() / clear_history()
Efface l'historique de conversation de l'utilisateur courant (par chat_id).
BsAI.clearHistory();
bot.sendMessage("Conversation réinitialisée ✅");
BsAI.clear_history()
bot.sendMessage("Conversation réinitialisée ✅")
S5 — Modèles IA
Trois modèles sont disponibles, adaptés à différents besoins :
lite.
S6 — Historique de conversation
BsAI peut mémoriser la conversation pour rendre le bot plus naturel.
Automatique (history: true)
L'historique est automatiquement lu et mis à jour dans les propriétés du bot, par utilisateur (chat_id). Les 6 derniers échanges sont conservés (12 messages, FIFO) : au-delà, les plus anciens sont oubliés. Cet historique est renvoyé au serveur à chaque appel, donc le garder court rend les réponses plus rapides.
// Chatbot avec mémoire
const reply = await BsAI.chat(message, { history: true });
bot.sendMessage(reply);
reply = BsAI.chat(message, history=True) bot.sendMessage(reply)
Manuel (history: [...])
Fournissez votre propre tableau d'historique si vous gérez la mémoire vous-même.
const hist = Props.get('my_history') || [];
const reply = await BsAI.chat(message, { history: hist });
// Mettre à jour manuellement si besoin
hist.push({ role: 'user', content: message });
hist.push({ role: 'assistant', content: reply });
Props.set('my_history', hist.slice(-20));
hist = Props.get('my_history') or []
reply = BsAI.chat(message, history=hist)
hist.append({'role': 'user', 'content': message})
hist.append({'role': 'assistant', 'content': reply})
Props.set('my_history', hist[-20:])
Réinitialiser
BsAI.clearHistory();
bot.sendMessage("Mémoire effacée ✅");
BsAI.clear_history()
bot.sendMessage("Mémoire effacée ✅")
S7 — Exemples complets
Chatbot universel (2 lignes)
const reply = await BsAI.chat(message, { history: true });
bot.sendMessage(reply);
reply = BsAI.chat(message, history=True) bot.sendMessage(reply)
Assistant FAQ avec persona
BsAI.setConfig({
name: 'Support Client', // ← Changez le nom de votre assistant
model: 'lite', // ← 'lite', 'mob' ou 'mega'
persona: `Tu es l'assistant virtuel de notre service client.
Réponds uniquement aux questions concernant nos produits et services.
Si la question est hors sujet, explique poliment que tu ne peux pas aider sur ce point.
Réponds toujours dans la langue de l'utilisateur.
Utilise des emojis adaptés pour rendre tes réponses plus agréables. 😊`,
// ↑ Décrivez ici le rôle, le comportement et le style de votre assistant
});
const reply = await BsAI.chat(message, { history: true });
bot.sendMessage(reply);
BsAI.set_config(
name='Support Client', # ← Changez le nom de votre assistant
model='lite', # ← 'lite', 'mob' ou 'mega'
persona=(
"Tu es l'assistant virtuel de notre service client. "
"Réponds uniquement aux questions sur nos produits et services. "
"Réponds toujours dans la langue de l'utilisateur. "
"Utilise des emojis adaptés pour rendre tes réponses plus agréables. 😊"
# ↑ Décrivez ici le rôle, le comportement et le style de votre assistant
),
)
reply = BsAI.chat(message, history=True)
bot.sendMessage(reply)
Bot avec commande /reset
// Commande /reset
BsAI.clearHistory();
bot.sendMessage("🔄 Conversation réinitialisée. Comment puis-je vous aider ?");
# Commande /reset
BsAI.clear_history()
bot.sendMessage("🔄 Conversation réinitialisée. Comment puis-je vous aider ?")
Assistante personnalisée avec le modèle mob
const reply = await BsAI.chat(message, {
model: 'mob', // ← Changez le modèle selon vos besoins
name: 'Aria', // ← Donnez un prénom à votre assistant
persona: 'Tu t\'appelles Aria. Tu es une assistante chaleureuse, empathique et professionnelle. Tu réponds toujours dans la langue de l\'utilisateur et en moins de 3 paragraphes. Utilise des emojis pour exprimer tes émotions et rendre tes messages vivants. ✨',
// ↑ Personnalisez le caractère, le rôle et le style emoji de votre assistant
history: true,
});
bot.sendMessage(reply);
reply = BsAI.chat(
message,
model='mob', # ← Changez le modèle selon vos besoins
name='Aria', # ← Donnez un prénom à votre assistant
persona=(
"Tu t'appelles Aria. Tu es une assistante chaleureuse et professionnelle. "
"Tu réponds toujours dans la langue de l'utilisateur en moins de 3 paragraphes. "
"Utilise des emojis pour exprimer tes émotions et rendre tes messages vivants. ✨"
# ↑ Personnalisez le caractère, le rôle et le style emoji de votre assistant
),
history=True,
)
bot.sendMessage(reply)
S8 — Quotas & Limites
| Limite | Valeur |
|---|---|
Coût IA par appel — modèle lite | 0,1 itération IA (10 appels = 1 iter) |
Coût IA par appel — modèle mob | 0,5 itération IA (2 appels = 1 iter) |
Coût IA par appel — modèle mega | 1 itération IA par appel |
| Modèle selon l'offre | lite : toutes les offres · mob : Starter et Pro · mega : Pro. Un modèle hors de l'offre retombe sur le plus haut modèle permis, sans erreur. |
Lecture d'image (photo) | Starter et Pro. photo: true (JS) ou photo=True (Python) fait lire la photo du message reçu ; sa légende sert de question. Accepte aussi une adresse https://… ou un file_id. +0,2 itération IA par image lue. Sur Free, l'appel renvoie une erreur : prévoir un try / catch. |
| Appel volumineux | Le tarif couvre jusqu'à 16 000 caractères envoyés (persona + historique + message). Chaque tranche de 16 000 caractères au-delà ajoute 0,1 itération IA. |
| Persona max | 8 000 caractères (le surplus est ignoré) |
| Historique max accepté | 24 messages quand il est passé à la main (le surplus est ignoré) |
| Coût Cloud (envoi de la réponse) | 1 itération Cloud par sendMessage (sur le quota du bot) |
| Longueur max d'une réponse | 3 500 caractères (Telegram en refuse 4096 ; au-delà l'envoi échoue) |
| Historique max envoyé | 12 messages (6 échanges) |
| Historique stocké | 12 derniers messages par chat_id (FIFO) |
| Timeout réponse serveur | 45 secondes |
BsAI.chat() consomme à la fois :
- une fraction d'itération IA (selon le modèle choisi : 0,1 / 0,5 / 1) — le quota mensuel IA du compte, celui-là même qu'utilise l'agent « Développer avec IA » ;
- une itération Cloud pour l'envoi du message
de réponse à l'utilisateur — comme tout
sendMessaged'un bot normal.
- Si vous envoyez la réponse en légende d'une photo ou d'un fichier, la limite Telegram n'est plus que 1024 caractères : découpez vous-même, ou envoyez le média puis le texte séparément.
- Si vous ajoutez du texte autour de la réponse (salutation, signature), comptez-le : la limite porte sur le message final.
BsAI.chat() lancera une erreur "quota_exceeded". Pensez à prévoir une gestion d'erreur.
try {
const reply = await BsAI.chat(message, { history: true });
bot.sendMessage(reply);
} catch (e) {
if (e.message.includes('quota_exceeded')) {
bot.sendMessage("⚠️ Le service IA est temporairement indisponible. Réessayez demain.");
} else {
bot.sendMessage("😢 Une erreur s'est produite : " + e.message);
}
}
try:
reply = BsAI.chat(message, history=True)
bot.sendMessage(reply)
except RuntimeError as e:
if 'quota_exceeded' in str(e):
bot.sendMessage("⚠️ Service IA temporairement indisponible.")
else:
bot.sendMessage(f"😢 Erreur : {e}")
lite pour les chatbots à fort volume afin de minimiser la consommation d'itérations.
S9 — Chatbot universel avec la commande *
La commande * (étoile / wildcard) est déclenchée pour tout message qui ne correspond à aucune autre commande. Combinée avec BsAI.chat(), elle crée un chatbot IA qui répond directement aux questions de l'utilisateur — sans qu'il ait besoin d'écrire une commande spécifique.
* ?
Dans BotStrike, créez une commande et nommez-la exactement *. Elle sera automatiquement exécutée pour tous les messages sans commande correspondante.
Chatbot IA universel — 2 lignes
// Commande : * (répond à TOUT message sans commande)
const reply = await BsAI.chat(message, { history: true });
Bot.sendMessage(reply);
# Commande : * (répond à TOUT message sans commande) reply = BsAI.chat(message, history=True) Bot.sendMessage(reply)
Chatbot avec persona personnalisé
// Commande : *
// L'IA répond à toutes les questions avec un persona défini
const reply = await BsAI.chat(message, {
model: 'mob',
name: 'Aria',
persona: `Tu t'appelles Aria, l'assistante IA de ce bot Telegram.
Tu réponds toujours dans la langue de l'utilisateur.
Tu es chaleureuse, concise et tu utilises des emojis adaptés. ✨
Si on te demande ta date d'entraînement ou ta version, réponds :
"J'apprends de jour en jour. Je ne communique pas cette information. 😊"`,
history: true,
});
Bot.sendMessage(reply);
# Commande : *
reply = BsAI.chat(
message,
model='mob',
name='Aria',
persona=(
"Tu t'appelles Aria, l'assistante IA de ce bot Telegram. "
"Tu réponds toujours dans la langue de l'utilisateur. "
"Tu es chaleureuse, concise et tu utilises des emojis adaptés. ✨ "
"Si on te demande ta date d'entraînement ou ta version, réponds : "
""J'apprends de jour en jour. Je ne communique pas cette information. 😊""
),
history=True,
)
Bot.sendMessage(reply)
/reset pour permettre à l'utilisateur d'effacer l'historique IA avec BsAI.clearHistory() (JS) ou BsAI.clear_history() (Python).
S10 — Boutons de suggestion générés par l'IA
En ajoutant une instruction dans le persona, l'IA peut proposer automatiquement des boutons de suggestion rapide à la fin de ses réponses. Votre code parse le format [BTNS: Option1 | Option2 | Option3] et crée le clavier de réponse Telegram.
MAX_BTNS. Les workers ne font pas ce parsing automatiquement — c'est votre code de commande qui extrait les boutons.
Boutons de suggestion automatiques (3 par défaut, max 4)
// Commande : * (ou n'importe quelle commande qui appelle BsAI)
const MAX_BTNS = 3; // 3 par défaut — changez jusqu'à 4 maximum
const reply = await BsAI.chat(message, {
persona: `Tu es un assistant Telegram. Après ta réponse, propose toujours ${MAX_BTNS} suggestions de réponse courtes (MAX 4 mots chacune). Format OBLIGATOIRE à la fin : [BTNS: Option1 | Option2 | Option3]`,
history: true,
});
// Extraire les boutons du format [BTNS: A | B | C]
const m = reply.match(/\[BTNS:\s*([^\]]+)\]/i);
const cleanReply = reply.replace(/\[BTNS:[^\]]*\]/gi, "").trim();
if (m) {
const btns = m[1].split("|").map(b => b.trim()).filter(Boolean).slice(0, MAX_BTNS);
// 2 boutons sur la 1ère ligne, 1 ou 2 boutons sur la 2ème
const rows = [btns.slice(0, 2).map(b => ({ text: b }))];
if (btns.length > 2) rows.push(btns.slice(2).map(b => ({ text: b })));
Bot.sendMessage(cleanReply, {
reply_markup: { keyboard: rows, resize_keyboard: true, one_time_keyboard: true },
});
} else {
Bot.sendMessage(cleanReply);
}
# re est deja disponible : aucun import
# Commande : * (ou n'importe quelle commande qui appelle BsAI)
MAX_BTNS = 3 # 3 par défaut — changez jusqu'à 4 maximum
reply = BsAI.chat(
message,
persona=(
f"Tu es un assistant Telegram. Après ta réponse, propose toujours "
f"{MAX_BTNS} suggestions de réponse courtes (MAX 4 mots chacune). "
f"Format OBLIGATOIRE à la fin : [BTNS: Option1 | Option2 | Option3]"
),
history=True,
)
# Extraire les boutons du format [BTNS: A | B | C]
m = re.search(r'\[BTNS:\s*([^\]]+)\]', reply, re.IGNORECASE)
clean_reply = re.sub(r'\[BTNS:[^\]]*\]', '', reply).strip()
if m:
btns = [b.strip() for b in m.group(1).split('|') if b.strip()][:MAX_BTNS]
# 2 boutons sur la 1ère ligne, reste sur la 2ème
rows = [btns[:2]]
if len(btns) > 2:
rows.append(btns[2:])
Bot.sendMessage(clean_reply, {
'reply_markup': {
'keyboard': [[{'text': b} for b in row] for row in rows],
'resize_keyboard': True,
'one_time_keyboard': True,
}
})
else:
Bot.sendMessage(clean_reply)
Boutons inline choisis par l'IA
L'IA peut aussi proposer des boutons inline, rattachés au message plutôt qu'au clavier. Utilisez le format [BTN: label | /commande].
style sur un bouton inline.
Les couleurs success / danger / primary /
normal sont une extension BotStrike du clavier de
réponse (Bot.sendMenu) : Telegram ignore ce champ sur
un bouton inline. Pour distinguer les actions ici, faites mettre un
emoji dans le libellé par l'IA (✅, ❌, ➡️).
// Commande : * — l'IA choisit les boutons selon le contexte
const reply = await BsAI.chat(message, {
persona: `Tu es un assistant Telegram. Si ta réponse nécessite une action, propose 1 à 3 boutons inline APRÈS ta réponse.
Format par bouton : [BTN: label | /commande]
Mets un emoji dans le libellé selon le contexte : ✅ pour une confirmation, ❌ pour une annulation, ➡️ pour une navigation.
Exemple : [BTN: ✅ Confirmer | /confirm][BTN: ❌ Annuler | /cancel]`,
history: true,
});
// Parser les boutons [BTN: label | /cmd]
const BTN_RE = /\[BTN:\s*([^\|\]]+)\s*\|\s*([^\]]+)\s*\]/gi;
const btns = [...reply.matchAll(BTN_RE)].map(m => ({
text: m[1].trim(),
callback_data: m[2].trim(),
}));
const cleanReply = reply.replace(BTN_RE, "").trim();
if (btns.length > 0) {
// 2 boutons max par ligne
const rows = [];
for (let i = 0; i < btns.length; i += 2) rows.push(btns.slice(i, i + 2));
Bot.sendMessage(cleanReply, {
reply_markup: { inline_keyboard: rows },
});
} else {
Bot.sendMessage(cleanReply);
}
# re est deja disponible : aucun import
# Commande : * — l'IA choisit les boutons selon le contexte
reply = BsAI.chat(
message,
persona=(
"Tu es un assistant Telegram. Si ta réponse nécessite une action, "
"propose 1 à 3 boutons inline APRÈS ta réponse. "
"Format par bouton : [BTN: label | /commande] "
"Mets un emoji dans le libellé selon le contexte : ✅ pour une "
"confirmation, ❌ pour une annulation, ➡️ pour une navigation. "
"Exemple : [BTN: ✅ Confirmer | /confirm][BTN: ❌ Annuler | /cancel]"
),
history=True,
)
# Parser [BTN: label | /cmd]
BTN_RE = re.compile(r'\[BTN:\s*([^\|\]]+)\s*\|\s*([^\]]+)\s*\]', re.IGNORECASE)
btns = [{'text': m.group(1).strip(), 'callback_data': m.group(2).strip()}
for m in BTN_RE.finditer(reply)]
clean_reply = BTN_RE.sub('', reply).strip()
if btns:
# 2 boutons max par ligne
rows = [btns[i:i+2] for i in range(0, len(btns), 2)]
Bot.sendMessage(clean_reply, {
'reply_markup': {'inline_keyboard': rows}
})
else:
Bot.sendMessage(clean_reply)
[BTNS: ...] ou [BTN: ...] — c'est votre code de commande qui doit faire l'extraction (comme dans les exemples ci-dessus). La constante MAX_BTNS est configurable de 1 à 4.
Deux raccourcis évitent d'écrire le
reply_markup à la main :
Bot.sendMenu(texte, rangées) pour un clavier de réponse (une
ligne du tableau = une rangée, et c'est là que le champ style
fonctionne), Bot.sendButtons(texte, boutons) pour un clavier
inline à un bouton par ligne.
S11 — Questions fréquentes (FAQ)
❓ À quoi sert la commande * (étoile) ?
La commande * est un catch-all (attrape-tout) : elle est déclenchée automatiquement lorsqu'un utilisateur envoie un message qui ne correspond à aucune autre commande du bot. C'est la commande idéale pour intégrer un chatbot IA avec BsAI.chat() — voir S9.
Créer le fichier : dans BotStrike, nommez la commande *. Le fichier créé sera *.py (Python) ou *.js (JavaScript).
❓ À quoi sert la commande ! (point d'exclamation) ?
La commande ! est le gestionnaire d'erreur global du bot. Si une exception survient dans le code d'une autre commande, la commande ! est automatiquement exécutée. Deux variables sont injectées :
error— texte de l'erreurerror_command— nom de la commande qui a échoué
Sans commande !, le bot affiche un message d'erreur par défaut.
// Commande : !
Bot.sendMessage(`😢 Une erreur s'est produite dans ${error_command}.
Détail : ${error}`);
# Commande : !
Bot.sendMessage(f"😢 Une erreur dans {error_command}.\nDétail : {error}")
❓ Comment empêcher que l'IA révèle sa date d'entraînement ?
Ajoutez cette instruction dans le persona de votre appel BsAI.chat(). Le bot répondra alors qu'il apprend de jour en jour et ne communiquera jamais de date précise.
const reply = await BsAI.chat(message, {
persona: `Tu es un assistant Telegram.
Si on te demande ta date d'entraînement, ta version, ta mise à jour ou ta "knowledge cutoff",
réponds uniquement : "J'apprends et m'améliore de jour en jour. Je ne communique pas cette information. 😊"
Ne confirme ni ne nie jamais une date précise.`,
history: true,
});
Bot.sendMessage(reply);
reply = BsAI.chat(
message,
persona=(
"Tu es un assistant Telegram. "
"Si on te demande ta date d'entraînement, ta version ou ta mise à jour, "
"réponds uniquement : "J'apprends et m'améliore de jour en jour. "
"Je ne communique pas cette information. 😊" "
"Ne confirme ni ne nie jamais une date précise."
),
history=True,
)
Bot.sendMessage(reply)
❓ Les modèles lite, mob, mega supportent-ils les boutons suggestion ?
Oui, tous les modèles BotStrike IA peuvent générer des boutons de suggestion en format [BTNS: ...] si vous le précisez dans le persona. Le modèle mob ou mega offre une meilleure compréhension des instructions complexes — voir S10.
❓ Peut-on utiliser BsAI.chat() dans toutes les commandes ?
Oui. BsAI est un global disponible dans toutes les commandes (JS et Python), y compris *, !, les callbacks inline, et les commandes /start, /help, etc. Chaque appel consomme 1 itération cloud.