Vai al contenuto principale

Invia i report MCP di Cryptohopper su Telegram, Discord o via email

Impara a inviare report MCP di Cryptohopper a Telegram, Discord o email – con script di configurazione e soluzioni per i problemi di consegna.

Scritto da Isaac

Prerequisiti

  • Un workflow MCP funzionante che produce il contenuto che vuoi inviare — vedi come creare un report giornaliero sui top mover per un template.

  • Un ambiente di scripting per la fase di invio. Python o Node.js sono le scelte comuni. L'invio è un passaggio separato dopo che l'MCP ha prodotto il suo output — non fa parte dell'MCP stesso.

  • Credenziali per il tuo canale di destinazione: un bot token per Telegram o Discord, o credenziali SMTP / email transazionali per l'email.


Configurazione — Telegram

  1. Crea un bot Telegram

    Manda un messaggio a @BotFather, invia /newbot e segui le istruzioni. Salva il bot token.

  2. Ottieni il tuo chat ID

    Invia un qualsiasi messaggio al tuo bot Telegram, poi recupera l'URL qui sotto. Il chat.id nella risposta è quello che ti serve.

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

  3. Testa l'invio

    import requests

    TOKEN = "il_tuo_bot_token"
    CHAT_ID = "il_tuo_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("Ciao dal tuo workflow MCP Cryptohopper")

Telegram supporta Markdown, quindi tabelle e formattazione in grassetto dall'MCP vengono renderizzate nativamente. I messaggi oltre i 4.096 caratteri devono essere divisi — spezza i resoconti lunghi ai confini dei paragrafi.


Configurazione — Discord

  1. Crea un webhook

    Nel tuo server Discord, apri un canale → icona ingranaggio → Integrazioni → Webhooks → Nuovo Webhook. Copia l'URL del webhook.

  2. Testa l'invio

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("Ciao dal tuo workflow MCP Cryptohopper")

Il limite di contenuti di Discord è di 2.000 caratteri per messaggio — dividi i resoconti lunghi. Discord non ha supporto nativo per le tabelle; formatta le tabelle come blocchi di codice allineati usando triple backtick. Per un output più ricco, usa gli embed di Discord (titolo, descrizione, campi) invece del contenuto grezzo.


Configurazione — Email

Due opzioni: SMTP tramite Gmail o simile (semplice, gratuito, rate-limited) o un servizio transazionale come SendGrid, Mailgun o Resend (affidabile, preferito per lavori pianificati).

Esempio 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 mover giornalieri", "## Mover di oggi\n...")


Usa Markdown o HTML per i report via email — il testo semplice diventa rapidamente illeggibile per i dati tabellari.


Scegliere il canale giusto

Canale

Ideale per

Vincoli

Telegram

Avvisi in tempo reale, sul telefono, lettura a colpo d'occhio

Limite 4.096 caratteri, Markdown-lite

Discord

Canale di team condiviso, formattazione ricca, discussione sugli avvisi

Limite 2.000 caratteri, niente tabelle vere

Email

Digest più lunghi, archiviazione, tutto ciò che vorrai cercare in seguito

Latenza più alta, facile da ignorare

Avvisi ad hoc → Telegram. Output visibile al team → Discord. Digest mattutini → email.


Il pattern canonico

Mantieni separato il passaggio MCP e il passaggio di invio. Un fallimento nell'invio (interruzione di rete, token scaduto) non dovrebbe far perdere l'output dell'MCP — puoi ancora recuperarlo dai log.

# 1. Esegui workflow MCP (produce output di testo)
report_text = run_mcp_workflow(prompt)

# 2. Invia
try:
send_telegram(report_text)
except Exception as e:
log(f"Invio fallito: {e}")

Risoluzione dei problemi

getUpdates di Telegram restituisce una lista vuota

Non hai ancora inviato un messaggio al bot, o stai interrogando con un token diverso. Invia prima un qualsiasi messaggio dal tuo account Telegram al bot, poi riprova.

Il webhook di Discord restituisce 429

Limite di frequenza raggiunto. I webhook di Discord consentono circa 30 messaggi al minuto — rispetta l'header Retry-After. Per avvisi ad alta frequenza, raggruppa più eventi in un unico messaggio invece di inviarne uno per evento.

Le email finiscono nello spam

Usa un indirizzo Mittente corretto su un dominio che possiedi, con SPF/DKIM/DMARC configurati. Evita righe oggetto tutto maiuscolo, parole trigger e allegati. Un servizio transazionale gestisce correttamente la maggior parte di questi aspetti; lo SMTP semplice da un provider condiviso spesso no.

I lunghi resoconti MCP vengono troncati su Telegram o Discord

Crea uno splitter che spezza ai confini dei paragrafi. Non spezzare a metà di una riga di tabella — taglia dopo l'ultima riga completa che rientra, e apri il messaggio successivo con un'intestazione (cont'd).

L'invio fallisce silenziosamente su esecuzioni pianificate ma funziona manualmente

La causa più comune è una variabile d'ambiente mancante o un token scaduto nell'ambiente pianificato. Cron esegue senza l'env della tua shell; GitHub Actions necessita di segreti configurati. Registra l'errore completo su ogni fallimento in modo che emerga immediatamente.

Vuoi solo avvisi quando qualcosa effettivamente flagga

Rendi condizionale l'invio — non inviare messaggi "niente da segnalare", diventano rumore e inizierai a ignorare il canale.

Vuoi inviare a più canali contemporaneamente

Incapsula l'invio in un fan-out in modo che ogni canale sia indipendente e un fallimento in uno non blocchi gli altri: for ch in [send_telegram, send_discord, send_email]: try ch(text).

Hai ricevuto la risposta alla tua domanda?