К основному содержимому

Отправлять отчеты Cryptohopper MCP в Telegram, Discord или на электронную почту

Научись отправлять отчеты Cryptohopper MCP в Telegram, Discord или на email — со скриптами, сравнением каналов и исправлениями самых частых проблем.

Автор: Isaac

Требования

  • Рабочий MCP-воркфлоу, который генерирует нужный тебе контент. Как пример, создание ежедневного отчета по топовым монетам — посмотри, как это сделать.

  • Среда для написания скриптов для этапа доставки. Обычно используют Python или Node.js. Доставка — это отдельный шаг после того, как MCP выдал результат, сам MCP в этом не участвует.

  • Учетные данные для твоего целевого канала: токен бота для Telegram или Discord, либо SMTP / данные для транзакционных писем.


Настройка — Telegram

  1. Создай Telegram-бота

    Напиши в @BotFather команду /newbot и следуй инструкциям. Сохрани токен бота.

  2. Получи свой chat ID

    Отправь что-нибудь своему Telegram-боту, затем перейди по ссылке ниже. Тебе нужен `chat.id` из ответа.

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

  3. Протестируй доставку

    import requests

    TOKEN = "твой_токен_бота"
    CHAT_ID = "твой_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("Привет от твоего MCP-воркфлоу Cryptohopper")

Telegram поддерживает Markdown, поэтому таблицы и жирный шрифт из MCP отображаются нативно. Сообщения длиннее 4096 символов нужно разбивать — делай это по границам параграфов.


Настройка — Discord

  1. Создай webhook

    На своем Discord-сервере выбери канал → значок шестеренки → Integrations → Webhooks → New Webhook. Скопируй URL webhook.

  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("Привет от твоего MCP-воркфлоу Cryptohopper")

Лимит сообщений в Discord — 2000 символов. Разбивай длинные отчеты. Нативной поддержки таблиц в Discord нет, форматируй их как блоки кода с тройными обратными кавычками. Для более богатого вывода используй Discord embeds (заголовок, описание, поля) вместо обычного текста.


Настройка — Email

Есть два варианта: SMTP через Gmail или подобный (просто, бесплатно, с ограничениями по частоте) или транзакционный сервис вроде 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("Ежедневные топовые монеты", "## Сегодняшние лидеры\n...")

Используй Markdown или HTML для отчетов по почте — обычный текст с таблицами быстро становится нечитаемым.


Выбор правильного канала

Канал

Лучше всего подходит для

Ограничения

Telegram

Оповещения в реальном времени, на телефоне, для быстрого просмотра

Лимит 4096 символов, базовый Markdown

Discord

Общий командный канал, богатое форматирование, обсуждение оповещений

Лимит 2000 символов, нет нативной поддержки таблиц

Email

Длинные дайджесты, архивация, то, что захочется поискать позже

Высокая задержка, легко проигнорировать

Ad-hoc оповещения → Telegram. Результаты для команды → Discord. Утренние дайджесты → email.


Каноничный паттерн

Держи шаг MCP и шаг доставки отдельно. Сбой доставки (сетевой сбой, истекший токен) не должен приводить к потере результата MCP — ты всегда сможешь восстановить его из логов.

# 1. Запуск MCP-воркфлоу (генерирует текстовый вывод)
report_text = run_mcp_workflow(prompt)

# 2. Доставка
try:
send_telegram(report_text)
except Exception as e:
log(f"Доставка не удалась: {e}")

Устранение неполадок

Telegram getUpdates возвращает пустой список

Ты еще не отправил сообщение боту, или используешь другой токен. Сначала отправь любое сообщение боту со своего аккаунта Telegram, затем попробуй снова.

Discord webhook возвращает 429

Превышен лимит запросов. Discord webhooks позволяют отправлять около 30 сообщений в минуту — учитывай заголовок Retry-After. Для высокочастотных оповещений группируй несколько событий в одно сообщение, а не отправляй по одному.

Письма попадают в спам

Используй корректный email отправителя из своего домена с настроенными SPF/DKIM/DMARC. Избегай тем писем заглавными буквами, триггерных слов и вложений. Транзакционный сервис обычно справляется с этим; обычный SMTP от общего провайдера часто нет.

Длинные MCP-отчеты обрезаются в Telegram или Discord

Создай разделитель, который будет разбивать по границам параграфов. Не разрывай в середине строки таблицы — обрезай после последней полной строки, которая помещается, а следующее сообщение начинай с заголовка * (продолжение)*.

Доставка молчаливо сбоит при запланированных запусках, но работает вручную

Самая частая причина — отсутствие переменной окружения или истекший токен в запланированной среде. Cron запускается без твоей оболочки `env`; GitHub Actions требует настройки секретов. Логируй полную ошибку при каждом сбое, чтобы она сразу стала видна.

Хочешь получать оповещения только когда что-то реально сработало

Сделай доставку условной — не отправляй сообщения "нет данных для отчета", они превращаются в шум, и ты начнешь игнорировать канал.

Хочешь отправлять на несколько каналов одновременно

Оберни доставку в `fan-out`, чтобы каждый канал был независим, и сбой в одном не блокировал другие: for ch in [send_telegram, send_discord, send_email]: try ch(text).

Нашли ответ на свой вопрос?