Předpoklady
Funkční workflow MCP, které generuje obsah, který chceš doručit — podívej se na návod k sestavení denní zprávy o nejvýkonnějších titulech jako šablonu.
Přihlašovací údaje pro cílový kanál: token pro bota na Telegramu nebo Discordu, případně SMTP / transakční e-mailové údaje pro e-mail.
Nastavení — Telegram
Vytvoř si Telegram bota
Napiš zprávu @BotFather, pošli
/newbota postupuj podle pokynů. Token bota si ulož.
Získej svoje chat ID
Pošli svému Telegram botu libovolnou zprávu, pak otevři níže uvedenou URL. `chat.id` v odpovědi je to, co potřebuješ.
https://api.telegram.org/bot /getUpdates
Otestuj doručení
import requests
TOKEN = "tvůj_token_bota"
CHAT_ID = "tvoje_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("Ahoj z tvého workflow Cryptohopper MCP")
Telegram podporuje Markdown, takže tabulky a tučné písmo z MCP se zobrazí nativně. Zprávy delší než 4 096 znaků musí být rozděleny — dlouhé reporty rozděluj na koncích odstavců.
Nastavení — Discord
Vytvoř si webhook
Na svém Discord serveru otevři kanál → ikona ozubeného kola → Integrace → Webhooky → Nový webhook. Zkopíruj URL webhooku.
Otestuj doručení
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("Ahoj z tvého workflow Cryptohopper MCP")
Limit obsahu na Discordu je 2 000 znaků na zprávu — dlouhé reporty rozděluj. Discord nemá nativní podporu tabulek; tabulky formátuj jako zarovnané bloky kódu pomocí trojitých zpětných apostrofů. Pro bohatší výstup použij Discord embedy (název, popis, pole) místo syrového obsahu.
Nastavení — E-mail
Dvě možnosti: SMTP přes Gmail nebo podobný (jednoduché, zdarma, omezené limity) nebo transakční služba jako SendGrid, Mailgun nebo Resend (spolehlivé, preferované pro plánované úlohy).
Příklad 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("Denní top movers", "## Dnešní movers\n...")
Pro e-mailové reporty používej Markdown nebo HTML — prostý text se u tabulkových dat rychle stane nečitelným.
Výběr správného kanálu
Kanál | Nejlepší pro | Omezení |
Telegram | Okamžité alerty, na telefonu, rychlé čtení | Limit 4 096 znaků, Markdown-lite |
Discord | Společný týmový kanál, bohaté formátování, diskuse kolem alertů | Limit 2 000 znaků, žádné skutečné tabulky |
Delší souhrny, archivace, cokoliv, co budeš chtít později prohledávat | Vyšší latence, snadno se ignoruje |
Ad-hoc alerty → Telegram. Výstup viditelný pro tým → Discord. Ranní souhrny → e-mail.
Kanovnický vzor
Udrž krok MCP a krok doručení odděleně. Chyba v doručení (síťový problém, vypršení tokenu) by neměla ztratit výstup MCP — stále si ho můžeš obnovit z logů.
# 1. Spusť workflow MCP (vygeneruje textový výstup)
report_text = run_mcp_workflow(prompt)
# 2. Doruč
try:
send_telegram(report_text)
except Exception as e:
log(f"Doručení selhalo: {e}")
Řešení problémů
Telegram `getUpdates` vrací prázdný seznam
Ještě jsi botovi neposlal žádnou zprávu, nebo dotazuješ s jiným tokenem. Nejprve pošli jakoukoliv zprávu ze svého účtu na Telegramu botovi, pak to zkus znovu.
Discord webhook vrací 429
Dosáhl jsi limitu. Discord webhooks povolují zhruba 30 zpráv za minutu — respektuj hlavičku `Retry-After`. Pro vysokofrekvenční alerty sdružuj více událostí do jedné zprávy namísto spouštění jedné na událost.
E-maily končí ve spamu
Používej správnou adresu odesílatele na své doméně, s nastaveným SPF/DKIM/DMARC. Vyhýbej se předmětům pouze velkými písmeny, spouštěcím slovům a přílohám. Transakční služba většinu z toho zvládá správně; prosté SMTP ze sdíleného poskytovatele často ne.
Dlouhé MCP reporty se v Telegramu nebo Discordu zkracují
Vytvoř rozdělovač, který bude dělit na koncích odstavců. Nerozděluj uprostřed řádku tabulky — ořízni po posledním kompletním řádku, který se vejde, a další zprávu otevři s hlavičkou (pokr.).
Doručení tiše selhává při plánovaných bězích, ale funguje ručně
Nejčastější příčinou je chybějící proměnná prostředí nebo vypršel token v naplánovaném prostředí. Cron běží bez tvého shellu; GitHub Actions potřebuje nakonfigurovaná tajná data. Zaloguj plnou chybu při každém selhání, aby se okamžitě projevila.
Chceš alerty jen tehdy, když se něco skutečně označí
Nastav doručení jako podmíněné — neposílej zprávy "není co hlásit", stanou se z nich šumy a začneš kanál ignorovat.
Chceš doručovat do více kanálů najednou
Zabal doručení do "fan-outu", aby každý kanál byl nezávislý a chyba v jednom neblokovala ostatní: for ch in [send_telegram, send_discord, send_email]: try ch(text).
