Persyaratan
Alur kerja MCP yang berfungsi yang menghasilkan konten yang ingin kamu kirimkan — lihat cara membuat laporan top-movers harian untuk templat.
Kredensial untuk saluran tujuanmu: token bot untuk Telegram atau Discord, atau kredensial email transaksional / SMTP untuk email.
Pengaturan — Telegram
Buat bot Telegram
Kirim pesan ke @BotFather, kirim
/newbot, dan ikuti petunjuknya. Simpan token bot.
Dapatkan ID obrolanmu
Kirim pesan apa pun ke bot Telegrammu, lalu ambil URL di bawah.
chat.iddalam respons adalah yang kamu butuhkan.
https://api.telegram.org/bot /getUpdates
Uji Pengiriman
import requests
TOKEN = "token_bot_kamu"
CHAT_ID = "id_obrolan_kamu"
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("Halo dari alur kerja MCP Cryptohopper-mu")
Telegram mendukung Markdown, jadi tabel dan pemformatan tebal dari MCP ditampilkan secara asli. Pesan lebih dari 4.096 karakter harus dibagi — potong laporan panjang di batas paragraf.
Pengaturan — Discord
Buat webhook
Di server Discord-mu, buka saluran → ikon roda gigi → Integrations → Webhooks → New Webhook. Salin URL webhook.
Uji Pengiriman
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("Halo dari alur kerja MCP Cryptohopper-mu")
Batas konten Discord adalah 2.000 karakter per pesan — pecah laporan panjang. Discord tidak memiliki dukungan tabel bawaan; format tabel sebagai blok kode yang disejajarkan menggunakan tanda kutip tiga. Untuk output yang lebih kaya, gunakan sematan Discord (judul, deskripsi, bidang) daripada konten mentah.
Pengaturan — Email
Dua opsi: SMTP melalui Gmail atau yang serupa (sederhana, gratis, dibatasi lajunya) atau layanan transaksional seperti SendGrid, Mailgun, atau Resend (andal, disukai untuk pekerjaan terjadwal).
Contoh 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 harian", "## Mover hari ini\n...")
Gunakan Markdown atau HTML untuk laporan yang dikirim melalui email — teks biasa dengan cepat menjadi tidak terbaca untuk data tabular.
Memilih saluran yang tepat
Saluran | Terbaik untuk | Batasan |
Telegram | Peringatan waktu nyata, di ponselmu, baca sekilas | Batas 4.096 karakter, Markdown-lite |
Discord | Saluran tim bersama, pemformatan kaya, diskusi seputar peringatan | Batas 2.000 karakter, tidak ada tabel nyata |
Ringkasan yang lebih panjang, pengarsipan, apa pun yang ingin kamu cari nanti | Latensi lebih tinggi, mudah diabaikan |
Peringatan ad-hoc → Telegram. Output yang terlihat oleh tim → Discord. Ringkasan pagi → email.
Pola kanonik
Jaga agar langkah MCP dan langkah pengiriman tetap terpisah. Kegagalan dalam pengiriman (gangguan jaringan, token kedaluwarsa) seharusnya tidak menghilangkan output MCP — kamu masih bisa memulihkannya dari log.
# 1. Jalankan alur kerja MCP (menghasilkan output teks)
report_text = run_mcp_workflow(prompt)
# 2. Kirimkan
try:
send_telegram(report_text)
except Exception as e:
log(f"Pengiriman gagal: {e}")
Pemecahan Masalah
getUpdates Telegram mengembalikan daftar kosong
Kamu belum mengirim pesan ke bot, atau kamu sedang mengambil dengan token yang berbeda. Kirim pesan apa pun dari akun Telegrammu ke bot terlebih dahulu, lalu coba lagi.
Webhook Discord mengembalikan 429
Batas laju tercapai. Webhook Discord mengizinkan sekitar 30 pesan per menit — patuhi header Retry-After. Untuk peringatan frekuensi tinggi, kelompokkan beberapa peristiwa menjadi satu pesan daripada mengirimkan satu per peristiwa.
Email mendarat di spam
Gunakan alamat Dari yang tepat pada domain yang kamu miliki, dengan SPF/DKIM/DMARC dikonfigurasi. Hindari baris subjek huruf besar semua, kata pemicu, dan lampiran. Layanan transaksional menangani sebagian besar hal ini dengan benar; SMTP biasa dari penyedia bersama seringkali tidak.
Laporan MCP panjang terpotong di Telegram atau Discord
Buat pemecah yang memotong di batas paragraf. Jangan memotong di tengah baris tabel — potong setelah baris lengkap terakhir yang muat, dan buka pesan berikutnya dengan header (dilanjutkan).
Pengiriman diam-diam gagal pada jalankan terjadwal tetapi berhasil secara manual
Penyebab paling umum adalah variabel lingkungan yang hilang atau token kedaluwarsa di lingkungan terjadwal. Cron berjalan tanpa env shell-mu; GitHub Actions membutuhkan rahasia yang dikonfigurasi. Catat kesalahan lengkap pada setiap kegagalan sehingga segera muncul.
Kamu hanya ingin peringatan ketika sesuatu benar-benar menandai
Jadikan pengiriman bersyarat — jangan mengirim pesan "tidak ada laporan", pesan tersebut menjadi kebisingan dan kamu akan mulai mengabaikan saluran.
Kamu ingin mengirim ke beberapa saluran sekaligus
Bungkus pengiriman dalam fan-out sehingga setiap saluran independen dan kegagalan di satu saluran tidak menghalangi saluran lain: for ch in [send_telegram, send_discord, send_email]: try ch(text).
