메인 콘텐츠로 건너뛰기

Cryptohopper MCP 보고서를 텔레그램, Discord 또는 이메일로 보내기

Cryptohopper MCP 리포트를 텔레그램, 디스코드, 이메일로 보내는 법 배우기 - 설정 스크립트, 채널 비교, 흔한 배달 문제 해결법 포함

작성자: Isaac

사전 준비 사항

  • 원하는 내용을 생성하는 MCP 워크플로우가 작동해야 합니다 — 템플릿은 일일 최고 상승률 보고서를 만드는 방법을 참고하세요.

  • 전송 단계에 사용할 스크립팅 환경이 필요합니다. Python 또는 Node.js가 일반적인 선택입니다. 전송은 MCP가 출력을 생성한 후 별도의 단계이며 MCP 자체의 일부가 아닙니다.

  • 대상 채널에 대한 인증 정보: Telegram 또는 Discord의 봇 토큰, 또는 이메일의 SMTP/트랜잭션 이메일 인증 정보.


설정 — Telegram

  1. Telegram 봇 생성

    @BotFather에게 메시지를 보내 /newbot을 입력하고 안내에 따라 진행하세요. 봇 토큰을 저장해두세요.

  2. 채팅 ID 가져오기

    Telegram 봇에 아무 메시지나 보내고 아래 URL을 가져오세요. 응답에서 chat.id를 사용하면 됩니다.

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

  3. 전송 테스트

    import requests

    TOKEN = "your_bot_token"
    CHAT_ID = "your_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("Hello from your Cryptohopper MCP workflow")

Telegram은 Markdown을 지원하므로 MCP의 표 및 굵은 서식이 기본적으로 렌더링됩니다. 4,096자 이상의 메시지는 분할해야 합니다. 긴 보고서는 단락 경계에서 청크 단위로 나누세요.


설정 — Discord

  1. 웹훅 생성

    Discord 서버에서 채널 → 톱니바퀴 아이콘 → Integrations → Webhooks → New Webhook을 선택합니다. 웹훅 URL을 복사하세요.

  2. 전송 테스트

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("Hello from your Cryptohopper MCP workflow")

Discord의 콘텐츠 제한은 메시지당 2,000자이므로 긴 보고서는 분할하세요. Discord는 기본 테이블 지원이 없으므로, 테이블은 세 개의 백틱을 사용한 정렬된 코드 블록으로 서식을 지정하세요. 더 풍부한 출력을 위해 일반 콘텐츠 대신 Discord 임베드(제목, 설명, 필드)를 사용하세요.


설정 — Email

두 가지 옵션이 있습니다: Gmail 등을 통한 SMTP(간단하고 무료이며 속도 제한 있음) 또는 SendGrid, Mailgun, Resend와 같은 트랜잭션 서비스(안정적이며 예약된 작업에 권장).

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("Daily top movers", "## Today's movers\n...")

이메일 보고서에는 Markdown 또는 HTML을 사용하세요. 일반 텍스트는 테이블 데이터의 경우 빠르게 읽기 어려워집니다.


적절한 채널 선택

채널

가장 적합한 용도

제약 사항

Telegram

실시간 알림, 휴대폰에서 한눈에 읽기

4,096자 제한, Markdown-Lite

Discord

공유 팀 채널, 풍부한 서식, 알림 관련 토론

2,000자 제한, 실제 테이블 없음

Email

긴 요약, 보관, 나중에 검색하고 싶은 모든 것

높은 지연 시간, 무시하기 쉬움

임시 알림 → Telegram. 팀에서 볼 수 있는 출력 → Discord. 아침 요약 → 이메일.


표준 패턴

MCP 단계와 전송 단계를 분리하세요. 전송 실패(네트워크 오류, 토큰 만료)로 인해 MCP 출력을 잃지 않도록 하세요. 로그에서 복구할 수 있습니다.

# 1. MCP 워크플로우 실행 (텍스트 출력 생성)
report_text = run_mcp_workflow(prompt)

# 2. 전송
try:
send_telegram(report_text)
except Exception as e:
log(f"Delivery failed: {e}")

문제 해결

Telegram getUpdates가 빈 목록을 반환합니다

아직 봇에 메시지를 보내지 않았거나 다른 토큰으로 쿼리하고 있습니다. 먼저 Telegram 계정에서 봇으로 아무 메시지나 보낸 다음 다시 시도하세요.

Discord 웹훅이 429 오류를 반환합니다

속도 제한에 도달했습니다. Discord 웹훅은 분당 약 30개의 메시지를 허용합니다. Retry-After 헤더를 존중하세요. 빈번한 알림의 경우, 각 이벤트에 대해 하나의 메시지를 보내는 대신 여러 이벤트를 하나의 메시지로 일괄 처리하세요.

이메일이 스팸으로 수신됩니다

보유한 도메인의 올바른 발신 주소를 사용하고 SPF/DKIM/DMARC를 구성하세요. 모두 대문자 제목, 트리거 단어, 첨부 파일 사용을 피하세요. 트랜잭션 서비스는 이 대부분을 올바르게 처리합니다. 공유 제공업체의 일반 SMTP는 종종 그렇지 않습니다.

Telegram 또는 Discord에서 긴 MCP 보고서가 잘립니다

단락 경계에서 청크하는 스플리터를 만드세요. 테이블 행 중간에서 분할하지 마세요. 맞는 마지막 전체 행 뒤에서 자르고, 다음 메시지는 (계속) 헤더로 시작하세요.

예약된 실행 시 조용히 실패하지만 수동으로는 작동합니다

가장 일반적인 원인은 예약된 환경의 누락된 환경 변수 또는 만료된 토큰입니다. Cron은 셸의 env 없이 실행됩니다. GitHub Actions는 비밀 설정을 필요로 합니다. 모든 실패 시 전체 오류를 기록하여 즉시 확인할 수 있도록 하세요.

무언가 실제로 플래그될 때만 알림을 받고 싶습니다

전송을 조건부로 만드세요. "보고할 내용 없음" 메시지를 보내지 마세요. 노이즈가 되고 채널을 무시하기 시작하게 됩니다.

한 번에 여러 채널로 전달하고 싶습니다

전송을 팬아웃으로 래핑하여 각 채널이 독립적이 되도록 하고, 한 채널에서의 실패가 다른 채널을 차단하지 않도록 하세요: for ch in [send_telegram, send_discord, send_email]: try ch(text).

답변이 도움되었나요?