Ön Gereksinimler
Teslim etmek istediğin içeriği üreten çalışan bir MCP iş akışı — bir şablon için günlük en çok kazanan raporu nasıl hazırlayacağını gör.
Hedef kanalın için kimlik bilgileri: Telegram veya Discord için bir bot token, ya da e-posta için SMTP / işlem bazlı e-posta kimlik bilgileri.
Kurulum — Telegram
Telegram botu oluştur
@BotFather'a mesaj at,
/newbotgönder ve yönergeleri izle. Bot token'ını kaydet.
Sohbet kimliğini al
Telegram botuna herhangi bir mesaj gönder, ardından aşağıdaki URL'yi al. Yanıttaki
chat.idihtiyacın olan şey.
https://api.telegram.org/bot /getUpdates
Teslimi test et
import requests
TOKEN = "bot_token_ın"
CHAT_ID = "sohbet_kimliğin"
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("Cryptohopper MCP iş akışından merhaba")
Telegram Markdown'ı destekler, bu nedenle MCP'den gelen tablolar ve kalın metin biçimlendirmeleri yerel olarak işlenir. 4.096 karakterden uzun mesajlar bölünmelidir — uzun raporları paragraf sınırlarında parçalara ayır.
Kurulum — Discord
Webhook oluştur
Discord sunucunda, bir kanal → dişli simgesi → Entegrasyonlar → Webhook'lar → Yeni Webhook'u aç. Webhook URL'sini kopyala.
Teslimi test et
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("Cryptohopper MCP iş akışından merhaba")
Discord'un içerik sınırı mesaj başına 2.000 karakterdir — uzun raporları böl. Discord'da yerel tablo desteği yoktur; tabloları üçlü ters tırnak kullanarak hizalanmış kod blokları olarak biçimlendir. Daha zengin çıktı için, ham içerik yerine Discord embed'larını (başlık, açıklama, alanlar) kullan.
Kurulum — E-posta
İki seçenek: Gmail veya benzeri üzerinden SMTP (basit, ücretsiz, hız limitli) veya SendGrid, Mailgun, Resend gibi bir işlem bazlı hizmet (güvenilir, zamanlanmış işler için tercih edilir).
SendGrid örneği
import os
import requests
API_KEY = os.environ["SENDGRID_API_KEY"]
FROM = os.environ.get("ALERT_FROM_EMAIL", "uyarilar@alanadın.com")
TO = os.environ.get("ALERT_TO_EMAIL", "sen@alanadın.com")
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("Günlük en çok kazananlar", "## Bugünkü kazananlar\n...")
E-posta ile gönderilen raporlar için Markdown veya HTML kullan — düz metin, tablo verileri için hızla okunamaz hale gelir.
Doğru kanalı seçmek
Kanal | En iyi kullanımı | Kısıtlamalar |
Telegram | Gerçek zamanlı uyarılar, telefonunda, tek bakışta okuma | 4.096 karakter sınırı, Markdown-lite |
Discord | Paylaşılan ekip kanalı, zengin biçimlendirme, uyarılar etrafında tartışma | 2.000 karakter sınırı, gerçek tablolar yok |
E-posta | Daha uzun özetler, arşivleme, daha sonra aramak isteyeceğin her şey | Daha yüksek gecikme süresi, kolayca göz ardı edilebilir |
Anlık uyarılar → Telegram. Ekip tarafından görülebilen çıktı → Discord. Sabah özetleri → e-posta.
Kanonik desen
MCP adımını ve teslim adımını ayrı tut. Teslimde bir hata (ağ kesintisi, süresi dolmuş token) MCP çıktısını kaybetmemeli — yine de kayıtlardan kurtarabilirsin.
# 1. MCP iş akışını çalıştır (metin çıktısı üretir)
report_text = run_mcp_workflow(prompt)
# 2. Teslim et
try:
send_telegram(report_text)
except Exception as e:
log(f"Teslim başarısız oldu: {e}")
Sorun Giderme
Telegram getUpdates boş bir liste döndürüyor
Henüz bota mesaj göndermedin veya farklı bir token ile sorguluyorsun. Önce Telegram hesabından bota herhangi bir mesaj gönder, ardından tekrar dene.
Discord webhook 429 döndürüyor
Hız sınırı aşıldı. Discord webhook'ları dakikada yaklaşık 30 mesaja izin verir — Retry-After başlığına uyun. Yüksek frekanslı uyarılar için, her olay için bir tane göndermek yerine birden fazla olayı tek bir mesaja gruplandır.
E-postalar spam'e düşüyor
Sahip olduğun bir alanda uygun bir Gönderen adresi kullan, SPF/DKIM/DMARC yapılandırılmış. Tamamen büyük harf içeren konu satırlarından, tetikleyici kelimelerden ve eklerden kaçın. İşlem bazlı bir hizmet bunların çoğunu doğru şekilde halleder; paylaşılan bir sağlayıcıdan düz SMTP genellikle halletmez.
Uzun MCP raporları Telegram veya Discord'da kesiliyor
Paragraf sınırlarında bölen bir ayırıcı oluştur. Bir tablo satırının ortasında bölme — sığan son tam satırdan sonra kes ve bir sonraki mesajı (devamı) başlığı ile aç.
Zamanlanmış çalıştırmalarda teslim sessizce başarısız oluyor ancak manuel olarak çalışıyor
En yaygın neden, zamanlanmış ortamda eksik bir ortam değişkeni veya süresi dolmuş bir token'dır. Cron, kabuğunun ortam değişkenleri olmadan çalışır; GitHub Actions'ın gizli bilgilerin yapılandırılması gerekir. Hatayı her başarısızlıkta tam olarak kaydet, böylece hemen görünür.
Sadece bir şey gerçekten uyarı verdiğinde uyarı istiyorsun
Teslimi koşullu hale getir — "rapor edilecek bir şey yok" mesajları gönderme, bunlar gürültü olur ve kanalı görmezden gelmeye başlarsın.
Aynı anda birden fazla kanala teslim etmek istiyorsun
Teslimi bir fan-out içine al, böylece her kanal bağımsız olur ve birindeki hata diğerlerini engellemez: for ch in [send_telegram, send_discord, send_email]: try ch(text).
