Passer au contenu principal

Envoyer les rapports MCP de Cryptohopper sur Telegram, Discord ou par e-mail

Apprends à envoyer tes rapports Cryptohopper MCP sur Telegram, Discord ou par e-mail ! Scripts, comparaison de canaux et solutions aux problèmes courants.

Écrit par Isaac

Prérequis

  • Un workflow MCP fonctionnel qui génère le contenu que tu souhaites diffuser. Jette un œil à comment construire un rapport quotidien des "top movers" pour un modèle.

  • Un environnement de scripting pour l'étape de diffusion. Python ou Node.js sont les choix les plus courants. La diffusion est une étape distincte après que le MCP a produit son résultat – elle ne fait pas partie du MCP lui-même.

  • Les identifiants pour ton canal de destination : un jeton de bot pour Telegram ou Discord, ou des identifiants SMTP / d'e-mail transactionnel pour l'e-mail.


Configuration — Telegram

  1. Créer un bot Telegram

    Message à @BotFather, envoie /newbot, et suis les instructions. Sauvegarde le jeton du bot.

  2. Obtenir ton chat ID

    Envoie n'importe quel message à ton bot Telegram, puis récupère l'URL ci-dessous. Le chat.id dans la réponse est ce dont tu as besoin.

    https://api.telegram.org/bot /getUpdates

  3. Tester la diffusion

    import requests

    TOKEN = "ton_jeton_de_bot"
    CHAT_ID = "ton_chat_id"

    def send_telegram(text: str) -> None:
    requests.post(
    f"https://api.telegram.org/bot{TOKEN}/sendMessage",
    json={
    "chat_id": CHAT_ID,
    "text": text,
    "parse_mode": "Markdown",
    },
    ).raise_for_status()

    send_telegram("Salut depuis ton workflow Cryptohopper MCP")

Telegram supporte Markdown, ainsi les tableaux et le formatage en gras du MCP sont rendus nativement. Les messages de plus de 4 096 caractères doivent être divisés – découpe les rapports longs aux frontières des paragraphes.


Configuration — Discord

  1. Créer un webhook

    Dans ton serveur Discord, ouvre un canal → icône d'engrenage → Intégrations → Webhooks → Nouveau Webhook. Copie l'URL du webhook.

  2. Tester la diffusion

import requests

WEBHOOK = "https://discord.com/api/webhooks/..."

def send_discord(text: str) -> None:
requests.post(WEBHOOK, json={"content": text}).raise_for_status()

send_discord("Salut depuis ton workflow Cryptohopper MCP")

La limite de contenu de Discord est de 2 000 caractères par message – divise les rapports longs. Discord n'a pas de support natif pour les tableaux ; formate les tableaux comme des blocs de code alignés en utilisant des triples backticks. Pour un rendu plus riche, utilise les embeds Discord (titre, description, champs) plutôt que du contenu brut.


Configuration — Email

Deux options : SMTP via Gmail ou similaire (simple, gratuit, limité en débit) ou un service transactionnel comme SendGrid, Mailgun, ou Resend (fiable, préféré pour les tâches planifiées).

Exemple SendGrid

import os
import requests

API_KEY = os.environ["SENDGRID_API_KEY"]
FROM = os.environ.get("ALERT_FROM_EMAIL", "[email protected]")
TO = os.environ.get("ALERT_TO_EMAIL", "[email protected]")

def send_email(subject: str, body: str) -> None:
requests.post(
"https://api.sendgrid.com/v3/mail/send",
headers={"Authorization": f"Bearer {API_KEY}"},
json={
"personalizations": [{"to": [{"email": TO}]}],
"from": {"email": FROM},
"subject": subject,
"content": [{"type": "text/markdown", "value": body}],
},
).raise_for_status()

send_email("Top movers du jour", "## Movers du jour\n...")


Utilise Markdown ou HTML pour les rapports par e-mail – le texte brut devient rapidement illisible pour les données tabulaires.


Choisir le bon canal

Canal

Idéal pour

Contraintes

Telegram

Alertes en temps réel, sur ton téléphone, lecture rapide

Limite de 4 096 caractères, Markdown-lite

Discord

Canal d'équipe partagé, formatage riche, discussion autour des alertes

Limite de 2 000 caractères, pas de vrais tableaux

Email

Digests plus longs, archivage, tout ce que tu voudras rechercher plus tard

Latence plus élevée, facile à ignorer

Alertes ad-hoc → Telegram. Sortie visible par l'équipe → Discord. Digests matinaux → e-mail.


Le schéma canonique

Garde l'étape MCP et l'étape de diffusion séparées. Une défaillance dans la diffusion (coupure réseau, jeton expiré) ne doit pas faire perdre la sortie du MCP – tu peux toujours la récupérer à partir des logs.

# 1. Exécuter le workflow MCP (produit une sortie texte)
report_text = run_mcp_workflow(prompt)

# 2. Diffuser
try:
send_telegram(report_text)
except Exception as e:
log(f"La diffusion a échoué : {e}")

Dépannage

Telegram getUpdates retourne une liste vide

Tu n'as pas encore envoyé de message au bot, ou tu interroges avec un jeton différent. Envoie d'abord n'importe quel message depuis ton compte Telegram au bot, puis réessaie.

Webhook Discord retourne 429

Limite de débit atteinte. Les webhooks Discord permettent environ 30 messages par minute – respecte l'en-tête Retry-After. Pour les alertes à haute fréquence, regroupe plusieurs événements dans un seul message plutôt que d'en envoyer un par événement.

Les e-mails atterrissent dans le spam

Utilise une adresse d'expéditeur appropriée sur un domaine qui t'appartient, avec SPF/DKIM/DMARC configuré. Évite les lignes d'objet en majuscules, les mots déclencheurs et les pièces jointes. Un service transactionnel gère la plupart de ces points correctement ; un simple SMTP depuis un fournisseur partagé ne le fait souvent pas.

Les longs rapports MCP sont tronqués dans Telegram ou Discord

Construis un découpeur qui segmente aux frontières des paragraphes. Ne coupe pas au milieu d'une ligne de tableau – coupe après la dernière ligne complète qui rentre, et ouvre le message suivant avec un en-tête (suite).

La diffusion échoue silencieusement lors des exécutions programmées mais fonctionne manuellement

La cause la plus fréquente est une variable d'environnement manquante ou un jeton expiré dans l'environnement programmé. Cron s'exécute sans l'environnement de ton shell ; GitHub Actions a besoin de secrets configurés. Journalise l'erreur complète à chaque échec pour qu'elle apparaisse immédiatement.

Tu veux des alertes uniquement quand quelque chose est effectivement signalé

Rends la diffusion conditionnelle – n'envoie pas de messages "rien à signaler", ils deviennent du bruit et tu finiras par ignorer le canal.

Tu veux diffuser vers plusieurs canaux en même temps

Encapsule la diffusion dans un fan-out afin que chaque canal soit indépendant et qu'une défaillance dans l'un n'empêche pas les autres : for ch in [send_telegram, send_discord, send_email]: try ch(text).

Avez-vous trouvé la réponse à votre question ?