Lewati ke konten utama

Kirim laporan MCP Cryptohopper ke Telegram, Discord, atau email

Pelajari cara kirim laporan MCP Cryptohopper ke Telegram, Discord, atau email - ada skrip, bandingin channel, & solusi masalah umum.

Ditulis oleh Isaac

Persyaratan

  • Alur kerja MCP yang berfungsi yang menghasilkan konten yang ingin kamu kirimkan — lihat cara membuat laporan top-movers harian untuk templat.

  • Lingkungan skrip untuk langkah pengiriman. Python atau Node.js adalah pilihan umum. Pengiriman adalah langkah terpisah setelah MCP menghasilkan outputnya — itu bukan bagian dari MCP itu sendiri.

  • Kredensial untuk saluran tujuanmu: token bot untuk Telegram atau Discord, atau kredensial email transaksional / SMTP untuk email.


Pengaturan — Telegram

  1. Buat bot Telegram

    Kirim pesan ke @BotFather, kirim /newbot, dan ikuti petunjuknya. Simpan token bot.

  2. Dapatkan ID obrolanmu

    Kirim pesan apa pun ke bot Telegrammu, lalu ambil URL di bawah. chat.id dalam respons adalah yang kamu butuhkan.

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

  3. 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

  1. Buat webhook

    Di server Discord-mu, buka saluran → ikon roda gigi → Integrations → Webhooks → New Webhook. Salin URL webhook.

  2. 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

Email

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).

Apakah pertanyaan Anda terjawab?